Buzz is a self-hosted fantasy baseball dashboard that aggregates MLB player trends, rankings, projections, and social fantasy signals like % rostered, adds/drops, and % started from top platforms. It presents a unified, sortable, and filterable view of how players are valued across fantasy leagues, combining social signals with real-life performance metrics and rest-of-season projections.
Rather than forecasting player talent, Buzz reveals how the fantasy community is reacting, surfacing surging pickups, fading names, and platform-specific roster shifts. By tracking this behavior in near real time, you can act on emerging trends before your league does. Whether you're a data-driven GM or just playing the wire, Buzz delivers fantasy market intelligence with no third-party logins, no subscriptions, and no fluff.
Table of Contents
- Multi-Source Coverage: Pulls fantasy player data from multiple popular league platforms for comprehensive tracking.
- Unified Player Dashboard: See every eligible MLB player in a sortable, filterable table with side-by-side comparisons across platforms.
- Fantasy Sentiment Tracking: Focuses on social signals like ownership trends and transaction volume to reveal shifts in player value before your league reacts.
- Fantasy Valuation Metrics: Covers projection-based, statistic-based, and opinion-based rankings for various timeframes including preseason, weekly, and rest-of-season to give a complete picture of a player's value.
- Manual Data Refresh: Trigger scrapes manually to pull the most up-to-date data directly from each platform with no stale caches or outdated snapshots.
- Fully Self-Hosted: Runs entirely on your own machine with no third-party accounts, logins, or subscriptions required.
- Responsive Design: Clean UI optimized for desktop and mobile use.
- One-Command Docker Launch: Spin up the full stack with Docker Compose with no complicated setup needed.
- Language and Runtime: Python, powered by Flask for the web app, Requests for HTTP, and BeautifulSoup for scraping, managed with Pipenv.
- Frontend and Templating: Jinja2 for dynamic HTML, styled with responsive CSS for mobile and desktop support.
- Database Layer: PostgreSQL, accessed and managed visually through NocoDB (open-source Airtable alternative).
- Infrastructure and Deployment: Containerized with Docker, orchestrated using Docker Compose for seamless local and server-side setup.
- Automation and CI/CD: GitHub Actions for testing, building, and publishing Docker images automatically.
Note
These steps configure NocoDB and generate the required environment values for Buzz. Complete this after launching the stack for the first time.
-
Access NocoDB
Go to http://localhost:8080 and register as a Super Admin (e.g.
example@anything.whatever/mysecretpassword) -
Import JSON Template
Import
assets/setup/nocodb-template.jsonas a new table.[!WARNING] Do not delete or rename columns, but feel free to reorder, resize, or hide them in your dashboard.
-
Get API Token
Go to Account Settings > Tokens to generate your personal token and copy it.
environment: - NOCODB_API_TOKEN=EA_Lcy903zCah6GWiwnWyr6clTF0Alj43KIXuXRG
-
Get Base ID and Table ID
Navigate to the database view to copy your Base ID and Table ID.
environment: - NOCODB_BASE_ID=p5qesumr1rzlee2 - NOCODB_TABLE_ID=m2ghe4zq9dgdzdf
-
Get Public URL and ID
Click the Share button (top-right corner of table view), enable public viewing, change optional settings, and copy the URL. The raw copy paste has 2 parts you need to parse manually.
environment: - NOCODB_URL=http://localhost:8080 - NOCODB_PUBLIC_ID=5b55dc5d-42b9-4aef-b89e-16f104d89b61
-
Apply Environment Variables
Add all the required environment values to your
compose.yamlfile and restart:docker compose stop docker compose up -d
-
Access Buzz
Success! Buzz is now connected to your NocoDB instance. Visit and bookmark http://localhost:5000/ to begin using Buzz.
Tip
Run via Docker Compose is recommended for most users.
-
Create
compose.yamlservices: buzz: image: ghcr.io/wazam/fantasy-baseball-buzz:latest container_name: buzz restart: unless-stopped environment: - NOCODB_API_TOKEN= # Required - see NocoDB Setup above - NOCODB_TABLE_ID= # Required - see NocoDB Setup above - NOCODB_PUBLIC_ID= # Required - see NocoDB Setup above ports: - 5000:5000 depends_on: - nocodb nocodb: image: nocodb/nocodb:latest container_name: nocodb restart: unless-stopped environment: - NC_DB=pg://postgres:5432?u=postgres&p=password&d=postgres - NC_DISABLE_TELE=true ports: - 8080:8080 depends_on: - postgres postgres: image: postgres:16-alpine container_name: postgres restart: unless-stopped environment: - POSTGRES_PASSWORD=password - POSTGRES_DB=postgres - POSTGRES_USER=postgres volumes: - ./data/postgres:/var/lib/postgresql/data
-
Launch the Docker stack
docker compose up -d
-
Proceed to NocoDB Setup to configure your instance
-
Clone the repository
git clone https://github.com/wazam/fantasy-baseball-buzz.git cd fantasy-baseball-buzz -
Build the Docker image and launch the app
docker build -t ghcr.io/wazam/fantasy-baseball-buzz:latest . docker compose up -d -
Proceed to NocoDB Setup to configure your instance
You can customize Buzz behavior using these optional environment variables:
| Variable | Description | Default / Options |
|---|---|---|
NOCODB_BASE_ID |
Private ID for the Base where the Table is. Used to personalize the menu's editor link directly to the user's Table for immediate dashboard editing. (already mentioned above) | (not set) (default), accepts any string |
NOCODB_URL |
Public-facing URL for the NocoDB backend. Used to embed the NocoDB dashboard table directly in the Buzz app. (already mentioned above) | http://localhost:8080 (default), accepts any string like http://192.168.0.10:8080 or https://nocodb.mysite.com |
PRIMARY_LEAGUE_SOURCE |
Sets the authoritative fantasy platform for player names, positions, etc. to align the UI with your league's conventions. | ESPN (default), Yahoo, CBS, Fantrax, or NFBC |
LEAGUE_LOGIN_EMAIL |
Email or username used to fetch rostered players from your private league. | (not set) (default), accepts any string |
LEAGUE_LOGIN_PASSWORD |
Password for the above login. | (not set) (default), accepts any string |
REQUEST_DELAY_SECONDS |
Delay (in seconds) between outbound requests to a platform. | 5.5 (default), accepts any float > 0 |
REQUESTS_PER_WINDOW |
Max number of requests allowed per rate limit window. | 1 (default), accepts any int >= 1 |
REQUEST_DELAY_MIN |
Minimum randomized delay (in seconds) before each request. | 0.5 (default), accepts any float > 0 |
REQUEST_DELAY_MAX |
Maximum randomized delay (in seconds) before each request. | 1.5 (default), accepts any float > 0 |
TZ |
Time zone used for logs and scraping schedules. | UTC (docker default), accepts any TZ identifier from list |
Tip
For remote access from another device, set NOCODB_URL or the app will only be reachable on localhost.
Do not put this on the Internet if you do not know what you are doing.
The buzz service does not include a health check by default, but you may add one.
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5000/index"]
interval: 10s
retries: 5
start_period: 30s
timeout: 3s| Variable | Description | Default / Options |
|---|---|---|
NC_DISABLE_TELE |
Disables the telemetry to prevent sending anonymous usage data. | (not set) (default), true |
NC_DB |
The primary database where all NocoDB metadata and data are stored. | (not set) (default), format: pg://host.docker.internal:5432?u=username&p=password&d=database_name. |
PORT |
Specifies the network port on which NocoDB will run. | 8080 (default) |
Caution
If you're trying to use SQLite instead of PostgreSQL, you must:
- Remove the
postgresservice fromcompose.yaml. - Remove the
NC_DBenvironment variable entirely. - Add a local volume mount for
./your/path/to/nocodb/data:/usr/app/data.
| Variable | Description | Default |
|---|---|---|
POSTGRES_DB |
Name of the default PostgreSQL database | postgres |
POSTGRES_USER |
Username for PostgreSQL authentication | postgres |
POSTGRES_PASSWORD |
Password for the specified user (already required above) | password |
Warning
If you change any of these defaults, be sure to update the NC_DB environment variable for the nocodb service in your compose.yaml accordingly.
The postgres service does not include a health check by default, but you may add one to ensure the container is ready before other services attempt to connect.
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 10s
timeout: 2s
retries: 10| Desktop (Light) | Mobile (Light) |
|---|---|
![]() ![]() ![]() |
![]() ![]() ![]() |
| Desktop (Dark) | Mobile (Dark) |
|---|---|
![]() ![]() |
![]() ![]() |
Report bugs or feature requests by opening an issue on the GitHub repository. See ROADMAP.md for planned and proposed features. See CONTRIBUTING.md for guidelines on submitting pull requests.
- ESPN Terms of Use
- Yahoo Terms of Service
- CBS Terms of Use
- Fantrax Terms of Service
- NFBC Terms of Service
This project is licensed under the MIT License.





















