Uptime

Should you build your own Instatus?

Hosted status pages with incident updates and subscriber notifications for your users.

With trade-offs · the basics, with limitations
Price $20/moEstimated savings $240/yrEstimated time a weekendCategory UptimeCatalog votes 0

The page itself is the easy part: components, colored dots, an incident timeline, a 90 day uptime bar; an agent will hand you that in an afternoon. The notification fan-out is where it gets annoying: email is a Resend account and a loop, but you inherit double opt-in, unsubscribes, bounce handling, and explaining why the incident email landed in spam during the outage. Hosting is the other half: a status page on the same infra as the thing it reports on is decoration, so you need a separate host and domain and the discipline to keep it boring. Add the workflow Instatus quietly gives you, writing an update from your phone at 2am, per-component subscriber preferences, Slack and RSS and webhooks. Buildable in a weekend for a personal project; not the thing to hand-roll if a real customer contract mentions the words 'status page'.

ENOriginal research content in English. Original prompt preserved in English.

The complete prompt
Build a self-hosted status page app in an empty folder. Stack, no substitutions: Node 20, Fastify, better-sqlite3, server-rendered HTML via Fastify's reply.type('text/html') and plain template literal functions, vanilla CSS in one file. No React, no build step, no ORM.

What it does:
1. Public page at / showing a list of components (name, description, status: operational, degraded, partial_outage, major_outage) with an overall banner computed from the worst component status.
2. Under that, incidents newest first. An incident has a title, impact, current status (investigating, identified, monitoring, resolved), and an append-only list of timestamped updates.
3. A 90 day uptime strip per component rendered from a daily_status table (one row per component per day, worst status seen that day). Fill it from the poller below.
4. GET /api/status returning the same data as JSON, and GET /feed.rss as a valid RSS 2.0 feed of incident updates.
5. Admin at /admin behind a single bearer token from ADMIN_TOKEN in .env, checked with a constant-time compare. Forms to: set component status, open an incident, append an update, resolve it. HTML forms, no JS framework.
6. Subscribers: POST /subscribe takes an email, stores it unconfirmed with a random token, emails a confirm link. GET /confirm/:token confirms. Every email includes a working GET /unsubscribe/:token link. When an admin appends an incident update, queue one email per confirmed subscriber and send them sequentially with a small delay, logging failures to a sends table. Use Resend via fetch with RESEND_API_KEY from .env; if the key is absent, write the emails to ./outbox/ as .txt files instead so it runs offline.
7. Optional poller: a setInterval that HTTP GETs each component's check_url if set, marks degraded on slow responses over 2s and major_outage on non-2xx or timeout, and writes daily_status.

In scope: SQLite schema created on boot with migrations as plain SQL strings, seed script with three components and one resolved incident, a README that says in one sentence to deploy this somewhere other than the infrastructure it monitors.

Out of scope, do not build: multi-tenancy, SMS, Slack or Discord integrations, OAuth, custom domain automation, an analytics or telemetry call of any kind, Docker, a JS bundler.

Secrets only in .env, with a .env.example committed and .env gitignored. Include npm scripts: dev, seed, poll. It must run with npm install and npm run dev on a clean machine.

The prompt opens pre-filled in your agent. Review it before running. · this prompt is generated from the build plan · improve it via PR

Original prompt preserved in English.

What would building your own look like?

A separately hosted status page that renders component health and incident updates from a small database, with an admin form to post updates and an email blast to confirmed subscribers.

What you will need

Why paying can still make sense

Because a status page is the one page that must work when nothing else does, and paying a third party is the cheapest way to buy that independence. It is also a page customers and auditors look at, so it being slightly ugly or slightly late costs more trust than the subscription costs money. Most teams that build their own end up with a page that is technically theirs and practically unmaintained, with an incident feed whose last entry is from fourteen months ago.

What you lose

xDeliverability someone else warms up and monitors: your first incident email is also your first send reputation test

xNotification channels beyond email: SMS, Slack app, Teams, Discord, native webhooks, RSS, all of which Instatus ships out of the box

xPer-component subscriptions, unsubscribe handling, and double opt-in that you do not have to think about

xThe polish: scheduled maintenance windows, incident templates, timezone handling, embeddable widgets, public API

xReal independence, unless you actually do the work to host the page away from your own stack

prior art · use these instead of building, if you’d rather

Nothing worth pointing at. That’s why the prompt exists.

Share on X ↗"I just replaced Instatus ($20/mo) with one prompt"
Plans and pricing

How much does Instatus cost?

In your currency · US DollarChecked on 10/20/2026
Monthly billing
$20/mo
Per year
$240/yr
Buy on the official site

You complete the purchase on Instatus’s site. Vibe Radar does not handle payments.

Build or buy

Is it cheaper to build or buy Instatus?

Adjust the numbers: hours to build, your hourly rate, running costs and the subscription price.

Subscribe
Build it yourself
Horizon
Subscribe$480
Build it yourself$2,120

Over 24 months, subscribing is cheaper.

Starting hours estimated from the analysis (a weekend). Does not price what you give up (support, integrations, security).

Frequently asked questions
Can I rebuild Instatus?

Kinda. The core of Instatus is buildable in a weekend with the prompt on this page, but there are real gaps: Deliverability someone else warms up and monitors: your first incident email is also your first send reputation test, Notification channels beyond email: SMS, Slack app, Teams, Discord, native webhooks, RSS, all of which Instatus ships out of the box. Read the honest list above before committing.

How much does Instatus cost?

Instatus costs about $20/mo (Pro, checked 10/20/2026), which is $240 per year.

What do I lose by replacing Instatus?

Honestly: Deliverability someone else warms up and monitors: your first incident email is also your first send reputation test; Notification channels beyond email: SMS, Slack app, Teams, Discord, native webhooks, RSS, all of which Instatus ships out of the box; Per-component subscriptions, unsubscribe handling, and double opt-in that you do not have to think about; The polish: scheduled maintenance windows, incident templates, timezone handling, embeddable widgets, public API; Real independence, unless you actually do the work to host the page away from your own stack. If any of those are load-bearing for you, keep paying.

Is there an open-source alternative to Instatus?

No mature open-source alternative worth pointing at, which is exactly why the one-shot prompt on this page exists.

New ideas on your radar.

Get catalog updates and prompts for your next project.