Project case study · C++ cloud video integration and web application development

Elphie – Dental Imaging Capture and Live Streaming

A dental imaging system pairing a C++ desktop application that drives an intraoral camera and detects caries with a Next.js web application I built from scratch for recorded video, live streaming, appointments, and diagnoses.

What it is

Elphie combines a C++ desktop application and a web application. The C++ side controls an external intraoral camera, takes its feed, and runs a model that detects caries while the dentist examines the patient.

My contribution was everything around that feed. I worked inside the C++ application itself to get the video into cloud storage and to publish it as a live stream, then built the web application that presents it and ties it to patients and appointments.

Problem and approach

Problem

The camera feed and its findings stayed on the capture machine, so recordings were not retained centrally and nobody outside the room — family members or dental students — could follow an examination.

Solution

Wrote the cloud video path into the C++ application — uploading captured video to AWS S3 and publishing a live stream through AWS IVS — then built a Next.js web application that plays back recordings, carries the live stream, and links each session to a patient record and diagnosis.

How it works

01

Capture and detection

The dentist places a camera-tipped device in the patient's mouth. The C++ application controls the camera, receives the feed, and runs a model that detects caries.

02

Storage and streaming

From inside the C++ application the feed is uploaded to AWS S3, and a live stream is published through AWS IVS so a patient's family or dental students can watch the examination as it happens.

03

Patient-linked sessions

A doctor selects a patient in the web application and streams live from the C++ application; the recording is stored against that patient's details automatically.

04

Diagnosis and appointments

The doctor writes the diagnosis into the web application, which also handles appointment booking.

05

Deployment

The web application is deployed on AWS Amplify, keeping it alongside the S3 and IVS services the capture side already depends on.

How I built it

  1. 1.

    Cloud video storage in the C++ application

    Worked in the existing C++ desktop codebase to upload the captured camera feed to AWS S3.

  2. 2.

    Live streaming from the desktop app

    Added AWS IVS live streaming, published from the C++ application, so an examination can be watched remotely while it happens.

  3. 3.

    Next.js web application

    Built the web application from scratch as a Next.js monolith to show recorded videos and carry the live stream, with AWS Cognito authentication, appointment booking, and diagnosis entry, and deployed it on AWS Amplify.

Challenges and decisions

The cloud video work had to happen inside an existing C++ desktop application that was already driving camera hardware and running a detection model.

Approach: Read the existing native codebase carefully before changing it, then added the S3 upload and IVS publishing paths into it directly rather than trying to move video handling out to another process.

Lesson: Adding network calls to a native application makes failure handling a first-class concern, because there is no page reload to fall back on.

A live examination had to end up as a stored recording attached to the right patient, without adding manual filing steps for the dentist.

Approach: Tied the flow together through the web application: the doctor picks the patient first, then streams from the C++ application, and the recording is stored with that patient's details automatically.

Lesson: Choosing where the workflow starts can remove a whole class of manual data entry later.

Skills and technologies

What I learned

  • How to work inside an unfamiliar native C++ codebase and extend it with cloud services.
  • How live streaming changes what a clinical tool can be used for, including teaching and family visibility.