Documentation
Navigation
Getting Started
Welcome to Devy. Follow these steps to set up your instance:
- Upload the project files to your hosting provider
- Create a MySQL/MariaDB database
- Navigate to
/install.phpin your browser - Follow the 5-step installer wizard
- Set up a cron job:
* * * * * php /path/to/cron.php - Log in as the platform admin
mod_rewrite enabled, extensions: mysqli, openssl, mbstring, json, curl.
Authentication
The platform supports multiple authentication methods:
- Email + Password — Standard login with bcrypt hashing (cost 12)
- Two-Factor (TOTP) — Time-based one-time passwords via authenticator apps
- Recovery Codes — 8 one-time recovery codes generated with 2FA setup
- Invite Links — Token-based invitation with automatic email verification
Session Security
Sessions are hardened with httponly, samesite=Lax, and automatic regeneration. IP and user agent are tracked per session.
API Overview
All API endpoints return JSON and require authentication via session cookie or API token.
GET /api/v1/people?page=1&per_page=25
POST /api/v1/people
PUT /api/v1/people/{id}
DELETE /api/v1/people/{id}
All POST/PUT/DELETE requests require a CSRF token in the X-CSRF-Token header.
Webhooks
The platform processes Stripe webhooks at /api/stripe/webhook. Configure your Stripe webhook endpoint to point here. Supported events:
checkout.session.completedcustomer.subscription.updatedcustomer.subscription.deletedinvoice.paidinvoice.payment_failedaccount.updated(Connect)
Multi-Tenancy
The platform uses single-database multi-tenancy with a tenant_id column on all tenant-scoped tables. The tenant_scope() helper automatically adds the WHERE clause.
// Always use tenant_scope() for queries$people = $s->query("SELECT * FROM people WHERE " . tenant_scope());
Custom Fields
Custom fields can be added to any entity (people, tenants, etc.) via the admin panel. Supported types: text, number, date, select, checkbox, url, email, textarea.
Email Templates
Templates are stored in the database and editable via the Platform Admin panel. Use {{variable}} syntax for placeholders:
Hello {{first_name}},
Welcome to {{app_name}}!
Verify: {{verify_link}}
Deployment
Designed for shared hosting environments. No Docker, Composer, or CLI required.
- Upload via FTP/SFTP
- Point your domain to the project root
- Ensure
.htaccess/mod_rewriteis enabled - Run the installer at
/install.php - Set up the cron job for background tasks
- Configure Stripe keys in Platform Settings