feat: Windows app (WPF + WebView2) #1

Open
superdooper86 wants to merge 196 commits from feature/windows-app into main
superdooper86 commented 2026-05-08 12:13:15 +02:00 (Migrated from github.com)

Summary

A native Windows port of ClaudeChecker built with WPF (.NET 8) and WebView2.

  • System tray icon — left-click to show/hide the popup
  • 5-hour and 7-day usage gauges with circular gauge control and burn rate sparklines
  • Cookie-based auth via embedded WebView2 browser (sign in once, session persists across restarts)
  • Auto-refresh on a configurable interval (1–10 min)
  • Update checking against the same version.json / version-beta.json as the macOS app, with one-click install
  • Beta channel toggle
  • Settings panel (auth, refresh interval, update channel)
  • Popup positions itself near the system tray (bottom-right)

Structure

All files live under windows/. No changes to the macOS app.

File Purpose
App.xaml.cs Tray icon, popup lifecycle, refresh timer
PopupWindow.xaml/cs Main UI — limit cards, settings, update sheet
LoginWindow.xaml/cs WebView2 browser for claude.ai auth
UsageViewModel.cs Data fetching, cookie handling, state
UpdateManager.cs Version checking, download and install
Controls/GaugeControl.cs Custom circular gauge (matches macOS style)
Controls/SparklineControl.cs Burn history sparkline

Requirements to build

  • .NET 8 SDK
  • Assets/icon.ico and Assets/icon.png — copy from the macOS xcassets folder before building

Test plan

  • Build with dotnet build -c Release in windows/
  • Tray icon appears on launch
  • Sign in flow works via WebView2
  • Usage data loads and displays correctly
  • Settings panel opens/closes cleanly
  • Update check works (use fake version JSON trick)
  • Refresh timer fires on schedule
## Summary A native Windows port of ClaudeChecker built with WPF (.NET 8) and WebView2. - System tray icon — left-click to show/hide the popup - 5-hour and 7-day usage gauges with circular gauge control and burn rate sparklines - Cookie-based auth via embedded WebView2 browser (sign in once, session persists across restarts) - Auto-refresh on a configurable interval (1–10 min) - Update checking against the same `version.json` / `version-beta.json` as the macOS app, with one-click install - Beta channel toggle - Settings panel (auth, refresh interval, update channel) - Popup positions itself near the system tray (bottom-right) ## Structure All files live under `windows/`. No changes to the macOS app. | File | Purpose | |---|---| | `App.xaml.cs` | Tray icon, popup lifecycle, refresh timer | | `PopupWindow.xaml/cs` | Main UI — limit cards, settings, update sheet | | `LoginWindow.xaml/cs` | WebView2 browser for claude.ai auth | | `UsageViewModel.cs` | Data fetching, cookie handling, state | | `UpdateManager.cs` | Version checking, download and install | | `Controls/GaugeControl.cs` | Custom circular gauge (matches macOS style) | | `Controls/SparklineControl.cs` | Burn history sparkline | ## Requirements to build - .NET 8 SDK - `Assets/icon.ico` and `Assets/icon.png` — copy from the macOS xcassets folder before building ## Test plan - [ ] Build with `dotnet build -c Release` in `windows/` - [ ] Tray icon appears on launch - [ ] Sign in flow works via WebView2 - [ ] Usage data loads and displays correctly - [ ] Settings panel opens/closes cleanly - [ ] Update check works (use fake version JSON trick) - [ ] Refresh timer fires on schedule
coder added 4 commits 2026-09-10 09:09:41 +02:00
This pull request has changes conflicting with the target branch.
  • version-windows-beta.json
  • windows/RELEASE_NOTES.md
  • windows/UpdateManager.cs
  • windows/installer.iss
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feature/windows-app:feature/windows-app
git checkout feature/windows-app
Sign in to join this conversation.