Real-time collaborative notepad. Share a room code and anyone can edit the same document simultaneously. All data exists only in memory and vanishes when everyone leaves.
- Ephemeral — No data is stored on a server
- Real-time sync — Yjs CRDT + WebRTC P2P for conflict-free collaboration
- No login required — Anyone can join instantly
| Area | Technology |
|---|---|
| Framework | SvelteKit (Svelte 5) |
| Real-time sync | Yjs + WebRTC (P2P) |
| Editor | Tiptap (WYSIWYG block editor) |
| Styling | Tailwind CSS v4 |
| Signaling | Hono + WebSocket (Node.js) |
| Deployment | Vercel (frontend) + Render (signaling) |
| Testing | Vitest + Playwright |
- Short alphanumeric room codes (Google Classroom style)
- Join by entering a room code
- Data is destroyed when all participants leave
- Notion-style WYSIWYG markdown editor
- Real-time co-editing via Yjs CRDT (conflict-free)
- No login — join instantly as a guest
- Nicknames auto-assigned as
Guest(random)or user-defined, persisted in localStorage
- Live display of connected users in the room
Browser A ──┐ ┌── Browser B
│ WebRTC P2P (Yjs) │
└────────────────────┘
│
signaling only
│
┌────────────────┐
│ Signaling Server│ ← Hono + WebSocket
│ (Render.com) │ y-webrtc protocol
└────────────────┘
The signaling server only brokers initial WebRTC connections. All document data flows directly between browsers via P2P.
- Node.js 20+
- Bun
# Install dependencies
bun install
# Install signaling server dependencies
cd signaling && bun install && cd ..You need two terminals — the signaling server and the SvelteKit dev server:
# Terminal 1: Signaling server (ws://localhost:4444)
bun run signaling
# Terminal 2: SvelteKit dev server (http://localhost:5173)
bun run devOpen http://localhost:5173, create a room, and open the same URL in another tab to test real-time sync.
bun run test # Unit tests (Vitest)
bun run test:e2e # E2E tests (Playwright)bun run build # SvelteKit production build| Service | Platform | Config |
|---|---|---|
| Frontend (SvelteKit) | Vercel | Auto-deployed on push |
| Signaling (Hono) | Render | render.yaml |
See signaling/README.md for signaling server details.