DWG RG-006 · SIDE PROJECT · PRIVATE

Family
Portal

An office display and a phone app that know where everyone in the family needs to be, and when to leave.

STATUS: PRIVATE · BUILT 2026 · ▶ WATCH THE FILM · 1:37

DETAIL A — THE FILM · 1:37

MUSIC: "INDIE ROCK DREAMY" BY ALEX-MORGAN (PIXABAY). EVERY EVENT, SCORE, GRADE AND DRIVE TIME IN THE FILM IS MADE UP.

DETAIL B — SHOWN IN THE PROJECT'S OWN FINISH

private · on the office wall
Family Portal
  • Cloudflare Worker
  • Cron Triggers
  • D1
  • Hono
  • React
  • Web Push
  • Google Routes
  • NWS weather
Family Portal runtime Every 30 minutes a cron in one Cloudflare Worker pulls team, school, family, district and trash calendars, the school parent portal, Google drive times and National Weather Service forecasts. It stores events, changes, drive times, notices, chores and school data in D1. The same Worker serves the office display, the phone app and a status page from one API, and sends web push notifications to phones. SOURCES CLOUDFLARE SCREENS Team calendars club soccer, pro matches (.ics) High school schedules read from the public page, with scores Parents' calendars Google + iCloud links, sealed in D1 District + trash pickup become notices, not events School parent portal grades, missing work, lunch · 4× a day Google Routes · NWS drives with traffic, forecasts sync Worker one deploy: app, API, cron and push Cron · every 30 min fetch → check → log added, moved, cancelled Drives + weather leave-by = drive with traffic + arrive early Hono API + React app /api/*, static assets, Google sign-in Notify · every 10 min leave alerts, changes, kickoff, morning D1 events, changes, drives, notices, chores, school Office display polls every 5 min 2560×1440 down to a 1024×600 touchscreen Phone app home-screen app, directions, chores with Undo Status page each calendar's health, Sync now Web push encrypted per phone, VAPID-signed /api push
One Worker does it all. Every 30 minutes the cron pulls nine calendars and works out what changed, when to leave and what the weather will be. The screens just read the result. Orange arrows are the sync and the pushes it sends.

SECTION C–C · SCOPE

Our family runs on nine calendars: club and high school soccer for two kids, a pro team's matches, the school district, trash pickup, a small group and each parent's own. The answer to "where does everyone need to be today, and when do we leave?" was spread across all of them.

Family Portal pulls them into one place. A monitor in the office shows the day on a timeline over a painted neighbourhood that changes with the time and the forecast, with rain, dusk and the real stars at night. Up next takes over with a countdown when it's nearly time to go. The phone app has the same day, the week ahead, directions, and chores you can tick off.

The useful part is what it notices. A practice that moves from 6:00 to 6:30 flashes on the display and pushes to the driver's phone. School days off, early releases and trash night become heads-ups, and so do two kids who need to be in two places at once. A morning summary lists the day's leave times and any chores that are due.

Calendar links work like passwords, so links added in the app are sealed with AES-GCM and never shown again. The home address and the kids' school data stay out of git and off anything public. That's also why the film above was shot against made-up data.

DESIGN DECISIONS

  1. ONE WORKER, TOP TO BOTTOM

    The app, the API, the calendar sync, drive times, weather, school and web push all run in one Cloudflare Worker with one D1 database. Merging to main is the deploy.

  2. LEAVE-BY, NOT START TIME

    Up next counts down to when you need to walk out the door. That's the drive with traffic plus time to arrive early, set per calendar. Lookups get more frequent as the event gets closer.

  3. CHANGES ARE THE PRODUCT

    Each sync compares the feed with what's stored and logs anything added, moved or cancelled. The display flags the change for 15 minutes, and a push goes to whoever it affects.

  4. GOING OR WATCHING

    An away match is watched from the couch, so it gets a kickoff reminder instead of a drive time, a leave alert and venue weather. The family can switch any home game to watching.

  5. LOUD WHEN IT'S STALE

    A calendar that stops updating shows on the display, not just a status page. If most of a feed's events vanish at once, the sync keeps them and reports a failure instead of quietly emptying the week.

  6. EVERY HOT QUERY USES AN INDEX

    One missing index once read five million rows in a day. Now a test suite runs the Worker's real queries against a local D1 and fails on any table scan of events.

FULL SIZE · DRAG TO PAN
DETAIL A · THE FILM · 1:37