- Nuxt is the only browser-facing service and proxies same-origin
/api/**requests. - FastAPI owns validation, password hashing, users, and server-side sessions.
- PostgreSQL stores users and hashed session tokens.
- Authentication uses an HttpOnly, SameSite cookie. Tokens are never exposed to frontend code.
docker compose up -d --buildOpen:
- App: http://127.0.0.1:3000
- OpenAPI: http://127.0.0.1:8000/docs
The migrate service applies Alembic migrations before the backend starts. Existing databases
created by the previous version are detected by the baseline migration and upgraded without
dropping users.
Requires Python 3.10+, uv, and Node 24. The frontend includes an .nvmrc.
make setup
make migrateRun the services in separate terminals:
cd backend && uv run uvicorn app.main:app --reload
cd frontend && npm run devSet NUXT_API_BASE_URL=http://127.0.0.1:8000 when the frontend cannot use the default.
make checkThis runs backend lint and API tests plus frontend lint, type checking, unit tests, and a production build.
Copy .env.example to .env only when you need to override defaults. In HTTPS production,
set SESSION_COOKIE_SECURE=true.