VA-11 Chat
A late-shift corner for a handful of people and one topic. Self-hosted, quiet, and built to leave no residue: open the room, talk freely, walk out.
Bar-counter energy, not a workspace
Named for the mood of VA-11: neon over a small counter, unhurried messages, a place where ordinary talk can turn honest. The stack stays simple so the room stays easy to run and trust — never a feature-heavy chat platform.
Built for tonight’s booth
Invite a few people with a room link. They pick a nickname and one of eight pixel faces, talk in realtime, then leave. The product stance is chat-and-go: not an archive, not a social graph.
- Small rooms Spin up a channel and seats from a tiny admin page, enough for one topic.
- Live talk Messages move over the wire as they happen. No hosted database in the middle.
- A face at the counter Sit down as one of eight original pixel portraits. That face stays on the seat and beside each bubble.
- Leaves lightly Only a short local cushion stays on disk, encrypted — not a cloud transcript you keep forever.
- One process Run a single Node host with local files. Easy to understand, easy to shut down.
Open a room on your machine
For local nights only. Change every secret before you put this on a public host.
npm install
cp .env.example .env
# Replace these before production; they are placeholders
ADMIN_PASSWORD=change-me \
COOKIE_SECRET=dev-cookie-secret \
MESSAGE_SECRET=dev-message-secret \
npm run dev
Walk in
Guest door: http://localhost:3000/
Owner counter: http://localhost:3000/admin
Lock the doors
Set real values for ADMIN_PASSWORD, COOKIE_SECRET, and
MESSAGE_SECRET before anyone outside your laptop can reach the room.
Hosting note
Needs a long-running Node process (VPS, Render, and similar). Keep one instance and attach disk if you use local files. Most nights, localhost is enough.