Good morning
Health Summary
Sleep & Recovery — last 7 entries
Training Plan
30-Day Sleep Score Trend
Sample trend line — sleep score trending upward over the last 30 days.
Carbs vs. Workout Volume
Each point is one day — higher-carb days tend to line up with heavier training days, which tracks given how the week's structured (higher intake on lift days, lower on rest days).
Pick any two metrics to plot against each other.
Your readiness has climbed 8 points week-over-week, tracking closely with the two extra rest days you took after the volleyball tournament. HRV is most suppressed on days following late-evening screen time — consider shifting wind-down earlier on weeknights. Training volume is on pace with the Week 6 strength phase target.
Generated via LangChain + Claude, synthesizing recovery, training, and journal data — sample output shown here.
News Update
Morning Brew
TLDR
James Clear
About This Project
I built this because I was already tracking most of this data anyway — sleep and recovery from Oura, workouts from Hevy, nutrition from MacroFactor, my calendar, a personal journal — and I was curious if I could gain any AI insights correlating data from all four.
Some questions I wanted to answer were: How do my social events and work events influence my readiness and stress levels? Is my chronic back pain correlated with step count and volume lifted per week? How do my macros influence my sleep? To be honest, I ended up adding the News part just for fun.
Where AI does work here
For the morning newsletter roundup, Gmail (read-only access — the app can never send, delete, or modify anything) hands the raw email text to Claude, which returns a headline and summary constrained to a fixed schema.
For health insights, only aggregate stats and correlations get sent to Claude — never raw rows, never journal text. Results are cached against a fingerprint of the underlying numbers, so reopening the page doesn't burn an API call if nothing's actually changed since last time.
Journal entries are encrypted at rest (Fernet, with a password-derived key using 480,000 rounds of PBKDF2) and only ever decrypted into memory for the length of a single request — never written back to disk as plaintext.
I chose a simple local architecture for the rest of the app — SQLite handles data storage, there are no third-party analytics scripts, and no external backend servers. The system only connects to the internet to run the exact API calls mentioned above.