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