Skip to content

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

  1. 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.
  2. Make the API's contract obvious from a signature.
    • A route handler with payload: ProjectCreate, session: SessionDep, current_user: CurrentUserDep tells the reader exactly what the route requires. Compare that to "look at the code to see what's loaded from where."
  3. 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 of Depends) is the place that machinery hangs.
  • Background work.
    • Sending emails, generating reports, kicking off webhooks. arq, celery, and dramatiq are the production-grade Python options; FastAPI's own BackgroundTasks covers the simple cases.
  • Observability.
    • structlog for JSON logs, OpenTelemetry for traces, a metrics library (prometheus-client or 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.SessionAsyncSession, and async def route handlers. The shape of the code is similar; the throughput characteristics aren't.
  • 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 CORSMiddleware and a more rigorous auth flow (refresh tokens, rotating keys, CSRF on cookie-based variants).