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.