The world's first AI-only fantasy football league. Ten teams, ten AI models, no human decisions.
Visit the live site at tokenbowl.ai
To add the input and output tokens for your model for the week:
-
Create a markdown file in
public/matchups/with the naming convention:week_X_ModelName.mdX= week number (1-18)ModelName= AI model name (e.g., Claude, GPT, DeepSeek, Mistral, etc.)- Examples:
week_5_Claude.md,week_3_Qwen.md
-
The markdown file should contain the system prompt, user prompt and output tokens for decisions for that for that week.
-
The content will automatically appear in the matchup detail pages when users navigate to that week's matchups.
Quick Example:
# Create matchup analysis for Week 6, Claude team
cat > public/matchups/week_6_Claude.md <<EOF
# Week 6 Matchup Analysis
## Pre-Game Strategy
[Your AI-generated content here]
## Key Players
[Analysis of key players]
## Prediction
[Matchup prediction]
EOFToken Bowl is an experimental fantasy football league where AI models compete against each other by making all roster decisions. Each team is managed by a different state-of-the-art AI model:
- Claude (Anthropic)
- GPT (OpenAI)
- DeepSeek
- Mistral
- Qwen (Alibaba)
- Gemini (Google)
- Gemma (Google)
- Grok (xAI)
- Kimi K2 (Moonshot AI)
- GPT-OSS (Open Source)
- Real-time League Data: Live standings, scores, and matchups via Sleeper API
- Interactive Visualizations: ECharts-powered standings history and points comparison
- Team Deep Dives: Detailed pages for each AI team with rosters, stats, and model information
- Transaction History: Track all roster moves with player rankings and trade analysis
- Draft Board: Complete draft history showing each team's strategy
- Responsive Design: Optimized for both desktop and mobile viewing
- Analytics Tracking: PostHog and Google Analytics integration
- Video Content: Embedded YouTube videos and shorts
- Frontend Framework: Vue 3 (Composition API)
- Build Tool: Vite
- Styling: Tailwind CSS 4
- Animations: @vueuse/motion
- Charts: ECharts
- Templating: Pug
- Markdown Rendering: Marked.js
- Data Source: Sleeper Fantasy Football API
- Deployment: GitHub Pages
- Analytics: PostHog + Google Analytics
- Node.js 18+
- npm or yarn
-
Clone the repository:
git clone https://github.com/RobSpectre/tokenbowl.ai.git cd tokenbowl.ai -
Install dependencies:
npm install
-
Start the development server:
npm run dev
-
Open your browser to
http://localhost:5173
The project includes comprehensive test coverage to prevent regressions:
# Run tests once
npm run test:run
# Run tests in watch mode
npm test
# Run tests with UI
npm run test:ui
# Run tests with coverage report
npm run test:coverage- 39 tests covering critical functionality
- ~32% code coverage (growing as tests are added)
- League Store Tests: Player data management and caching
- Integration Tests: Component rendering with real data
- Safety Tests: Prevents "Player ID" exposure bugs
- Race Condition Tests: Ensures concurrent data loading works
Coverage reports are automatically generated and uploaded to Codecov.
See TESTING.md for detailed documentation.
All tests run automatically via GitHub Actions:
- β
On every push to
mainordevelop - β On every pull request
- β Before deployment to production
Deployment is blocked if any test fails.
npm run build
npm run previewThe site automatically deploys to GitHub Pages via GitHub Actions on every push to main. The workflow:
- Tests - Runs all 39 tests (must pass)
- Build - Builds the Vue app with Vite
- Deploy - Deploys to
gh-pagesbranch - Serve - Serves at the custom domain
tokenbowl.ai
tokenbowl.ai/
βββ public/
β βββ images/ # Logos and assets
β βββ matchups/ # Weekly matchup analysis markdown files
βββ src/
β βββ pages/ # Vue page components
β β βββ Home.vue # Dashboard with matchups and standings
β β βββ Teams.vue # Team detail pages
β β βββ Draft.vue # Draft board
β β βββ Scoring.vue # League scoring settings
β β βββ Videos.vue # Video content
β β βββ MatchupDetail.vue # Individual matchup analysis
β βββ analytics.js # Analytics tracking utility
β βββ sleeperApi.js # Sleeper API integration
β βββ teamMappings.js # AI model team configurations
β βββ youtubeApi.js # YouTube data fetching
β βββ router.js # Vue Router configuration
β βββ App.vue # Main app component
β βββ main.js # App entry point
β βββ style.css # Global styles
βββ index.html # HTML entry point with analytics
βββ vite.config.js # Vite configuration
βββ tailwind.config.js # Tailwind configuration
βββ package.json # Dependencies and scripts
The app fetches real-time fantasy football data from the Sleeper API:
- League ID:
1266471057523490816 - Endpoints used:
/league/{league_id}- League settings and metadata/league/{league_id}/rosters- Current rosters/league/{league_id}/users- User information/league/{league_id}/matchups/{week}- Weekly matchups/league/{league_id}/transactions/{week}- Roster transactions/players/nfl- NFL player database
Model information (context length, pricing, speed) is fetched from OpenRouter's API.
The site tracks user interactions with:
- PostHog:
phc_uFQ4wvjZlfVPyRG1CTs4zc0XMrOZOTEWgoxhkKNHOtJ - Google Analytics:
G-8DEJ5TD7KG
Tracked events include:
- Page views
- Navigation clicks
- Week changes
- Matchup views
- Team selections
Maps Sleeper usernames to AI models with:
- Model names and display names
- Logo assets
- Color schemes
- Owner information
Unified event tracking that sends to both PostHog and Google Analytics:
import { trackButtonClick, trackPageView } from './analytics.js'
trackButtonClick('team_select', { team_name: 'Claude' })The custom domain tokenbowl.ai is configured via:
public/CNAMEfile- GitHub Pages settings
- DNS CNAME record pointing to
robspectre.github.io
For GitHub Pages deployment, the base path is configured in vite.config.js:
base: '/'This is an experimental project, but contributions are welcome! Feel free to:
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
This project is open source and available under the MIT License.
Created by Rob Spectre
Hacked together by the best of the few that do what we do.
π€ Generated with Claude Code