Local development
The stack
Section titled “The stack”FastAPI · SQLAlchemy (async) · PostgreSQL · React · TypeScript · Vite · Tailwind · Google sign-in (OIDC). One repo, one container: the backend serves the built frontend.
Setting up
Section titled “Setting up”Requires uv (it installs the right Python for you), Node 24
(see .nvmrc; e.g. fnm use), and Docker, for the local database and for make image
(the production image).
cp .env.example .env # then edit valuesmake sync # install backend and frontend dependenciesmake up # local Postgres in Docker, with the app's DB role (make down to stop)make migrate # apply database migrationsmake dev # API on http://localhost:8000make dev-web # frontend on http://localhost:5173 (proxies API calls to :8000)make lint # ruff + mypy, oxlint + prettier, and licence checksmake test # test suites (needs `make up`: API tests use a real Postgres)make openapi types # after changing the API: regenerate openapi.json, then the frontend typesFor sign-in to work locally, create a separate Google OAuth client with the redirect URI
http://localhost:8000/auth/callback, and set PUBLIC_BASE_URL=http://localhost:8000
and ENVIRONMENT=development in .env (see Configuration).
make seed EMAIL=you@example.com then adds about 60 sample jobs, with interviews, to your
local account (sign in once first).
Run make help to list every target.
This manual
Section titled “This manual”The manual lives in docs/ (Markdown, built with Starlight).
make sync-docs installs its dependencies, make docs previews it on
http://localhost:4321, and make docs-build builds it, failing on broken links.
Contributing
Section titled “Contributing”See CONTRIBUTING.md for how to contribute and how contributions are licensed.