Alt som gjorde appen «Sauda Gathering» – tittel, undertittel, aksentfarge,
hurtigfraser – var hardkodet i index.html. Dette legger grunnlaget for å
flytte det ut, så samme kode kan brukes på et annet arrangement uten å
redigere HTML.
Tre lag, siste vinner: DEFAULTS -> config.toml -> ANNOUNCER_*
config.toml er valgfri. Uten den gjelder DEFAULTS, som er dagens oppførsel
bit for bit. Det er et krav, ikke en forglemmelse: tjenesten skal kunne
settes opp på en kveld uten at noe må konfigureres først.
Hemmeligheter hører i env-laget, så de kan stå i systemd-enheten istedenfor
i en fil i repoet. config.toml er gitignorert; config.example.toml er malen.
Egen modul og ikke en del av announcer.py fordi auth-koden som kommer
trenger den også, og det ville blitt en import-sirkel.
Ingenting bruker den ennå – det skjer i neste commit.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Appen var navngitt etter Sauda Gathering, men det er ingenting
arrangementsspesifikt i selve koden. Navnet står igjen i tjenesten,
install.sh og pyproject.
- install.sh skriver nå announcer.service, og rydder bort en gammel
sg-announcer.service først. Uten det slåss to enheter om port 8090
når skriptet kjøres på en maskin som har den gamle.
- Enhetsfila får chmod 600; PIN-en står i klartekst i den.
- src/sg_announcer/ er slettet. Det var en uv-init-stub som bare printet
«Hello from sg-announcer!», pekt på av [project.scripts], og som ingen
har kalt noen gang.
- [tool.uv] package = false: appen er løse .py-filer som kjøres på plass,
ikke en pakke. Uten den vil uv sync bygge et wheel og klage på at
announcer/__init__.py mangler.
Repoet i Forgejo og mappa er døpt om tilsvarende.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Skriptet installerer apt-pakker, uv, Python 3.13, Piper-stemmene og
systemd-brukerenheten, og åpner porten i ufw hvis den er aktiv. Avspilling
velger pw-play når PipeWire kjører, ellers paplay (Linux Mint 21).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>