Files
aza/APP/backup 24.2.26/project_plan.json

223 lines
8.9 KiB
JSON
Raw Normal View History

2026-03-25 14:14:07 +01:00
{
"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"
}
]
}