What this is
The ‘serious team’ Python stack: Django on the backend doing the heavy lifting for auth, admin, ORM, and forms; React on the frontend for any UI that benefits from SPA polish. Used widely in B2B SaaS where the data model is rich and the team values convention over re-inventing primitives in every project.
When to pick this stack
- Your app is data-heavy (think CRMs, dashboards, internal tools) and the admin you get for free out of Django is genuinely useful.
- You have Python expertise on the team, for ML, scripting, or because Django suits your hiring pool.
- You want a clear separation between API and UI, with the option to ship a mobile client later against the same Django REST endpoints.
What we’d swap
- Postgres → SQLite: for a smaller deployment, Django on SQLite via a single VPS now scales further than people expect.
- React + Vite → Inertia.js: if you don’t actually need the SPA UX, Inertia gives you React components rendered through Django views and skips the API boundary entirely.
Common gotchas
- Django’s session-based auth and SPAs need careful CORS + CSRF handling. Either use SimpleJWT and skip cookies, or commit to same-origin and dj-rest-auth.
- The frontend build output needs to land where Django collectstatic can find it. Most teams just deploy the SPA separately on Vercel/Netlify and treat Django as a JSON API.