Optagelsen sendes op som kladde, når man stopper, så STT kører mens man lytter; 'Send svaret' bekræfter. Næste spørgsmål (Claude + TTS) forberedes i baggrunden efter hvert svar og hentes på 0 s. Dagbogens samtale er datoen (vælg dag). 'Spørgsmål og svar' afspiller oplæsningen og svaret efter hinanden; /erindringer/alle viser alt dag for dag. Baggrundsjobs holdes med stærke referencer og logger fejl. portal.css: én standardregel, så tabeller på smalle skærme ruller i sig selv og lange ord brydes, i stedet for at siden får vandret scroll. Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
3.3 KiB
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 somnoegle. /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 haveclient_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.mp3ved 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.