Skip to content
All projects

Case study

Shoreline

Self hosted uptime checks and status pages in a single 14 MB binary

Shoreline checks your endpoints from three regions and publishes a status page your customers can trust. One binary, one SQLite file, no external services.

The problem

Every hosted status page I tried cost more than the servers it was watching. The self hosted options needed Postgres, Redis and a queue before they could ping a single URL.

What I built

Shoreline is one Go binary and one SQLite file. Checks run on a scheduler with jitter, so a hundred monitors never fire in the same second. Results are written in batches, which keeps the database small: a year of one minute checks for 40 endpoints fits in 61 MB.

The status page is server rendered with HTMX for the incident timeline, so it loads in under 30 KB and still works with JavaScript turned off.

Decisions worth explaining

  • Three regions, two votes. An endpoint is only marked down when two of three regions agree. This removed every false alarm we had during the beta.
  • Incidents are Markdown files. You can write the update in the dashboard or commit it to Git, and both end up in the same place.
  • No accounts by default. A single admin token covers most teams. SSO is an optional build flag.

Outcome

Shoreline monitors 4,200 endpoints across the instances people have told me about, and it has been running my own infrastructure for 19 months without a restart I didn’t cause.