Brooks Groves
Featured Project View on GitHub →

Python · Matplotlib · OpenWeatherMap · GitHub Actions · Twitter · Bluesky

🌪️ weather-report-bot

"It's already on the ground. It's not gonna stop."

A fully automated broadcast-quality weather intelligence system. Twice daily it wakes up, pulls live atmospheric data across four wildly different locations, renders cinematic station cards, and fires them to Twitter and BlueSky — no human required.

Each station card is a 1200×675 broadcast-style graphic with three panels: current conditions with color-coded temperature and hand-drawn weather icons, an instruments panel with arc gauges for humidity and UV index plus a wind compass, and a sky & atmosphere panel with precipitation chance, cloud cover, sunrise/sunset, and pressure. Every pixel hand-drawn in Matplotlib — no emoji fonts, no templates.

The four stations span completely different climate regimes: Pacific Northwest maritime, Sierra Nevada foothills, Mojave Desert extreme, and Great Basin high desert. Same report time. Four completely different air masses.

Python Matplotlib OpenWeatherMap GitHub Actions Tweepy Bluesky AT Protocol pixi
View Live Cards → GitHub →
Stations monitored
4
Lakewood · Groveland · Death Valley · Reno
Posts per day
2
7am PT · 6pm PT · Twitter + Bluesky
Card resolution
1200×675
16:9 · 150 DPI · broadcast standard
Rendering engine
Matplotlib
pure geometry · every pixel hand-drawn
Infrastructure cost
$0
GitHub Actions free tier · ~4 min/run
The Four Stations
🏠
Home Base
Lakewood, WA
Pacific Northwest maritime climate. Cool, wet, green. The baseline everything else gets measured against.
🏔️
Sierra Foothills
Groveland, CA
Gateway to Yosemite. 2,800 feet. Four seasons in one week. Hometown gauge.
🔥
Extreme Conditions
Death Valley, CA
Hottest place on Earth. No mercy. The card that always reads differently from the others.
🎰
Biggest Little City
Reno, NV
High desert. Wind. Dry. The contrast station — shows what happens when you get over the Sierra crest.
Broadcast Schedule
7:00 AM PT Morning report · current conditions + full-day forecast · posted to Twitter + Bluesky Daily ✓
6:00 PM PT Evening report · end-of-day conditions + overnight outlook Daily ✓
On demand Trigger manually from GitHub Actions tab anytime workflow_dispatch
How It Works

The Pipeline

GitHub Actions wakes up twice daily, runs the Python orchestrator, and pulls live atmospheric data from OpenWeatherMap One Call 3.0 for all four stations simultaneously — current conditions, forecast, UV index, humidity, wind, pressure, dew point, cloud cover.

The Matplotlib renderer then builds each card from scratch: temperature colored by heat level, weather icons drawn as pure geometry (no emoji fonts, no image assets), arc gauges for humidity and UV, a wind compass with directional arrow, precipitation bars, and a broadcast-style ticker across the bottom.

Cards are posted to Twitter/X via Tweepy and Bluesky via AT Protocol with live data captions and location hashtags. Total runtime: about 4 minutes on GitHub's free tier.

Why These Four

Lakewood is home — the Pacific maritime baseline. When it's 52°F and drizzling in Lakewood, that's just Tuesday.

Groveland is where I grew up, at 2,800 feet on the western slope of the Sierra. It swings between fog and fire season. The hometown gauge.

Death Valley is the extreme outlier — the card that always reads 105°F when everywhere else is mild. It's there to remind you what weather actually means at its limit.

Reno sits just over the Sierra crest in a completely different climate regime — high desert, intense sun, wind. The contrast between Reno and Groveland in a single storm is one of the most dramatic demonstrations of orographic lift you'll find.

Also in Meteorology All on GitHub →

Python · Open-Meteo · NWS · GitHub Actions · 15-min updates

🌡️ Weather Station

High-end real-time weather dashboard monitoring four stations across the American West — Lakewood WA, Groveland CA, Reno NV, Death Valley CA. Wind compass with SVG dial, barometric pressure trend arrows, NWS alerts, moon phase, 24-hour trend charts, air quality, 48-hour hourly forecasts. Updates every 15 minutes via GitHub Actions. Zero cost, zero dependencies, looks like a NOAA operations center.

Live Dashboard → Read the Build Post → GitHub →
More Meteorology All on GitHub →

FORTRAN · SNOTEL · GitHub Actions · Pacific Northwest

🌨 CASCADIA-WX

FORTRAN atmospheric analysis for Pacific Northwest mountain weather. Lapse rates, snow levels, precipitation phase, atmospheric river index, storm classification. 11 NRCS SNOTEL stations across Rainier, Olympics, and the Cascades — daily GitHub Actions pipeline, amber phosphor dashboard.

Cascades: 15% of normal · Olympics: 33% · Rainier: 53% · Apr 2, 2026

View Dashboard → GitHub →