OpenAthlete
AGPLv3 endurance training platform: EU-oriented hosting, transparent CTL/ATL/TSB logic in code, self-hosting, and full export. Built in Grenoble.
Cricket ball tracking and analysis
Translation pending
Sports & fitnessPython · TypeScriptGitHub @Ben536OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
A portable cricket training device: a Raspberry Pi with a TI IWR6843ISK-ODS
mmWave radar mounted above the batter, a WebSocket server and game engine on
the Pi, and a phone PWA that scores the session and simulates each shot's
outcome against a fielding setup.Read the full README ↗A portable cricket training device: a Raspberry Pi with a TI IWR6843ISK-ODS mmWave radar mounted above the batter, a WebSocket server and game engine on the Pi, and a phone PWA that scores the session and simulates each shot's outcome against a fielding setup.
src/, React + TypeScript, Vite): scoreboard, over tracker,
field editor, wagon wheel, shot simulator. Scores live in the phone's
localStorage. Served by the Pi at http://<pi>:5173.src/gameEngine.ts and engine/game_engine.py): the same
fielding simulation in two languages, bit-identical for the same inputs and
seed - the phone uses the Pi's when connected and its own when not.server/): WebSocket on :5002; owns the radar UART; records
and streams radar frames; runs the Python engine for simulate_shot.radar/): TLV parser, single-owner serial reader, crash-safe
JSONL recorder, and the ball detector (offline-tuned, not yet wired live).scripts/): deploy over rsync, five systemd units, a watchdog.CLAUDE.md - the coordinate system, engine spec and the "Start here"
section for tooling and gates.vault/ - the engineering vault (open as an Obsidian vault):
architecture/Codebase Map.md (what everything is and the invariants),
Review Playbook.md (how this codebase is reviewed), plans/ (every
review's findings), learnings/ (hard-won Pi facts).# Python (server, radar, engine)
uv venv --python 3.11 .venv
uv pip install --python .venv/bin/python -r requirements-dev.txt
# Frontend
npm ci
npm run dev # Vite dev server (the Pi is not at localhost - use ?server=<pi-ip>:5002)
# Every gate in one command (pytest, drift check, tsc, eslint, vitest, build, parity, shellcheck)
npm run check
./scripts/deploy_to_pi.sh [pi-address] # default cricketradar.local
Syncs the code and the built frontend, checks Python dependencies, installs
the systemd units, takes an online backup of the database and migrates it,
restarts the server, and verifies it answers. See
vault/learnings/Pi Deployment and Ops.md.
Live: phone scoring, shot simulation on either engine, radar recording and
live view, standalone boot with hotspot. Next: calibrate the overhead mount
from a real nets session (tools/replay_jsonl.py --fit-yaw), then wire the
detector to the engine. See vault/plans/2026-09 Review — Findings & Plan.md.
A Pi login password was committed in 2026-06 and redacted from the tree, but
it remains in this public repository's history. Rotate it on the device and
scrub the history (git filter-repo) before relying on it.