Can I vibecode Instatus?

KINDA · weekend project
price variesbuild time a weekendcategory ⏱️ uptimereplaced by 0 people

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'.

the 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.

$ open in your agent (prompt prefilled, you press enter) or copy it raw · this prompt is generated from the build plan · improve it via PR

why people still pay

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 with one prompt"
questions
Can I vibecode 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's pricing is usage-based or varies by plan · AI-drafted from a site submission; price unverified..

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.

Every week, more subscriptions die.

New verdicts, new prompts, the week's most-doomed apps.
One email. Unsubscribe in one click.

free forever · no scanner spam · the prompt stays on the site, the deaths come to you

$weekly: what got a verdict, what died.