← All work

Learning

Engcall

Tutors were putting more effort into assessing a lesson than teaching it. Now the recording is graded automatically and they get that hour back.

Year
2024~now
Role
Solo — product, backend, frontend, operations
Status
Live — operating
The evaluation pipeline: a student speaks, AssemblyAI transcribes, GPT-4o scores the transcript on complexity, accuracy and fluency, and the result becomes personalised feedback on a dashboard
The pipeline that replaced tutor-by-tutor assessment: speech in, a CAF score and written feedback out.

The problem

Engcall connects Korean learners with Filipino tutors for one-to-one daily English conversation. I built it because the services I could find were expensive and rigid, and I have run it since — booking, payment, tutor management and the lesson flow are all systems I designed and wrote alone.

Talking every day is the easy part of learning a language. Knowing whether you are getting better is the hard part, and it was the bottleneck in the service: assessment is slow, subjective, and does not scale with the number of tutors. Two versions of the product were attempts to fix that, and only one of them survived.

How it changed

Each version below exists because the one before it was wrong about something specific.

  1. v1retired

    Build the phone call ourselves

    Why
    A phone-English service that depends on a third-party call app does not own its own core experience. I wanted the call inside the product.
    Change
    Built in-app voice calling on the Agora SDK — real-time token authentication, session lifecycle management over HTTP polling, and AI noise suppression so a lesson survives a noisy room on either end.
    Result
    It worked. It was also the wrong thing to own. Per-minute media costs scaled directly with lessons, a bespoke call stack meant every connection problem became my support ticket, and the tutors already lived in Zoom and were fluent in it. The return did not justify the surface area.
  2. v2

    Drop it, and move the effort to assessment

    Why
    The call was solved by everyone. Assessment was solved by nobody, and it was the part learners kept asking about.
    Change
    Replaced the in-house call with Zoom, and spent the reclaimed effort on an automatic evaluation pipeline. AssemblyAI transcribes the lesson and separates the tutor's voice from the learner's, so only the learner is graded. GPT-4o then scores that transcript on complexity, accuracy and fluency — the CAF measures used in second-language research — and writes the feedback that goes with each score.
    Result
    Feedback stopped depending on which tutor you happened to get or on how much time they had after a lesson. Every learner gets the same structured read on the same day, and tutors get to spend the lesson teaching instead of grading.
    Engcall landing page showing a live 1:1 English call
    engcall.kr — live, in Korean, with paying users.
    Engcall daily expression feature
    Daily expressions in the learner-facing product.
    Engcall course reservation flow
    Booking and scheduling, built in-house.

The part worth keeping

The call feature was the piece of engineering I was proudest of and the piece I cut. Deleting working code is the decision I would make again: the question was never whether I could build it, it was whether owning it made the service better for the person on the call. It did not.

The evaluation pipeline is what actually changed the product. It is also the piece I would not have had time to build if I were still maintaining a call stack.

Built with

  • React
  • TypeScript
  • Spring Boot
  • Java
  • MariaDB
  • AWS EC2
  • AssemblyAI
  • OpenAI Whisper
  • GPT-4o
  • Toss Payments

Deep dives

Individual pieces of this project, written up on their own.