Skip to content

Brand the status page, and gate main behind a PR check - #1

Merged
mrmcpowned merged 3 commits into
mainfrom
brand-and-pr-gate
Oct 27, 2026
Merged

mrmcpowned merged 3 commits into
mainfrom
brand-and-pr-gate

Conversation

@mrmcpowned

Copy link
Copy Markdown
Member

Two changes that happen to travel together: the first one is cosmetic, the second one is why this PR exists at all rather than a push to main.

Branding

Uses the GPV mark from the dashboard, and the dashboard's neutral palette (#fafafa / #0a0a0a / #141414), so the status page reads as part of the product.

The mark is inlined as SVG paths and the favicon is a data URI, so the page still makes no network request of its own — the property that matters most for the page people land on when everything else is broken. The one new asset, icon-256.png, is the real app icon served from this domain rather than hotlinked from gamepadviewer.com, so an unfurl does not depend on the thing that is down.

Also adds per-page description, canonical, theme-color and OpenGraph metadata. Pasting an incident link into Discord now shows the incident title and summary instead of a bare URL, which is where most of this gets shared.

Severity colours are untouched — they are semantic, and they are what the page is for.

The PR gate

.github/workflows/pr.yml runs the same build the deploy runs, against the PR, and additionally checks that alerts.json parses and carries the gpv-status/1 schema the dashboard and overlay expect. A green validate means Deploy will not be the thing that discovers a broken announcement.

main now requires a pull request and that check. Admins can still push directly, deliberately. This site exists to say "we know, don't file a bug" within seconds, and owing an audience a PR round trip while they are already looking at breakage is the wrong trade. The runbook documents it as the escape hatch, with the warning that the failure mode of skipping the local build is silent: a bad file fails the deploy, the previous page stays live, and the alert never appears.

Checked

  • node build.mjs with zero announcements and with one, index and detail page rendered in both colour schemes, at desktop and mobile widths
  • The feed check in the workflow run locally against a real dist/alerts.json

🤖 Generated with Claude Code

mrmcpowned and others added 3 commits October 26, 2026 20:16
Uses the GPV mark from the dashboard, and the dashboard's neutral palette, so the
status page reads as part of the product rather than a stray page on a subdomain.

The mark is inlined as SVG paths and the favicon is a data URI, because this page
has to render when the rest of the product does not: it still makes no network
request of its own. The only new asset is the app icon, served from this domain
rather than hotlinked, so an unfurl of an incident link does not depend on the
thing that is down.

Also adds per-page description, canonical, theme-color and OpenGraph metadata, so
pasting an incident link into Discord shows the title and summary.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Runs the same build the deploy runs, against the PR, plus a check that the feed
the products read parses and carries the schema they expect. A green check means
the Deploy workflow will not be the thing that discovers a broken announcement.

main now requires a pull request and this check. Admins can still push directly,
which the runbook documents as the deliberate escape hatch: a status page that
takes a PR round trip to say "we know, don't file a bug" is the wrong trade when
people are already looking at breakage.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
12 seconds for the Validate run, measured on the PR that introduced it, ahead of
the 30 seconds the deploy already took. Also corrects the publishing steps: the
check has to finish before the merge will go through.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@mrmcpowned
mrmcpowned merged commit e31d049 into main Oct 27, 2026
1 check passed
@mrmcpowned
mrmcpowned deleted the brand-and-pr-gate branch October 27, 2026 03:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant