- Years
- 2024 - 2026Active
A US enterprise platform (client under NDA) that helps companies train their people at scale: structured programs built by coaches, live AI role-play practice, automated call evaluation, and a centralised knowledge hub. A Django monolith and a React front end joined by GraphQL, running on AWS ECS with Celery workers. I owned the Knowledge Hub, the Program and assignment systems, and much of the AI Roleplay surface.
What I built
- Designed and built KnowledgeHub end to end - pages, folders and sources with drag-and-drop, a Tiptap rich-text editor with custom nodes for training documents, draft and version history, contributor groups and permissions, direct-to-S3 uploads via presigned URLs, in-app PDF and video viewers, Docling document conversion and Notion sync - so chat agents can generate training docs, programs and role-play scenarios from a company’s own material.
- Built the page agent on top of it: an SSE-streamed assistant that drafts and edits documents in place with debounced auto-save, source attachments, and publish / convert-to-draft flows.
- Restructured the chat-agent architecture as agent types multiplied - SSE streaming, shared highly-customisable UI components, and abstract agent classes on the back end - cutting time to ship a new agent type from months to about a week.
- Helped build AI Roleplay: employees practise live voice and video calls against an AI counterpart powered by Claude, Vapi, ElevenLabs and Tavus, driven by structured scenarios users can create through a chat agent. Extended the evaluation to return scores, ranks, annotated transcripts and concrete improvement tips after each session.
- Owned the Program and scenario-assignment system: bulk assignment with de-duplication, prerequisites and completion criteria, a unified model merging scenario assignments and program components, per-assignee statistics and progress charts, and resource-level permissions.
- Built the notification layer - Celery-beat reminders, a weekly assignment digest with per-user preferences, due dates rendered in each assignee’s timezone, and Slack delivery - dispatched off the worker on a single preferences query.
- Built an async call-evaluation pipeline with Celery that pulls recorded calls from Fireflies/Gong and scores them against scenario criteria using Claude, plus the call categories, scorecards and role-based access control around them.
- Modernised the front end: migrated Webpack to Vite (hot reload 3 min → 12 s), removed deprecated Less/SCSS, unified duplicated components, and introduced shadcn/ui in place of aging dependencies. Also provisioned the dedicated Docling, Knowledge Hub and Celery workers in Terraform.
Stack
- Django
- Strawberry GraphQL
- Celery
- PostgreSQL
- pgvector
- Redis
- React
- TypeScript
- Vite
- Apollo Client
- Tiptap
- Claude
- SSE
- Docling
- Vapi
- ElevenLabs
- Tavus
- AWS ECS
- Terraform