03:12 — orbit-blog stopped answering

Your site went down at 3 a.m. You fixed it from bed.

Watchbell watches your Vercel apps, databases and domains on free plans. When something breaks it works out a fix and asks you first, on Telegram. One tap, and it's back.

Set it up tonightTry the demoFree, open source, runs on your machine.
03:13▮▮▮ 42%
WB
Watchbellbot
orbit-blog is down.
No answer on 3 checks in a row. The deploy from 02:58 is the likely cause.

Roll back to the previous deployment?03:12
ApproveReject
Rolling back production. Sure?03:13
Yes, roll backCancel
Yes, roll back03:13
orbit-blog is back. Answered in 184 ms. Go back to sleep.03:14
One night with Watchbell

What actually happened.

Nothing here is a mock-up of a feature we plan to build. It is what Watchbell does today, on a laptop or a small server, with your own free accounts.

02:58

You pushed a small change and went to bed.

Vercel built it and put it live. Watchbell saw the new deployment come in.

03:12

The site stopped answering.

Watchbell checks every app once a minute. Three misses in a row, so it is down, not just slow.

03:10:00 GET orbit-blog.example 200 212 ms
03:11:00 GET orbit-blog.example timeout 5 s
03:12:00 GET orbit-blog.example timeout 5 s
03:12:00 alert: orbit-blog down · proposed fix: roll back
03:13

It asked. You said yes. Twice.

Risky fixes never run on their own. A rollback asks for a second tap, so a sleepy thumb can't do it by accident. It works without a public address: no webhook, no tunnel.

03:14

Back up, and checked.

Watchbell rolled production back to the last good deployment, then checked the site again before calling it fixed.

response184 msdown for2 min 40 sactionrollback · approved by you
07:00

Over coffee, the short version.

A morning email with what happened overnight, plus the things that are about to become a problem.

From: Watchbell · Subject: Daily summary, 21 Oct
1 incident, fixed. orbit-blog was down 03:12–03:14; rolled back.
  • Supabase "shop-db": 82% of the free database size.
  • status.acme-studio.example: certificate renews in 12 days.
  • Neon "analytics": 46 of 100 compute hours used.
09:30

At your desk, everything on one board.

Open Watchbell and the whole night is there: the incident, the rollback, who approved it, and the state of everything else.

The board

Every app, database and domain. One page.

Read through each provider's own API, with a token you paste once and that never leaves your machine.

Statuschecked 14 s ago · every 60 sTue 21 Oct · 09:30
NameStateDetailLast 90 days
Apps · Vercel
orbit-blogorbit-blog.examplerecovered184 ms · rolled back 03:14
acme-shopshop.exampleup212 ms
ember-statusstatus.ember.exampleup96 ms
Databases
shop-dbSupabase · Singapore82% full412 / 500 MB · kept awake
analyticsNeon · compute asleepidle46 / 100 CU-h this month
Domains
status.acme-studio.exampleCloudflare DNS → Vercelcert 12 dregistration 214 d
shop.exampleCloudflare DNS → Vercelvalidcert 71 d · registration 1 y
8 resources · 1 recovered tonight · 2 need attention soonMade-up data from the demo

Works with Vercel, Supabase, Neon, Firebase, Turso, Upstash Redis, Cloudflare (DNS and D1) and GitHub.

It also keeps an eye on

The slow problems, not just the loud ones.

Free-plan limits
Usage against every free limit, with an alert before the edge, not after.
Sleepy databases
A free Supabase project pauses after a quiet week. Watchbell warns on day 5 and keeps it awake. Neon is read without waking the compute.
Certificates and domains
Certificate and registration expiry, and a warning when Cloudflare's proxy sits in front of Vercel.
Your cron jobs
Each job pings its own address; Watchbell tells you when a ping is late. /api/ping/<token>
Vulnerable packages
Advisories for your GitHub repos, and a proposed pull request that updates the package.
Read-only SQL
Query Supabase and Neon as a role that can't write, inside a transaction that is rolled back anyway.
AI, if you want it
Your own Gemini, Workers AI or local Ollama key, behind one OpenAI-compatible endpoint and an MCP server. Off by default.
A status page
An optional public page and uptime badges for your READMEs.
Set it up tonight

Two commands. No account.

  1. Install Node.js 24, if you don't have it.
  2. Install Watchbell: npm install -g watchbell. Prebuilt, nothing to compile.
  3. Start it: watchbell, then open the address it prints and enter the one-time code.
  4. Connect Telegram and paste a Vercel token. That's the 03:12 part sorted.
~bash
$ npm install -g watchbell
added 1 package in 4s
$ watchbell
Watchbell 1.1.0
Created ~/.watchbell/.env with new secrets (they are not shown).
Starting on http://localhost:3100 ...
Watchbell setup code: 7HQ2M-XK4PA (valid 24 h)
Watchbell scheduler started (collector every 60 s, daily at 03:00)

Watchbell is running at http://localhost:3100
$ watchbell service install --yes
Watchbell will start when you log in.
The fine print
Runs onLinux, Windows 10/11 and macOS, with Node.js 24. The database is built in.
Your dataStays in ~/.watchbell. Tokens are encrypted (AES-256-GCM).
Talks toOnly what you connect, plus npm once a day to see if there's a new version (you can turn it off).
While asleepA sleeping laptop checks nothing. For the 03:12 story, run it on a machine that stays on.
CostsNothing. MIT licensed.
Questions
Do I need a server?

No. A laptop works while it's awake. A home server, an old PC or a small VPS gives you the 3 a.m. coverage.

Can I open it from my phone?

It listens on its own machine by default. Use an SSH tunnel, or start it with --host on your home network. The Telegram buttons work either way.

Is there a Docker image?

Not yet. Use npm or the installers.

Does it need AI?

No. Every AI feature is optional and off until you add your own key.