server/CLAUDE.md
vegard 1faef972dd Meldingsboks-migrasjon: universell diskusjonsprimitiv + entities
Migrering 0005 samler kanban-kort, kalenderhendelser, faktoider og
notater til én felles messages-tabell med view-config-tabeller.
Actors og topics erstattes av unified entities-tabell.

- 0005_meldingsboks.sql: messages utvides med title/pinned/visibility,
  kanban_card_view + calendar_event_view + message_reactions opprettes,
  entities erstatter actors+topics, gamle tabeller droppes
- seed_dev.sql: oppdatert til meldingsboks-modell + 5 test-entiteter
  med graf-relasjoner
- API-ruter: kanban/kalender/notater bruker messages + view-config
- Dokumentasjon: meldingsboks feature-spec, oppdatert arkitektur,
  kunnskapsgraf, jobbkø, konseptdokumenter og proposals

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 15:32:15 +01:00

74 lines
5 KiB
Markdown

# Sidelinja - Claude Code Prosjektguide
## Prosjektoversikt
Sidelinja er et redaksjonelt operativsystem og kunnskapsgraf for podcast-produksjon.
Self-hosted på Hetzner VPS med full datakontroll.
## Nøkkelfiler
- `ARCHITECTURE.md` — Overordnet arkitektur, stack, datamodell og infrastruktur
- `docs/setup/produksjon.md` — Steg-for-steg oppsett av Hetzner VPS fra scratch
- `docs/setup/lokal.md` — Steg-for-steg oppsett av lokalt WSL2 utviklingsmiljø
- `docs/setup/migration_safety.md` — Sjekkliste for PostgreSQL-migrasjoner (RLS-verifisering)
- `docs/concepts/` — Brukeropplevelser (integrerte produkter):
- `studioet.md` — Podcast-innspilling (LiveKit + Live AI + Aha-markør)
- `møterommet.md` — Interne møter (LiveKit + AI-referent + Whiteboard)
- `redaksjonen.md` — Daglig redaksjonelt arbeid (Chat + Kanban + Research)
- `podcastfabrikken.md` — Publiseringspipeline (Whisper + AI + RSS)
- `kunnskapsgrafen.md` — Utforsking og redigering av kunnskapsnettverk
- `valgomaten.md` — Publikumsrettet crowdsourced valgomat
- `den_asynkrone_gjesten.md` — Asynkrone gjestebidrag via tidsbegrenset lenke
- `docs/features/` — Tekniske byggeklosser (brukes av flere konsepter):
- `kunnskapsgraf_og_relasjoner.md` — Nodes & Edges datamodell i PostgreSQL
- `chat.md` — Trådet chat med mentions og autocomplete (SpacetimeDB)
- `kanban.md` — Drag-and-drop planlegging
- `whiteboard.md` — Sanntids frihåndstavle (møterom, chat, solo)
- `live_transkripsjon.md` — Whisper-pipeline (felles motor for studio/møter/fabrikk)
- `live_ai.md` — Live AI: faktoid-oppslag (studio) + referent (møter)
- `visuell_graf.md` — Interaktiv graf-visning (D3.js/Vis.js)
- `ai_research_klipper.md` — AI-drevet research-inntak til kunnskapsgrafen
- `lydmeldinger.md` — Lydmeldinger, diktering og tale-til-tekst
- `podcast_statistikk.md` — IAB-kompatibel lytterstatistikk fra Caddy-logger
- `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
- `meldingsboks.md` — Universell diskusjonsprimitiv (erstatter chat/kanban-kort/kalender/faktoider/notater)
- `docs/infra/` — Infrastruktur (ikke brukersynlig):
- `jobbkø.md` — Felles PostgreSQL-basert køsystem for alle bakgrunnsjobber
- `synkronisering.md` — PostgreSQL ↔ SpacetimeDB dataflyt og eierskapsmodell
- `api_grensesnitt.md` — Kommunikasjonskart: SvelteKit er web-API, Rust er worker
- `ai_gateway.md` — LiteLLM som sentralisert AI-ruter (BYOK + OpenRouter fallback)
- `docs/proposals/` — Halvtenkte idéer og kreative innfall (se `README.md` for oversikt)
- `docs/erfaringer/` — Lærdommer fra implementering (feller, anti-patterns, løsninger):
- `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
- **Frontend:** SvelteKit (TypeScript, PWA)
- **Sanntid:** SpacetimeDB (arbeidsflyt/state) + LiveKit (lyd/video)
- **Database:** PostgreSQL (persistent/kunnskapsgraf) + SpacetimeDB (in-memory/sanntid)
- **AI:** faster-whisper (transkripsjon), LiteLLM (AI Gateway → Gemini/Claude/Grok/OpenRouter)
- **Infra:** Docker Compose, Caddy, Authentik (SSO), Forgejo (Git)
## Produksjonsserver
- **IP:** 157.180.81.26
- **SSH:** `ssh sidelinja@157.180.81.26` (nøkkelbasert, sudo uten passord)
- **Filer:** `/srv/sidelinja/` (docker-compose.yml, .env, config/, data/, media/, logs/)
- **Git repos:**
- `server` — app-kode, infra, arkitektur: `ssh://git@git.sidelinja.org:222/sidelinja/server.git`
- `sidelinja` — podcastinnhold (transkripsjoner, show notes, research): `ssh://git@git.sidelinja.org:222/sidelinja/sidelinja.git`
- **Domener:** sidelinja.org, auth.sidelinja.org (Authentik), git.sidelinja.org (Forgejo), vegard.info
- **Status:** Lag A komplett + SvelteKit deployet (PG-adapter, Authentik OIDC, workspace-modell). SpacetimeDB kun lokalt.
## Viktige regler
- Aldri eksponere databaseporter mot internett (kun port 80/443 via Caddy)
- Bruk `tea` CLI, ikke `gh` (vi bruker Forgejo, ikke GitHub)
- Tunge AI-jobber (Whisper, LLM-kall) skal aldri blokkere web-requests
- All AI-kode peker på `http://ai-gateway:4000/v1` — aldri direkte til leverandør-APIer
- Kod og test lokalt i WSL2, deploy via push til Forgejo + SSH pull
- Sjekk alltid relevant doc i `docs/concepts/`, `docs/features/` eller `docs/infra/` før du implementerer
- Sjekk `docs/erfaringer/` for kjente feller før du implementerer med Svelte 5, SpacetimeDB eller adapter-mønsteret
- Etter ferdig implementering av en komponent: dokumenter lærdommer i `docs/erfaringer/`