Changelog.

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

Euro prices, and the plans got new namesfeature

If you're in a euro country, you now pay in euros: €10, €29, €99 or €299 a month — the same numbers as the dollar prices, before VAT. Until now Stripe converted the dollar amount at checkout, so you paid something like €25.31 and it moved with the exchange rate. Said plainly: at today's rate the round number costs a euro buyer about 15% more than a dollar buyer. We chose one price list we can keep true over two that drift. Nothing changes for anyone already subscribed — a subscription stays in the currency it started in. The page picks the currency from where you are; checkout adds VAT on top and takes a VAT ID.

The paid plans are now called Indie, Team, Agency and Scale (they were Solo, Starter and Pro). Same prices, same limits; the names say who each one is for. Invoices from before the change keep the old name.

And one thing that broke: for about an hour on 21 September, every upgrade button ended on an error page. The key our app uses to talk to Stripe had expired and nobody was warned. Nobody was charged and no subscription was touched, but if you tried to upgrade that hour, that's why. If it ever happens again you'll see a plain message instead of an error page, and it's logged so we find out before you write to us.

Two things we had wrong, fixedtrust

Discord alerts never worked. We sent Discord the message format Slack uses, and Discord answers that with "cannot send an empty message". Nobody had connected a Discord channel yet, so no alert was lost — but the option was on the page and it was broken. It sends the right thing now, and there's a test that says so.

The pricing page claimed US / EU / APAC data residency on Scale. Nothing like it exists. The row now says what's true on every plan: your data is stored in the EU, in Frankfurt. The same page listed Microsoft Teams as an alert channel when you couldn't add one; see the next entry.

Teams, and a webhook of your ownfeature

Two new alert channels on every plan. Microsoft Teams gets a card with Acknowledge and Open incident buttons, through a Teams workflow webhook. Your own webhook gets the incident as plain JSON — event, severity, title, incident and acknowledge links — so your own glue can route it into PagerDuty, Opsgenie or whatever you run. We don't speak their formats natively. Any 2xx counts as delivered; we don't follow redirects and only call public https hosts. The Teams card is built to Microsoft's documented format but hasn't been tried against a live tenant by us yet — tell us if yours disagrees.

Four rows on the pricing page stopped saying "coming"feature

Multi-step API checks (Team and up): up to eight requests in a row from each region, passing values along — log in, take the token, load the orders. Saved values are masked in incidents, a variable can never choose the host, and redirects aren't followed.

Client reports (Agency): on the 1st, your client gets last month's uptime in their own inbox, under your name, logo and colour. Several on-call rotations (Agency: 10, Scale: 50): each monitor pages the rotation you point it at. Single sign-on (Agency): OpenID Connect or SAML, on a domain you've proven is yours with a DNS record, and you can require it.

Two rows still say "coming" because they are: a Terraform provider and browser checks.

The $99 plan is for agencies nowfeature

One subscription covers up to 50 client workspaces sharing 500 monitors as a pool, with white-label status pages, a screen that shows every client with the ones in trouble first, and a switch to keep a monitor off a client's public page. Written up for the people it's for at /agencies.

Check any site from three continents, no signupfeature

The box on the homepage and the down checker run a real check from Amsterdam, Virginia and Singapore while you watch, and say what Repose would have done about it. Sign up from there and the site you checked becomes your first monitor.

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.