Skip to content

Repository files navigation

Pocket Check · 口袋理解關卡

Deploy to Cloudflare

投票前的理解關卡做成一個 Cloudflare Worker,不用帳號、不用模型。主辦者出 1–10 題附出處的單選題,設定通過門檻與下一站連結(例如 Pocket Polis 或 Pocket Budget 的投票頁);參與者答完才看到對錯與解釋,通過才由伺服器回傳下一站連結,沒過可以重來。結果頁給每題答對率與最常見的錯誤選項,那就是要在會前補充的地方。

概念借自 SwarmCheck 的理解檢查(沒有可驗證的原始碼,本專案為獨立設計),MIT。

流程

  1. 建立:題目、選項(正確答案加 *)、出處、解釋;通過題數(預設 80%);下一站連結(https,只在通過時回傳,不出現在公開資料)。
  2. 作答 /c/:id:一台裝置一位參與者(v4 UUID 雜湊),可重複作答,每次都記錄;通過後可留「哪裡不清楚」。
  3. 結果 /r/:id:參與者、作答次數、通過率、一次通過率、每題答對率與常見錯誤。主辦者頁 /h/:id#admin=… 看答案、關閉、刪除、匯出 questions.csvattempts.csvresults.jsontttc.csv(回饋)。

API

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 名稱不可改

About

Pocket Check 口袋理解關卡:comprehension gate before a vote on one Cloudflare Worker

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages