Owner decision pending (STATE.md DC-100 tick): adopt/ship/park. Preserved from fragile git stash to named branch 2026-08-23. NOTE: requires a Windows build machine (WinUI XAML compiler + MSIX do not cross-build on Linux) — see WINDOWS_APP_BUILD.md in this tree. Secret-scanned clean 2026-08-23 (no keys/tokens/PEM in tree).
8.9 KiB
8.9 KiB
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)
# 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
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:
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.