The problem
A portfolio of live demos has two problems. Demos go down, and a recruiter who clicks a dead link doesn't come back. And a demo dropped on someone without context is half wasted: they don't know what to try, or why it was hard to build.
Lighthouse turns both into features. It watches every project and publishes what it finds, including its failures, and every launch starts with a short technical introduction while it confirms the demo is up, so nobody lands on a broken page.
How it works
A scheduler finds monitors that are due and checks them with a bounded pool of workers: HTTP checks for the real projects, simulated ones for the public sandbox. Each result goes through a small state machine that opens an incident after several failures in a row and closes it after several successes, so one blip never pages anyone and a flapping site doesn't open an incident every minute.
It also counts its readers without cookies: a visitor is a hash of their IP address keyed with a salt that is deleted every day, browsers asking not to be tracked are skipped, and public numbers under five are hidden.
Everything is one Go binary: server-rendered public pages, plus a small Vue console, built into the binary, where the owner and sandbox visitors manage monitors and incidents. The owner signs in with GitHub (one account is admitted); visitors can create a throwaway sandbox with its own monitors, isolated from everything else by PostgreSQL row-level security. When a visitor launches a demo, the launch page polls the demo's health address, which wakes it (idle demos sleep, to cost nothing), and opens the demo when it answers.
“Every figure on these pages is measured by the site itself, and so is every outage.”