Complete step-by-step installation — straight PHP, Composer, and MySQL. No containers, no npm build step.
npm install, no webpack, and nothing to compile.Open .env and set at minimum:
| Key | Example | Notes |
|---|---|---|
| APP_NAME | Invoro | Shown in emails and browser titles |
| APP_URL | https://yourdomain.com | No trailing slash, no /public |
| APP_ENV | production | Use local for development |
| APP_DEBUG | false | Always false in production |
| DB_CONNECTION | mysql | See Database Setup below |
| OPENAI_API_KEY / ANTHROPIC_API_KEY | sk-... | Optional — only for AI features |
Create the database first:
Update .env:
Migrate and seed:
--seed does: creates default subscription plans, seeds the AI feature toggle rows (all off by default), and adds default email templates. Every new business signup also automatically gets India's real GST slabs (or common VAT rates for other countries) and 10 standard expense categories — safe to run once on a fresh database.This app writes to storage/, bootstrap/cache/, and public/uploads/ (logos, receipts, invoice PDFs):
Visit http://127.0.0.1:8000
Easy to miss, and half the automation in this app silently depends on them:
These jobs are defined but do nothing on their own. Add exactly one cron entry:
Windows: use Task Scheduler to run php artisan schedule:run every minute from the project directory.
To keep it running natively without Docker:
| OS | Tool |
|---|---|
| macOS | launchd — a user LaunchAgent plist running php artisan queue:work |
| Linux | systemd — a .service unit with Restart=always |
| Windows | NSSM — wraps the command as a native Windows service |
deploy/LOCAL_SETUP.md inside the codebase.From platform.openai.com or console.anthropic.com — pick either provider, per feature.
Go to Business Owner Panel → AI Settings. Flip the master switch on, then enable individual features and paste in an API key for each. Keys are encrypted before they're stored.
Try the AI invoice generator from the invoice builder, or check the dashboard's financial insights card if that feature is on.
There are no pre-seeded demo logins — registering at /register creates your tenant, your first business, and an owner account together, then walks you through a 3-step onboarding wizard (add a client → add a product/service → create your first invoice).
public/uploads/ is writable (chmod 775).APP_URL in .env — don't include /public if your document root already points there.php artisan config:clear.storage/logs/laravel.log for the exact error.curl PHP extension is enabled.This almost always means the cron entry for php artisan schedule:run was never added — see "Two Background Processes You Must Run" above. Nothing in this app polls on its own.
The queue worker (php artisan queue:work) isn't running. Set it up as a native service (launchd/systemd/NSSM) so it survives reboots.
APP_DEBUG=true to see the real error.storage/logs/laravel.log.vendor/ exists — run composer install.storage/ and bootstrap/cache/ are writable.Confirm the gateway's webhook URL is registered in that gateway's dashboard and points at /webhooks/payments/{gateway} on your live domain — webhooks can't reach localhost.
Feature walkthroughs, database schema, and the complete AI feature list are in the documentation.
View Full Documentation →