Travis Frye
All projectsPersonal Project · AI Agent

Family Week Ahead

A scheduled AI agent that reconciles a family's scattered schedule sources and emails a Sunday-morning "Week Ahead" briefing, with one-tap links to add anything missing to the shared calendar. The goal: a digital calendar my wife and I can both trust and easily add to. Built in public, with the product thinking documented as carefully as the code.

View on GitHub ↗
Role
Product owner, researcher, and builder
Timeline
March 2026 – present
Built with
Claude scheduled agent · Google Calendar, Gmail & Drive · iCal feeds
Status
Running live every Sunday

The problem, twice

Our family's schedule runs on a handwritten calendar in the kitchen. My wife keeps it, and it's our source of truth. But we'd both long wanted a digital calendar too: one we could check from anywhere, trust to be complete, and add to without friction.

The first plan (v1, March 2026) was simple: photograph the paper calendar and have AI turn it into Google Calendar events.

Before automating anything, I interviewed my other user (my wife) and looked at the real data. The problem turned out to be bigger than one calendar, and most of my starting assumptions were wrong.

What I assumed (v1)What was actually true (v2)
The gap is paper → digitalThe gap is five or more sources that never get cross-checked
It's my problemWe both miss things: spirit days, tests, schedule changes
School info arrives by emailSome does, but most of it lives in ClassDojo notifications and GroupMe
Sports schedules need to be read off the wallThe league publishes iCal feeds: structured data, no AI needed
Sync events automaticallyWe want to review before anything lands on the shared calendar
The output is a calendarThe output is a weekly briefing. The calendar is one place it can write to.

Problem statement

Family schedule information arrives through many channels, each owned by a different person or app, and nobody reconciles them. Things fall through the cracks not because nobody wrote them down, but because nobody compared notes.

What it does

Every Sunday morning a cloud agent reads every source (the kitchen calendar photo, league iCal feeds, a shared Family Inbox in Drive and Gmail where ClassDojo posts, school emails, and GroupMe messages land, and last week's saved state), compares them against our shared Google calendar, and emails a briefing to both of us. It proposes, and we decide.

  • 🔎 Call-outs

    Double-bookings, handoffs under 45 minutes, games that moved or vanished from the feed, crossed-out paper entries still on Google, practices during school breaks, unknown abbreviations, and a reminder when the kitchen photo is stale.

  • 📅 This week

    Day by day. Anything not yet on Google has a ➕ Add link that opens a pre-filled event.

  • 👀 Next week & further out

    Next week in full, then breaks and midterms up to five weeks ahead.

  • Source footer

    Which sources were read and how fresh each one is.

Key decisions

DecisionWhy
Propose, don't writeA bad read should never put junk on a calendar we both need to trust. One tap to accept keeps us in control.
One capture inbox instead of per-app integrationsClassDojo and GroupMe have no usable integration. One habit ("if you see it, send it to the Family Inbox") covers them, plus flyers and texts, with no API work or terms-of-service risk.
Read feeds directly, don't subscribeGoogle refreshes subscribed feeds slowly. Reading them lets the agent detect changes through stable game IDs.
Images → Drive, text → GmailTested: the Gmail connector can't read attachments, and Drive OCRs screenshots cleanly.
State facts, no guessesNo "buy a gift?" when the agent lacks context. Unknown abbreviations are flagged, never interpreted.
Private data lives outside the repoNames, calendar IDs, feed URLs, and weekly state sit in a private Drive folder. The public repo holds only the method.

How it got here

  • Validate AI extraction (no code)

    Claude read a photo of the handwritten calendar: every entry correct, kids kept separate, and an unknown abbreviation flagged instead of guessed.

  • Refine the prompt

    Tested on two months of real calendar. It treated crossed-out entries as removed and matched differently worded duplicates across sources.

  • Validate every input by hand

    Each source got a manual test before anything was scheduled. Two failed (Gmail attachments, images inside PDFs), and both changed the design.

  • Iterate with the real readers

    Five test sends in one evening, each changed by feedback: invisible buttons became plain links, helper suggestions were cut, and the agent now re-checks the calendar right before sending.

  • Run it live

    A scheduled Sunday-morning cloud routine with a private config and a weekly state file. Next: two weeks of live runs, measuring the items it catches that we would have missed.

Early results

  • 10 of 12

    proposed events were added to the calendar straight from the first test email.

  • 8 games

    missing from Google were found in the league feed on the first manual check, including one that overlapped a party.

  • 5 versions

    of the briefing in one evening, each driven by a concrete reaction from its actual reader.

What I'm learning

  • Discovery beats building

    The v1 plan was a well-built answer to the wrong question. Twenty minutes of questions and one look at real data reframed it.

  • Validate inputs before automating

    Testing every source by hand surfaced two failures before they could become production bugs.

  • The best integration is sometimes a habit

    One capture rule beat four app integrations.

  • Keep humans in the loop where trust is fragile

    A shared family calendar is high-trust, so proposals beat automation there.

  • Cut what doesn't work quickly

    An iOS share-sheet shortcut hit a platform wall, so it's parked. A slightly clunkier path that works beats a slick one that doesn't.

More projects