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.

VA-11 Chat cocktail mark

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.