Gerçek zamanlı çoklu kullanıcılı whiteboard demosu — sınırsız tuval, CRDT tabanlı sync, edge-first latency. Excalidraw + Figma arası dengeli bir takım deneyimi.

Tahta, ekiplerin tek URL ile aynı anda whiteboard üzerinde çalışmasını sağlayan CRDT + edge-first sync demosudur. Mevcut sürüm tek-kullanıcı browser-only çalışır; gerçek deploy'da Yjs awareness + Cloudflare Durable Objects kombinasyonu ile <50ms latency hedeflenir.
Bu demoda CRDT teknik derinliğini ve edge-state mimarisini gösteren statik bir whiteboard sunulur — gerçek zamanlı multi-cursor mock'u (rastgele konumlardaki ekip üyeleri) içerir.
localStorage'a, "snapshot indir" tek tık| Layer | Technology |
|---|---|
| Framework | Svelte 5 (rune-based reactivity, class-store pattern) |
| Build | Vite 7 |
| Styling | Tailwind CSS 4 |
| Canvas | SVG (her şape native SVG element, kolay export) |
| State | BoardStore class içinde $state field'ları + localStorage |
| Sync (production) | Yjs awareness + Cloudflare Durable Objects + R2 snapshot |
| Deploy | Cloudflare Pages |
![]() |
![]() |
![]() |
|
git clone https://github.com/Lavescar-dev/tahta.git
cd tahta
npm install
npm run dev # → http://localhost:5173
Build:
npm run build # → dist/
npm run preview
| Kısayol | Aksiyon |
|---|---|
V |
Seç aracı |
P |
Kalem |
T |
Yazı |
N |
Sticky note |
R |
Dikdörtgen |
O |
Daire |
L |
Çizgi (ok) |
E |
Silgi |
Shift+Drag |
Pan (kaydır) |
Scroll |
Zoom |
Demo single-user çalışır. Gerçek multi-user için önerilen mimarı:
┌──────────────────┐ WebSocket ┌─────────────────────┐ R2 PUT
│ Browser (Yjs) │────────────▶│ CF Durable Object │────────▶ R2 snapshot
│ + awareness │ /ws/:room │ (Y.Doc state) │ every 30s
└──────────────────┘ └─────────────────────┘
▲ pop-up cursor │ broadcast
│ ▼ to all clients in room
┌──────────────────┐
│ Other browsers │
│ (canlı sync) │
└──────────────────┘
Y.Map for shape index, Y.Array for ordered z-index, Y.XmlText for inline text editsY.encodeStateAsUpdate(doc) → R2 PUTBoot anında Sprint 24 Roadmap board'u yüklenir:
Demo verisini sıfırlamak için sağ alt ↻ Reset butonu.
Cloudflare Pages için doğrudan repo bağlanır:
| Field | Value |
|---|---|
| Build command | npm install && npm run build |
| Build output directory | dist |
| Node version | 20 |
MIT © 2026 Lavescar
Built by Lavescar · Portfolyo · [email protected]