RunCheck
Never show up to an empty gym again. RunCheck lets you see who's playing, where the run is, and when it tips off, before you leave the house.
翻译准备中
尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Production-style NBA analytics platform with a modern web app, data pipelines, and cloud automation. The project combines:
This repository is intended to demonstrate end-to-end product engineering, including:
If you only have a few minutes, review:
app/ and lib/ for application and API designlambda/ for ingestion architecture and reliability patternsinfra/ for Terraform-managed cloud resourcesdocs/ for deployment, incident handling, and design tradeoffsSports betting tools often rely on surface-level statistics or manual analysis. This project was built to:
The goal is to remove emotion from decision-making and replace it with measurable, repeatable analysis.
At a high level:
raw.* and analytics.*).| Source | Runtime | Destination (typical) |
|---|---|---|
| BallDontLie games/stats | lambda/nightly-bdl-updater | raw.* -> analytics.* |
| BallDontLie odds | lambda/odds-pre-game-snapshot | analytics.game_odds_* |
| BallDontLie injuries | lambda/injuries-snapshot | analytics.player_injury_status_* |
| BallDontLie player props | lambda/player-props-snapshot | analytics.player_props_current and related tables |
| Basketball Reference (optional) | lambda/boxscore-scraper / scripts/ | bbref_* tables |
| Path | Why it exists |
|---|---|
app/ | App Router pages plus API route handlers |
components/ | Reusable UI and betting-focused presentation components |
lib/ | Data access, Supabase clients, shared server utilities |
lambda/ | Independent Lambda packages for ingestion and processing |
infra/ | Terraform for Lambdas, IAM, scheduling, and deployment resources |
scripts/ | Operational scripts for seeding, maintenance, and diagnostics |
db/schemas/ | Schema references, migration notes, consolidation docs |
docs/ | Runbooks, troubleshooting, design notes, and checklists |
Note: Lambda packages are intentionally excluded from the root TypeScript project to keep web app builds fast. Build and test each Lambda package within its own folder when changing ingestion code.
24.x (package.json engines). Lambda runtimes are per function in infra/*.tf, not this pin.npm install
cp .env.example .env.local
npm run dev
Then open http://localhost:3000.
Agents reuse port 3000 only when docs/dev-server.md positively identifies the listener as this worktree. Start with npm run dev -- --port 3000 only if that port is free. Bare npm run dev lets Next.js move off 3000 when the port is taken.
npm run build
npm start
.env.example and copy values into .env.localdocs/deployment-checklist.md.env, .env.local, or live credentialsUse these flags to keep schedulers alive while skipping live mutation/provider work:
DATA_MODE=live_api|replay|manual_csv (default: live_api)OFFSEASON_MODE=0|1CRON_DRY_RUN=0|1Recommended offseason settings:
DATA_MODE=replayOFFSEASON_MODE=1CRON_DRY_RUN=1Reactivation next season:
DATA_MODE=live_apiOFFSEASON_MODE=0CRON_DRY_RUN=0BALLDONTLIE_API_KEY)| Command | Purpose |
|---|---|
npm run dev | Start local Next.js dev server |
npm run build | Build production bundle |
npm start | Run built production server |
npm run lint | Run ESLint |
npm test | Run Vitest suite |
npm run lambdas | Invoke Lambda flows locally |
npm run lambdas:aws | Invoke Lambda flows against AWS |
npm run prune:player-props-v2 | Dry-run cleanup for old prop snapshots |
npm run prune:player-props-v2:execute | Execute cleanup for old prop snapshots |
Currently private ("private": true in package.json). Add a formal license before open sourcing.