Enjoy Software Logo
Software That Inspires.
← Selected Work

ADC Ready

Voice-AI exam preparation · Design, build & operations

Clinical exam preparation for overseas-trained dentists sitting the Australian Dental Council (ADC) Accreditation Examination — an exam with an 11% pass rate. Candidates hold a spoken consultation with an AI simulated patient in an exam-style station, then receive an ADC-like assessment plus detailed coaching on how to improve.

adcready.com.au →
Realtime
Low-latency spoken roleplay, browser to model over WebRTC
3 AI roles
Patient, examiner and coach, deliberately siloed to ensure single-task focus
45-point
Assessment according to official ADC criteria with full candidate progress

Highlights

  • Real-time spoken roleplay. Candidates practise realistic patient conversations using natural, low-latency voice interaction.
  • Three AI roles, deliberately separated. The patient agent stays in character and never tutors; a separate examiner agent grades afterwards from the transcript, the scenario rubric and the professional competency domains. The coach then provides actionable feedback to improve the score.
  • Examiner-grade feedback, not a chat summary: detailed assessment according to the official criteria published by the ADC, with timestamped quotes from the candidate’s own words and a concrete better alternative for each.
  • Session recording and playback, so candidates can hear how they actually sounded under time pressure.

Technical detail

React 19TypeScriptViteEleventyNetlify FunctionsDrizzle ORMPostgreSQLOpenAI RealtimeWebRTCBetter AuthAWS S3VitestPlaywright
  • Realtime voice architecture. Built browser-to-model voice communication using WebRTC and the OpenAI Realtime API, enabling low-latency, bidirectional audio streaming.
  • Asynchronous grading on background functions with status polling, so a long LLM analysis never sits inside a request.
  • Self-improving AI workflows. AI-generated scripts are evaluated against defined criteria, refined, and re-tested in a closed feedback loop to continuously improve quality.
  • Direct browser-to-S3 uploads via presigned URLs — a 15-minute PUT for capture, a 1-hour GET for playback.
  • Unit and end-to-end tests. Vitest against an in-memory PGLite database that each test seeds itself, plus Playwright end-to-end tests driving the live stack in a browser.

More work