SolLunar-Kitchen/README.md

1.8 KiB

KITCHEN 484 · Solarpunk Summit

Festival kitchen site: browse the food schedule, place a free pre-order, and watch it flip to READY the moment the kitchen fires it — with the stand to pick it up from.

What it is

  • index.html — customer PWA (schedule, cart, pickup codes, live status)
  • server/server.js — zero-dependency Node backend: order store, pickup codes (K484-XXXX), SSE live status, static hosting
  • server/staff.html — staff order board at /staff (passcode-gated: mark orders READY / COLLECTED / CANCELLED, filter by stand)
  • home.html — K484 association page (separate, untouched)

Payments were removed (Sep 2026): pre-orders are free reservations; people pay at the stand. The old BTCPay proxy lives in git history (commit 601c85f) if it's ever needed again.

Run

cd server
cp .env.example .env   # set STAFF_PASSCODE (openssl rand -hex 4)
node server.js         # http://localhost:8787

Orders persist to server/.data/orders.json (gitignored).

Test

cd server && npm run test:e2e   # 14 checks: order loop, auth, SSE, restart persistence

Open it on your phone

Same Wi-Fi (if the network allows device-to-device):

http://<laptop-ip>:8787          # laptop IP from: ip -4 addr | grep 10.
http://<laptop-ip>:8787/staff    # staff board (passcode from server/.env)

If the phone can't connect (some Wi-Fi networks isolate devices — this happens on ours), use a tunnel instead:

~/.local/bin/cloudflared tunnel --url http://localhost:8787
# prints https://<random>.trycloudflare.com — open that on the phone
# (URL changes on every tunnel restart)

Typing the long URL fails often (browser eats it as a search). QR to the rescue:

qrencode -s 12 -m 2 -o /tmp/k484-qr.png "https://<your-url>"   # then scan it