Run these from the repository root. --filter <name> runs a script in one workspace.
Every day
| Command | What it does |
|---|
pnpm dev | Starts the web app (port 3000) and the developer tool (port 3010) |
pnpm typecheck | TypeScript check of the workspaces affected by your changes |
pnpm lint / pnpm lint:fix | Lint with oxlint, or lint and fix |
pnpm format / pnpm format:fix | Check formatting with oxfmt, or format |
pnpm healthcheck | Lint fix, format, typecheck and workspace dependency fix in one go |
pnpm build | Production build of every workspace |
The root AGENTS.md tells coding agents to run pnpm typecheck, pnpm lint:fix and pnpm format:fix after every change.
Database
| Command | What it does |
|---|
pnpm supabase:web:start | Starts the local Supabase stack (Docker) |
pnpm supabase:web:stop | Stops it |
pnpm supabase:web:reset | Rebuilds the local database from migrations and seed.sql. Wipes local data. |
pnpm supabase:web:typegen | Regenerates the TypeScript types in packages/supabase/src/database.types.ts and apps/web/lib/database.types.ts |
pnpm supabase:web:test | Runs the pgTAP database tests |
pnpm --filter web supabase:db:diff -f <name> | Writes a migration from the difference between schemas/ and the local database |
pnpm --filter web supabase:db:lint | Lints the database with the Supabase CLI |
pnpm --filter web supabase:demo:test | Runs the live demo tests inside a transaction that is rolled back |
pnpm --filter web supabase:deploy | Links the project in SUPABASE_PROJECT_REF and pushes the migrations |
Tests
| Command | What it does |
|---|
pnpm --filter web-e2e test | Playwright end-to-end tests against http://localhost:3000 |
pnpm --filter web-e2e test:ui | The same in Playwright's UI, with billing tests on |
pnpm --filter web-e2e responsive | Renders a page at widths from 320 to 1920 pixels and fails on horizontal overflow |
The end-to-end tests skip billing specs unless ENABLE_BILLING_TESTS=true, and skip the live demo spec unless E2E_DEMO_MODE=true (see apps/e2e/playwright.config.ts).
Billing
| Command | What it does |
|---|
pnpm stripe:listen | Forwards Stripe test events to your local webhook route (runs the Stripe CLI in Docker) |
Coding agents
| Command | What it does |
|---|
pnpm skills:check | Fails if the three skill folders differ, a skill is malformed or unlicensed, or the skill count drifts |
pnpm skills:sync <name> | Copies a skill from its upstream repository into all three skill folders |
pnpm ui-skills start | Starts the UI Skills router (through npx). AGENTS.md requires it before UI work |
Phone app
| Command | What it does |
|---|
pnpm start:native | Starts the Expo dev server |
pnpm ios:native / pnpm android:native | Builds and runs the app on iOS or Android |
pnpm doctor:native | Runs the Expo doctor checks |
pnpm i18n:native | Merges the web app's messages with the phone app's own and writes apps/native/lib/i18n/messages.generated.ts |
CI (.github/workflows/workflow.yml) runs typecheck, lint and pnpm skills:check on pushes and pull requests to main. The end-to-end and database test job runs only when the repository variable ENABLE_E2E_JOB is true.