Convex + App Router API routes for uploads / AI โ bad practice?
Iโm building a Next.js app using Convex for state + realtime, but Iโm also keeping a separate app/api layer for stateless compute + integrations (UploadThing routes, AI SDK calls, webhooks).
Some of my AI logic needs system-specific stuff (Python workers, heavier compute, streaming, etc.), which feels like a better fit for Vercel/edge/server functions rather than Convex functions.
My current boundary is:
Convex โ source of truth, mutations, queries, realtime sync
Next.js API routes โ uploads, AI calls, external services, then calling Convex to persist results
From a Convex best-practices POV:
Curious how others are drawing this boundary in real apps.
