A Django + PostgreSQL platform service owns everything transactional and relational: users, creator and promoter profiles, campaigns, offers, the wallet and its ledger, social-account connections, subscriptions. A separate FastAPI + MongoDB content microservice owns everything heavy and asynchronous: transcription, AI video generation, long-form auto-clipping, and social publishing.
The platform backend posts a job to the microservice and immediately gets back a 202 with a job ID — no blocking, no coupling of request lifetimes to render times. The microservice does its work and calls back over an HMAC-SHA256-signed webhook, echoing a correlation ID so the platform can match results to the originating campaign. Incremental progress streams back to a second signed callback so users watch a real progress bar, not a fake one.
This split is what lets each side scale, deploy, and fail independently — and it's what kept the AI complexity from metastasizing into the billing code.