Web Judge (開源版)
created_at: 2026/10/12 00:00:00

先前那篇說 Source code 沒辦法公開,一是還沒整理好,二是攸關畢業論文。
現在論文寫完了,code 也整理好了,所以開源了。
不過主要是為了技能競賽的場景設計而做了一點權衡,實際要長期使用可能需要再做一些調整。
這是什麼
不是單純網頁版的 Online Judge,而是一個可以評網頁專案的 Online Judge,為技能競賽的場景而設計。
選手上傳的是一整個網站專案(zip),系統會在隔離的容器中把它實際跑起來,逐個評分項、逐筆測資去計分,然後即時更新記分板。
這也是我的碩士論文,並且已經在實際的競賽中完整運作過一場。
畫面
封面那張是會場大螢幕用的記分板,每位選手一列、每個評分項一格,評分完成就會即時翻色。
每一筆提交可以看到逐評分項的結果:

後台的系統狀態,可以看到評分工作者的健康度、佇列深度與近期的錯誤:

和先前那篇比起來
架構和當時那張有點糊的圖已經不太一樣了:
typespec/ API 規格(單一事實來源)
├─> backend 產生 Go server 介面
└─> frontend 產生 typed client
frontend/ SvelteKit + Svelte 5 + Tailwind
backend/ Go (Clean Architecture)
├─ MySQL(關聯資料) / MongoDB(提交與評分) / Redis
└─ judge workers 透過 Docker 啟動評測容器
- API-first:規格只寫在一個地方,前後端的程式碼都由它產生,不手寫兩邊的
DTO - 即時性:倒數計時、記分板、提交狀態、後台監控全部走
SSE,不用重新整理;前端這邊會把多條後端的串流合併成單一連線 - 比賽現場導向:大螢幕記分板、系統狀態、重評(可以比對前後差異再決定要不要採計)
- 內建操作手冊:選手和管理端各一份
- 開箱即示範:內建一場示範競賽的資料,
clone下來就能走完「登入 -> 提交 -> 評分 -> 記分板」
關於 AI
這個專案歸類在「傳統手工藝」,因為核心是在 AI 還沒那麼厲害的時候手寫出來的。
不過後面的開發引入了 AI 協作,所以現在去看 code 會發現有些地方有點 AI 味,這邊先說一聲(?)