# Master Calendar — paste this into Claude Cowork (v2) This builds the calendar from the video: one table that reads across your whole life, rendered as an interactive dashboard you can talk to. **v2 upgrade:** every "smart" view — Coach, Next 7, and Load — is now written by Claude and cached in the table, and Flags update the moment you say something's done. No view does its own guessing in the browser anymore. **Before you paste this, you need three things from the last video:** 1. Your **Life HQ** folder, with a subfolder per class and per part of your life, connected to this Cowork project. 2. Your **Gmail** connected. 3. Your **Google Calendar** connected. If you don't have those yet, go watch the setup video first. This won't work without them. **How to use:** copy this entire file, paste it into a Claude Cowork chat that's connected to your Life HQ folder, and send it. Claude does the rest. After it's built, you don't edit anything by hand. You just talk to it. --- You are building my master calendar. The guiding principle is simple: **`events.json` is the single source of truth.** It holds the raw rows. Every view is just a drawing of that table — and the "smart" views (Coach, Next 7, Load, Flags) are *cached tables you write from the rows*, so they give real feedback, render instantly, and update the moment I tell you something changed. Do it in the steps below, and do not skip the table. ## Step 0 — Confirm my connections first Before anything else, make sure this chat can actually see my three sources, and confirm each by reading from it: 1. **Life HQ folder** — confirm it's connected and you can list my course and personal subfolders. 2. **Gmail** — confirm you can search my mail. 3. **Google Calendar** — confirm you can read my events. **If Google Calendar is not connected, stop and tell me before doing anything else.** It matters: the calendar is much weaker without it, because it's how you catch the things that never touch a syllabus or an email — a one-off meeting, an appointment, an event someone added straight to my calendar. Tell me to connect it (in Claude's connectors/settings, add **Google Calendar** and authorize it), and wait for me to confirm it's connected before you continue. Do the same if Gmail or the Life HQ folder isn't readable. Only once all three are connected and you've read from each, move on to Step 1. If I explicitly tell you to proceed without Google Calendar, that's fine — build from the folder and Gmail, and note in the finished calendar that Calendar wasn't connected so I know some things (like calendar-only events) may be missing. ## Step 1 — Read everything Read across every subfolder inside my connected Life HQ folder. That's all my course syllabi and all my personal notes. Then read my connected Gmail and my Google Calendar. Pull out every single thing that has a date or a deadline. Look hard. Some dates are buried in paragraphs, like a seminar response paper "due the night before each session." Some are in tables. Some are recurring, like a class that meets every Tuesday and Thursday, a workout, or rent. Catch the things in my email that no syllabus knows about, like a professor moving a midterm or a club meeting. ## Step 2 — Build one events table Put every dated item into a single table, and save it as `events.json` in the root of my Life HQ folder. Use exactly these fields on every row: - `id` — a short unique slug - `title` — what it is - `date` — "YYYY-MM-DD", or null if there's no date yet - `time` — "HH:MM" in 24-hour time, or null if it's all-day - `end_date` — for a span, or the last date of a recurring item; otherwise null - `recurrence` — null for one-off items, or a rule for repeating ones. Use "WEEKLY;BYDAY=MO,WE,FR" style codes (MO TU WE TH FR SA SU), or "MONTHLY;BYMONTHDAY=1" - `type` — one of: deadline, exam, paper, problem set, class, work, personal, chore - `source` — which course or folder it came from (e.g. "Regression", "Workout") - `category` — one of: school, work, life - `weight` — low, medium, or high effort - `provenance` — where it came from: syllabus, email, calendar, note, or you - `flag` — null, or one of: changed, unscheduled, assumed - `notes` — anything useful, including the reason for any flag - `status` — upcoming, done, or unscheduled Follow these rules: - **Weight is about effort, not importance.** An exam, a final paper, a big project is high. A normal problem set or response paper is medium. A class meeting, a workout, a chore is low. Weight powers the "how brutal is this week" view, so be honest about it. - **Recurring things are ONE row with a recurrence rule and an end_date, not fifty rows.** Classes, weekly labs, workouts, weekly groceries, monthly rent. - **If two sources disagree, the newer and more direct one wins.** An email from a TA moving a midterm beats the date printed in the syllabus. Use the new date, set provenance to "email", set flag to "changed", and explain what moved in notes. - **If a deadline is vague**, like "end of term" or "finals week", make your best call, set flag to "assumed", and explain the guess in notes. Don't guess silently. - **If something has no date yet**, like a presentation slot that gets assigned later, keep it. Set date to null, flag to "unscheduled", status to "unscheduled", and note what you know. Never drop it. - **Mark genuinely past items `status: "done"` instead of deleting them**, so the calendar carries a running history across terms. - **Tag every row's provenance** so I can trust the calendar and see where each thing came from. - **Record holidays and no-class dates** (a campus holiday, Thanksgiving, Veterans Day) so recurring classes skip them. You'll use these in the exceptions object in Step 4. - **Add relationship nudges.** If I keep a list of people I want to stay in touch with (a mentor, a recruiter, a contact from an event) anywhere in my folders, create gentle recurring reminders to reach out to them, like "Coffee with [name] (keep in touch)" once a month. Make them low weight, category work, type personal. The point is to keep my relationships warm before I need them, which matters for landing analyst, consulting, and research roles. If I don't have such a list yet, add one soft monthly nudge to reach out to someone in my network, and tell me I can name specific people anytime. - **Also output a `touchpoints` array** for the people and habits I want to keep warm. Each has a name, a `what` (office hours, coffee, a catch-up), a `last` date (the last time I did it), an `every` number (days between touches), and an optional `why`. The calendar uses these to nudge me when a relationship has gone stale. ## Step 3 — Write the cached "smart view" tables This is the important upgrade. The Coach, the Next-7 read, and the Load read are **not** computed by the browser with hardcoded rules — a rule can only do dumb relative-max math and will call an empty summer week your "heaviest stretch." Instead, **you (the LLM) write these entries from the events table, using judgment, and cache them inside `events.json`** so the artifact renders them instantly by lookup. Rebuild all of them for every week from the current week's Monday through the end of the term, keyed by that week's Monday (ISO "YYYY-MM-DD"). Store them under these keys: - **`coach`** — `{ "": [ {"cls": "plan" or "rel", "tag": "<2–4 word label>", "body": "<1–2 sentences, may use >"} ] }`. For each week, look at that week **and the next ~6 weeks**, then write the advice a good human coach would give: - If the week and the near horizon are genuinely light (e.g. only a habit or a check-in), say so plainly — calm, runway, build the habit. **Never call a lone check-in a "crunch."** - If a real crunch is coming within ~6 weeks, name it, and name the single **moveable** thing (a paper, problem set, project, or application) to start early to flatten it. Exams are locked in — advise guarding the week before and keeping it clear to study. - Use "rel" cards for relationship nudges only where genuinely useful (e.g. "ask Prof. Okafor for the fellowship reference, well before the deadline"), not every week. - **`agenda`** — `{ "": "" }`. A punchy summary of what's actually due that week and the vibe (a true light week / a real exam week / three deliverables stacked, etc.). This shows above the accurate ranked list on the Next 7 tab. - **`load`** — `{ "summary": "<2–4 sentence narrative of the term's overall load shape — where the real peaks are, and the 1–2 things to pull earlier to flatten them>" }`. This shows above the computed heatmap on the Load tab. To judge load, use effort points as an **input to your judgment, not the final word**: high = 6, medium = 3, low = 1 per item, classes excluded. A week is only a "crunch" if it genuinely holds high-effort work — not just because it's the max of an otherwise empty stretch. ## Step 4 — Render the dashboard Create a Cowork artifact with the id `master-calendar`, using the HTML template at the bottom of this file, exactly as written. Make only these replacements, and change nothing else: - Replace `/*DATA*/` with the events object: `{"term":"Fall 2026","events":[ ... every row ... ],"touchpoints":[ ... ]}`. Use a short term label. (If you're carrying past terms as history, a label like `"Fall 2026 (+ history)"` is fine.) - Replace `/*EXCEPTIONS*/` with an object that maps a recurring row's `id` to the dates it should skip, like `{"micro-lecture":["2026-11-11"],"seminar":["2026-11-11"]}`. If there are none, use `{}`. - Replace `/*COACH*/` with the `coach` table you wrote in Step 3. - Replace `/*AGENDA*/` with the `agenda` table. - Replace `/*LOAD*/` with the `load` object. The template gives me a Month, Week, and Day toggle, a **Next 7** agenda (your written "read" on top of the ranked-by-effort list), a weekly **Load** heatmap (your written narrative on top of the computed bars), filters for course, type, and category, a "Today" date control, a **Flags & provenance** panel that shows where each thing came from and anything you changed, assumed, or left unscheduled — **and that drops any row the moment it's marked `done`** — and a **Coach** view that is a pure lookup into the `coach` table for whatever week is active. ## Step 5 — Keep it live (talk to it; never hand-edit) From here on, this calendar is a snapshot I refresh by talking to you. Not by hand-editing. - When I tell you something changed or something new came up — "I've got a group meeting Thursday at 3 in the library," "I work Saturdays and Sundays starting next week," "the econ final moved to the 9th" — you parse it, update the row in `events.json` (add it, change it, set provenance to "you"), rewrite any affected cached tables from Step 3, and re-render. - **When I tell you something is finished or no longer needed** — "I updated my resume," "sent the fellowship app" — set that row's `status` to `"done"` and clear its `flag` (null). Because Flags & Provenance is derived live from the rows, that item immediately drops off the panel. If I give a date to an unscheduled item, set the date and status to "upcoming" so it moves from Flags onto the calendar. - **When I say I did a touchpoint** — "went to office hours today," "grabbed coffee with my mentor" — update that touchpoint's `last` date so it stops nudging me. - When I ask a question — "what've I got this week?", "when's my next exam?", "which week is the worst?" — answer in plain words straight from `events.json`. Read the table. Don't guess. Be a coach, not just a calendar. Always treat `events.json` as the one source of truth, and never let the calendar — or any cached view table — drift from it. ## Step 6 — Put it on autopilot (a recurring briefing) Set up a scheduled task so the calendar keeps itself current and checks in with me, instead of waiting for me to open it. First, ask me whether I want this every morning or once a week, and what time (default to every weekday morning at 7am, kept short). Then create a scheduled task that, on that cadence, does all of this on its own: 1. Re-reads my Life HQ folders, my Gmail, and my Google Calendar, and updates `events.json` — reconciling conflicts so the newer source wins, keeping recurring things as single rules, tagging provenance, flagging vague or undated items, applying any "I finished X" updates I mentioned, and marking past items done. 2. **Regenerates the `coach`, `agenda`, and `load` cached tables** with fresh judgment (the same LLM pass as Step 3). 3. Re-renders the Master Calendar artifact so it is up to date (the five replacements from Step 4). 4. Sends me a short briefing in plain English: - What I've got this week (pull from the `agenda` entry you wrote). - The heaviest week coming up, and what I can start right now to flatten it (pull from the `coach` entry). - Anyone I'm overdue to reach out to (a stale touchpoint). - Anything that changed since the last briefing, like a moved deadline, a new item, or something I marked done. Keep the briefing short and skimmable, a few lines, not a wall of text. One thing to tell me: a scheduled task only runs while my desktop app is open and my computer is awake, so it fires the next time both are true. ## Each new term (keep it going) This calendar is built once and it carries from one term into the next. It does not expire. When a new semester starts, I'll drop my new syllabi into their course folders and say something like "new semester, sweep my Life HQ folder again and rebuild my calendar." When I do: - Re-read every folder, plus Gmail and Google Calendar, from scratch, exactly the way you did the first time. - Rebuild `events.json` with the new term's items, and rebuild the `coach` / `agenda` / `load` tables for the new weeks. Keep the old items (marked `done`) if I want a running history of my whole degree, or clear them if I only want the current term. If it isn't obvious which I want, ask. - Re-render the artifact. I never edit this file or the calendar by hand, and I never touch a date in the template. I can start it on any day, in any term. The calendar centers itself on today automatically. ## The template Paste-and-go. Do not edit it except for the five replacements in Step 4. ```html Master Calendar

Master Calendar

School Work Life
```