ASAnmol Shrestha
← All projects
EdTech2024

UKLC UBT

A computer-based exam prep platform that lets Korea-bound workers practice the EPS-TOPIK in its real UBT format — timed mocks, listening audio, and performance analytics.

UKuklcubt.com
0k+registered students
0k+mock exam sessions
<0msp95 API response
0lost exam sessions

Overview

UKLC UBT is the digital arm of a Korean language institute. Students preparing for the EPS-TOPIK take the real exam on a computer (UBT), but almost all local prep happens on paper. The platform closes that gap with a faithful exam simulator, a large managed question bank, and analytics that show students exactly where they lose marks.

MY ROLESolo full stack developer
TIMELINE4 months to launch, ongoing
STACK
LaravelReactPostgreSQLRedisS3Khalti / eSewa

The problem

Students were failing not for lack of Korean, but for lack of familiarity with the UBT format: strict timing, audio-driven listening sections, and on-screen navigation. Institutes had no way to run realistic mocks at scale, and paper tests could not replicate the listening experience at all.

The solution

I built a pixel-faithful UBT simulator: section timers, streamed listening audio, question flagging, and auto-submission — backed by an admin CMS where instructors compose exams from a tagged question bank. Students get per-section analytics and weak-area drills; the institute gets enrollment, payments, and cohort reporting in one place.

Architecture

A Laravel API serves a React SPA. Exam sessions are stateful and time-critical, so session state lives in Redis with periodic PostgreSQL checkpoints — a browser crash never loses an exam.

ClientReact SPA · exam player with local answer buffer · offline-tolerant autosave
APILaravel REST API · sanctum auth · exam session state machine
DataPostgreSQL (question bank, results) · Redis (live sessions, leaderboards)
InfraVPS + Nginx · S3 audio storage · queued result processing · local payment gateways

Challenges

Exam-grade timing integrity

Timers had to survive refreshes, flaky connections, and clock tampering. I moved authoritative time to the server and treated the client clock as advisory only.

Audio delivery on weak networks

Listening sections stream pre-signed S3 audio with aggressive prefetching, so a mid-exam network dip doesn't stall the section.

Concurrent exam load

Whole cohorts start mocks at the same minute. Redis-backed sessions and queue-deferred scoring kept the spike off PostgreSQL.

Lessons learned

For time-critical flows, design the failure path first — the happy path is the easy part.

Admins are users too: the question-bank CMS drove adoption as much as the student app.

Server-authoritative state plus optimistic UI gives you both trust and speed.

NEXT CASE STUDYBansha