EdTech · AI roleplay · Real-time

Edustack – First Principles

A multi-tenant training platform for dental teams with real-time AI roleplay over WebSockets, Celery scoring pipelines and privacy-first call ingestion.

Client
First Principles (ALCAN)
Company
TerrificMinds
Role
Backend Lead
Team
Owned learner API & admin portal

Overview

First Principles is a multi-tenant training platform for dental practice teams. Staff learn phone and case-acceptance skills through a sequenced curriculum, and real inbound calls can be scored against the same competencies. The backend is a Django REST API that serves a mobile learner app and a Django admin portal.

Learners move through ordered modules of AI roleplay, learning materials, exemplar calls and live calls. The system assigns a capped queue of unfinished activities, scores work against competencies and observation checklists, and stores results per user. Organisations can connect their phone system so eligible inbound calls are ingested, matched to a learner and evaluated — without ever storing patient identifiers.

training_room.queuemax_unfinished = 8
empty
empty
empty
empty
empty
empty
empty
empty
■ assigned■ live call■ completed → refill

How it works

  1. An admin creates an organisation, users, roles, coaches, modules and curriculum content. Users sign in with admin-issued credentials, complete first-login onboarding, then receive JWT access.
  2. Training is a sequence of modules. Each module is made of activities: AI roleplay, learning material, exemplar call or live call.
  3. The Training Room keeps eight unfinished activities in front of a learner and fills the next slot only when one is completed. Live-call activities are assigned only when the organisation has VoiceStack enabled and the learner is mapped to an agent.
  4. Roleplay and skill-boost sessions run over WebSockets. Transcripts and competency or checklist scores are saved asynchronously.
  5. When a connected phone provider ends an eligible inbound call it sends a webhook. The API fetches the call record, drops patient private fields, stores the operational call data and links it to the learner for scoring.
  6. Progress, results and reports are available to the learner app and the admin portal.

My contribution

  • Led backend development and owned the learner API and admin portal: authentication, users, organisations, curriculum, progress, scoring and reporting.
  • Designed the MySQL schema for multi-tenant organisations, custom users and roles, sequenced modules, four activity types and per-user progress and results.
  • Built the activity-queue service that assigns curriculum in order, caps unfinished work at eight activities and adds live calls only for eligible organisations and learners.
  • Developed real-time AI roleplay and skill-boost flows over WebSockets with Django Channels and Redis, with Celery tasks that persist transcripts and map scores to competencies and checklists.
  • Integrated VoiceStack (CareStack) for organisation-level OAuth, agent sync and end-of-call webhooks, enforcing a rule that patient identifiers are never stored; integrated VAPI and Hume AI.
  • Implemented JWT authentication with token blacklisting, first-login onboarding and OTP-based password reset, separate from admin session login.
  • Exposed versioned REST APIs documented with Swagger, and stored media on Amazon S3 with presigned URLs.
  • Drove architecture and data-model decisions for module assignment, progress uniqueness and provider onboarding.
Let's talk

Need a backend that scales quietly?

I'm open to conversations about senior and lead backend engineering roles, and about hard problems in Python, APIs and multi-tenant SaaS.