Demokratisk lovgivnings-wiki med LLM-mediering. MVP-domæne: gymnasiebekendtgørelsen.
Se docs/principper.md for de fem grundprincipper, som hele systemet bygger på. Se planen for arkitektur og scope.
backend/ FastAPI + SQLAlchemy + pgvector
frontend/ Next.js + Tailwind
data/ Lovtekster i markdown med paragraf-ankre
docs/ Principper og prompt-changelog
scripts/ Ingest-værktøjer (Retsinformation → markdown)
Defaults: SQLite + LLM stub-mode. Du kan se hele systemet køre uden Postgres eller Azure-creds.
# 1. backend deps + ingest
cd backend
pip install -e .
cd ..
python scripts/ingest_retsinformation.py --xml-file data/cache/gymnasiebekendtgoerelsen.xml
# 2. backend (terminal A)
cd backend
python -m uvicorn app.main:app --reload # http://localhost:8000
# 3. frontend (terminal B)
cd frontend
npm install
npm run dev # http://localhost:3000Verificér at backend svarer:
curl http://localhost:8000/health
curl http://localhost:8000/laws
curl -X POST http://localhost:8000/laws/gymnasiebekendtgoerelsen/p3-stk1/translateNår Azure OpenAI-aftalen er på plads, sæt i backend/.env:
OP_LLM_MODE=azure
OP_AZURE_OPENAI_ENDPOINT=...
OP_AZURE_OPENAI_API_KEY=...
OP_AZURE_OPENAI_DEPLOYMENT=gpt-4o
— og samme kode rammer den rigtige model.
Andre relevante kilder fra `uvm.dk/.../love-og-bekendtgoerelser/`:
# Loven selv (konsolideret)
python scripts/ingest_retsinformation.py --eli https://www.retsinformation.dk/eli/lta/2024/41 --slug lov-om-gymnasiale-uddannelser
# Studie- og ordensregler
python scripts/ingest_retsinformation.py --eli https://www.retsinformation.dk/eli/lta/2019/1338 --slug studie-og-ordensregler
# Gymnasiale prøver (2026-version)
python scripts/ingest_retsinformation.py --eli https://www.retsinformation.dk/eli/lta/2026/3 --slug gymnasiale-proeverCache: rå XML lægges i data/cache/<slug>.xml ved første hent. Slet filen for at re-fetch. --xml-file <path> springer netværket helt over.