root 3dee428a37
CD / deploy (push) Successful in 17s
CI / check (push) Successful in 23s
feat(erindringer): samtalestyring med forberedte spørgsmål, talt udgave med lydtags, spørgsmålets lyd gemmes med svaret
Intervieweren når de forberedte spørgsmål, følger op højst N gange pr. spørgsmål
(indstilles pr. emne), trækker tilbage til emnet og afrunder. 'Spring over' i UI.
Spørgsmålet oplæses med ElevenLabs-tags ([warmly], [chuckles] …) som ikke vises
i teksten; oplæsningen gemmes som <id>-sp.mp3 ved siden af svaret og følger med i
zip-eksporten, så spørgsmål + svar kan klippes ind i en podcast.

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-06 22:15:46 +02:00

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/<nøgle>/, 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

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.

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.

S
Description
Basal front for weircon.dk, mine hosted services. Gemt bag authentik SSO som kun viser hvad man har adgang til jf. Authentik. Samt et administrator panel, som viser pending opdateringer af de opensource services der hostes, basal bruger administration mv.
https://weircon.dk
Readme
1.1 MiB
Languages
Python 61.5%
HTML 36%
CSS 2.2%
Shell 0.3%