58 lines
1.8 KiB
Markdown
58 lines
1.8 KiB
Markdown
# 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
|
|
|
|
```sh
|
|
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
|
|
|
|
```sh
|
|
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:
|
|
|
|
```sh
|
|
~/.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:
|
|
|
|
```sh
|
|
qrencode -s 12 -m 2 -o /tmp/k484-qr.png "https://<your-url>" # then scan it
|
|
```
|