CH Charles Hayes
Menu
← back to all projects

WHOOP Personal Analytics Dashboard

Self-hosted WHOOP data dashboard with OAuth integration, hourly auto-sync via cron, and ~365-day backfill on first sign-in.

Next.js 15 TypeScript Drizzle ORM libSQL/Turso Auth.js Vercel Cron
Live →

Problem

The WHOOP app surfaces day-level views well but is weak for long-horizon questions: Is my recovery trending up over the last 90 days? What does my sleep look like across travel weeks vs home weeks? I wanted a private dashboard I could shape to my own questions.

Approach

A Next.js 15 app that authenticates via WHOOP OAuth, backfills ~365 days of data on first sign-in, then keeps itself current via an hourly Vercel Cron job. Data is stored in Turso (libSQL) with Drizzle ORM for schema and migrations. Single-user from the start — no multi-tenancy, no admin pages, no anonymized sharing.

Architecture

Outcomes / What I learned