# DashCaddy Windows App — Build & Release Checklist ## What's Complete ✅ ### Desktop App (WinUI 3 / .NET 8) | File | Purpose | |------|---------| | `desktop/DashCaddy.Desktop.csproj` | Project file with MSIX packaging | | `desktop/App.xaml` / `App.xaml.cs` | App entry, service initialization | | `desktop/MainWindow.xaml` / `.cs` | Main UI with service list, toolbar, status bar | | `desktop/ViewModels/MainViewModel.cs` | Central state, service management | | `desktop/ViewModels/ServiceViewModel.cs` | Service model with health status | | `desktop/ViewModels/Converters.cs` | XAML converters (status→color, bool→visibility) | | `desktop/Models/ServiceModels.cs` | DTOs matching your Node.js API | | `desktop/Services/DockerService.cs` | Docker.DotNet wrapper | | `desktop/Services/ApiClient.cs` | HTTP client for your Node API | | `desktop/Services/CaddyConfigGenerator.cs` | Caddyfile generation | | `desktop/Services/DnsClient.cs` | DNS API client | | `desktop/Services/TemplateRegistry.cs` | 9 built-in templates (Plex, HA, Jellyfin, etc.) | | `desktop/Services/ComposeParser.cs` | Docker Compose import | | `desktop/AddServiceDialog.xaml` / `.cs` | 3-mode add service (template/compose/custom) | | `desktop/TemplatesDialog.xaml` / `.cs` | Template browser | | `desktop/SettingsDialog.xaml` / `.cs` | Domain, Docker, DNS settings | | `desktop/Styles/Colors.xaml` / `Controls.xaml` | Fluent design styles | ### Installer (NSIS + PowerShell) | File | Purpose | |------|---------| | `installer/windows/dashcaddy.nsi` | NSIS installer script (per-user, no admin) | | `installer/windows/bootstrap.ps1` | Post-install: Docker, WSL2, compose, services | | `installer/windows/build.ps1` | Build script: .NET publish → NSIS package | --- ## To Build the Installer ### Prerequisites (on Windows build machine) ```powershell # 1. Visual Studio 2022 with "Windows App SDK" workload # 2. .NET 8 SDK # 3. NSIS 3.08+ (makensis.exe) # 4. Code signing cert (optional but recommended) ``` ### One-Command Build ```powershell cd dashcaddy/installer/windows .\build.ps1 -Version 1.15.0 ``` **Output:** `artifacts/DashCaddy-Setup-1.15.0.exe` (~150-200 MB) --- ## What the Installer Does (User Experience) ``` User double-clicks DashCaddy-Setup-1.15.0.exe │ ▼ ┌────────────────────────────────────────────────────────────┐ │ 1. Welcome → License → Choose Folder (%LOCALAPPDATA%) │ │ 2. Components: App, Docker Desktop, WSL2, Auto-start │ │ 3. Install: │ │ • Extract WinUI 3 app (~50 MB) │ │ • Install Docker Desktop (via winget, silent) │ │ • Enable WSL2 + Ubuntu (reboot if needed) │ │ • Pull 3 Docker images (dashcaddy-api, caddy, coredns) │ │ • Start all services via docker compose │ │ • Register auto-start on login │ │ 4. Finish → Launches DashCaddy.app │ └────────────────────────────────────────────────────────────┘ │ ▼ ┌────────────────────────────────────────────────────────────┐ │ DashCaddy Window Opens: │ │ • Green/Yellow/Red status badges (12/12 running) │ │ • Service list with toggle switches │ │ • "+ Add Service" → Templates (Plex, HA, Jellyfin...) │ │ • "Import Compose" → Drag .yaml file │ │ • "Open Dashboard" → Browser to https://status.local │ └────────────────────────────────────────────────────────────┘ ``` --- ## Integration with Your Existing Stack | Your Existing Component | How Desktop App Uses It | |------------------------|------------------------| | `dashcaddy-api` (Node.js in Docker) | `ApiClient.cs` calls `/api/v1/services`, `/api/v1/health` | | `platform-paths.js` paths | `bootstrap.ps1` creates same paths on Windows (`E:/dockerdata/...`) | | Caddy reverse proxy | `CaddyConfigGenerator.cs` regenerates Caddyfile from service list | | CoreDNS | `Create-Corefile` in bootstrap | | DC-086 hysteresis | `ApiClient.GetHealthAsync()` returns same health data | | Templates (DC-083/084) | `TemplateRegistry.cs` has 9 templates matching your compose files | --- ## Remaining Tasks to Ship | Task | Effort | Notes | |------|--------|-------| | **Build on Windows machine** | 30 min | Run `build.ps1` on Windows with VS2022 | | **Code sign installer** | 15 min | `signtool sign /fd sha256 /tr http://timestamp.digicert.com DashCaddy-Setup-1.15.0.exe` | | **Test on clean VM** | 1 hr | Fresh Windows 10/11, verify Docker+WSL install flow | | **Host installer** | 15 min | Upload to `https://dashcaddy.net/downloads/DashCaddy-Setup-1.15.0.exe` | | **Auto-update via MSIX** | 1 hr | Configure `AppInstallerUri` in csproj, host `.appinstaller` file | | **Submit to Winget** | 30 min | PR to `microsoft/winget-pkgs` with manifest | | **Submit to Chocolatey** | 30 min | `choco pack` + push to community repo | --- ## Architecture Summary ``` ┌─────────────────────────────────────────────────────────────────┐ │ DashCaddy for Windows │ ├─────────────────────────────────────────────────────────────────┤ │ 📦 DashCaddy-Setup-1.15.0.exe (NSIS, ~180 MB) │ │ └─ Per-user install to %LOCALAPPDATA%\DashCaddy\ │ ├─────────────────────────────────────────────────────────────────┤ │ 🖥 DashCaddy.exe (WinUI 3, single-file, self-contained) │ │ ├─ MainWindow: Service dashboard with health badges │ │ ├─ Add Service: Template / Compose / Custom │ │ ├─ Settings: Domain, DNS, Docker paths │ │ └─ Talks to: http://localhost:3001/api (your Node API) │ ├─────────────────────────────────────────────────────────────────┤ │ 🐳 Docker Desktop (auto-installed via winget) │ │ ├─ dashcaddy-api:3001 ← Your existing Node.js API │ │ ├─ caddy:80/443 ← Reverse proxy + TLS │ │ └─ coredns:53 ← Local DNS for *.local │ ├─────────────────────────────────────────────────────────────────┤ │ 📁 Data in %LOCALAPPDATA%\DashCaddy\ │ │ ├─ data\caddy\Caddyfile ← Auto-generated │ │ ├─ data\coredns\Corefile ← Local DNS │ │ ├─ config.yaml ← User settings │ │ └─ logs\ ← App + bootstrap logs │ └─────────────────────────────────────────────────────────────────┘ ``` --- ## Key Design Decisions | Decision | Rationale | |----------|-----------| | **Per-user install (%LOCALAPPDATA%)** | No UAC prompt, works on locked-down corporate machines | | **WinUI 3 + MSIX** | Native Windows 10/11 look, auto-updates, clean uninstall | | **Docker Desktop via winget** | Standard Windows way, handles WSL2, auto-updates | | **bootstrap.ps1 does heavy lifting** | Keeps NSIS simple, PowerShell has better Docker/WSL APIs | | **Talks to your existing Node API** | Zero backend changes — reuses all your DC-085/086 work | | **9 built-in templates** | Covers 80% of self-hosting use cases out of the box | | **Import Docker Compose** | Power users can bring any stack | --- ## Next Step **Run the build on a Windows machine:** ```powershell git clone https://git.dashcaddy.net/sami7777/dashcaddy.git cd dashcaddy/installer/windows .\build.ps1 -Version 1.15.0 ``` Then test the installer on a clean Windows VM. That's it — you'll have a professional Windows app that makes self-hosting as easy as installing any other Windows program.