This directory is the source configuration for the public Upptime site at
https://status.opsprint.ai. It monitors four distinct Pulse surfaces every
five minutes:
https://pulse.opsprint.ai/https://pulse.opsprint.ai/api/healthhttps://pulse.opsprint.ai/api/health/readyhttps://pulse.opsprint.ai/login
The shallow health endpoint proves the web process is alive. Readiness also checks PostgreSQL, private object storage, provider-key capacity, production memory configuration, top-up management, and critical cron freshness.
The upptime/.upptimerc.yml and upptime/README.md files in the
blockvantage/pulse app repository are canonical. Copy both files byte-for-byte
to blockvantage/pulse-status main after every change. From the app repository,
run the read-only npm run status:check-sync command to verify that the public
repository matches without printing either file's contents.
Every check requires HTTP 200 and a stable successful body marker using
Upptime's supported __dangerous__body_down_if_text_missing option. Health must
contain "status":"healthy", readiness must contain "ready":true, and the
homepage must contain <title>Pulse. The login check requires its app-specific
brand-kicker marker without changing the page's metadata contract. The
homepage does not accept a redirect as healthy.
After each successful scheduled Uptime check, the serialized writer job amends
the current gh-pages commit with a same-origin monitor-freshness.json. Manual
dispatches never update it, and amending avoids unbounded branch history. The
page shows a warning by default, shares a five-minute browser cache, and
re-evaluates the recorded check time every minute. It never calls the GitHub API
or fabricates and overrides an individual service result.
Static-site builds check out upptime/status-page at reviewed commit
54c2ff5a3d998d525ee4c7e68dc7ce7414d89c33 and run npm ci against that
commit's lockfile. No status-page package spec or mutable npm install executes
under the publishing token.
Complete and record these operations in order. The Upptime workflow must first publish a real generated site before any custom-domain work begins.
- In
blockvantage/pulse-status, verify the workflow token has effectivecontents: writepermission. Use the repository-scopedGITHUB_TOKEN. No broad PAT is permitted.
- Dispatch
Static Site CIfrommain, then observe the run through completion:gh workflow run "Static Site CI" --ref main --repo blockvantage/pulse-status, followed bygh run list --repo blockvantage/pulse-status --workflow "Static Site CI"andgh run watch <run-id> --repo blockvantage/pulse-status --exit-status.
- Verify the successful workflow created a genuine
gh-pagesbranch withgh api repos/blockvantage/pulse-status/branches/gh-pages --jq .name. A 403 from the workflow or a missing branch is a no-go; stop before Pages or DNS changes.
- In repository Settings > Pages, switch Source from GitHub Actions to
Deploy from a branch, select
gh-pagesand the/root, then save.
- Before configuring a CNAME, verify
https://blockvantage.github.io/pulse-status/returns HTTP 200. Also verify the authoritative generated branch locally: rungit fetch origin gh-pages, materialize it withgit archive origin/gh-pages | tar -x -C <preview-dir>, and serve that directory usingpython3 -m http.server 4173 --directory <preview-dir>. Confirmhttp://127.0.0.1:4173/returns HTTP 200 and renders Pulse Status, and thatstatus-freshness.jsplusmonitor-freshness.jsonare present. Do not require the GitHub project-subpath URL after a CNAME is configured; GitHub may redirect it to the custom hostname.
- In the
blockvantageorganization Pages settings, verify ownership ofopsprint.aibefore claiming any custom hostname for the repository.
- Create a DNS-only CNAME for
status.opsprint.aitargetingblockvantage.github.io. Do not proxy the record through Cloudflare.
- Add
status.opsprint.aias the repository's Pages custom domain.
- Wait for GitHub's DNS validation and TLS certificate to complete before changing transport settings.
- Enable HTTPS enforcement last, only after GitHub reports that the certificate is available.
- Verify all four checks are present and healthy, then confirm
https://status.opsprint.aireturns HTTP 200 rather than a Cloudflare 525.
- Do not mark the public-status gate complete until repository sync, workflow publication, Pages, DNS, TLS, and both live HTTP checks have been observed in their real systems.
Upptime documentation: https://upptime.js.org/