Projects > Vestaboard Calendar & News
Vestaboard Calendar & News: Daily job pushes tomorrow's family calendar events and a news poem to a Vestaboard.

Vestaboard Calendar & News

Daily job pushes tomorrow's family calendar events and a news poem to a Vestaboard.

Year
Sep–Oct 2024
Status
Live
Platforms
macOS
Type
Automation, IoT
Role
Sole developer

Tomorrow's schedule and an optional poem about the news on the Vestaboard every day.

This is a daily automation that updates a Vestaboard, a physical split-flap display that spells out text on flipping tiles, with two things: tomorrow's family calendar events and a short poem about the day's news. It reads two shared Google calendars (school and social), pulls out the next day's events, and lays them out to fit the board.

For the news, a second path grabs the day's top headlines and has an AI write a short poem that fits within the board's limited space. The calendar and news parts run independently, so either one can be turned off on its own.

It runs by itself once a day on a Mac, with no clicking required, and keeps its own logs.

Features

  • Tomorrow's schedule appears on the kitchen wall every evening, no clicking required
  • Combines the school and social family calendars, including repeating events
  • Long event names are automatically shortened to fit the board, with family names kept intact
  • A short poem about the day's news, written fresh each day to fit the board exactly
  • Calendar and news halves run independently; either can be turned off on its own
  • Can display any date on demand, not just tomorrow

Under the hood

8Files
734Lines of code
0Commits
Sep–Oct 2024Dev window
StackPython 3 · OpenAI API · Vestaboard Read/Write API · icalendar · recurring_ical_events · feedparser · pytz · zsh
InfraScheduled daily on a local Mac via a shell wrapper; append-only logs
Notable
  • An AI pass compresses each event title to fit a board row (22 characters for all-day events, 16 after the time prefix), with prompt rules that abbreviate known activities but never shorten family names
  • Poem generation is two-pass, a first draft then an AI rewrite that enforces the 4-line, 18-characters-per-line constraint, so the poem always fits the tiles
  • Two models split the work, a creative model writes the poem while a cheaper one compresses event titles, matching model cost to task difficulty
  • Recurring-event expansion runs under a 5-second alarm, so a pathological calendar feed is skipped instead of hanging the nightly job
  • The wrapper script sets an explicit PATH and exports .env variables itself, so the job behaves identically under launchd's minimal inherited environment
  • Calendar and news are independent pipelines sharing only the board writer, which converts text into the board's 6x22 tile grid and submits it over the Read/Write API