尚未检测到更新。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.