server/docs/features/produktivitetssuite.md

2.3 KiB

Feature Spec: Produktivitetssuiten

Filsti: docs/features/produktivitetssuite.md

1. Konsept

En asynkron og synkron arbeidsflate der Kunnskapsgrafen møter prosjektstyring. Temaet er hovedobjektet, ikke episoden.

2. Datastrukturer og Ansvarsfordeling

Dette systemet bruker SpacetimeDB tungt for sanntidsopplevelsen.

  • Tema-bassenget (PostgreSQL + SpacetimeDB): Alle pågående "Saker". PostgreSQL er kilden til sannhet (langtidslagring), mens SpacetimeDB holder de aktive temaene i minnet slik at chat og oppdateringer skjer uten page-reloads.
  • Trådet Chat (SpacetimeDB): Meldinger sendes via SpacetimeDB. Hver melding tilhører et Tema. Meldinger kan ha en parent_message_id for å skape tråder.
  • Sanntids Autocomplete & Mentions (Mobil-optimalisert):
    • Siden SpacetimeDB synkroniserer data til klienten, skal Svelte-grensesnittet ha umiddelbar autocomplete på tekstfeltet.
    • Trigger-tegn: / (for kommandoer som /oppgave), @ (for brukere/redaksjonsmedlemmer), og feks # (for Temaer/Aktører fra Kunnskapsgrafen).
    • Skriver man #Ha... filtrerer Svelte-klienten umiddelbart den lokale SpacetimeDB-cachen og viser en klikkbar/tappbar liste (f.eks. "Hans Petter Sjøli", "Høyre"). Ved trykk settes hele navnet inn, og det lenkes automatisk opp i databasen.
  • Kanban / Kjøreplan (SpacetimeDB): Opprettelse av en Episode fungerer som en container. Brukerne drar Temaer fra Tema-bassenget og inn i en Episodes Kjøreplan (Drag and Drop i SvelteKit). Posisjon/Rekkefølge synkroniseres til alle klienter via SpacetimeDB.
  • Kollaborative Show Notes: Et tekstfelt koblet til et Tema. Enkle "Operational Transformation"-aktige oppdateringer (eller felt-låsing) håndteres i Rust-modulen til SpacetimeDB.
  • Live Studio-Markører ("Blooper-knapp"): En funksjon i Svelte-studioet der brukere kan trykke på en knapp under innspilling. Dette fanger opp gjeldende opptakstid (timer/min/sek) og lagrer det i SpacetimeDB som et "Klippepunkt" koblet til episoden.

3. Instruks for Claude Code

  • Bruk SvelteKit for Drag-and-Drop grensesnitt. Unngå tunge biblioteker hvis native HTML5 Drag and Drop er tilstrekkelig.
  • SpacetimeDB skal fungere som "State Manager". Frontend bør ikke ha kompleks lokal state (f.eks. Redux); den skal speile SpacetimeDB sin tilstand.