# Collaborative Cursors — Sanntids-pekere for flerbrukermiljø ## Idé Alle brukere som er på samme arbeidsflate ser hverandres musepekere som fargede prikker med navn. Fungerer på spatial canvas, storyboard, kanban, whiteboard og kalender. ## Hvorfor interessant? Gir "jamming together"-følelse under innspilling og planlegging. Produsent og host ser hverandre jobbe i sanntid uten å snakke om det. Essensielt for delte arbeidsflater (møterom, studio). ## Fungerer slik 1. Klient sender `{ user_id, x, y, context_id }` via WebSocket ved musebevegelse (throttlet til ~10 Hz) 2. Portvokteren broadcaster til andre klienter i samme kontekst 3. Andre klienter renderer fargede SVG-sirkler med brukernavn 4. Prikken fader ut etter 5 sekunder uten bevegelse 5. Valgfritt: kort "trail" som viser bevegelsesretning ## Teknisk implementering ### Kanal Bruker eksisterende WebSocket-tilkobling til portvokteren. Ny meldingstype `cursor_move` som **ikke** persisteres i PG — dette er ephemeral data som kun lever i minne. ``` Klient → WS → portvokteren → broadcast til andre i samme context_id ``` Portvokteren holder en in-memory map: ```rust cursors: HashMap<(ContextId, UserId), CursorPosition> ``` Ryddes automatisk ved disconnect eller timeout (5s). ### Throttling Klientside: `requestAnimationFrame` + 100ms minimum intervall. ~10 meldinger per sekund per bruker. Ved 10 samtidige brukere i ett rom: ~100 meldinger/sekund — trivielt for WebSocket. ### Rendering Canvas-laget (over objektene, under toolbar): ```svelte {#each cursors as cursor (cursor.userId)}