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.
College football power rankings, game predictions and betting lines from the TSI model.
Sports & fitnessPython · TypeScriptGitHub @GageSwannOnlineOwner 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
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗A college football rating model and prediction engine with a read-only website.
Live site: https://the-swann-index.vercel.app
TSI rates every FBS team from opponent-adjusted efficiency data and turns those ratings into a full sportsbook-style board for every game: projected scores, spreads, totals, moneylines, win probabilities and edges against the betting market. Every prediction is timestamped before kickoff, never edited, and graded afterwards, so the track record is public.
Every number is out of sample: each game was predicted using only what was known before kickoff (walk-forward, refit daily like the live model).
| Validation 2023–25 (2,398 FBS games) | TSI | Vegas closing line | Elo baseline |
|---|---|---|---|
| Average miss on the final margin | 12.40 pts | 12.00 pts | 13.15 pts |
| Winners picked | 71.7% | 72.6% | n/a |
The closing line is the bar to clear, and TSI sits within half a point of it. Its spread disagreements with the close don't predict covers, but they do predict which way the line moves, and its totals beat the opening line: the TSI Book's backtest at the median opener went 104-75-2 (+10.8% ROI) over 2023–25, with positive closing-line value every season. The details are in the model doc and the Book doc.
| Game center: projected score, win probability, TSI's fair line and Book prices next to Vegas, alt-line ladder and score distribution. | Team pages: Power and Résumé ranks, offense/defense profile, rating trend, schedule with win odds and a Résumé breakdown. |
| This week: every game with TSI's numbers beside the market, filterable by Top 25, conference and TSI plays. | Matchup: price any two FBS teams as if they played today, home or neutral site. |
| TSI Book: paper picks published before kickoff and graded afterwards: record, units, ROI and closing-line value. | Model: the report card. Backtest error by season against Vegas and Elo, calibration and methodology. |
flowchart LR
CFBD[(CollegeFootballData API)]
subgraph Nightly["GitHub Actions, nightly 10:00 UTC"]
RUN["tsi run<br/>ingest → rate → grade → publish"]
end
DB[(Neon Postgres<br/>production branch)]
API["FastAPI read-only API<br/>Render, Docker"]
WEB["Next.js site<br/>Vercel, cached pages"]
VIEW([Viewers])
CFBD -- "cached; ~4 calls/day" --> RUN
RUN -- "ratings, immutable prediction snapshots, picks, grades" --> DB
DB --> API
API -- "JSON, ETag + cache headers" --> WEB
WEB --> VIEW
RUN -. "POST /api/revalidate (bearer token)" .-> WEB
More detail: docs/02-architecture.md (repo layout, schema, data flow, API contract). The API spec is docs/api/openapi.json.
| Layer | Tech |
|---|---|
| Model and data pipeline | Python 3.12 (uv), NumPy, Typer CLI (tsi) |
| API | FastAPI, served from Docker on Render |
| Database | PostgreSQL on Neon, SQLAlchemy 2 + Alembic |
| Website | Next.js 16 (App Router, Cache Components), React, TypeScript, Tailwind CSS 4, Recharts, TanStack Table |
| Automation | GitHub Actions: CI on every push (gates API deploys) and the nightly tsi run |
| Hosting | Vercel (site), Render (API), Neon (database) |
| Data | CollegeFootballData.com API |
You need Python 3.12 with uv, Node 24, a Postgres database and a free CFBD API key. Secrets live only in gitignored env files: copy backend/.env.example to backend/.env and web/.env.example to web/.env.local, then fill them in.
# Backend (from backend/)
uv sync
uv run alembic upgrade head
uv run tsi ingest season --season 2014 --through 2026 # first load (~9 API calls per season)
uv run tsi run # ingest -> rate -> grade -> publish
uv run tsi serve # API at http://127.0.0.1:8000 (docs at /docs)
uv run pytest -m "not db" # offline tests
# Website (from web/, with the API running)
npm install
npm run dev # http://localhost:3000
npm run check # API types, typecheck, lint, formatting
docs/08-setup-windows.md walks through the full setup. CLAUDE.md lists every command.
| Doc | Contents |
|---|---|
| 01 – Vision | What TSI is, goals, non-goals, success criteria |
| 02 – Architecture | System design, repo layout, data flow, API, hosting |
| 03 – Data Sources | CFBD endpoints, ingestion and caching rules |
| 04 – Model | Rating methodology, priors, backtesting |
| 05 – Prediction Engine & Book | Score distributions, odds, market edges, picks ledger |
| 06 – Frontend | Pages, components, visuals, design direction |
| 07 – Roadmap | Phased build plan with checklists |
| 08 – Windows Setup | Environment setup |
| 09 – Conventions | Workflow, modularity, secrets, skills |
| Decisions | Decision log |
TSI is a statistical model built for analysis and entertainment. It does not take or place wagers.