# weircon-front Forside og admin-portal for **weircon.dk** — et selv-hostet homelab. FastAPI-app der: - **Logger ind via Authentik (OIDC)** og viser de tjenester brugeren har adgang til (hentet fra Authentiks app-liste pr. bruger), grupperet efter app-gruppe. - **Favoritter + visnings-toggle** (grupperet/alfabetisk), gemt server-side pr. bruger. - **⌘K kommandopalette** til hurtig søgning/navigation. - **Lys/mørkt tema** (ført videre fra asger.weirsoe.dk). - **Admin** (kun for medlemmer af `ADMIN_GROUP`), udvidbare moduler: - IP -> label & land (skrives til NPMplus ip_labels.json) - Cookie-tekster - Matomo-statistik - App-beskrivelser & grupper (skriver tilbage til Authentik) ## Erindringer (interview + dagbog) `/erindringer`: familien fortæller minder til en AI-interviewer. Claude (Anthropic Messages API, `ANTHROPIC_API_KEY`, model `ERINDRINGER_MODEL`) stiller ét spørgsmål ad gangen og følger op på det sidste svar; spørgsmålet læses op af ElevenLabs (`ELEVEN_API_KEY`, stemme `ERINDRINGER_VOICE`, cachet pr. tekst), svaret optages i browseren (MediaRecorder, webm/mp4), konverteres med ffmpeg til mp3 og transskriberes (ElevenLabs STT). Alt gemmes pr. person under `PORTAL_DATA/erindringer/` (persondata, aldrig i git). - Indloggede i familiegrupperne har altid emnet "Dagbog"; admin inviterer til andre emner. - Gæster uden login får et hemmeligt link `/erindringer/g//`, lavet i `/admin/erindringer` (kan lukkes og fornys). Nøglen sendes med i API-kald som `noegle`. - `/admin/erindringer`: emner (titel, beskrivelse, baggrund til intervieweren, startspørgsmål), personer, klip med afspiller og transskription, favoritter, zip-eksport til podcast-produktion. - Edge: gæstelink, `/erindringer/api/`, `/erindringer/tts/` og `/erindringer/klip/` skal uden om bot-udfordringen og have `client_max_body_size 50m` (lange lydsvar). - Uden nøgler virker siden stadig: intervieweren bruger emnets startspørgsmål, og svar gemmes uden transskription. Røgtest uden OIDC: `PORTAL_DATA=/tmp/x python tests/erindringer_smoke.py` (kalder de rigtige API'er, koster lidt credits). ## Kør ```bash python3 -m venv /opt/portal/venv /opt/portal/venv/bin/pip install -r requirements.txt cp deploy/portal.env.example /etc/portal.env # udfyld secrets cp deploy/portal.service /etc/systemd/system/ systemctl enable --now portal ``` ## Udrulning Et `v*`-tag udruller: `.gitea/workflows/cd.yml` logger ind som deploy-brugeren (repo-variablerne `DEPLOY_HOST`/`DEPLOY_USER`, secrets `DEPLOY_SSH_KEY`/`DEPLOY_KNOWN_HOSTS`) og kører `deploy/deploy.sh` fra tagget. Appmappen i drift er en git-checkout; afviger den fra git, afbrydes udrulningen, og svarer `/healthz` ikke efter genstart, rulles der tilbage. Ret aldrig filer direkte i drift. ```bash git tag v1.2.3 && git push origin v1.2.3 ``` Appen kører bag NPMplus (TLS + proxy) paa weircon.dk. Tilfoej nye admin-moduler i `ADMIN_MODULES` + en route + en template der extender `base.html`.