02Badge install

A pill that goes
anywhere an image goes.

The Badge is a server-rendered SVG. Drop it in a footer, a GitHub README, a marketing page with a strict CSP — anywhere an <img> tag is allowed.

The snippet

The Dashboard hands you both forms when you forge a Badge. The HTML one is the most common; the Markdown one is what you paste into a GitHub README.

HTML
<a href="https://glimly.dev" target="_blank" rel="noopener">
  <img src="https://glimly.dev/b/<token>.svg" alt="acme status" />
</a>
Markdown · GitHub README
[![acme status](https://glimly.dev/b/<token>.svg)](https://glimly.dev)

Per-install overrides

The Dashboard stores defaults on the token, but you can override them per-embed with query parameters. Useful when you embed the same Badge on a dark marketing page and a light README.

HTML · compact + dark
<img src="https://glimly.dev/b/<token>.svg?size=compact&theme=dark" alt="acme status" />

Sizes

  • regular — 28 px tall, 13 px label. Default. Reads well in a footer or hero.
  • compact — 22 px tall, 11 px label. For dense places: nav bars, GitHub READMEs, email signatures.

Themes

  • auto (default) — embeds a CSS @media (prefers-color-scheme: dark) block; respects the host page's preference.
  • light, dark — forced palette.

State vocabulary

The label text is computed server-side from your current rollup. Account-wide Badges roll all Services into one status; single-Service Badges show that Service's state.

Account-wide

  • All up: "All systems operational".
  • Some degraded: "Operational · 1 service degraded".
  • Some down: "Disruption in progress".
  • All down: "Outage in progress".
  • No data yet: "Status unavailable".

Single Service

  • Operational, degraded, down, or "status unavailable" — same vocabulary.

Attribution

  • Free: [ ● operational · powered by Glimly ] — the attribution is a clickable link back to glimly.dev.
  • Pro and Business: [ ● operational ] — no attribution.

Caching and freshness

CloudFront caches every (token, size, theme) combination at the edge with a 15-second TTL plus a 60-second stale-while-revalidate window. State changes propagate within ~15 seconds of the underlying Incident transition; no manual invalidation needed. If our origin returns an error, we serve stale-if-error for up to 24 hours so the Badge never breaks visually.

Failure modes

  • Unknown token → grey "Status unavailable" SVG, HTTP 200. We never 404 — a typo'd snippet should not show a broken-image icon on a customer's marketing page.
  • Account suspended for non-payment → same grey "Status unavailable". We don't public-shame.
  • Origin (Lambda) failure → CloudFront serves the last good cached SVG until the origin recovers.
Badge install · Docs · Glimly · Glimly