Canonical configuration for the BoxOwl public status page hosted at status.boxowl.me. Powered by Upptime — open-source uptime monitor + status page generated from GitHub Actions checks, published to GitHub Pages.
License: Apache 2.0 (matches the rest of the BoxOwl-Me OSS surface —
see wiki/concepts/open-source-sdks.md
in the monorepo).
Decision locked 2026-06-07 per
wiki/concepts/course-check-2026-06-07.md
§STATUS-001. Upptime gives BoxOwl two properties incumbent SaaS status
pages (Statuspage.io, Instatus, Better Uptime) charge for:
- Off-cluster hosting. Runs on GitHub Pages, not on BoxOwl's K8s cluster — so when the cluster goes down, the status page stays up. The whole point of a status page is that it's the one thing that stays reachable when everything else breaks; self-hosting on the same infra defeats the purpose.
- $0/mo perpetual. Free for public repos. GitHub Actions free tier handles the 5-min polling cadence for our 5-7 components well within limits.
Plus it aligns with the open-and-auditable cross-pillar principle ([[positioning]] §Principle 4) — anyone can read the config that determines what we consider "operational."
The on-call / ops view lives separately on Grafana (already running on
the cluster — see STATUS-005 in the monorepo backlog). Upptime ships
the public end-user status surface; Grafana ships the on-call deep
diagnostic view. Both consume the same /api/health/components
endpoint (STATUS-002).
.upptimerc.yml— the canonical Upptime configuration. Sole source-of-truth for what BoxOwl considers monitored. All component definitions, status-website branding, workflow schedules, and commit message conventions live here.LICENSE— Apache 2.0 verbatim from apache.org.Makefile—sync(publishes config toBoxOwl-Me/statusmirror)validate(lints YAML + checks Upptime schema) +diff(shows what would change). Seemake helpfor the full list.
BOOTSTRAP.md— one-time operator runbook for creatingBoxOwl-Me/statusfrom the Upptime template + initial config push + GitHub Pages enable + custom-domain setup.- This README.
This directory carries only the canonical config. The
BoxOwl-Me/status repository carries the full Upptime template
(workflows, Svelte site, history dirs, generated graphs) and is
updated in two patterns:
- Config updates (component-list / status-website branding /
workflow schedule): edit
.upptimerc.ymlhere, commit to the monorepo, runmake sync REMOTE=git@github.com:BoxOwl-Me/status.gitto copy the file into a clone of the mirror + commit + push. The next Upptime workflow run picks up the new config. - Status / uptime data: written autonomously by Upptime workflows
in
BoxOwl-Me/status. Never edited from this monorepo.
This is not a subtree-mirror (unlike api-spec/ or
tools/dsar-templates/). Upptime expects to live at the root of its
own repo with its full template intact; we maintain just the config
file here and copy it across.
make validateRuns yq (or python -c "import yaml; yaml.safe_load(open('.upptimerc.yml'))"
fallback) to ensure the config parses, plus a few sanity checks (every
site has a name + url, no duplicate names, cname matches expected
domain).
BoxOwl-Me/status does not exist yet as of this commit. See
BOOTSTRAP.md for the one-time create-from-template flow. Until that
runs, status.boxowl.me 404s (the web/footer.js "Status" link
already in production points to it; this is the only consumer-facing
404 launch-blocker once we go public — STATUS-001 in the monorepo
backlog tracks the date binding).
- Monorepo
wiki/Backlog.md§ STATUS epic — full epic context wiki/concepts/course-check-2026-06-07.md§ STATUS-001 decision lockwiki/runbooks/status-incidents.md— incident response playbook (STATUS-003); has theTODOmarker that gets filled with GitHub Issues incident workflow once this repo is liveweb/footer.jsline 46 — site-wide "Status" link in the website footer (currently 404s)