# Feature: Dagbok (Privat journal)
**Filsti:** `docs/features/dagbok.md`

## 1. Konsept
En personlig dagbok-visning som samler brukerens private noder — innhold
som ikke er delt med andre via edges. Fungerer som en kronologisk logg
over tanker, notater og idéer som kun er synlige for eieren.

## 2. Status
**Implementert med nodes+edges (mars 2026).** Sanntid via PG LISTEN/NOTIFY + WebSocket.

### Implementert
- Frontend: `/diary` route med dagbok-visning
- Filtrering: viser kun noder som er opprettet av brukeren og ikke har
  delte edges (ingen non-system edges til andre brukere/noder)
- Ekskluderte node-typer: `communication`, `agent`, `person`, `team`
- Gruppering etter dato med norske datoetiketter ("I dag", "I går", ellers fullt format)
- Kronologisk sortering (nyeste først)
- Tidsstempel per innlegg
- Inline oppretting av nye dagbokinnlegg (tittel + innhold)
- Nye innlegg får `visibility: 'hidden'` og `owner`-edge fra bruker
- Tilgjengelig som panel i arbeidsflaten
- Responsivt design (max-w-3xl, mobilklar)

### Gjenstår
- Redigeringsmodus for eksisterende innlegg
- Rik tekst-editor (gjenbruk NodeEditor-komponenten)
- Sletting av innlegg
- Søk/filtrering i dagboken
- Eksport-funksjon

## 3. Datamodell

Dagboken bruker ingen egne tabeller eller edge-typer. Den er en
**visning** (query) over eksisterende noder og edges.

### Hva er et dagbokinnlegg?
En node som oppfyller alle tre kriterier:
1. `created_by = <brukerens node-ID>`
2. `node_kind` er ikke `communication`, `agent`, `person` eller `team`
3. Ingen non-system edges der den andre enden er en annen bruker/node
   (kun `owner`-edge fra bruker, system-edges, og selv-refererende edges er tillatt)

### Oppretting
```
POST /intentions/create_node
  { node_kind: "content", title: "...", content: "...", visibility: "hidden" }
POST /intentions/create_edge
  { source_id: <bruker>, target_id: <ny_node>, edge_type: "owner" }
```

## 4. Frontend

### Route
`/diary` → `frontend/src/routes/diary/+page.svelte`

### Datakilde
WebSocket-sanntidsdata via `nodeStore` og `edgeStore`.
Ingen backend-query — all filtrering skjer i frontend basert på
data mottatt via initial sync + WebSocket.

### UI-struktur
- Header med tilbake-lenke til mottak og innlegg-teller
- Ny-innlegg-knapp (utvides til skjema med tittel + tekstfelt)
- Innlegg gruppert per dato, sortert nyeste først
- Hvert innlegg viser tidsstempel, tittel, og innholdsutdrag
