- Omorganiser docs/: konsepter, features, infra og proposals i egne mapper - Ny docs/erfaringer/ med lærdommer fra chat-implementering (Svelte 5, SpacetimeDB, adapter-mønster) - Oppdater ARCHITECTURE.md: Lag 1 status, ny §10 Erfaringslogg, SpacetimeDB i lokal dev - Oppdater synkronisering.md med implementeringsstatus og designvalg - Oppdater lokal.md med SpacetimeDB og AI Gateway - Utvid PG-skjema med channels, messages, media_files, message_revisions - Legg til seed_dev.sql, migration_safety.md, .env.example - Nye feature-specs: chat, kanban, whiteboard, live_ai, lydmeldinger m.fl. - Nye konsept-specs: studioet, møterommet, redaksjonen, den asynkrone gjesten m.fl. - SpacetimeDB og AI Gateway i docker-compose.dev.yml - collect-docs.sh inkluderer erfaringer/ Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
4.8 KiB
4.8 KiB
Infrastruktur: API-grensesnitt og Tjenesteansvar
Filsti: docs/infra/api_grensesnitt.md
1. Konsept
Definerer hvordan SvelteKit-frontenden kommuniserer med backend-tjenestene. Prinsippet er: SvelteKit er web-serveren, Rust er workeren. Ingen separat Rust HTTP API.
2. Kommunikasjonskart
┌─────────────────────────────────────────────────────────────┐
│ Brukerens nettleser (SvelteKit klient) │
└──────────┬──────────────────────┬───────────────────────────┘
│ │
│ WebSocket │ HTTP (forms, fetch)
▼ ▼
┌──────────────────┐ ┌─────────────────────────────────────┐
│ SpacetimeDB │ │ SvelteKit Server │
│ │ │ (load functions, form actions, │
│ - Chat │ │ API routes) │
│ - Kanban │ │ │
│ - Live events │ │ Ansvar: │
│ - Autocomplete │ │ - Les/skriv PostgreSQL direkte │
│ - Studio- │ │ - Opprett jobber i job_queue │
│ markører │ │ - Filopplasting (streaming) │
│ │ │ - RSS-generering │
│ │ │ - Kunnskapsgraf-spørringer │
└──────────────────┘ └──────────────┬───────────────────────┘
│
│ SQL
▼
┌──────────────────────────┐
│ PostgreSQL │
│ │
│ - Kunnskapsgraf │
│ - Episodemetadata │
│ - Statistikk │
│ - Jobbkø (job_queue) │
│ - Brukerdata │
└──────────────┬────────────┘
│
│ Poll (SELECT FOR UPDATE)
▼
┌──────────────────────────┐
│ Rust Workers │
│ │
│ - whisper_transcribe │
│ - openrouter_analyze │
│ - research_clip │
│ - stats_parse │
│ - sync_to_pg (SpaceDB→PG)│
└──────────────────────────┘
3. Ansvarsfordeling
| Komponent | Rolle | Snakker med |
|---|---|---|
| SvelteKit (klient) | UI, brukerinteraksjon | SpacetimeDB (WS), SvelteKit server (HTTP) |
| SvelteKit (server) | Web-API, PG-tilgang, jobb-trigger | PostgreSQL (SQL) |
| SpacetimeDB | Sanntids state, push til klienter | Klienter (WS), sync-worker (intern) |
| Rust Workers | Tunge bakgrunnsjobber, synk | PostgreSQL (SQL), SpacetimeDB, OpenRouter, faster-whisper |
4. Viktige avklaringer
- Rust er ikke en API-server. Rust kjører kun som workers/prosessorer som poller jobbkøen
- SvelteKit server-side er trygt. Load functions og form actions kjører på serveren og kan snakke direkte med PG uten sikkerhetsproblemer
- Filopplasting håndteres av SvelteKit (streaming for store filer), som lagrer filen på disk og oppretter en jobb i køen
- SpacetimeDB nås aldri via SvelteKit server — kun direkte fra klienten via WebSocket
5. Instruks for Claude Code
- Ikke opprett et separat Rust HTTP API/webserver-prosjekt
- Bruk SvelteKit
+server.ts(API routes) eller+page.server.ts(form actions/load) for all HTTP-kommunikasjon - Rust-kode skal struktureres som worker-binærer som konsumerer fra
job_queue - For PG-tilgang i SvelteKit, bruk et bibliotek som
postgres.jsellerdrizzle-orm