May 1, 2026

Native probes, scheduler split, status badges, theme toggle

A heavy day — a lot of the redesign lands back-to-back.

Native probes

We replaced the third-party probe stack with our own:

  • Native HTTP uptime probe.
  • Native SSL certificate probe.
  • Native domain expiry probe — no more upstream rate limits.
  • The old dependency is gone from the codebase entirely.

Result: simpler architecture, faster probes, every checker is greyout's own code.

Scheduler split

The scheduler now runs on a dedicated workers host, separately from the web app. They never compete for the same minute of work — alerts dispatch from exactly one place.

Workspace overview

The org-level overview page is now a linear list of projects, sorted by worst-status, scannable in one glance.

Theme toggle

Light + dark themes, with an AA-pass light palette. System / Light / Dark settings stick in a cookie, and the inline boot script means no white flash on a dark-themed user's first paint.

Maintenance windows

Planned maintenance periods (one-off + recurring) — open incidents within a window are automatically suppressed and re-evaluated when it closes.

Monthly reports

Per-workspace monthly digest — settings, on-demand generator, and a scheduled dispatcher that emails each owner on the 1st.

Per-project notifications

Notification channels are now scoped per project rather than workspace-global. Plus per-channel opt-outs and per-project throttling so a noisy day on one project doesn't wake you for the others.

Public status badges

<img src="https://app.greyout.io/badges/<token>/uptime/large.svg"> — embed an at-a-glance status badge anywhere. SVG, no auth, no cookies, regenerable token if the URL leaks.