nginx: server_tokens off, HSTS, exaktes /v1 liefert 404 (Regex-Block statt
^~ /v1/). deploy.sh: AIRCARD_WEBHOOK_TOKEN nicht an npm, Sperrverzeichnis
gegen parallele Läufe (verwaiste Sperren werden übernommen), timeout 900
für npm ci und Build. Neuer Test deploy/deploy.test.js gegen das echte Skript.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Endpoint-Standard ${origin}/v1, echte Projekt-ID im Traefik-Header, Console-
Einstellungen als Soll-Stand statt Tatsache, Test-Befehle je mit Verzeichnis;
Projekt-ID nicht mehr "aircard", Auth-/Dienste-Schritte als optionale Härtung.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Name AirCard-IOS in Kopfzeile, Titel, Meta-Angaben (theme-color,
apple-mobile-web-app-title) und README
- Website-Icon: neues Logo als favicon.svg, favicon-32.png und deckendes
apple-touch-icon.png (180 x 180, ohne Rundung)
- Kopfzeile zeigt das Logo (28 px, auf schmalen Schirmen 24 px) vor dem Namen
- Karten-Marken neu aus dem Logo abgeleitet (einfarbig, currentColor):
Symbol mit drei gestaffelten Karten und ausgeschnittenen Wellen,
Text als Pfade (Nunito Sans 800); IDs unverändert
- Tests: Labels, Marken-Aufbau, Favicon, Icon-Dateien, index.html
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Vite + TypeScript ohne UI-Framework in web/, exakte Versionen, History-Router
(matchRoute, navigate, startRouter mit Cleanup, a[data-link], popstate),
Grundlayout mit Kopfzeile, Fußzeile und Platzhalterseiten.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>