root 1c1962e1d8
CD / deploy (push) Successful in 14s
CI / check (push) Successful in 21s
feat(erindringer): live-afskrift mens man taler, spørgsmål+svar på ét afspillerelement, voice isolation for podcast-favoritter
Browseren streamer 16 kHz PCM direkte til ElevenLabs' realtime-STT med et
engangs-token fra serveren (/api/stt-token); teksten vokser under optagelsen og
sendes med kladden, så serveren slipper for at skrive af. 'Spørgsmål og svar'
bruger ét audio-element (iOS blokerer ellers det andet play()) og laver
spørgsmålets lyd on demand for ældre klip. Admin kan rense favorit-klip med
ElevenLabs Audio Isolation (<id>-ren.mp3), aldrig som standard.

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-06 22:43:38 +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).
  • Flow: optagelsen sendes op som kladde i samme øjeblik man stopper (afskriften kører i baggrunden, mens man lytter), "Send svaret" bekræfter kun, og næste spørgsmål (tekst + oplæsning) forberedes i baggrunden, så det kommer med det samme. Dagbogen føres én dag ad gangen (samtale = datoen). Spørgsmålets oplæsning gemmes som <id>-sp.mp3 ved siden af svaret; "Spørgsmål og svar" afspiller begge.
  • 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%