- Node.js 22+
- pnpm
- Docker
pnpm installcp .env.example .envFill in your Google OAuth credentials (GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET). Get these from Google Cloud Console — add http://localhost:3000/api/auth/callback/google as an authorized redirect URI.
pnpm db:migrate
pnpm devThis starts Postgres in Docker, the API server on :3000, and SvelteKit on :5173 (proxies /api to server).
We use shadcn-svelte. To add a new component:
cd client
pnpm dlx shadcn-svelte@latest add <component-name>Components are installed to src/lib/components/ui/<component-name>/.
From the repo root:
cd server
npx tsx src/scripts/sync-accounts.ts list <email>Other scripts live under server/src/scripts/ and can be run the same way: npx tsx src/scripts/<script-name>.ts <args>.
From the repo root:
cd server
pnpm vitest runRun tests matching a filename:
pnpm vitest run billingRun a specific test by name with -t "pattern":
pnpm vitest run -t "blocks mutation queries"- Install the Stripe CLI.
- Login:
stripe login - Forward webhooks to the local server:
stripe listen --forward-to localhost:3000/api/stripe/webhook- Copy the webhook signing secret (
whsec_...) into your.envasSTRIPE_WEBHOOK_SECRET.