BERTH 04 — SOFTWARE SYSTEMS

The Judson Tribune

GitHub Actions · Cloudflare Pages · 7.5" ePaper

Personal daily newspaper for a monochrome ePaper display in my grandfather's living room. The system aggregates baseball, weather, local headlines, TV listings, golf results, and rotating family-specific content into static pages that refresh on a schedule.

Visit live newspaper →
Active Node.js Static HTML GitHub Actions Cloudflare Pages SenseCraft HMI
STACK
GENERATION
Node.js 20+
generate.js static renderer
generate-explore.js RSS magazine rack
Raw HTML template strings
JSON content rotations
INFRASTRUCTURE
GitHub Actions schedules
Cloudflare Pages deploys
Git as deployment artifact
Rebase/retry workflow loop
About 480 refresh cycles per month
DATA SOURCES
MLB Stats API
Open-Meteo weather
ESPN Golf API
TVmaze schedules
Cleveland.com, Dow Jones, MLB RSS
Medina Gazette PDF extraction
DEVICE
Seeed Studio reTerminal E1001
7.5" monochrome ePaper
800x480 fixed viewport
SenseCraft HMI URL playlist
Static snapshot rendering
ARCHITECTURE

The system has no runtime server. Scheduled GitHub Actions fetch every upstream source, render ePaper pages and mobile pages, validate the output, commit the generated files, and let Cloudflare Pages deploy the result. The display only knows a list of URLs and a refresh interval.

PUBLIC SOURCES MLB · weather · RSS TV · golf · PDF free + keyless GITHUB ACTIONS fetch in parallel render 29 HTML files validate, commit CLOUDFLARE static deploy EPAPER

The ePaper edition and mobile hub are siblings. Both are generated from the same data at the same time. The ePaper rotation stays fixed-size and monochrome; the phone version becomes a swipe chain for family members.

ENGINEERING DECISIONS
NOTABLE PROBLEMS
Concurrent push collisions

Scheduled Actions commits can overlap with local development pushes. The workflow uses a three-attempt rebase and retry loop, with generated data winning for generated files.

Monochrome ePaper typography

Thin italics vanish, gray text loses contrast, and overflow creates physical display artifacts. Templates enforce fixed dimensions, visible weights, and readable sizes.

Zero on-site maintenance

Every data source is optional, every network call has a timeout, and every page has fallback copy for missing data. A failed source creates a quiet unavailable state.

CURRENT STATUS
WORKING13 ePaper pages in Medina, a 12-page mobile swipe chain, a hub landing page, 34 Explore pages, holiday overrides, and scheduled refreshes.
CONTENTGuardians scores, Medina weather, newspaper headlines, PGA data, TV listings, daily quotes, cigar notes, and Jim of the Day entries.
ROUGH EDGESgenerate.js is over 3,500 lines. TVmaze coverage varies by network. The Libby magazine catalog is still thin.
NEXTConnect the custom domain, update the QR code target, add a photo-of-the-week page, and extract generator modules once the content model stabilizes.