Ephemeral group chat. No login. No history. Messages burn 10 seconds after reading.
ghostroom/
frontend/ Next.js (App Router) + Tailwind + Framer Motion
backend/ Express + Socket.io
- In-memory only — messages live in a
Map()on the server. Server restart = everything gone. - Per-user burn — each user gets an independent 10s countdown after reading a message.
- No database, no auth — just
localStoragefor display names.
- Node.js 18+
- npm
cd backend && npm install
cd ../frontend && npm installTerminal 1 (backend):
cd backend
npm run devTerminal 2 (frontend):
cd frontend
npm run dev- Frontend: http://localhost:3000
- Backend: http://localhost:3001
Frontend (frontend/.env.local):
NEXT_PUBLIC_SERVER_URL=http://localhost:3001
Backend (backend/.env):
PORT=3001
CORS_ORIGIN=http://localhost:3000
- Connect the
frontend/directory to Vercel. - Set
NEXT_PUBLIC_SERVER_URLto your backend URL.
- Deploy the
backend/directory. - Set
PORTandCORS_ORIGIN(your Vercel frontend URL). - Run
npm run build && npm start.
| Direction | Event | Description |
|---|---|---|
| C -> S | create_room |
Create a new room |
| C -> S | join_room |
Join with username |
| C -> S | send_message |
Send a message |
| C -> S | message_read |
Mark message as read |
| C -> S | typing_start/stop |
Typing indicators |
| S -> C | new_message |
Broadcast message |
| S -> C | message_read_ack |
Updated readBy |
| S -> C | room_users |
Online user list |
| S -> C | rate_limited |
Rate limit warning |