// the find
fastapi/full-stack-fastapi-template
Full stack, modern web application template. Using FastAPI, React, SQLModel, PostgreSQL, Docker, GitHub Actions, automatic HTTPS and more.
Official full-stack starter template from the FastAPI author, combining FastAPI + SQLModel backend with a React/TypeScript frontend, wired together with Docker Compose, Traefik, and GitHub Actions CI/CD. Targets developers who want a production-ready baseline for a Python API + React SPA without assembling everything from scratch.
- Auto-generated TypeScript client from OpenAPI schema (openapi-ts) means the frontend and backend stay in sync without manual type-writing — a real time-saver that most homegrown stacks skip.
- Test coverage is unusually thorough for a template: Pytest for the backend routes and CRUD, Playwright E2E for the frontend, and a dedicated Docker Compose smoke test in CI.
- Copier integration lets you stamp out a new project with variable substitution rather than find-and-replacing strings manually, and the upstream git remote trick for pulling future template updates is a practical solution to a real problem.
- The auth setup (JWT, password hashing with bcrypt, email-based password reset with Mailcatcher for local dev) is complete and not just stub code — you can actually use it as-is.
- The data model is basically one User + one Item — there's very little scaffolding to show how to structure a real multi-entity domain, so the gap from 'template' to 'actual app' is still large.
- Traefik as the local dev reverse proxy adds operational complexity; developers not already familiar with Traefik labels and the compose override pattern will lose time debugging networking before writing a single line of business logic.
- No background task setup (Celery, ARQ, or even FastAPI's BackgroundTasks wired to something durable), so any real app will immediately need to bolt on infrastructure that doesn't exist here.
- Merging upstream template changes via git pull --no-commit is awkward once you've diverged significantly; there's no real mechanism to selectively take infrastructure updates without touching app code, and conflict resolution will get messy fast on real projects.