Changelog.

What actually shipped, from the actual commit history. It only counts if you can click it and see it work.

We built everything the product page promisedtrust

Our product page said "on the roadmap" in five places. We treated that as a bug list and cleared it: layered escalation, vacation cover, timezone-aware handoffs, Mercury conversational mode, Mercury pattern detection, Mercury-drafted status updates, dependency auto-detection, status page theming, an embeddable widget, custom domains, a TypeScript SDK, a CLI, and a GitHub Action. Thirteen things.

Then we rewrote the page so nothing says roadmap that isn't. Three items are honestly still ahead and labelled as such: SMS/WhatsApp/voice, multi-language status pages, and a Terraform provider. The page also said "six regions" when three are real — that's fixed too.

Ask Mercury whyfeature

Every incident page now has a chat box. Mercury has already read that incident's probe results, the full alert decision trail, the evidence snapshot, and every earlier incident on the same monitor — so ask it "was this us or Stripe?" or "has this happened before?" and it answers from that, or tells you the evidence doesn't say.

That last part is the design. It is instructed to prefer "I don't know" over a plausible guess, because a confident wrong cause at 3am is worse than an honest shrug. It reads and talks — it cannot pause a monitor or acknowledge anything.

Patterns you'd only notice after they cost youfeature

"This is the third Tuesday in a row" is the kind of thing a human spots after three Tuesdays. The incidents page now computes it: repeat offenders, services that keep recovering on their own, time-of-day and weekday clustering, recurring failure causes, and upstream providers that keep showing up.

No model is involved in the counting. A pattern is a factual claim about your history, so "6 of 9 incidents landed on a Tuesday" is arithmetic, not an estimate. Nothing surfaces below three occurrences.

Mercury drafts your status update. You publish it.feature

The moment an incident opens, Mercury writes the customer-facing update from the same evidence it investigates with — deliberately cautious: what's affected, that you're looking into it, no root cause, no ETA, because early evidence rarely supports either.

It never publishes. The draft waits on the incident page, editable, until a person reads it and clicks publish. The status page is the one surface where being wrong in public costs trust, so a human owns it.

On-call grows up: escalation, vacation cover, real timezonesfeature

  • Escalation. Nobody acknowledges, the next person up gets paged. Off by default. It never escalates a held page, acknowledging stops it immediately, and it won't wrap back onto whoever already didn't answer.
  • Vacation cover. Mark someone away and name who covers their shifts — or hand one person the pager for a whole window, whatever the rotation says.
  • Timezone-aware handoffs. Shifts change hands at 09:00 your time, not UTC midnight, and stay there across both daylight-saving jumps. We tested against the March 2026 spring-forward specifically.

Status pages: your colours, your domain, your appfeature

  • Theme control. Accent colour, logo, and a forced light or dark palette.
  • An embeddable pill. Two lines drop a live status indicator into your own app. No dependencies, and it renders nothing rather than an error if it can't reach us — a monitoring widget shouting about its own failure on your marketing page helps nobody. There's a CORS-open summary.json if you'd rather render it yourself.
  • Custom domains. Point status.yourcompany.com at us. We verify your CNAME automatically; attaching the hostname on our side is still a manual step we do by hand, and the settings page says so rather than showing a green tick over half a setup.

Let your agent set it upfeature

A full MCP server at /api/mcp — ten tools covering monitors, incidents, channels, maintenance windows, and your status page. Point Claude Code or Cursor at it with an API token and say what you run; it configures the workspace. /llms.txt is the agent-facing guide.

Also new: a TypeScript SDK, a repose CLI with a reconciling apply, and a GitHub Action that posts the diff to your pull request before anything changes. They work and they live in our repo — they're not on npm yet, which we'd rather say than imply.

Emails that look like the productfeature

Every email we send — alerts, verification, password resets, status page subscriptions, monthly reports — now goes out on one template: severity-coloured accent bar, real Acknowledge and View incident buttons, and a footer that links somewhere useful. Alert emails were plain text until today.

The probe network is reallaunch

Until today, "multi-region" meant six region labels from one machine in Amsterdam. It now means three machines on three continents — Amsterdam, Virginia, and Singapore — each probing independently and writing what it saw. One of them holds a lease and runs the decision engine; if it dies, another takes over within thirty seconds.

Two things came with it. If one of our own probe regions goes down, the consensus bar drops to the regions actually reporting and every decision says so — our outage must never hide yours. And a single region can never resolve an incident on its own; recovery needs two witnesses.

We shipped this before turning on billing, deliberately. We weren't going to charge for a trust product whose core claim was simulated.

Billing is live, and the free tier got honestlaunch

Paid plans are on: Solo at $10, Starter, Pro, and Scale, monthly or annual, managed through Stripe with a self-service portal. Every new workspace starts on a 14-day Starter trial, then lands on Free.

Free stays genuinely useful — 25 monitors, commercial use fine, unlimited status page subscribers — but checks run every 3 minutes rather than every minute. One-minute detection is the thing worth paying for, and pretending otherwise was costing us the ability to keep the free tier at all. Everyone already on a plan keeps what they had.

Repose on your phone, with notificationsfeature

Install Repose as an app on Android or iOS and get push notifications when consensus fires. Per-device, so your laptop and your phone can differ, and only for pages that actually matter — recoveries don't buzz.

One honest limit: web push can't bypass Do Not Disturb. If you need something that rings through a silenced phone at 3am, that's a voice call, and it isn't built yet.

Forgot your passwordtrust

There was no way to reset it. Vincent locked himself out of his own product and found out. Fixed the same day: a reset link on the login page, and a token flow that expires.

Twelve things, after reading the competition properlyfeature

We went through Better Stack, UptimeRobot, Checkly, Pingdom, and Oh Dear, wrote down everything they do better, and shipped the list:

  • Evidence capture. Every incident stores what the probes actually saw — response headers, a body snippet, DNS/TCP/TLS timings, and the last healthy check before it broke.
  • Mercury 2.0. Investigations became structured: a failure category, a confidence level, the likely root cause, the impact, and what to check first.
  • Maintenance windows. Failures during planned work are recorded but never page.
  • Status page subscribers. Double opt-in email updates when incidents open and resolve. Unlimited, every plan, no per-subscriber pricing — ever.
  • Better assertions. JSON path, response headers, and latency budgets. Slow is the new down, and it's consensus-gated like everything else.
  • Certificate and domain watch. Cert rotations are logged as information, never a page; domain expiry warns on a 30/14/7/3-day ladder.
  • Storm grouping. Ten services failing at once is one message, not ten.
  • Status badge and 90-day history. An SVG badge for your README, and three months of daily uptime bars.
  • Write API and MCP server. Create and update monitors from code or from an agent.
  • The noise ledger. A public count of the pages we held back — the number that proves the whole pitch.
  • Monthly uptime reports. One email a month, per workspace, with what broke and what we suppressed.

Dark modefeature

The 2am product finally has a 2am mode. Warm near-black — same room, lights off — with every chart, sparkline, and status pill kept legible. Toggle it in the sidebar; it follows your system preference until you choose, and remembers when you do.

⌘K, and you're anywherefeature

A command palette for the whole app: hit ⌘K and jump to any monitor, incident, or page — or act without leaving the keyboard: pause a monitor, acknowledge an incident. Fuzzy matching, arrows, enter, done. And on the services list, j/k walks the rows — enter opens. Also new today: per-region latency charts on every monitor, latency sparklines on the dashboard, and one-click acknowledge links in Slack, Discord, and email alerts.

A read-only APIfeature

Create a token in Settings and read your monitors and incidents from anywhere: GET /api/v1/monitors and /api/v1/incidents with a Bearer token. Tokens are hashed at rest, shown once, revocable in one click. Write endpoints, then Terraform, come next — in that order.

Make the status page yoursfeature

Settings → Status page: set a custom title, a one-line description, and a contact link that appears when viewers need to reach you. Empty fields fall back to the defaults — no configuration required to stay on the old look.

Heartbeat checksfeature

The inverted check: your cron job, backup script, or queue worker pings a secret URL when it runs — and Repose pages when the pings stop (after 2× the expected interval, so one slow run doesn't wake anyone). Add a one-line curl to the end of the job and the fifth check type is live. Docs.

Launch week, part two: email verification, mobile, and a welcomefeature

  • Email verification on signup. Confirm your address, land in your dashboard. New accounts get a welcome email that tells you the three things worth doing first.
  • The app works on your phone now. Dashboard, monitors, and incident pages reworked for small screens — because 2am pages get checked in bed, not at a desk.
  • Repose watches itself. Our own landing page, app + database, SSL cert, and DNS are monitored by a production Repose workspace — the status page is public. Every outage we have is now a public test of our own product.
  • Error reporting wired into the probe worker, and a /api/health endpoint that exercises the full edge → function → database path.

repose.sh is livelaunch

The public beta is on the internet: app deployed, probe worker running, sending domain verified, signups open. Everything is free while billing ships. Also fixed, in the honest spirit of a changelog: our first two production bugs — a database driver that broke every connection in the serverless runtime, and a signup form that tried to POST to localhost. Both found and fixed on launch day.

The honesty passtrust

Before launch we audited our own marketing site against D-007 — the locked decision that Repose competes on trust. The draft site claimed "100+ regions" (there were 6 simulated ones; today there are 3 real), documented a CLI that doesn't exist, and had a changelog full of fictional releases — including, yes, a fake version of this very page, with invented customer quotes from people who don't exist.

All of it came down. Region counts corrected everywhere, roadmap features labeled as roadmap, fabricated pages unmounted until they could be true. This changelog is the replacement: generated from the real git history, verifiable against the product.

v0.0.1 feature-completefeature

One month of building, and the whole product loop works end to end:

  • Four check types — HTTP, TCP, DNS, SSL — from 3 continents on a consensus engine that requires multiple regions to agree before anyone is paged.
  • Dependency-aware suppression — a live mirror of major provider status pages tags upstream incidents (Stripe, Cloudflare, GitHub…) instead of paging you for their outage.
  • Mercury — AI post-incident summaries written the moment an incident pages.
  • On-call rotation with email paging, Slack/Discord/email channels, team invites, public status pages with 7-day uptime bars, and an immutable audit trail behind every alert decision.

Hello, worldlaunch

Repose gets a name, a domain, and a first commit. The pitch that started it: every monitor competes on probe count; nobody competes on whether the 3am page is real. Wake up for what actually matters.