Vibecode Instatus

track this build4 phases, 12 steps, beginner friendly
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 project pack5 files · written for this build, step by step
README.md
# Instatus · indie build

A status page and incident communication tool where the interesting constraints are all availability and honesty: independent infrastructure, a page that degrades to static, notifications that go out through a path unaffected by your outage, and a subscriber list that is a liability if handled carelessly.

Estimated effort: **weekend**. Work `BUILD_PLAN.md` top to bottom · every phase ends in a check that has to pass before the next one starts.

## Stack

| Part | Choice | Why |
| --- | --- | --- |
| Hosting | Static generation to object storage with a CDN, on a separate account | a page with no application server has very little that can fail |
| Authoring | A small application, deliberately elsewhere, that publishes the static page | the authoring tool going down must not take the page with it |
| Checks | External probes from a third party or a separate region | a check running inside the system it monitors reports success during an outage |
| Notifications | Email and webhooks through a provider unrelated to your product | notifying subscribers must not depend on the thing that is broken |
| Data | A small database for the authoring side only | the published page is files, so the database being down does not affect readers |

## Before you start

Have every one of these ready. The plan assumes them from step one.

- [ ] **Node.js 22 or newer** · free
  - Why: Runs the authoring application and the static generator.
  - Get it: nodejs.org, or nvm install 22.
  - Verify: node --version prints v22 or higher
- [ ] **A hosting account separate from your product** · pennies per month for static hosting
  - Why: This is the whole build. A status page on the same account as the product fails at exactly the moment it is needed.
  - Get it: A second account with a different provider if possible, with its own billing so a payment problem cannot take down both.
  - Verify: A written list shows no shared dependency between the page and the product
- [ ] **A domain or subdomain with independent DNS** · the price of a domain, or free for a delegated subdomain
  - Why: Sharing a DNS provider with the product means a DNS incident removes both, and DNS incidents are a common cause of total outages.
  - Get it: A subdomain delegated to a different provider, or a separate domain entirely.
  - Verify: Resolving the status hostname does not depend on the product's DNS provider
- [ ] **A notification provider unrelated to the product** (optional) · free tiers cover a small subscriber list
  - Why: Notifying subscribers through the mail infrastructure that is currently broken sends nothing.
  - Get it: Any transactional email provider, with credentials stored somewhere retrievable during an outage.
  - Verify: A test notification sends and the credentials are retrievable without the product being up
- [ ] **What each component status means and who may declare one** · free
  - Why: During an incident nobody has time to decide whether this is degraded or partial, and inconsistent statuses are what make a page untrustworthy.
  - Get it: Write one sentence defining each status, and name who may post. Do it before the first incident, not during it.
  - Verify: A written definition exists for every status level and the page links to it

## Quick start

Follow Phase 1 in `BUILD_PLAN.md`; it creates the project.

Then copy `.env.example` to `.env` and fill in the values it documents.

## Honest limits

This build deliberately does not replace:

- Deep integrations with monitoring platforms.
- Multi-tenant hosting for other companies.
- SMS and phone notifications.
- Private status pages with per-customer authentication.
- 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 one of those is essential to you, that is the reason to keep paying for Instatus, and the README should say so rather than pretend.

$ choose a build depth, inspect the files, then open the complete pack in your agent

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