Grunnleggende arkitekturbeslutninger tatt og dokumentert: - Alt er noder (brukere, team, innhold, mediefiler, samlings-noder) - Edges definerer hva en node er (freeform typer, metadata i JSONB) - Materialisert tilgangsmatrise (node_access) erstatter workspace-RLS - Visibility (hidden/discoverable/readable/open) på noder - Aliaser via usynlige system-edges - Maskinrommet eier all skriving (SpacetimeDB først, PG asynk) - SpacetimeDB holder hele grafen, PG er persistent backup - Node- og edge-skjema spesifisert (docs/primitiver/) Fjernet workspace-konseptet fra hele dokumentasjonen (~40 filer). Fem retninger besluttet, én åpen (rom, ikke forum). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
124 lines
6.4 KiB
Markdown
124 lines
6.4 KiB
Markdown
# Forslag: Personlig workspace
|
|
|
|
> **Superseded (v2):** Dette forslaget er erstattet av retningen
|
|
> "noder er sentrum" (se `docs/retninger/bruker_ikke_workspace.md`).
|
|
> I v2 finnes det ingen workspaces. Privat rom oppstår naturlig:
|
|
> noder uten edges til andre brukere er ditt private rom. Personlig
|
|
> kanban, kalender og notater er bare noder du eier uten delte edges.
|
|
> Dokumentet er bevart som historisk referanse.
|
|
|
|
## Idé
|
|
Hver bruker får et personlig workspace som fungerer som en individuell produktivitetssuite. Alle verktøyene et delt workspace har — kanban, kalender, notater, graf-koblinger — men privat og selvorganisert. I tillegg: en personlig publiseringskanal ("blogg") der tekster kan deles med omverdenen.
|
|
|
|
## Hvorfor er dette interessant?
|
|
|
|
### Individuell produktivitet
|
|
Redaksjonsmedlemmer trenger et sted å jobbe uforstyrret:
|
|
- Personlige oppgavelister (kanban)
|
|
- Egen kalender (deadlines, påminnelser)
|
|
- Kladder og research-notater
|
|
- Graf-koblinger til temaer og aktører de følger
|
|
|
|
`visibility = 'private'` på meldingsbokser innenfor delte workspaces dekker noe av dette, men gir ikke en *egen arbeidsflate*. Et personlig workspace gir:
|
|
- Eget kanban-brett for personlige oppgaver (ikke synlig for andre)
|
|
- Egen kalender (kan overlappes med delt kalender i UI)
|
|
- Egne notater uten støy fra fellesrommet
|
|
- Egne graf-koblinger og research
|
|
|
|
### Personlig publisering
|
|
Med tekst-primitiven (se `tekst_primitiv.md`) og publiseringsmodellen (se `artikkel_publisering.md`) kan personlig workspace også være utgangspunkt for en personlig blogg/feed:
|
|
- Skriv en tekst i personlig workspace
|
|
- Publiser den → tilgjengelig på en personlig URL (`sidelinja.org/@vegard/...`)
|
|
- Teksten kan også plukkes opp av en felles publikasjon (se artikkel-publisering)
|
|
|
|
## Hva bygger den på?
|
|
- **Workspace-modellen** (RLS, workspace_members) — et personlig workspace er bare et vanlig workspace med én member
|
|
- **Meldingsboks** — alt er allerede workspace-scopet
|
|
- **Tekst-primitiv** (proposal) — gir notater en skikkelig editor
|
|
- **Artikkel-publisering** (proposal) — gir publiseringskanalen
|
|
|
|
## Skisse
|
|
|
|
### Verktøy i personlig workspace
|
|
|
|
| Verktøy | Hva det er | Bygger på |
|
|
|---|---|---|
|
|
| Oppgaver | Personlig kanban-brett | `kanban_card_view` |
|
|
| Kalender | Personlig kalender | `calendar_event_view` |
|
|
| Notater/kladder | Meldinger med rich text editor | Tekst-primitiv |
|
|
| Research | Editor AI-knapp + graf-koblinger | Kunnskapsgraf, AI gateway |
|
|
| Personlig feed | Publiserte tekster med egen URL | Artikkel-publisering |
|
|
|
|
Alle disse er eksisterende features brukt i en personlig kontekst. Ingen ny funksjonalitet — bare et eget workspace å bruke dem i.
|
|
|
|
### Opprettelse
|
|
Automatisk ved brukerregistrering. Workspacet er implisitt — det dukker opp i workspace-switcheren med et visuelt skille (ikon, farge, eller plassering).
|
|
|
|
Slug: `personal-{authentik_id}` (intern), visningsnavn: brukerens display_name.
|
|
|
|
### Workspace-switcher
|
|
```
|
|
┌─────────────────────┐
|
|
│ 👤 Mitt workspace │ ← alltid øverst, visuelt adskilt
|
|
├─────────────────────┤
|
|
│ 📻 Sidelinja │
|
|
│ 🏛️ Foreningen │
|
|
│ ... │
|
|
└─────────────────────┘
|
|
```
|
|
|
|
### Flytt mellom workspaces
|
|
Tre strategier, rangert etter pragmatisme:
|
|
|
|
1. **Del, ikke flytt** (enklest) — endre `visibility` fra `'private'` til `'workspace'`. Krever at meldingen allerede bor i mål-workspacet. Fungerer for "jobbe privat i fellesrommet", men ikke for å flytte fra personlig workspace til et delt.
|
|
|
|
2. **Kopier, ikke flytt** (anbefalt) — opprett ny node i mål-workspace, behold original i personlig. Lenke mellom dem med `COPIED_FROM`-edge. Enkelt, trygt, ingen referanseproblemer.
|
|
|
|
3. **Flytt atomisk** — endre `workspace_id` på node + alle avhengigheter i én transaksjon. Komplekst: `graph_edges`, `reply_to`-kjeder, `kanban_card_view`-referanser til kolonner i kilde-workspace. Ikke verdt kompleksiteten initialt.
|
|
|
|
**Anbefaling:** Start med (2). "Kopier til fellesrom" er en tydelig handling. Originalen forblir i personlig workspace som referanse.
|
|
|
|
### Personlig publisering (avhenger av artikkel-publisering)
|
|
Hvert personlig workspace har en implisitt publikasjon (feed). Når en tekst publiseres fra personlig workspace:
|
|
- Den får en `article_view` med slug og status
|
|
- Den blir tilgjengelig på `sidelinja.org/@brukernavn/slug`
|
|
- Den dukker opp i brukerens personlige Atom-feed
|
|
- En redaktør i en felles publikasjon kan kuratere den derfra (se `artikkel_publisering.md`)
|
|
|
|
## Åpne spørsmål
|
|
|
|
### Grense mot delte workspaces
|
|
- Kan et personlig workspace ha flere medlemmer (f.eks. invitere en kollega til å se kanban-brettet)? Eller er det strengt personlig?
|
|
- Pragmatisk: start strengt personlig (1 member). Utvid later hvis behov oppstår.
|
|
|
|
### Kvoter og vekst
|
|
- Eget lagringsbudsjett per personlig workspace?
|
|
- TTL-policy: samme som delte workspaces, eller mer liberal (personlig innhold slettes ikke automatisk)?
|
|
- Trolig: ingen TTL på personlig workspace som default. Brukeren styrer selv.
|
|
|
|
### Dashboard / startside
|
|
- Bør personlig workspace ha et dashboard? F.eks.:
|
|
- Siste notater
|
|
- Kommende kalenderhendelser
|
|
- Kanban-kort med deadline
|
|
- Siste aktivitet i delte workspaces brukeren er med i
|
|
- Eller er det overkill — bare vis verktøyene?
|
|
|
|
### Alternativ: "Visibility er nok"
|
|
Det kan fortsatt hende at `visibility = 'private'` i delte workspaces dekker 80% av behovet. Et personlig workspace er da mest relevant for:
|
|
- Innhold som ikke hører til noe delt workspace
|
|
- Personlig publisering
|
|
- Et "hjem" i appen
|
|
|
|
Verdt å evaluere etter at visibility og tekst-primitiven er på plass.
|
|
|
|
## Innsats: Lav (opprettelse) / Middels (med publisering og dashboard)
|
|
Workspace-opprettelse ved registrering er trivielt. Publiseringslaget avhenger av tekst-primitiv og artikkel-publisering. Dashboard er eget arbeid.
|
|
|
|
## Wow-faktor: Middels-Høy
|
|
Alene er det "et privat workspace". Med publisering blir det en personlig plattform — Substack-aktig, men integrert i redaksjonsverktøyet.
|
|
|
|
## Relasjon til andre proposals
|
|
- **Tekst-primitiv** — gir notater og kladder en skikkelig editor
|
|
- **Artikkel-publisering** — gir publiseringsmodellen (publikasjoner, kuratorer, feeds)
|
|
- Personlig workspace er *konteksten* der tekst-primitiven og publisering møtes for individet
|