A self-hosted, multi-user dashboard for everything you track — a wearable-agnostic daily score, workout intelligence, nutrition, goals, finances — with an AI mentor that builds new tiles when the one you need doesn't exist.
One prompt does it all — paste into Claude Code, Codex, or Cursor. Prefer doing it by hand? Ten-minute quickstart.
Each module ships multi-user from the ground up — Supabase row-level security on every table, API keys server-side only, tiers gated on the server.
A daily 0–100 score from WHOOP, Oura, Fitbit, or manual entry. Recovery, sleep, and strain in one calm number.
A logger that understands progressive overload — split planning, rep zones, deload detection, session resume.
Macros, USDA food search, barcode lookups, water — and an AI food-photo analyzer that fills the log for you.
Natural-language goals with drift detection, and a companion that notices patterns across all your data.
Your schedule aligned with your recovery — plan the day around the body you woke up with.
Net worth, subscriptions, live stock and crypto quotes, receipt and statement import.
Channel stats, comment triage, and posting-time analysis for people who publish.
Single-file HTML tiles, human- or AI-authored, with a curated gallery and public maker profiles.

Vitality ships a hosted MCP server with OAuth. Connect claude.ai, Claude Desktop, or Claude Code to your own deployment and ask about your data — or have Claude build and publish a brand-new tile onto your dashboard, live.
git clone the repo, then pnpm install. Node 20+, that's it.
Create a free Supabase project and apply the schema with supabase db push — 77 migrations, RLS included.
Copy .env.example to .env.local, fill in the Supabase keys, and pnpm dev. Every other integration is optional.
The repo ships SETUP-PROMPT.md — paste it into Claude Code, Codex, or any coding agent with a terminal. It checks your machine, provisions Supabase, applies all 77 migrations, writes .env.local, boots the app, and deploys to Vercel — asking you only for the keys it genuinely can't create itself.