Life Dashboard
One place for everything you did this year
Next.js · Convex · Clerk · Claude · Recharts

The problem
The record of a year is scattered across services that don't talk to each other. Your ring knows how you slept, one app knows what you read, another what you watched, and none of them can answer a question that spans more than one of them. The data exists; the connections don't.
Why it exists
I wanted to ask questions across the whole picture — whether the weeks I slept badly were the weeks I stopped reading, what a year actually contained once it was over. That requires one store rather than five, and something that can read the whole store at once and tell you what it sees.
How I solved it
Scheduled Convex functions sync from Oura, Hardcover, TMDB and RAWG on a six-hour cycle into a single schema, so every source lands in the same shape and can be queried together. The timeline reads week, month, calendar, weekly review and year-in-review off that one store. Claude sits on top through an agentic tool loop — sixteen tools that both read the data and write to it, so the assistant can log a habit or add a film rather than only describing what's there. The same loop is exposed over a Discord bot and as a weekly email digest, because the useful moment is rarely when you have the dashboard open.