Started a lift log
Lifts area launched under the Body wing. Same rule as the Mat — only sessions that actually happened, no programmed-but-skipped, no future plans.
Lifts joined the Body wing alongside the Mat. The discipline is the same: a page exists because the session was real. No "planned this week" entries, no programmed-but-skipped placeholders, no future-tense anything. Each session is its own MDX file under content/docs/body/lifts/ named by date — the body walks through every lift in order with set-rep-weight and a few sentences on phenomenology (what felt easy, what cheated, what left gains on the table).
Underneath, this also shipped the first Tier 1b event stream — content/data/lifts/2026.jsonl — backed by three foundational pieces every future JSONL category will use: a Zod schema (src/lib/schemas/lift.ts) for the session_logged and lift_logged events, a canonical-path registry (src/lib/data-registry.ts) so MDX never hardcodes data paths, and a ULID-stamping event writer (src/lib/write-event.ts) that validates on every append. Two sessions are live so far. The narrative MDX is the human-readable record; the JSONL is the queryable shadow that lets analysis scripts and MCP tools answer questions like what did I bench last month without parsing prose.
Rebuilt the education page as a docs-native sourced reference
Rewrote /docs/about/education from a flat course list into a sourced reference. Every course expands to the official SBU Undergraduate Bulletin entry. 38 courses, 14 departments, grades color-coded without shame.
Graceful fallback on /api/chat when the Gateway is down
When the AI Gateway is down or the request is malformed, /api/chat now returns a 503 JSON envelope pointing agents to /llms-full.txt, /api/mcp, and /.well-known/mcp.json instead of a bare 500.