synops/docs/retninger/arbeidsflaten.md
vegard 9fefa0a8c2 Arbeidsflaten: workspace+tools-modell erstatter vokse-modellen
Ny retning: arbeidsflaten.md — spatial canvas med verktøy-paneler.
Drag-and-drop mellom verktøy oppretter nye noder med source_material-edges.
Noder muterer ikke — de føder nye noder.

Oppdatert docs:
- universell_input.md: "retyping" → "nye noder fra eksisterende"
- rom_ikke_forum.md: "bli" → "føde", siloer → verktøy-paneler
- universell_overfoering.md: blokker → verktøy-paneler, dual-modell
- meldingsboks.md: multi-rolle → visning i flere kontekster

Nye docs:
- arbeidsflaten.md: retning med kompatibilitetsmatrise og inkompatibilitet
- artikkelverktoy.md: langform TipTap-editor med drag-and-drop mottak

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 01:18:35 +00:00

8.1 KiB

Arbeidsflaten — verktøy og rom

Status: Besluttet.

Arbeidsflaten er en spatial canvas der verktøy-paneler lever side ved side. Brukeren arrangerer sitt eget rom. Drag-and-drop mellom verktøy er kjerneinteraksjonen. Innhold flyter mellom verktøy via nye noder og edges.

Observasjoner

Synops har bygget chat, kanban, kalender, studio, kunnskapsgraf — hver som sin visning. De er alle spørringer mot samme graf, men de lever på separate ruter (/chat/[id], /board/[id], /calendar). Brukeren navigerer mellom dem.

Tidligere beskrev vi at innhold "vokser" mellom kategorier: en chatmelding kan "bli" en artikkel ved å få edges. Arkitektonisk elegant, men klønete i praksis — du vil ikke redigere en chatboble til en langform-artikkel.

Observasjoner som ledet hit:

  • Verktøy-spesifikke oppgaver trenger verktøy-spesifikke grensesnitt. En artikkel-editor er ikke en chat-input. Et lydstudio er ikke en medieavspiller. Å late som alt er én overflate gir dårlig UX.
  • Kontekstbytte koster. Å navigere mellom /chat og /board og /calendar bryter flyten. Verktøyene bør leve side ved side.
  • Innhold bør flyttes mellom verktøy, ikke muteres. Når en chatmelding inspirerer en artikkel, bør resultatet være en ny artikkelnode med en edge tilbake til meldingen — ikke en mutert melding.

Tesen

Arbeidsflaten er et personlig rom med verktøy-paneler. Brukeren arrangerer sin egen flate med de verktøyene de trenger. Drag-and-drop mellom paneler er den primære interaksjonen for å flytte innhold.

Nøkkelprinsipp: Noder føder nye noder. Når innhold flyttes mellom verktøy, opprettes nye noder med source_material-edges tilbake til kilden. Originalen forblir uendret. Artikkelen sporer sine kilder gjennom grafen.

Verktøy-paneler

Hvert verktøy er en selvinneholdt Svelte-komponent som:

  • Tar nodeId / collectionId + config som props
  • Håndterer egen datahenting og tilstand
  • Respekterer container-størrelse (responsive innenfor panelet)
  • Kan maksimeres til fullskjerm
  • Implementerer drag-and-drop mottak der det gir mening
Verktøy Hva det gjør Aksepterer drag
Chat Sanntidsmeldinger i kommunikasjonsnode Vilkårlig node → del som melding
Artikkelverktøy TipTap langform-editor Chatbobler, tekst, transkripsjoner, bilder, lyd
Kanban Oppgavestyring med kolonner Chatbobler, tekst → ny oppgave
Kalender Tidslinje med scheduled-edges Kanban-kort, chatbobler → ny hendelse
Lydstudio Waveform-redigering, ffmpeg-prosessering Lydfiler → åpne i studio
Kunnskapsgraf D3-visualisering av noder og edges — (visuell utforsker)
Transkripsjon Segmenter synkronisert med lyd — (les-visning)
Dagbok Private notater, kronologisk — (personlig)
AI-verktøy Konfigurerbar AI-tekstbehandling med prompt-velger Tekstnoder, chatbobler, transkripsjoner → AI-prosessert output

Drag-and-drop mellom verktøy

Mekanisme

  1. Bruker drar en node fra verktøy A
  2. Under drag vises drop-soner i kompatible verktøy
  3. Ved drop: mål-verktøyet bestemmer hva som skjer
  4. Typisk: ny node opprettes + source_material-edge til kilden
  5. Alternativt: eksisterende node får ny edge (lettvekts-triage)

To moduser

Modus Hva skjer Når
Innholdstransfer Ny node opprettes med source_material-edge Innholdet transformeres (chat → artikkel, chat → oppgave)
Lettvekts-triage Eksisterende node får ny edge Kontekst legges til (node → kanban-board, node → kalender)

Default avhenger av verktøy-paret. Bruker kan overstyre med modifier-tast (Shift = alltid ny node).

Kompatibilitetsmatrise

Kilde → Mål Artikkelverktøy Chat Kanban Kalender Studio
Chatboble Ny artikkelnode, sitert tekst, source_material (samme kontekst) Ny oppgave + source_material Ny hendelse + source_material
Tekst/notat Kopier inn, source_material Del som melding med mentions Ny oppgave Ny hendelse
Lydfil Sett inn avspiller, has_media Del med mention Åpne i studio
Lydfil → Lydfil Inkompatibel
Transkripsjon Sett inn tekst + source_material Del utdrag
Kanban-kort Kopier innhold + source_material Del som melding (flytt mellom kolonner) Legg til scheduled edge
Bilde Sett inn + has_media Del som melding
Vilkårlig node Del-melding med mentions
AI-verktøy → node

AI-verktøy som mål:

Kilde → AI-verktøy Resultat
Chatboble Ny node med AI-output + derived_from-edge
Tekst/notat Ny node med AI-output + derived_from-edge
Transkripsjon Ny node med AI-output + derived_from-edge
Lydfil/bilde Inkompatibel: "AI-verktøyet behandler kun tekst"

AI-verktøy som kilde (dra verktøyet → tekstnode): Modifiserer noden in-place. Originalen versjoneres. Se docs/features/ai_verktoy.md.

"—" betyr at kombinasjonen ikke gir mening og drop-sonen er inaktiv.

Inkompatibilitet

Ikke alt kan gå overalt. Når en drag er inkompatibel:

  1. Visuell feedback: Drop-sonen blir rød/grå under drag-over
  2. Forklaring: Tooltip viser hvorfor — ikke bare "kan ikke slippes her"
  3. Alternativ: Foreslå en bedre handling der det er mulig

Eksempler

Forsøk Feedback
Lydfil → Lydfil "Lydfiler kan ikke slås sammen direkte. Åpne i Studioet for å redigere."
Bilde → Studio "Studioet behandler kun lydfiler."
Lydfil → Kanban "Lydfiler kan ikke bli oppgaver direkte. Dra til Chat for å dele, eller til Artikkelverktøyet for å sette inn."

Tre lag for arbeidsflaten

Hver bruker har sin egen arbeidsflate. Arrangement lagres som preferanser på brukernoden.

Lag Kilde Forrang
Personlig Brukerens eget arrangement Høyest — overstyrer alt
Node-default Samlingens traits foreslår layout Mellom — utgangspunkt
Plattform-default Synops sine standarder Lavest — fallback

Eksempel: en samling med podcast + studio + chat traits foreslår en layout med disse tre panelene. Brukeren kan flytte, legge til, fjerne paneler fritt. Arrangementet huskes per bruker per kontekst.

source_material-edge

Ny edge-type som kobler en avledet node til kilden den ble laget fra.

Artikkel-node ──source_material──→ Chatboble
Artikkel-node ──source_material──→ Transkripsjonssegment
Artikkel-node ──source_material──→ Notat

Edge-metadata:

{
  "context": "quoted",      // "quoted", "summarized", "referenced"
  "excerpt": "Den opprinnelige teksten som ble dratt inn"
}

Gir artikler sporbar lineage: du kan alltid se hvor materialet kom fra.

Forhold til andre retninger

  • Rom, ikke forum: Arbeidsflaten er rommet. Verktøy-paneler er lagene som kan slås av og på. "Trylle frem, legge fra seg" realiseres som paneler som dukker opp og forsvinner.
  • Universell input: Input-primitiven lever i hvert verktøy med kontekst-tilpasset konfigurasjon. Arbeidsflaten bestemmer hvor input havner.
  • Noder er sentrum: Verktøy er visninger av grafen. Arbeidsflaten er brukerens personlige arrangement av disse visningene.
  • Datalaget: SpacetimeDB driver sanntidsoppdatering mellom paneler. Drag-and-drop oppretter noder/edges som synkes instant.

Hva ville vært annerledes

  • Chat, kanban, kalender lever side ved side, ikke som separate sider
  • Du drar en chatboble til artikkelverktøyet i stedet for å "retype" den med edges
  • Artikkelen sporer sine kilder via source_material-edges
  • Inkompatible handlinger gir tydelig feedback med forklaringer
  • Brukerens arrangement er personlig og persistent — du setter opp arbeidsflaten din én gang og den huskes