Local development
Processes
You usually run four terminals:
| # | Service | Command / notes |
|---|---|---|
| 1 | Postgres | docker compose up postgres (or -d in background). |
| 2 | API | pnpm --filter api dev on port 4000 (default). |
| 3 | Emulators | Auth, Firestore, Functions — ports from firebase.json. |
| 4 | Dashboard | pnpm --filter web dev — Vite, default 5173 (or next free port). |
Load root .env in shells that run the API and emulators so API_SERVICE_TOKEN, DATABASE_URL, and Firebase settings resolve.
Emulator ports (non-default)
From the main repo’s firebase.json (subject to change):
| Service | Typical port |
|---|---|
| Auth | 9299 |
| Firestore | 8080 |
| Functions | 5011 |
| Emulator UI | 4600 |
The web app is configured for local Firebase via VITE_* variables — see .env.example.
Useful commands
pnpm typecheck
pnpm build
Database migrations:
DATABASE_URL='postgresql://recurfy:recurfy@localhost:5432/recurfy' \
pnpm --filter @recurfy/db exec prisma migrate dev --name <change-name>
Marketing & docs sites
From the monorepo root:
pnpm --filter marketing dev
pnpm --filter docs start
See the repository README for the canonical layout and URLs (www.recurfy.com, docs.recurfy.com, app.recurfy.com).