diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 1f4737f..efdc6d6 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -161,7 +161,7 @@ Detaljerte spesifikasjoner ligger i `docs/concepts/` (brukeropplevelser) og `doc * **Den Asynkrone Gjesten:** Tidsbegrenset lenke til gjester for asynkrone lydopptak som lander i redaksjonens arbeidsflyt. ### Features (byggeklosser) -Chat (channels), Kanban, Whiteboard, Live transkripsjon, Live AI (faktoid + referent), Visuell graf, AI Research-Klipper, Lydmeldinger & Diktering, Podcast-statistikk, Kunnskaps-Bridge (cross-workspace), Prompt-Laboratorium. +Chat (channels), Kanban, Kalender, Notater/Scratchpad, Whiteboard, Live transkripsjon, Live AI (faktoid + referent), Visuell graf, AI Research-Klipper, Lydmeldinger & Diktering, Podcast-statistikk, Kunnskaps-Bridge (cross-workspace), Prompt-Laboratorium. ## 8. Bygge-rekkefølge (Avhengighetskart) @@ -185,6 +185,7 @@ Chat (channels), Kanban, Whiteboard, Live transkripsjon, Live AI (faktoid + refe - [~] Chat med channels (PG-adapter + SpacetimeDB hybrid-adapter ferdig, sync-worker gjenstår) - [~] Kanban (PG-adapter ferdig med drag & drop, redigeringsmodal, CRUD API. SpacetimeDB-sync gjenstår) - [~] Kalender (PG-adapter ferdig med månedsvisning, fargekoder, heldags/tidshendelser. SpacetimeDB-sync gjenstår) +- [~] Notater/Scratchpad (PG-adapter ferdig med auto-save, debounce, tittel+innhold. Rich text og SpacetimeDB-sync gjenstår) - [ ] Lydmeldinger & Diktering (opptak + Whisper + AI-opprydding) - [ ] Prompt-Laboratorium (prompt-testing mot egne data) - [ ] Promptfoo testsett for første jobbtyper (norsk testdata) diff --git a/CLAUDE.md b/CLAUDE.md index c197cc2..c058f9b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -31,6 +31,7 @@ Self-hosted på Hetzner VPS med full datakontroll. - `kunnskaps_bridge.md` — Cross-workspace discovery via vector embeddings - `prompt_lab.md` — Internt verktøy for testing og deploy av LLM-prompts - `kalender.md` — Redaksjonell kalender med abonnementsmodell og ICS-eksport + - `notater.md` — Scratchpad/notatblokk med auto-save og debounce - `docs/infra/` — Infrastruktur (ikke brukersynlig): - `jobbkø.md` — Felles PostgreSQL-basert køsystem for alle bakgrunnsjobber - `synkronisering.md` — PostgreSQL ↔ SpacetimeDB dataflyt og eierskapsmodell @@ -41,6 +42,7 @@ Self-hosted på Hetzner VPS med full datakontroll. - `svelte5_reaktivitet.md` — $state-getters, SSR-feller, polling-mønster - `spacetimedb_integrasjon.md` — SDK-konvensjoner, BigInt, Rust borrow-feller - `adapter_moenster.md` — Hybrid PG+SpacetimeDB, anti-patterns, anbefaling for neste komponent + - `authentik_oidc.md` — Sub-claim er SHA256, @auth/sveltekit JWT-quirks, redirect URI ## Stack - **Backend/Automasjon:** Rust diff --git a/docs/features/notater.md b/docs/features/notater.md new file mode 100644 index 0000000..d926b34 --- /dev/null +++ b/docs/features/notater.md @@ -0,0 +1,68 @@ +# Feature: Notater (Scratchpad) +**Filsti:** `docs/features/notater.md` + +## 1. Konsept +Et enkelt notatverktøy med automatisk lagring. Brukes som scratchpad i ulike kontekster — show notes, møtenotater, research-notater. Notater er nodes i kunnskapsgrafen og kan kobles til andre noder. + +## 2. Status +**PG-adapter ferdig og deployet (mars 2025).** Rich text og SpacetimeDB-sync gjenstår. + +### Implementert +- Migrering `0004_notes.sql`: `notes`-tabell (FK→nodes) +- Notater er nodes — arver workspace-isolasjon automatisk +- Auto-save med 500ms debounce (visuell feedback: "Lagrer..."/"Lagret") +- REST API: GET og PATCH (tittel + innhold) +- PG polling-adapter med 10 sek intervall (tregere enn chat/kanban — notater endres sjeldnere) +- NotesBlock.svelte: tittel-input + fritekst-textarea med auto-save +- Polling pauses mens brukeren skriver (unngår overskriving av egne endringer) + +### Gjenstår — Fase 2 +- Markdown-editor (rich text med forhåndsvisning) +- Versjonering / undo-historikk +- Kobling til andre noder (temaer, episoder, aktører) +- Flerbruker-redigering (conflict resolution) +- SpacetimeDB-modul + hybrid-adapter +- Eksport (Markdown, PDF) + +## 3. Datamodell (implementert) + +```sql +CREATE TABLE notes ( + id UUID PRIMARY KEY REFERENCES nodes(id) ON DELETE CASCADE, + parent_id UUID NOT NULL REFERENCES nodes(id), + title TEXT NOT NULL DEFAULT '', + content TEXT NOT NULL DEFAULT '', + created_by TEXT REFERENCES users(authentik_id), + created_at TIMESTAMPTZ NOT NULL DEFAULT now(), + updated_at TIMESTAMPTZ NOT NULL DEFAULT now() +); +``` + +`updated_at` oppdateres automatisk ved PATCH og brukes til "Lagret [tidspunkt]"-visning. + +## 4. API-endepunkter + +| Metode | Sti | Beskrivelse | +|---|---|---| +| GET | `/api/notes/[noteId]` | Hent notat | +| PATCH | `/api/notes/[noteId]` | Oppdater tittel og/eller innhold | + +## 5. Brukes av + +| Konsept | Bruk | +|---|---| +| Redaksjonen (Sidelinja) | Show notes for episoder | +| Foreningen Liberalistene | Møtenotater | +| Møterommet (fremtidig) | Scratchpad under møter | + +## 6. Auto-save-mønster +- Bruker skriver → 500ms debounce → PATCH til server +- Under lagring vises "Lagrer..." (gul) +- Etter vellykket lagring vises "Lagret [dato]" (grå) +- Polling (10 sek) henter siste versjon, men hopper over overskriving mens `saving`-flagget er satt + +## 7. Instruks for Claude Code +* Notater er workspace-scopet via node-modellen +* Auto-save bruker debounce — ikke send PATCH ved hvert tastetrykk +* `updated_at` brukes til UI-feedback, ikke til conflict resolution (ennå) +* Sjekk `docs/erfaringer/adapter_moenster.md` for hybrid-strategi