Skip to content
← Back to Work
Product · EdTech

COU

A configurable, deployable open-source online judge grown into a product and a startup.

3→10-person team · 2022 SW Talent Festival award

  • Sandboxed Judging
  • One-command Deploy

From a project to a startup

COU stands for "Coding Online-judge platform Univ.", an online-judge website and full-service development project started in 2022.

The motivation was simple. Existing online judges like Baekjoon (BOJ) are centralized and closed, so you can’t adapt them to your own purpose or deploy them yourself. So COU started from a clear goal: an online judge anyone could modify for their needs and deploy and operate with ease.

It began as a small team I gathered and led. As it progressed the scope grew and the team expanded, and once the platform was reasonably complete I registered a business and turned it into a startup. I grew it from 3 to 10 people while owning product direction and team operations as PM. It was a journey from project to service to startup, and a paper that captured the process.

Presenting as school representative at the Gangwon SW-university workshop

In December 2022 I presented COU as my school’s representative at the Gangwon-region SW-oriented University cooperation workshop, held alongside the Korea Software Congress (KSC2022). I introduced COU’s goal of making an open-source online judge easy for anyone to deploy and operate.

Presenting COU as school representative at the 2022 Gangwon-region SW-oriented University cooperation workshop
2022 Gangwon-region SW-oriented University workshop (KSC2022) — presenting as school representative

Selected as an outstanding work at the 2022 SW Talent Festival

I then took part in the 2022 SW Talent Festival (hosted by the Ministry of Science and ICT and IITP) as my school’s representative. On a national stage where SW-oriented universities from across the country gathered, COU was selected as an outstanding work; I ran a booth, demoed the project, and presented it, framing its significance through the lens of open-source software adoption.

Presenting COU on stage at the 2022 SW Talent Festival
2022 SW Talent Festival — outstanding-work presentation

The solving experience at the core

The core screen is the problem-solving interface: the problem statement and example I/O on the left, and an editor on the right for writing and submitting code right in the browser. The editor supports multiple languages with syntax highlighting and theme switching, and on submit an isolated judge server runs the code, decides pass/fail, and lets you follow the judging status.

So in-progress code never gets lost, a dedicated draft-code (auto-save) module guards against bad saves with a checksum, and private submission is supported for coding-test settings.

COU problem-solving screen — problem statement on the left, code editor on the right
COU solving screen — problem statement with an in-browser code editor and judging

Problems, practice, and personalization

Problems are organized by category, tag, and difficulty, with a per-category completion rate showing learning progress. Random problem pick and search/difficulty filters make it a practice experience tailored to the learner rather than a flat problem list. On top of that it rounds out into a full service with contests (coding tests), a submission feed, a community (questions and posts), and notifications.

COU problem-list screen — per-category completion rate, difficulty and tags, random pick
COU problem list — category completion rate, difficulty, tags, and random pick

Stack and deployment

The backend is Django — account, problem, submission, judge, contest, draft-code, email auth, announcements, and community modules — and the frontend is Vue, wiring in a code editor (CodeMirror), math (KaTeX), charts (ECharts), and i18n. Data runs on PostgreSQL and Redis.

The judge server is isolated with minimal container privileges (cap_drop) and a read-only, tmpfs filesystem so unknown users’ code runs safely. The whole service is packaged with Docker Compose to come up in a single command — matching the original goal of making it easy for anyone to deploy and operate in their own environment.

Role

As PM and founder I owned everything from product direction to team operations and external talks, growing an outstanding-work project into a real service and then a startup.