投票前的理解關卡做成一個 Cloudflare Worker,不用帳號、不用模型。主辦者出 1–10 題附出處的單選題,設定通過門檻與下一站連結(例如 Pocket Polis 或 Pocket Budget 的投票頁);參與者答完才看到對錯與解釋,通過才由伺服器回傳下一站連結,沒過可以重來。結果頁給每題答對率與最常見的錯誤選項,那就是要在會前補充的地方。
概念借自 SwarmCheck 的理解檢查(沒有可驗證的原始碼,本專案為獨立設計),MIT。
- 建立:題目、選項(正確答案加
*)、出處、解釋;通過題數(預設 80%);下一站連結(https,只在通過時回傳,不出現在公開資料)。 - 作答
/c/:id:一台裝置一位參與者(v4 UUID 雜湊),可重複作答,每次都記錄;通過後可留「哪裡不清楚」。 - 結果
/r/:id:參與者、作答次數、通過率、一次通過率、每題答對率與常見錯誤。主辦者頁/h/:id#admin=…看答案、關閉、刪除、匯出questions.csv、attempts.csv、results.json、tttc.csv(回饋)。
POST /api/checks {title, intro?, questions:[{prompt, choices:[..], answer:index, source?, explanation?}], passMark?, nextUrl?, nextLabel?, askFeedback?, confirmed:true}
GET /api/checks/:id 公開題目(無答案、無 nextUrl)
GET /api/checks/:id/results {check, results}
POST /api/checks/:id/attempts {participantId, answers:[index]} → {outcome:{correct[], score, passed, attempt, review[], nextUrl}}
POST /api/checks/:id/me {participantId} → {passed, attempts, nextUrl}
POST /api/checks/:id/feedback {participantId, text}
GET /api/checks/:id/host X-Check-Admin
POST /api/checks/:id/status X-Check-Admin {status}
GET /api/checks/:id/export/questions.csv | attempts.csv | tttc.csv | results.json X-Check-Admin 或 ?token=
DELETE /api/checks/:id X-Check-Admin
- 下一站連結拿到就能轉傳;這是理解的邀請,不是存取控制。
- 不驗證身分;結果不含個別答案(attempts.csv 只有雜湊前 12 碼)。
npm install && npm test && npm run check
npm run deploy:production # 自訂網域在 env.production.routes;Worker 名稱不可改