{ "version": 3, "updated_at": "2026-03-11", "completed": [ { "step": 13, "title": "Smoke Suite PASS", "description": "Backend/Client smoke tests green.", "files": [] }, { "step": 14, "title": "Docker/Compose Smoke PASS", "description": "Container build/run + smoke suite against docker.", "files": [ "deploy/docker_smoke.ps1" ] }, { "step": 18, "title": "Website/Landing + Download-Page + Billing/Invoice Flow", "description": "Public landing + download page reading release metadata; billing flow docs/templates.", "files": [ "web/index.html", "web/download.html", "release/version.json", "billing/BILLING_FLOW.md" ] }, { "step": 19, "title": "Support/Telemetry minimal (ohne PHI)", "description": "POST /telemetry/ping + GET /admin/telemetry/stats + rate-limit and docs.", "files": [ "deploy/TELEMETRY.md", "deploy/test-telemetry.ps1" ] }, { "step": 20, "title": "Final Security pass", "description": "Request caps, upload hardening, token handling consistency, audit hygiene.", "files": [ "backend_main.py" ] }, { "step": 21, "title": "Sell-Ready Konsolidierung", "description": "Steps/Status/Roadmap/To-Dos synchronisiert; Browser-AZA als Kernprojekt festgelegt.", "files": [ "project_status.json", "project_roadmap.json", "project_plan.json", "project_todos.json" ] } ], "steps": [ { "step": 22, "title": "Browserbasiertes AZA (MVP) - zentral", "goal": "Kleinste verkaufbare Browser-Version von AZA: Audio hochladen, über /v1/transcribe verarbeiten, Transkript direkt im Browser anzeigen und kopieren.", "owner": "web/frontend/backend", "status": "open", "spec_file": "browser_aza_mvp_spec.md", "scope": { "in_scope": [ "Browser-UI mit einer klaren Hauptseite fuer Upload und Ergebnis", "Minimaler Zugangsschutz (Token/License oder einfacher Login, ohne grosse Account-Plattform)", "Fachrichtungsauswahl vor dem Upload", "Audio-Upload an /v1/transcribe", "Transkript im Browser anzeigen", "Copy-to-clipboard fuer das Transkript", "HTTPS erreichbar", "Support-Link und Privacy/Terms sichtbar" ], "out_of_scope": [ "Komplexes Rollen-/Rechtesystem", "Mehrmandantenfaehige Admin-Konsole", "Auto-Update fuer Desktop", "Komplexe Rechnungserstellung im Browser", "Analytics/BI Dashboard", "Perfekte UI-Politur", "Zusatzmodule ausserhalb des Kernflows" ] }, "definition_of_done": [ "Browser-App ist ueber HTTPS erreichbar", "User kann Fachrichtung waehlen", "User kann eine unterstuetzte Audiodatei hochladen", "Upload laeuft erfolgreich gegen /v1/transcribe mit X-API-Token/Auth-Mechanik des Projekts", "Transkript wird im Browser sichtbar dargestellt", "Transkript kann mit einem Klick kopiert werden", "Fehlermeldung bei leerem/ungueltigem Upload ist benutzerverstaendlich", "Support-Link und Privacy/Terms-Link sind sichtbar", "Keine Secrets oder Tokens werden im Frontend oder Logs ausgegeben" ], "deliverables": [ "browser_aza_mvp_spec.md", "Web-Frontend fuer Browser-AZA MVP", "Ein klarer Upload/Result-Flow", "Dokumentierte MVP-Konfiguration fuer Zugangsschutz", "Kurzes Runbook fuer Start/Test des Browser-MVP" ], "acceptance_checks": [ "Browser oeffnen -> Seite laedt", "Fachrichtung auswaehlbar", "Audio hochladen -> Request an /v1/transcribe erfolgreich", "Antwort wird als Transkript sichtbar", "Copy-Button kopiert Transkript", "Support/Privacy sichtbar", "HTTPS aktiv" ], "implementation_order": [ "1. Minimales Browser-UI mit Upload-Seite festlegen", "2. Zugangsschutz fuer MVP festlegen (einfach, ohne Umbau des Auth-Contracts)", "3. Fachrichtungsauswahl in UI einbauen", "4. Upload-Flow an /v1/transcribe anbinden", "5. Ergebnisansicht + Copy-Button bauen", "6. Support/Privacy sichtbar machen", "7. HTTPS-Staging/Deployment pruefen" ], "non_negotiables": [ "/license/status Schema bleibt exakt", "Auth bleibt X-API-Token", "Keine Tokens/Secrets loggen oder im UI offen anzeigen", "Keine Breaking Changes am bestehenden Backend-Contract ohne separaten Step" ], "todos": [ "webapp", "domain-brand", "legal-basics" ] }, { "step": 15, "title": "Caddy/HTTPS + Reverse Proxy Vorbereitung", "goal": "Reverse proxy + health/license checks via proxy, prod env template/runbook.", "owner": "ops", "status": "in_progress" }, { "step": 16, "title": "Go-Live Deployment (VPS/Büro-PC) + Webhook erreichbar + Billing OK", "goal": "Runbook + stable prod start/stop, webhook reachable, stripe alignment, log hygiene.", "owner": "ops", "status": "open" }, { "step": 17, "title": "Auto-Update / Installer + lokaler Backend-Autostart (Versionierung, Downloadbares Programm)", "goal": "Installer pipeline + update check/install in desktop app using release/version.json + 1-Klick-Start mit lokalem Backend fuer Praxistests.", "owner": "release/desktop", "status": "in_progress", "progress_notes": [ "Desktop-EXE wird erfolgreich gebaut", "Lokales Backend startet automatisch aus der Desktop-App", "Lokaler Smoke-Test gegen /license/status ist erfolgreich (valid=true)", "Installer-Workflow mit Inno Setup ist vorbereitet (aza_installer.iss + build_installer.ps1)", "Desktop-Update-Flow ist verdrahtet (Check, Download, Installer-Start)", "Versionierung wird zentralisiert, damit App/Installer/Update-Manifest synchron bleiben", "release/version.json wird aus aza_version.py erzeugt", "Lokale Release-Pipeline wird in einem Startpunkt zusammengefuehrt (Build, Manifest, Desktop-Test, Installer, Installer-Test)", "Release-Artefakt-Report mit SHA256-Checksums fuer EXE und Installer wird erzeugt", "Publish-Bundle fuer Upload/Verteilung wird automatisch erzeugt", "Desktop Runtime Secret Provisioning eingefuehrt (openai_runtime_config.py)", "Installer-EXE erfolgreich gebaut (aza_desktop_setup.exe)", "Installer enthaelt bewusst kein hartkodiertes OpenAI-Secret", "Setup-Helfer fuer Praxiscomputer mitgeliefert (setup_openai_runtime.ps1)", "Desktop Release validated: Full-Pipeline gruen (Build, Smoke, Installer, Artifacts)", "Praxiscomputer-Testpaket erstellt (dist/practice_test_bundle)", "Opacity-Startwert auf 1.0 korrigiert (DEFAULT_OPACITY in aza_config.py)", "READY FOR FIELD TEST: Interner Build/Installer/Secret-Flow komplett, Blocker ist jetzt externer Feldtest" ], "definition_of_done": [ "Desktop-App laesst sich als EXE starten", "Lokales Backend wird fuer Praxistests automatisch gestartet oder automatisch erkannt", "Kein manueller backend_main.py-Start noetig fuer Standard-Praxistest", "Keine manuelle backend_url.txt noetig fuer den lokalen Standardfall", "App wartet robust, bis das Backend erreichbar ist", "Fehlerfall bei nicht startendem Backend ist benutzerverstaendlich", "Update-Check gegen release/version.json bleibt kompatibel" ], "implementation_order": [ "1. Zielarchitektur fuer lokalen Backend-Autostart festlegen", "2. Backend-Prozess aus der Desktop-App robust starten", "3. Auf Erreichbarkeit des lokalen Backends warten", "4. Fehlerfall sauber anzeigen", "5. EXE-Build so anpassen, dass der lokale Standardfall ohne Zusatzdateien funktioniert", "6. Danach Update-Mechanik vervollstaendigen" ], "non_negotiables": [ "/license/status Schema bleibt exakt", "Auth bleibt X-API-Token", "Keine Tokens/Secrets loggen", "Keine Breaking Changes am bestehenden Backend-Contract" ] }, { "step": 23, "title": "Sell-Ready Billing & Legal", "goal": "Invoice Pflichtfelder/MWST, Terms/Privacy, support process, alignment with Stripe.", "owner": "billing/legal", "status": "open" }, { "step": 24, "title": "Operations & Monitoring", "goal": "Backups, log rotation, incident playbook, uptime checks, token rotation.", "owner": "ops", "status": "open" }, { "step": 25, "title": "Go-Live Cutover", "goal": "Final checklist, domain/DNS, HTTPS, release publish, announce, rollback plan.", "owner": "ops/product", "status": "open" } ] }