At 08:58, the daily workflow starts with a local timezone-aware clock.
America/TorontoI built the infrastructure behind a school announcements platform used by 1,000+ students and 50+ staff. Teachers edited familiar Google files; scheduled Python jobs handled the path to production.
Announcements, club calendars, concessions, office messages, and slideshow changes arrived through different sources and changed at different speeds. The system needed to preserve the tools staff already understood while making every update repeatable.
At 08:58, the daily workflow starts with a local timezone-aware clock.
America/TorontoThe source document becomes plain text for analysis and PDF pages for the slideshow.
text/plain + application/pdfKnown cells become typed event, concession, and announcement records.
Main!A7:B14 / Main!G7A unified diff isolates changes; prompts turn source material into highlights.
difflib + GPT-4oGenerated text and JSON are injected into templates, then assets are copied cleanly.
replacement/ → prod/Nginx serves the generated site while Cloudflare protects and accelerates it.
static HTML / CSS / JSSmall focused scripts keep operational information current without rebuilding the entire slideshow and summary pipeline.
The expensive path runs once each morning, preserving yesterday's source before generating the day's complete production bundle.
The pipeline does more than move files. It deliberately reshapes each source into the format the browser needs.
Before a new Drive export lands, the last text and PDF files are renamed as backups. The diff and a recovery copy come from the same decision.
slides-new → slides-oldA missing calendar range logs a warning and the loop continues, so one malformed section does not erase every other event.
warn + continueStructured records are serialized with JSON rather than assembled by hand, keeping quotes and punctuation valid in production JavaScript.
json.dumps(...)Refresh milestones go to stdout and Discord, making success, failed dependencies, and deployment timing visible away from the server.
timestamp + webhookThe infrastructure removed repetitive publishing work without forcing a new content system onto teachers. It supported 1,000+ students, 50+ staff, and more than 25,000 monthly visits at peak usage.