At a glance
Bugs, problems and updates
Choose a fix and press Fix, or tick Already fixed. Your choices are kept with this page: Claude reads them and does the fixes marked Claude does it at the start of the next session, and ticks them off; on the private page, Check health also sends them with the check.
Each part of the check
| Part | Health | Findings | Checked |
|---|---|---|---|
| Runs | Watching | 1 | 2026-10-18 19:34 UTC |
| The old website | Watching | 1 | 2026-10-18 19:34 UTC |
| The board | Healthy | 0 | 2026-10-18 19:34 UTC |
| The records | Watching | 2 | 2026-10-18 19:34 UTC |
| The ruleset | Healthy | 0 | 2026-10-18 19:34 UTC |
| Updates | Watching | 13 | 2026-10-18 19:34 UTC |
| The repository | Healthy | 0 | 2026-10-18 19:34 UTC |
| Images | Healthy | 0 | 2026-10-18 19:34 UTC |
| Security | Watching | 1 | 2026-10-18 19:34 UTC |
The app: its size, its parts and their health
in 3,482 files that git keeps · 63.6 MB on GitHub with its history
The last test run
Healthy 2026-10-18 04:28
changes: success · checks: success · images: skipped · migration: skipped
| Part | Folder | Files | Size | Last change | Tested by | Health | |
|---|---|---|---|---|---|---|---|
| V-Nodds pricing engine | model/src/vnodds | 35 | 315.0 KB | 2026-10-18T18:33 | checks | Healthy | |
| Prediction model and pipeline | model/src | 44 | 375.5 KB | 2026-10-18T18:33 | checks | Healthy | |
| Project tools and the health check | scripts | 20 | 223.3 KB | 2026-10-18T18:33 | checks | Healthy | |
| Tests | model/tests | 28 | 163.1 KB | 2026-10-18T18:33 | checks | Healthy | |
| The old website's plugin (WordPress) | wp-deploy | 3 | 410.3 KB | 2026-10-18T18:33 | checks | Healthy | |
| Database migrations | db | 2 | 4.6 KB | 2026-10-18T18:33 | migration | Healthy | |
| The job contract | contracts | 1 | 3.3 KB | 2026-10-18T18:33 | checks | Healthy | |
| The Python container | model/Dockerfile | 1 | 1.8 KB | 2026-10-18T18:33 | images | Healthy | |
| Ruleset, plan and pages | docs | 17 | 6.4 MB | 2026-10-18T18:33 | checks | Healthy | |
| Automation on GitHub | .github/workflows | 8 | 21.2 KB | 2026-10-18T18:33 | — | — | |
| Operations: Cloudflare and the health lists | ops | 5 | 18.4 KB | 2026-10-18T18:33 | — | — | |
| Data the model reads | model/data | 3,277 | 142.3 MB | 2026-10-18T18:33 | — | — | |
| Records | records | 12 | 20.1 MB | 2026-10-18T18:33 | — | — |
The app's sections — how far each is built
Each section of the new app, from its rules to members using it. The stages: rules written, plan, server-side code, the app's screens, tested, live. Live pages are the old website's for now; the new app's appear here when it is running.
| Section | Built | Stages done | On the new app | On the old website | |
|---|---|---|---|---|---|
| Accounts and sign-in R-29.8, R-13.11 | 20% | rules, plan | Not live yet | WordPress accounts /account/ Healthy | |
| Vendicator Cards §4 | 45% | rules, plan, server | Not live yet | the card pages /card/ Healthy /cardgrid/ Healthy | |
| Vendicator Football Clubs (VFC) §6A, §19 | 20% | rules, plan | Not live yet | — | |
| Vendicator Football Manager (VFM) §6C | 20% | rules, plan | Not live yet | — | |
| Vendicator International Challenger (VIC) §6D | 20% | rules, plan | Not live yet | — | |
| Game Hub and the profile §9 | 20% | rules, plan | Not live yet | the dashboard /dashboard/ Healthy | |
| Leagues, tables and fixtures §22, §23 | 20% | rules, plan | Not live yet | leagues and fixtures /leagues/ Healthy /fixtures/ Healthy /team/ Healthy /player/ Healthy /compare/ Healthy | |
| Leaderboards §23 | 20% | rules, plan | Not live yet | — | |
| Boosters and the inventory §10, §12 | 20% | rules, plan | Not live yet | — | |
| Vendicator Assistant Selections (VAS) R-12.10, R-10.31 | 20% | rules, plan | Not live yet | — | |
| Transfers and the transfer list §21 | 20% | rules, plan | Not live yet | — | |
| V-Nodds pricing engine §3 | 92% | rules, plan, server, tested | Not live yet | off in production until switched on | |
| Prediction model and the board §3, R-30.7 | 92% | rules, plan, server, tested | Not live yet | the daily board / Healthy | |
| Settlement and records R-26.6, R-1.7 | 92% | rules, plan, server, tested | Not live yet | settlement runs on GitHub | |
| Notifications R-9.39 | 20% | rules, plan | Not live yet | — | |
| Pro and payments §11, R-11.5 | 20% | rules, plan | Not live yet | — | |
| Admin panel §15 | 20% | rules, plan | Not live yet | WordPress admin | |
| Languages §9B | 20% | rules, plan | Not live yet | — | |
| Images, kits and avatars R-9.49 to R-9.51 · interim — the owner's own image system replaces it | 60% | rules, plan, server, tested | Not live yet | — | |
| Help and the rules pages §14 | 20% | rules, plan | Not live yet | the help page /help/ Healthy | |
| Health check R-30.3 | 100% | rules, plan, server, tested, live | Live | — | |
| Hosting, containers and deployment R-30.9 · images built and started in CI; no host yet | 92% | rules, plan, server, tested | Not live yet | — | |
| Mobile apps R-30.6 | 20% | rules, plan | Not live yet | — |
The list is kept in ops/health/build_progress.json, updated as each part is built (as of 2026-10-15).
Updates to watch
What the app is built from, against the newest version out. Nothing is updated by the check — choose Claude updates it on the report above, and the tests run with it.
| Kind | Name | In use | Newest | Status |
|---|---|---|---|---|
| Container image | amacneil/dbmate | 2.36.0 | 2.36.0 | Healthy |
| Container image | postgres | 17.10 | 17.10 | Healthy |
| Container image | python | 3.12.14 | 3.12.15 | Watching |
| Container image | python | 3.12.14 | 3.12.15 | Watching |
| Container image | valkey/valkey | 9.0.6 | 9.0.6 | Healthy |
| GitHub Action | actions/checkout | v4 | v7 | Watching |
| GitHub Action | actions/setup-python | v5 | v7 | Watching |
| GitHub Action | actions/upload-artifact | v4 | v7 | Watching |
| Python package | catboost | 1.2.10 | 1.2.10 | Healthy |
| Python package | lightgbm | 4.6.0 | 4.7.0 | Watching |
| Python package | numpy | 2.0.2 | 2.5.4 | Watching |
| Python package | openpyxl | 3.1.5 | 3.1.5 | Healthy |
| Python package | pandas | 2.3.3 | 3.0.6 | Watching |
| Python package | pytest | 8.4.2 | 9.1.1 | Watching |
| Python package | python-dotenv | 1.2.1 | 1.2.4 | Watching |
| Python package | reportlab | 5.0.1 | 5.0.1 | Healthy |
| Python package | requests | 2.32.5 | 2.34.2 | Watching |
| Python package | scikit-learn | 1.6.1 | 1.9.1 | Watching |
| Python package | scipy | 1.13.1 | 1.18.1 | Watching |
| Python package | xgboost | 2.1.4 | 3.4.1 | Watching |
Security and legal
Security
| Credentials in the repository checked 2026-10-18 19:34 UTC · 0 found | Healthy |
| Files a site must never serve checked 2026-10-18 19:34 UTC · none answering | Healthy |
| Account names shown to anybody checked 2026-10-18 19:34 UTC · the old website's users route | Watching |
| Security headers on the old website checked 2026-10-18 19:34 UTC · HSTS, nosniff, Referrer-Policy, frame protection | Watching |
| Credentials kept out of git R-29.13 · checked on every commit, in CI and in every health check; the whole history read on 13 October — none | Done |
| Old members' personal data UK GDPR Art. 5(1)(e) · the old WordPress backup and accounts file moved to the Mac's Trash on 15 October, for the owner to empty | Done |
| Secrets in the containers R-29.13, R-30.9 · nothing secret in the image — checked in CI on every push | Done |
| The engine's door R-29.3 · a service token, rate limits, idempotency keys, no traces to callers | Done |
| Dependencies R-29.9 · pinned; Dependabot proposes updates weekly; the health check lists newer versions | Watching |
| The health page's private address R-30.3 · Cloudflare Access with the owner's email — the owner's set-up | Waiting |
| Backups at a second provider R-30.2 · the nightly dump to Cloudflare R2 waits for the production database | Planned |
| An outside uptime monitor R-30.7 · UptimeRobot's free plan recommended — the owner's account | Waiting |
| Sign-in security for members R-29.8 · Better Auth, two-factor and passkeys — with the app | Planned |
Legal
| The solicitor's review of §13 (free-to-play, nothing of value) §13 · the hour is not booked | Waiting |
| Age: 18 and over, by declaration R-13.11 · for the solicitor's hour | Waiting |
| The 13+ account R-13.12 · built in the plan and switched off until the solicitor | Waiting |
| No gambling wording R-1.4 · every health check reads the board and the site for it | Watching |
| Cookies and consent (PECR) R-30.3 · page views counted without cookies on the new app — no banner needed for them | Planned |
| The statistics' rights (API-Football) §4 · for the solicitor's hour | Waiting |
| Image licences R-9.49 · the owner's own image system replaces the interim kits and avatars | Waiting |
| Avatars that look like real players R-9.51 · for the solicitor's hour; no photograph is analysed | Waiting |
| Payments (Stripe, declared as software and games) R-11.5 · test mode only until Pro opens | Planned |
| Privacy notice and terms §13 · written with the app, reviewed by the solicitor | Planned |
| Where members' data is held §13 · the host's region — the hosting decision | Waiting |
Kept in ops/health/compliance.json (as of 2026-10-15); the four live rows come from this check. None of this is legal advice — the solicitor's hour covers the legal rows.
Visits
No page views are counted yet, on either website. The old website — the WordPress staging site members use today — would need a change to its plugin, and that is not being made (owner, 14 October 2026). The new app counts its own page views from its launch; this chart then shows them, labelled as the new app's (plan §FFF).
Every page of the old website
The WordPress staging site members use today. The new app's pages join this list when it launches.
| Page | Status | First byte | Weight | Problems |
|---|---|---|---|---|
| /player/ | 200 | 441 ms | 64.8 KB | — |
| /leagues/ | 200 | 410 ms | 156.8 KB | — |
| /account/ | 200 | 296 ms | 64.5 KB | — |
| /compare/ | 200 | 295 ms | 64.5 KB | — |
| /dashboard/ | 200 | 292 ms | 63.5 KB | — |
| /team/ | 200 | 286 ms | 64.4 KB | — |
| /card/ | 200 | 280 ms | 64.4 KB | — |
| /help/ | 200 | 276 ms | 98.7 KB | — |
| /fixtures/ | 200 | 273 ms | 64.5 KB | — |
| / | 200 | 269 ms | 65.5 KB | — |
| /cardgrid/ | 200 | 269 ms | 64.5 KB | — |
Runs and GitHub minutes
About 1,039 minutes used this month, on pace for 1,789 of the free 2,000. When the free minutes run out, GitHub stops the runs until the month turns — it never charges without a spending limit set.
- Daily data run — 751 min
- CI — 159 min
- Settlement — 70 min
- Daily scan — 34 min
- Check health — 9 min
- pip in /model - Update #1601468957 — 2 min
Your checks
Add a check with the Scan check form on GitHub — in words, with a pattern, a page or a number range. Every check runs it and answers on the issue; one it cannot run is labelled needs-amending with why.
How this page is made
The check (scripts/daily_scan.py) runs on GitHub when Check health is pressed — never on a schedule, and nothing of it on your Mac. It reads every page of the old website, the files a site must never serve, the security headers, the board, the records, the ruleset, the runs, the tests, the repository for credentials and size, and the versions the app is built from; scripts/health_page.py draws this page from what it found.