Marino Stats
End-to-end system for Northeastern recreation facilities: a Cloudflare cron worker ingests live GoBoard occupancy into Turso while a separate Next.js app reads the same database to power heatmaps, date exploration, and per-zone utilization charts—so students can spot quieter times at Marino and related gyms.
Highlights
- Ingestion: scheduled Cloudflare Worker every 10 minutes fetches GoBoard, validates rows, enforces retention, upserts location dimensions, and skips redundant count inserts when occupancy is flat—keeping libSQL storage lean.
- Data model: shared Turso schema (locations + location_counts with capacity) bridges the worker writes and the dashboard’s utilization math.
- Visualization: Next.js App Router + force-dynamic reads, client heatmap (7 days × 20h window with facility/zone filters), date pills + picker, and Recharts areas with circular progress vs. capacity alongside OKLCH Tailwind 4 + shadcn UI.
- Split deployables: worker holds write credentials; dashboard + read API deploy without them—code lives across marino-stats (ingestion) and marino-stats-web (UI). Primary link points at the ingestion repo; the dashboard pairs with it.
Stack
Cloudflare Workers
Next.js
TypeScript
- Tailwind CSS
- Turso (libSQL)
- Recharts