尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Daily football puzzle games on a player database built from Wikidata and Wikipedia.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗A daily football puzzle drawn as a sticker album. Two or more famous players are on the page, with gaps between them. Name the missing players so that each neighbouring pair played for the same club, then seal the page and find out whether your chain holds.
Play it: https://ballknowledge-games.vercel.app
/collection, and the key to the grades is one tap away from every page.The same player database runs two party games for playing in a group with one phone:
/rondo): pass the ball to anyone who shared a club with the player on it. Each club can be used once per ball; run out of links and you lose the ball./slugger): football played as baseball. The pitcher names a club and the batter names someone who played for it. Big clubs are singles; small clubs are home runs.flowchart LR
WD[Wikidata SPARQL] --> P[Pipeline scripts]
WP[English Wikipedia infoboxes] --> P
P --> POOL[(data/pool.json<br/>11,741 players)]
POOL --> GEN[Daily board generator]
GEN --> BOARDS[(content/chains)]
POOL --> S[Next.js server]
BOARDS --> S
S -- board without its answer --> B[Browser]
B -- the filled chain --> SEAL["/api/seal judges it"]
SEAL -- result and reveal --> B
tests/pipeline/traps.test.ts, and the example queries in docs/superpowers/specs/queries/ prove each one.src/pipeline/overrides.ts./api/seal, which validates it and judges every link on the server.scripts/build-completion.ts builds the dailies from famous givens and is seeded, so a rerun writes the same boards. A test re-checks every board: on each plate, the intended answer must be a well-known fact (fame 50 or above) and the next-best candidate must be much less so (under 35). A board that stops meeting that rule, for example after the data changes, fails the test suite./credits lists the author and licence of every one.Next.js 15 (App Router) and React 19, TypeScript throughout, Vitest (1,363 tests), and tsx scripts for the data pipeline. There is no database: the pool is a committed JSON snapshot read once by the server. Drag and drop uses dnd-kit.
Tested on Node.js 24 (Next.js 15 needs 18.18 or later).
npm install
npm run dev # http://localhost:3000
npm test
npm run typecheck
The data is committed, so the app runs without fetching anything. The pipeline scripts (npm run fetch:pool, build:pool, fetch:careers, merge:careers, fetch:portraits, fetch:credits) rebuild it from the live sources.
| Path | What |
|---|---|
app/ | Routes: the album (/, /play/[id]), Rondo, Slugger, the API routes, and /credits |
components/ | The board, stickers, search sheet, reveal and Slugger UI |
games/rondo/ | Rondo, kept self-contained |
src/lib/chain/ | The rules: links, fields, results, the share line |
src/server/ | Loading the pool once, stripping answers, judging |
scripts/ | Data pipeline and board generator |
data/, content/ | The player pool and the boards |
tests/ | Unit tests, data-trap tests, and a test that holds every shipped board to its rules |
Code is © 2026 Jonno Millar, all rights reserved: public to read, not to reuse (see LICENSE). The data belongs to its sources: Wikidata (CC0), English Wikipedia (CC BY-SA 4.0), and the photographers and clubs listed on the app's /credits page. This is an unofficial fan project, not affiliated with any club, league or player.