Implementerer kanban som noder+edges uten separate tabeller: - Board = collection-node med metadata.board og metadata.columns - Kort = content-noder med belongs_to-edge til board - Status via status-edge (kort→board) med metadata.value - Posisjon via belongs_to-edge metadata.position Backend: - POST /intentions/update_edge — oppdater edge-type/metadata - GET /query/board?board_id= — hent kort med status og posisjon Frontend: - /board/[id] route med kolonner, drag-and-drop, kortoppretting - Sanntid via SpacetimeDB edge-subscriptions - Board-oppretting og navigasjon fra mottak-siden Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
71 lines
2.8 KiB
Markdown
71 lines
2.8 KiB
Markdown
# Feature: Kanban (Planlegging)
|
|
**Filsti:** `docs/features/kanban.md`
|
|
|
|
## 1. Konsept
|
|
Et drag-and-drop Kanban-brett for planlegging. Primært brukt til
|
|
episodeplanlegging i Redaksjonen, men også mottaker av AI-genererte
|
|
action points fra Møterommet.
|
|
|
|
## 2. Status
|
|
**Implementert med nodes+edges (mars 2026).** Sanntid via SpacetimeDB.
|
|
|
|
### Implementert
|
|
- Board = samlings-node (`node_kind: 'collection'`, `metadata.board: true`)
|
|
- Kolonner definert i board-metadata: `metadata.columns: ["todo", "in_progress", "done"]`
|
|
- Kort = content-noder med `belongs_to`-edge til board
|
|
- Status via `status`-edge (kort → board) med `metadata.value`
|
|
- Posisjon via `belongs_to`-edge `metadata.position` (REAL for midpoint-innsetting)
|
|
- Backend: `POST /intentions/update_edge` for statusendring
|
|
- Backend: `GET /query/board?board_id=...` for board-spørring
|
|
- Frontend: `/board/[id]` route med HTML5 drag-and-drop
|
|
- Sanntid via SpacetimeDB edge-subscriptions (ingen polling)
|
|
- Opprett kort direkte i kolonne (tittel-input)
|
|
- Oppretting av nye brett fra mottak-siden
|
|
|
|
### Gjenstår
|
|
- Reposisjonering ved dra innad i kolonne (sortert rekkefølge)
|
|
- Redigeringsmodal for kort (tittel/beskrivelse)
|
|
- Tildeling (assignee) UI
|
|
- Fargekoder/labels på kort
|
|
- AI-integrasjon: møtereferent → nye kort
|
|
- Tilpassbare kolonnenavn
|
|
|
|
## 3. Datamodell
|
|
|
|
Ingen separate kanban-tabeller. Alt er noder og edges (kjerneprimitivene):
|
|
|
|
```
|
|
Board = collection-node (metadata.board: true, metadata.columns: [...])
|
|
Kort = content-node
|
|
+ belongs_to-edge → board (metadata.position: REAL)
|
|
+ status-edge → board (metadata.value: "todo"|"in_progress"|"done")
|
|
```
|
|
|
|
Tilgang styres via `node_access`-matrisen. Brett er synlige for
|
|
brukere med `owner`/`admin`/`member_of`-edge til board-noden.
|
|
|
|
## 4. API-endepunkter
|
|
|
|
| Metode | Sti | Beskrivelse |
|
|
|---|---|---|
|
|
| GET | `/query/board?board_id=...` | Hent brett med kort, status og posisjon |
|
|
| POST | `/intentions/create_node` | Opprett kort (content-node) |
|
|
| POST | `/intentions/create_edge` | Koble kort til brett (belongs_to + status) |
|
|
| POST | `/intentions/update_edge` | Endre status ved drag-and-drop |
|
|
| POST | `/intentions/update_node` | Oppdater tittel/beskrivelse |
|
|
| POST | `/intentions/delete_node` | Slett kort (cascader edges) |
|
|
|
|
## 5. Brukes av
|
|
|
|
| Konsept | Bruk |
|
|
|---|---|
|
|
| Redaksjonen | Episodeplanlegging — dra Temaer inn i Kjøreplanen |
|
|
| Møterommet | AI-referenten foreslår nye kort basert på action points |
|
|
|
|
## 6. Instruks for Claude Code
|
|
* Alt er noder og edges — ingen separate kanban-tabeller.
|
|
* Board er en collection-node med `metadata.board: true`.
|
|
* Status er en `status`-edge (kort → board) med `metadata.value`.
|
|
* Bruk native HTML5 Drag and Drop, unngå tunge biblioteker.
|
|
* Sanntid via SpacetimeDB edge-subscriptions.
|
|
* Tilgang styres via `node_access`-matrisen.
|