Context
Ejaad.ai is an AI-powered platform focused on education and workforce development. AI products have a specific production problem: the interesting part — generation — is slow, unreliable, and priced per call. A request/response mental model collapses the first time a model takes ninety seconds or a provider times out.
I led the team as Team Lead, owning architecture, code reviews, and feature planning alongside hands-on frontend and backend work.
The system
- Nuxt 3 app
- Realtime status
- Nitro server routes
- BullMQ queues
- Workers
- Supabase / Postgres
- Auth & storage
- AI providers
The rule that shaped everything: no HTTP request ever waits on a model. Every AI operation becomes a job — queued in BullMQ, processed by workers, its state written back to Postgres, its progress streamed to the client.
Decisions
Outcome
The platform ships AI features on infrastructure that fails gracefully and scales horizontally by adding workers. The team ships behind stable seams — provider churn stays in one module. Still in production, still growing.