Get a fully working development environment with a single command. From the repository root, run:
./setup.sh
The script walks through every step of the Manual Setup automatically:
backend/.env, backend/.env.test, and frontend/.env from their examplesbackend/.env automaticallyAPP_KEY, runs migrations, and seeds plansWhen it finishes, start developing:
cd backend && npm run dev # API on http://localhost:3333
cd backend && node ace queue:work # Background job worker
cd frontend && npm run dev # App on http://localhost:3000
| Flag | Effect |
|---|---|
--skip-stripe | Don't prompt for a Stripe key or start the Stripe CLI container |
--skip-tests | Skip the backend test suite validation step |
--yes / -y | Non-interactive mode — never prompts; skips Stripe if no key is set |
# Example: CI-friendly run without billing
./setup.sh --skip-stripe --yes
The script is idempotent, so you can run it again at any time:
.env files are never overwrittenAPP_KEY is never rotatedRe-running is also the easiest way to re-sync the Stripe webhook secret, which rotates every time the Stripe CLI container restarts.
A few things still require human input:
sk_test_...) from the Stripe Dashboard under Developers → API keys. You can skip this and add it later.backend/database/seeders/plan_seeder.ts and keep the plan keys in sync with frontend/app/types/plan.ts. See Plans & Products.| Issue | Solution |
|---|---|
Port 5432 is held by container '...' | Another project's container is using the port. Stop it with docker stop <name> and re-run |
Docker is not running | Start Docker Desktop first |
Node.js v24+ is required | Upgrade Node.js — AdonisJS v7 doesn't run on older versions |
| Webhook secret not found | The Stripe container needs a valid test key; check docker compose logs stripe |
| Tests fail | The setup still completes; review the test output and see Testing |
If you prefer to understand each step or the script doesn't fit your environment, follow the Manual Setup guide.