Skip to content

Start here

Overview

What Lamp is, and how to run it on your own computer in a few commands.

On this page
<p align="center"> <a href="https://justevery.com/#vol-lamp"> <picture> <source media="(prefers-color-scheme: dark)" srcset=".github/assets/banner-dark.webp"> <source media="(prefers-color-scheme: light)" srcset=".github/assets/banner-light.webp"> <img src=".github/assets/banner-light.webp" width="100%" alt="Lamp: When something breaks, turn the light on."> </picture> </a> </p><p align="center"><a href="https://justevery.com">Part of Just Every</a> · <a href="LICENSE">MIT licensed</a></p>

Lamp is a self-hosted status page and incident communication desk for one business, with a real Cloudflare Worker, D1, R2, Queue runtime, generated setup configuration, and a schema-validated release record. Source verification, deployment and provider acceptance are separate outcomes; each adopting installation must record its own acceptance evidence.

The canonical source repository is just-every/run-lamp. This is Lamp 1.3.0; see CHANGELOG.md. A passing rer verify proves the source on your computer; a hosted installation, DNS and live mail delivery are proven per installation with ACCEPTANCE.md. This is the authoritative edition source for maintainers, owners and community publishers. See AUTHORING.md for source selection, local capability publication and the shared workflow.

Run it on your computer

  1. Install Node 22.20.0, pnpm 10.12.4 and Git, clone this repository and open its directory.
  2. rer install.
  3. rer setup --owner-email you@example.com builds Lamp, applies the local migrations, writes fresh private settings to .dev.vars (mode 0600, never printed), creates you as the first owner and stops again. Leave out --owner-email to be asked.
  4. rer dev serves Lamp and prints RER_READY http://127.0.0.1:8787 and a private local owner entry URL.
  5. Open the printed private entry URL to work as the local owner. To exercise email sign-in, sign out, request a link at /signin, and open its confirmation page from the development outbox (rer outbox prints its address). No email is sent. The first time, Lamp opens first-run setup at /setup: confirm your page name, description, time zone and colour, and Lamp opens your Overview with its setup checklist.

No Cloudflare account, mail key or other provider credential is needed. --port P picks another port (a busy port fails instead of moving); rer dev --stop stops the server.

Locally the app host is 127.0.0.1 and the page host is localhost, on one port:

  • Lamp landing page, sign-in and the operator app: http://127.0.0.1:8787/, /signin, /app
  • Public status page, history, feed and widget: http://localhost:8787/, /history, /feed.atom, /widget.js

Then, as you need them:

Shell
rer verify                                  # the complete local verifier
rer dev --stop                              # stop Lamp before a backup, reset or restore
rer export --output exports/lamp.rer        # back up
rer reset --yes                             # remove local data, owner, outbox and private settings
rer import --input exports/lamp.rer --yes   # restore into the emptied installation
rer setup --owner-email you@example.com     # the owner's email again, after an import
rer dev                                     # start Lamp again
rer deploy --dry-run
rer describe                                # every command, flag and local path

node scripts/install.mjs opens the same setup in a browser, with an option to host Lamp in your own Cloudflare account. See RUN-LOCALLY.md and SEED-COMMAND-CONTRACT.md for the shared command behaviour.

The development outbox shows captured sign-in, subscription and notification mail on loopback hosts only; production builds have no outbox. The landing page at /, /signin, /setup, /app, /api/app and /health belong to the app host; public paths, including the status page at /, belong to the page host. Every deployment uses two distinct hostnames.

/app and /api/app/* always require a server-side operator session.

Moving in

Use Settings → Move in to bring your components, incident history, maintenance and eligible email subscribers into Lamp. Review a dry run first, then see the move-in guide for source-specific steps and cutover checks.

This page is drawn from README.md in the repository. Edit it on GitHub.