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>
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
- Bruker drar en node fra verktøy A
- Under drag vises drop-soner i kompatible verktøy
- Ved drop: mål-verktøyet bestemmer hva som skjer
- Typisk: ny node opprettes +
source_material-edge til kilden - 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:
- Visuell feedback: Drop-sonen blir rød/grå under drag-over
- Forklaring: Tooltip viser hvorfor — ikke bare "kan ikke slippes her"
- 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