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 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.
- 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.
- 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.kr — live, in Korean, with paying users. 
Daily expressions in the learner-facing product. 
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.
Speaking Analysis →
Upload or record English audio and get detailed AI analysis — powered by OpenAI Whisper for transcription and GPT-4o for grammar correction, vocabulary suggestions, and scoring across four categories.
Phone Call →
1:1 voice call system built with Agora SDK — real-time token auth, session lifecycle management via HTTP polling, and AI-powered noise suppression. Built, shipped, then retired in favour of Zoom.