BikeControl (SwiftControl)
Use Zwift Click, Zwift Play, Shimano Di2, or any Bluetooth controller with MyWhoosh, Rouvy, Zwift, and more. Free to try on iOS, Android, Windows, and macOS.
GridironIQ — advanced NFL analytics (React + FastAPI + PostgreSQL)
Translation pending
Sports & fitnessJavaScript · PythonGitHub @nategeorgyOnlineOwner 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.
Fantasy-first NFL analytics. Free advanced stats framed around fantasy value —
every metric answers a fantasy question, recomputed in your league's exact
scoring and lineup — in a clean, fast interface with light and dark themes.
Live: gridiron-livid.vercel.app ·
API gridiron-api-t6hz.onrender.com
See CLAUDE.md for the full product spec, schema, and scope,
ARCHITECTURE.md for where everything lives, and
docs/ROADMAP.md for the milestone plan.
Three fully decoupled apps (frontend talks to backend over HTTP only):Read the full README ↗Fantasy-first NFL analytics. Free advanced stats framed around fantasy value — every metric answers a fantasy question, recomputed in your league's exact scoring and lineup — in a clean, fast interface with light and dark themes.
Live: secondlevel.app · API gridiron-api-t6hz.onrender.com
See CLAUDE.md for the full product spec, schema, and scope,
ARCHITECTURE.md for where everything lives, and
docs/ROADMAP.md for the milestone plan.
Three fully decoupled apps (frontend talks to backend over HTTP only):
| Directory | Stack | Purpose |
|---|---|---|
frontend/ | React (Vite) + Tailwind + Recharts | Public stats UI |
backend/ | FastAPI + SQLAlchemy + Alembic | JSON API over PostgreSQL |
pipeline/ | Python + nflreadpy | Ingests nflverse data into PostgreSQL |
backend/ and pipeline/. Use 3.12 specifically:
psycopg2-binary has no wheels for 3.13+ and building it from source needs
pg_config on your PATH. The backend runs from backend/.venv/ — the one
.claude/launch.json starts, and the only one with M5's PyJWT installed;
pipeline/ uses the older shared .venv/ at the repo root.Everything below is already installed and the database already holds the 2020–2025 dataset, so day-to-day you only need to start the three services. Open three terminals:
Make sure Docker Desktop is running, then:
cd gridiron
docker compose up -d # starts Postgres 16; no-op if already running
Credentials (local dev): user gridiron / password gridiron / db gridiron
on localhost:5432.
cd gridiron/backend && .venv/bin/uvicorn app.main:app --reload --port 8000
--reload auto-restarts on code edits. Docs at http://localhost:8000/docs.
cd gridiron/frontend
npm run dev # http://localhost:5173
curl localhost:8000/api/v1/health # {"status":"ok","database":"connected"}
Then open http://localhost:5173. Edit code → both servers hot-reload → refresh.
Signed-in features not working? curl localhost:8000/api/v1/health/auth reports whether
token verification is wired correctly — a misconfigured SUPABASE_URL and a genuinely
bad token both look like the same 401 without it.
cd gridiron/backend && .venv/bin/python -m pytest
Needs only the database from step 1 — no Supabase project, no network, no .env. The
suite creates its own gridiron_test, migrates it, and drops it at the end, so it never
touches your development data.
Coverage starts at the auth boundary (M5): token verification, JIT user provisioning,
cross-user isolation on every account endpoint, and the row-level-security lockdown that
keeps the account tables off Supabase's PostgREST API. See
backend/tests/README.md.
The same command runs on every pull request via GitHub Actions
(.github/workflows/backend-tests.yml).
Only needed on a fresh machine (the steps above are enough day-to-day):
# Env files
cp .env.example backend/.env
cp .env.example frontend/.env
# One virtualenv at the repo root, shared by backend/ and pipeline/
python3.12 -m venv .venv
.venv/bin/pip install -r backend/requirements.txt -r pipeline/requirements.txt
# Database schema
cd backend && ../.venv/bin/alembic upgrade head
# Data ingestion (see pipeline/README.md for details)
# Run in this order — each step depends on the rows the previous one wrote.
cd ../pipeline
../.venv/bin/python ingest_teams.py
../.venv/bin/python ingest_players.py
../.venv/bin/python ingest_schedules.py --seasons 2020 2021 2022 2023 2024 2025
../.venv/bin/python ingest_stats.py --seasons 2020 2021 2022 2023 2024 2025
../.venv/bin/python ingest_expected.py --seasons 2020 2021 2022 2023 2024 2025
../.venv/bin/python ingest_usage.py --seasons 2020 2021 2022 2023 2024 2025
../.venv/bin/python ingest_target_depth.py --seasons 2020 2021 2022 2023 2024 2025
# Frontend deps
cd ../frontend && npm install
Don't skip the last three.
ingest_expected.py(expected components + market share),ingest_usage.py(snaps + routes), andingest_target_depth.py(targets by pass depth) fill the columns and table that the Expected Points board, every Insight score, and the player-page depth chart depend on. Skip them and those pages render empty rather than erroring — a confusing failure to debug.
Your data persists. Postgres data lives in the
gridiron_pgdataDocker volume, so it survives reboots anddocker compose down. The only command that wipes it isdocker compose down -v(with-v) — avoid that flag and you never need to re-run the pipeline.
Deployed and live — frontend on Vercel, API on Render, database on Supabase.
Both auto-deploy on push to main.
Shipped so far:
| Phase 1 | Data pipeline (2020–2025), FastAPI API, player + team leaderboards, player profiles, search, the Liquid Glass theme, and the Command Center home |
| M1 | Scoring-aware fantasy engine — every fantasy number recomputes to your exact league scoring, from a single metric registry |
| M2 | Expected fantasy points (scoring-aware), market share, goal-line carries, snap + route usage |
| M3 | Fantasy intelligence — VORP, Fantasy Opportunity Rating, Buy-Low and Sell-High indices, plus league context (size + starting lineup) |
| M4 | Exploration & viz — a curated scatter builder (19 charts across six position groups, players drawn as headshots), a comparison builder (up to 5 players, showing who leads each stat and by how much), usage and target-depth charts on player pages, and CSV export everywhere |
| M5 | Accounts & saved state — sign in with an email and password, or just have a link emailed to you, to keep multiple named league profiles, a watchlist of players (star them, filter any board to them, see them on the home page), and saved views of any board or chart. Nothing is behind a login: every page and share link works signed out exactly as before |
Next up: M6 — New Data Domains (depth charts, strength of schedule, a Vegas
board, and consensus projections). See docs/ROADMAP.md for
the full plan and CLAUDE.md for detailed status.