Course Wrap-up and Next Steps
The Release Tracker contains many patterns seen in a production FastAPI service:
- talks to PostgreSQL through SQLModel
- authenticates users with JWTs
- runs in Docker
- ships through GitHub Actions.
The tools we learned such as uv, Ruff, mypy, alembic, pytest is what modern Python teams use today.
Takeways
- Pin tools.
- uv, Python, base images, dev dependencies, action versions. A reproducible build is the difference between debugging a real issue and chasing a version drift.
- Make the API's contract obvious from a signature.
- A route handler with
payload: ProjectCreate, session: SessionDep, current_user: CurrentUserDeptells the reader exactly what the route requires. Compare that to "look at the code to see what's loaded from where."
- A route handler with
- Run checks locally before pushing to
main.- Ruff, mypy, pytest under coverage.
- Look to your team's style guides and tool configurations
Info
If CI is the first place you hear about a problem, your local feedback loop needs to be better configured.
What Features to Build Next
Experiment with adding to the app:
- More authorization.
- Right now any authenticated user can edit any project. Real applications usually have ownership, project membership, or roles. FastAPI's
Security(a sibling ofDepends) is the place that machinery hangs.
- Right now any authenticated user can edit any project. Real applications usually have ownership, project membership, or roles. FastAPI's
- Background work.
- Sending emails, generating reports, kicking off webhooks.
arq,celery, anddramatiqare the production-grade Python options; FastAPI's ownBackgroundTaskscovers the simple cases.
- Sending emails, generating reports, kicking off webhooks.
- Observability.
structlogfor JSON logs, OpenTelemetry for traces, a metrics library (prometheus-clientor a vendor SDK). Production services live or die on what you can measure.
- Async all the way down.
- The release tracker uses sync route handlers and a sync database driver. For high-concurrency services, switch to
asyncpg,SQLModel.Session→AsyncSession, andasync defroute handlers. The shape of the code is similar; the throughput characteristics aren't.
- The release tracker uses sync route handlers and a sync database driver. For high-concurrency services, switch to
- A real frontend.
- The Lit dashboard bundled with the API is a proof of life: read-only, same-origin, intentionally minimal. A real app pairs the API with a Next.js, SvelteKit, or React + Vite client deployed separately, with
CORSMiddlewareand a more rigorous auth flow (refresh tokens, rotating keys, CSRF on cookie-based variants).
- The Lit dashboard bundled with the API is a proof of life: read-only, same-origin, intentionally minimal. A real app pairs the API with a Next.js, SvelteKit, or React + Vite client deployed separately, with