diff --git a/.planning/phases/06-desktop-client-ci-cd/06-CONTEXT.md b/.planning/phases/06-desktop-client-ci-cd/06-CONTEXT.md new file mode 100644 index 0000000..aa840d7 --- /dev/null +++ b/.planning/phases/06-desktop-client-ci-cd/06-CONTEXT.md @@ -0,0 +1,113 @@ +# Phase 6: Desktop Client & CI/CD - Context + +**Gathered:** 2026-06-25 +**Status:** Ready for planning + + +## Phase Boundary + +Tauri 2.x Desktop-Wrapper fuer die bestehende Tessera Web-App (Windows + Linux) mit System Tray, nativen Benachrichtigungen und konfigurierbarer Server-URL. Plus DevOps-Automatisierung: Gitea als Git-Remote einrichten, Gitea Actions CI/CD Pipeline (Lint, Tests, Docker Build, Auto-Deploy auf gleichen Server). WICHTIG: Gitea-Integration ist KEIN Feature von Tessera — es ist Tooling fuer den Entwicklungsworkflow. Claude (nicht die App) pusht manuell bei Meilensteinen/grossen Bugfixes. + + + + +## Implementation Decisions + +### Desktop-App Verhalten +- **D-01:** Wrapper mit System Tray und nativen OS-Benachrichtigungen (z.B. Kalender-Erinnerungen). Braucht Backend-Integration fuer Notification-Events. +- **D-02:** Server-URL konfigurierbar beim ersten Start. Wird lokal gespeichert. Ein Build fuer alle Umgebungen. +- **D-03:** Beim Schliessen des Fensters (X-Button) wird in System Tray minimiert. Beenden nur ueber Tray-Kontextmenu. +- **D-04:** Autostart-Option in Desktop-App-Einstellungen vorhanden, standardmaessig deaktiviert. + +### Fenster & Erscheinung +- **D-05:** Fensterposition und -groesse werden beim Schliessen gespeichert, beim naechsten Start wiederhergestellt. Erster Start: 1280x800 zentriert. +- **D-06:** Eigenes Tessera-App-Icon (basierend auf Design-System, OKLCH Farben). + +### Build & Verteilung +- **D-07:** Linux: AppImage als primaeres Format (distro-uebergreifend). +- **D-08:** Update-Hinweis: App prueft beim Start ob neue Version verfuegbar, zeigt Notification. Download bleibt manuell. Auto-Update kann spaeter nachgeruestet werden. +- **D-09:** Code Signing kommt spaeter — erst relevant wenn Tessera an externe Kunden verkauft wird. Fuer interne Nutzung ohne Signierung OK. + +### Gitea-Automatisierung (DevOps, KEIN App-Feature) +- **D-10:** Gitea ist reines Versionskontroll- und CI/CD-Tooling. Tessera hat keine Git/Gitea-Funktionalitaet in der App. +- **D-11:** Claude pusht manuell bei Meilensteinen oder grossen Bugfixes nach Gitea. Kein automatischer Sync, kein zeitgesteuerter Push. +- **D-12:** Gitea Actions CI/CD Pipeline wird bei jedem Push getriggert: Lint + TypeCheck → Tests (Vitest) → Docker Images bauen → Auto-Deploy. +- **D-13:** Deploy-Ziel ist gleicher Server wie Gitea. Pipeline macht docker-compose pull + restart. + +### Claude's Discretion +- Titelleiste: Nativ vs. Custom — basierend auf Aufwand und Design-System +- App-Menueleiste: Kein Menu vs. minimales Menu — basierend auf Plattform-Konventionen +- Windows Installer-Format: MSI vs. NSIS — basierend auf Zielgruppe (intern, spaeter extern) +- Gitea Actions Workflow-Struktur und Stage-Konfiguration +- Docker Image Registry: Gitea-intern vs. lokal + + + + +## Canonical References + +**Downstream agents MUST read these before planning or implementing.** + +### Projekt-Kontext +- `.planning/PROJECT.md` — Gesamtprojekt, Core Value, Constraints +- `.planning/REQUIREMENTS.md` — Phase-6-Requirements: DESK-01, DESK-02, INFRA-04 +- `.planning/ROADMAP.md` — Phase-Ziel und Success Criteria + +### Vorherige Phasen +- `.planning/phases/01-foundation-portal-shell/01-CONTEXT.md` — Design-Entscheidungen, OKLCH Tokens (relevant fuer App-Icon) +- `.planning/phases/05-dashboard-calendar/05-CONTEXT.md` — Dashboard/Kalender (relevant fuer native Notifications) + +### Technologie +- `docker-compose.yml` — Bestehende Container-Konfiguration (web, api, db). Deploy-Target fuer CI/CD +- `pnpm-workspace.yaml` — Monorepo-Struktur (apps/*, packages/*) +- `apps/web/Dockerfile` — Web-Image Build +- `apps/api/Dockerfile` — API-Image Build + + + + +## Existing Code Insights + +### Reusable Assets +- `docker-compose.yml` — Bestehende Service-Definitionen (web, api, db). CI/CD Deploy baut darauf auf. +- `apps/web/Dockerfile` + `apps/api/Dockerfile` — Produktions-Dockerfiles bereits vorhanden +- Design Tokens (OKLCH) in `apps/web` — Basis fuer App-Icon-Farben + +### Established Patterns +- pnpm Workspace mit `apps/*` und `packages/*` — Desktop-App wird `apps/desktop` +- Docker Compose mit Netzwerk-Segmentierung (frontend-net, backend-net, data-net) +- Health Checks fuer alle Services + +### Integration Points +- `apps/desktop` — Neues Tauri-Projekt im Monorepo +- `.gitea/workflows/` — Gitea Actions Workflow-Dateien (neu) +- Gitea Remote muss eingerichtet werden (aktuell kein Remote konfiguriert) +- Desktop-App laedt `http://:3000` (Web-Frontend) +- Notification-Backend braucht evtl. WebSocket/SSE Endpoint in `apps/api` + + + + +## Specific Ideas + +- Desktop-App ist reiner Wrapper — die gesamte Logik bleibt in der Web-App +- Tray-Icon zeigt Tessera-Logo, Rechtsklick-Menu mit: Oeffnen, Beenden +- Erster Start zeigt Eingabefeld fuer Server-URL, danach direkt zur Web-App +- Gitea Actions Pipeline als Multi-Stage: erst Qualitaet pruefen, dann bauen, dann deployen + + + + +## Deferred Ideas + +- **Auto-Update mit Tauri Updater:** Kann spaeter nachgeruestet werden wenn Update-Server verfuegbar +- **Code Signing:** Wird relevant bei externem Verkauf +- **macOS Support:** Aktuell nur Windows + Linux, Mac spaeter bei Bedarf +- **Gitea Webhooks fuer externe Events:** z.B. Issue-Tracking Integration + + + +--- + +*Phase: 06-Desktop Client & CI/CD* +*Context gathered: 2026-06-25* diff --git a/.planning/phases/06-desktop-client-ci-cd/06-DISCUSSION-LOG.md b/.planning/phases/06-desktop-client-ci-cd/06-DISCUSSION-LOG.md new file mode 100644 index 0000000..4b4e979 --- /dev/null +++ b/.planning/phases/06-desktop-client-ci-cd/06-DISCUSSION-LOG.md @@ -0,0 +1,153 @@ +# Phase 6: Desktop Client & CI/CD - Discussion Log + +> **Audit trail only.** Do not use as input to planning, research, or execution agents. +> Decisions are captured in CONTEXT.md — this log preserves the alternatives considered. + +**Date:** 2026-06-25 +**Phase:** 06-desktop-client-ci-cd +**Areas discussed:** Desktop-App Verhalten, Fenster & Erscheinung, Build & Verteilung, Gitea-Automatisierung + +--- + +## Desktop-App Verhalten + +| Option | Description | Selected | +|--------|-------------|----------| +| Reiner Wrapper | Nur Fenster mit Web-App, keine nativen Features | | +| Wrapper + System Tray | Web-App + Tray + Autostart | | +| Wrapper + Tray + Notifications | Wie oben + native OS-Benachrichtigungen | ✓ | + +**User's choice:** Wrapper + Tray + Notifications + +| Option | Description | Selected | +|--------|-------------|----------| +| Feste URL | Server-Adresse beim Build eingebaut | | +| Konfigurierbar | Benutzer gibt URL beim ersten Start ein | ✓ | +| Auto-Discovery | mDNS/Bonjour im lokalen Netz | | + +**User's choice:** Konfigurierbar + +| Option | Description | Selected | +|--------|-------------|----------| +| In Tray minimieren | App bleibt im Tray, Beenden nur ueber Menu | ✓ | +| Beenden mit Nachfrage | Dialog beim X-Klick | | +| Konfigurierbar | In Einstellungen waehlbar | | + +**User's choice:** In Tray minimieren + +| Option | Description | Selected | +|--------|-------------|----------| +| Ja, standardmaessig | Autostart aktiviert per default | | +| Nein, manuell | Kein Autostart | | +| Optional, aus | Option vorhanden, Standard: deaktiviert | ✓ | + +**User's choice:** Optional, aus + +--- + +## Fenster & Erscheinung + +| Option | Description | Selected | +|--------|-------------|----------| +| Native OS-Titelleiste | Standard-Fensterrahmen | | +| Custom Titelleiste | Eigene Titelleiste im Tessera-Design | | +| Claude entscheidet | Basierend auf Aufwand und Design-System | ✓ | + +**User's choice:** Claude entscheidet + +| Option | Description | Selected | +|--------|-------------|----------| +| Maximiert | Startet im Vollbildmodus | | +| Zentriert 1280x800 | Feste Startgroesse | | +| Letzten Zustand merken | Speichert Position + Groesse | ✓ | + +**User's choice:** Letzten Zustand merken + +| Option | Description | Selected | +|--------|-------------|----------| +| Kein App-Menu | Nur Web-Oberflaeche | | +| Minimales Menu | Beenden, Info/Version | | +| Claude entscheidet | Basierend auf Plattform-Konventionen | ✓ | + +**User's choice:** Claude entscheidet + +| Option | Description | Selected | +|--------|-------------|----------| +| Eigenes Tessera-Icon | Brauchen Icon-Design | ✓ | +| Platzhalter-Icon | Standard-Tauri-Icon erstmal | | +| Claude erstellt eins | Generiertes Icon basierend auf Design-System | | + +**User's choice:** Eigenes Tessera-Icon + +--- + +## Build & Verteilung + +**Linux-Format:** +**User's choice:** AppImage (distro-uebergreifend) +**Notes:** User betonte Distro-Unabhaengigkeit als Prioritaet + +| Option | Description | Selected | +|--------|-------------|----------| +| MSI | Windows Installer, Enterprise | | +| NSIS (EXE) | Setup-Wizard | | +| Beide | MSI + EXE | | +| Claude entscheidet | Basierend auf Zielgruppe | ✓ | + +**User's choice:** Claude entscheidet (Windows Installer-Format) + +**Auto-Update:** +**Claude's Empfehlung angenommen:** Update-Hinweis (prueft ob neue Version da, zeigt Notification, manueller Download) + +| Option | Description | Selected | +|--------|-------------|----------| +| Ohne Signierung | Windows zeigt Warnung, fuer intern OK | | +| Spaeter | Erst relevant bei externem Verkauf | ✓ | +| Claude entscheidet | | | + +**User's choice:** Spaeter + +--- + +## Gitea-Automatisierung + +**Kritische Klaerung:** User stellte klar dass Gitea-Integration KEIN Feature der Tessera-App ist. Git/Gitea ist reines Entwicklungs-Tooling. Claude (nicht die App) pushed Code nach Gitea bei Meilensteinen. + +| Option | Description | Selected | +|--------|-------------|----------| +| Nur Auto-Push | Automatisch committed und gepusht | | +| Push + CI Pipeline | Auto-Push + Gitea Actions | | +| Full CI/CD | Push + Build/Test + Docker + Deploy | ✓ | + +**User's choice:** Full CI/CD +**Notes:** Push ist NICHT automatisch — Claude pusht manuell bei Meilensteinen/grossen Bugfixes + +**Pipeline-Schritte (alle gewaehlt):** +- Lint + Type Check ✓ +- Tests ausfuehren ✓ +- Docker Images bauen ✓ +- Auto-Deploy ✓ + +| Option | Description | Selected | +|--------|-------------|----------| +| Gleicher Server | Tessera + Gitea auf einem Server | ✓ | +| Separater Server | Tessera woanders, Images ueber Registry | | + +**User's choice:** Gleicher Server + +--- + +## Claude's Discretion + +- Titelleiste: Nativ vs. Custom +- App-Menueleiste: Kein Menu vs. minimales Menu +- Windows Installer-Format: MSI vs. NSIS +- Gitea Actions Workflow-Struktur +- Docker Image Registry Strategie + +## Deferred Ideas + +- Auto-Update mit Tauri Updater (spaeter wenn Update-Server verfuegbar) +- Code Signing (bei externem Verkauf) +- macOS Support +- Gitea Webhooks fuer externe Events