What this is
A single HTML file, rebuilt every morning, that summarizes your world. Not a dashboard you have to check — a briefing that comes to you. It reads your calendar, your email, your messages, your goals, and tells you what changed overnight, what's urgent today, and what you accomplished yesterday.
This is The Shape of a Day turned into an executable guide. The briefing is a file, not an app. It lives in a folder. An agent generates it. You read it with your coffee. If a section is useless, you tell the agent. The briefing improves itself.
The most important design decision: wins first. The briefing opens with what you accomplished yesterday, not what's overdue. Momentum, not anxiety. Urgency comes second, clearly marked, impossible to miss — but not the first thing you see.
What goes in it
1. Wins
What you accomplished yesterday. Pulled from git commits, sent messages, completed tasks, calendar events that happened. The agent reads your activity and distills it. "Shipped the flywheel guide. Had the pod logistics call. Hit the gym." Three to five wins. Start the day knowing you made progress.
2. Action required
What needs attention today. Deadlines, expiring items, unanswered threads that are aging. Color-coded: red for urgent (today or overdue), amber for soon (this week), teal for tracking (no deadline, just open). Each item has context — not just "follow up with Alex" but why and what's at stake.
3. Calendar
Today's events plus the next few days. Pulled from Google Calendar API or .ics export. Time, title, location, and any prep notes. The agent flags conflicts and unusually busy days. If you have nothing scheduled, it says so — that's information too.
4. Email highlights
Not your whole inbox — the emails that matter. The agent reads subject lines and senders, flags anything from known contacts, anything with urgency signals, anything that's a reply to something you sent. Two to five highlights, each with a one-line summary. The rest can wait.
5. Messages
Recent text conversations, rendered as chat bubbles with timestamps. The agent summarizes each thread: who said what, what's pending, what needs a reply. This is where you see the human texture of your day — not just tasks, but relationships.
6. Goals snapshot
Your active goals with status badges. Pulled from a goals file you maintain (a markdown file, a few lines each). The agent checks each goal against recent activity and updates the status: on track, stalled, urgent, waiting, done. Goals that haven't moved in a week get flagged.
7. Reminders
Bills, renewals, appointments coming up, things you told the agent to remind you about. A simple list at the bottom. Deadlines within 7 days are highlighted.
Data sources
You don't need all of these. Start with calendar and a goals file. Add sources as they become useful. Each source has a collection method — some are API calls, some are file reads, some are exports you run manually.
git log --since=yesterday across your repos. What you shipped. Free data.
low effort
~/Library/Messages/chat.db), WhatsApp export, Signal. Requires a watcher script or manual export.
medium effort
The output
The briefing is a self-contained HTML file. Inline CSS, no dependencies, opens in any browser. The agent regenerates it each morning. Previous briefings are archived by date so you can look back.
2026-03-10.html, 2026-03-09.html, etc.
Design principles
- Wins first. Momentum before anxiety. You start the day knowing you're making progress.
- Urgency is visual. Red, amber, teal. You don't have to read every word to know what's on fire.
- Interpretation, not just data. The agent doesn't dump raw calendar events — it tells you why they matter. "You have three meetings today — that's unusually heavy."
- Conversations as chat bubbles. Text messages render as actual conversations, not summaries. The human texture matters.
- The briefing improves itself. If you never read a section, the agent notices (via the flywheel). Sections that don't earn attention get dropped. Sections you ask about get added.
- Sensitivity-aware. Personal, medical, financial content is tagged. The briefing you generate for yourself can include everything. A version you share can filter.
- A file, not an app. No server, no login, no subscription. It's HTML in a folder. Open it in a browser. That's it.
The handoff
Build a daily briefing for the user, one section at a time. Start simple and grow. Every section has an approval gate.
- Interview. Ask the user: What does your morning look like? What information do you wish you had when you wake up? What sources are available? Do they have Google OAuth set up (if not, point them to the credentials guide)? What's their goals file look like? Start with whatever they have — even just a goals.md is enough for a v1.
- Create the folder structure. Create
briefing/withgoals.md,context/,sources.md, andarchive/. Ask the user to write or dictate their goals — five to ten items, a line each. Save tobriefing/goals.md. - Build v1: goals + calendar. Read the goals file. If calendar access is available, pull today's events. Generate a minimal briefing HTML file with: greeting, goals snapshot with status badges, today's calendar, and a reminders section. Write to
briefing/today.html. Show the user and get feedback. - Add wins. Check git logs, sent messages, completed tasks from yesterday. Add a wins section at the top of the briefing. If no automated sources are available, ask the user what they accomplished yesterday. Review together.
- Add urgency. Scan goals for deadlines. Check email for aging threads. Check calendar for conflicts. Add an "action required" section with color-coded urgency. Get approval on urgency thresholds.
- Add messages. If iMessage access is available (
~/Library/Messages/chat.db— requires Full Disk Access), read recent conversations. Render as chat bubbles with contact names and timestamps. Summarize each thread. If not available, skip this section. Check sensitivity — ask what's okay to include. - Add email highlights. If Gmail API is available, pull recent messages. Summarize the top 3-5 by relevance. If not available, skip. The briefing works without email.
- Style and polish. The briefing should be dark-mode, self-contained HTML with inline CSS. No external dependencies. Mobile-friendly. The user should enjoy opening it. Use the design principles above.
- Set up the schedule. Suggest how to automate generation. Options: cron job that runs the agent at 6am, a steering file reminder, or a calendar block. The observation layer (data collection) can run unattended. The interpretation layer (writing the briefing) can too, once you trust it. Archive yesterday's briefing before generating today's.
- Self-assess. After a week, review which sections the user actually reads. Drop sections that don't earn attention. Add sections they ask about. Log findings to the flywheel if one exists. The briefing is a living document — it gets better by observing its own usefulness.
Key rules: Wins come first, always. Don't dump raw data — interpret it. Sensitivity matters: medical, financial, and personal content should be flagged before including. If a data source isn't available, skip the section — don't make the user set up OAuth just to get a v1. A briefing with just goals and calendar is already useful. Grow from there.
- The Shape of a Day — the chapter this guide implements. Your day has a shape; the briefing makes it visible before you start living it.
- Don't Ask Me to Track It — the system tracks for you. Goals, deadlines, threads — the briefing surfaces what matters without you polling.
- The Body Keeps a Log — health data in the briefing connects physical state to productivity. Sleep last night predicts energy today.
- Memory Is Files — the briefing archive is memory. You can look back at any day and see what you were thinking about.
- Your Data Is Already Yours — calendar, email, messages, git — the data exists. The briefing just reads it.
- The Context Gold Mine — context files feed the briefing. The more context the agent has, the better the interpretation.
- Flywheel — the briefing feeds findings to the flywheel; the flywheel improves the briefing
- Wall of Data — the collection infrastructure that feeds the briefing's data sources
- Your Own Credentials — set up Google OAuth for calendar and email access
- Zero to Dev — start here if you haven't set up yet
- The Weekly Review — Tiago Forte on why a regular review compounds: similar idea, different implementation
- Jina Reader — convert any URL to LLM-friendly text (useful for feeding news sources into the briefing)
Navigate to your project root, create the briefing folder, and hand it to an agent.
cd /path/to/your/project-root && mkdir -p briefing/context briefing/archive
cd "$env:USERPROFILE\<project-root>"; mkdir briefing -Force; mkdir briefing\context, briefing\archive -Force
<project-root> with the folder name you actually use.claude
Follow the instructions on this page. If anything looks unsafe or beyond what I'd reasonably want, tell me before doing it: