Skip to content

Repository files navigation

Umbra — messages only two people can read

Umbra

Messages only two people can read.
End-to-end encrypted chat. Every message is sealed on your device with the Signal protocol before it touches the network — the server relays ciphertext and understands none of it.

Visit the landing page · Open the app


A scroll through the page

One message, followed from Bob's phone to Kate's — the whole page is that journey.

Press send — or just keep scrolling
01 — You send it. Press send yourself, or just keep scrolling; the page sends it for you.
Ciphertext, inside TLS — the wire
03 — In transit. Ciphertext inside TLS. Anyone listening — provider, wifi, anyone — records noise.
We pass the letter. Still sealed.
05 — Relayed. The envelope moves the instant Kate is reachable. Same ciphertext in, same out.
Private by construction, not by promise
Private by construction. Signal protocol on every message, a server that knows nothing, deletes that delete.
That's the whole story. We're just the courier.
The whole story. Runs in your browser, installs as an app, free.
Umbra landing on mobile
Fully responsive. Same journey, one hand.

Every capture above is the live page — type in the hero terminal and the ciphertext line re-seals with your words; they even ride along into the journey's chat bubbles.


What this repo is

The source of Umbra's landing page — the site's business card, served at fireplace.ignorelist.com/welcome/.

It's a single static page, built by hand:

  • Astro (static output) + Lenis smooth scroll — no page framework, no GSAP.
  • Hand-rolled canvas modules: a draggable dot-globe, a live "what our server sees" encryption demo, and an 800vh scroll-driven journey of a message — a custom scroll-progress engine that walks one message from a sender's phone, through the relay, to the recipient, seal intact the whole way.
  • Interactive on purpose: type in the hero terminal and watch your words turn into the real 3: PreKey envelope shape; write in the phone composer and send the message yourself.

The Umbra app itself (Flutter PWA + NestJS backend) lives in the main Lentach/Fireplace repository.

Content honesty rules (do not regress)

The page makes no claim the product can't back:

  • No fake trust signals — no download counts, no testimonials.
  • "Public source", not "open source" — there is no LICENSE file yet; upgrade the wording only after adding one.
  • The relay machine transforms nothing: same ciphertext in, same ciphertext out.

Repository layout

Path What it is
src/pages/index.astro The whole page: nav, globe hero, journey, features, ledger, outro
src/scripts/globe.ts Hero dot-globe (drag to rotate, Ctrl+scroll to zoom)
src/scripts/journey.ts The spine: scroll-driven journey of a message; interactive send
src/scripts/encrypt.ts "What our server sees" hero terminal demo
src/scripts/util.ts Shared math/canvas helpers
src/styles/landing.css All styling
brand/ Logo sources (SVG + rendered PNGs)

Local dev

npm install
npm run dev        # http://localhost:4321/welcome
npm run build && npm run preview

Deploy

.\deploy-landing.ps1

Builds, uploads to a staging dir on the VM, atomic-swaps into the nginx-served directory, and verifies the live URL + asset hashes. One-time nginx setup and operational details: CLAUDE.md.

nginx block (one-time server setup)

Add to the host config, alongside the existing blocks (landing assets live under /welcome/assets/):

location = /welcome { return 301 /welcome/; }
location ^~ /welcome/ {
    alias /home/ubuntu/fireplace/landing-build/;
    index index.html;
}

No try_files on purpose — alias + try_files is an nginx footgun and a single static page needs no SPA fallback. Then sudo nginx -t && sudo systemctl reload nginx. Subsequent deploys are file-only, no reload needed.


Built by one guy. Sealed on your device. See for yourself.

About

Fireplace landing page (fireplace.ignorelist.com/welcome) - Astro static site

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages