Install Docker Desktop (Windows/Mac) or Docker Engine (Linux/WSL2):
# WSL2 / Ubuntu
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER # then log out and back in
docker --version # verifygit clone <your-repo> sharp-betting-system
cd sharp-betting-system
# Create your .env from the template
cp .env.example .env
# Edit .env and add your ODDS_API_KEY and TELEGRAM credentialsmake build
# or: docker compose buildmake up
# Starts: sharp_mongo (MongoDB 7) + sharp_scheduler (nightly cron)MongoDB data is persisted in a named Docker volume (mongo_data) — it survives container restarts.
make status
# Prints record counts for all collections (all zeros on first run)
docker compose ps
# All services should show "healthy" or "running"# One season first (fast, ~5 min) — good smoke test
make season S=2023-24
# Full history 2015–present (~1.5–2 hours)
make historical| Command | What it does |
|---|---|
make up |
Start MongoDB + scheduler |
make down |
Stop all services |
make logs |
Tail live logs |
make status |
DB record counts |
make nightly |
Manual nightly refresh |
make season S=2023-24 |
Seed one season |
make shell |
Shell inside app container |
make mongo-shell |
mongosh on the DB |
make dashboard |
Start Streamlit at :8501 |
make clean |
Wipe all containers + data |
Point Compass at: mongodb://localhost:27017 Database: sharp_betting Collections: team_stats, team_advanced, player_advanced, game_summaries
sharp-betting-system/
├── Dockerfile
├── docker-compose.yml
├── .env.example
├── .dockerignore
├── .gitignore
├── Makefile
├── config.py
├── requirements.txt
├── run_pipeline.py
├── data/
│ └── nba_pipeline/
│ ├── collector.py
│ ├── cleaner.py
│ └── storage.py
└── SETUP.md
- data/nba_pipeline/scheduler.py — APScheduler nightly refresh
- data/odds_pipeline/ — The Odds API fetcher + Pinnacle CLV benchmark
- data/database/seeds/ — MongoDB seed scripts for bootstrap