feat(desktop): release builds, download page, action menu polish + settings fix#2
Merged
Conversation
… drive it in-process All proxy/discovery/expose/store/config/doctor/CLI logic now lives in internal/core (package core); root main.go is a thin shell calling core.Run. Version ldflag repointed to internal/core.Version. No behavior change — same CLI, same flags, tests green, Windows cross-build ok.
… module can import it
…cess Menu-bar app (separate Go module under desktop/) that runs the proxy in-process — no sidecar. Start/Stop, Public(Funnel)/Private(Serve) radio, a Services submenu that opens each URL, and Start-at-login (LaunchAgent / .desktop / HKCU Run key). macOS is tray-only (Accessory activation, no Dock icon). Shares the same ~/.tailscale-proxy/config.json as the CLI. Compiles against Wails v3 (CGO/WebKit); the raw 'go build' binary runs the tray, 'wails3 build' produces a bundled app. Adds core.ConfigPath; documents the app in README + AGENT.md + desktop/README.md.
cmdStart resolves the public base once up front and passes it to the poll loop, so 'discovered <slug> …' lines now end with '→ https://node.ts.net/<slug>/'.
Replace the plain native menu with a dropdown webview panel (assets/panel.html) served on a random loopback port by a token-gated control API (dashboard.go): status dot + node, Start/Stop, Public/Private segmented toggle, a styled services list (runtime badge, port, open button), and Start-at-login / Open-config / Quit. A frameless Wails window loads it and is attached to the tray. Verified the panel renders in a headless browser against a mock API; service rows use safe DOM (no innerHTML interpolation of slugs).
…rk redesign - Service cards now show runtime, port, pid, and project folder; add a Refresh button and a compact, calmer Start/Stop (filled green Start, restrained Stop). - Add a Settings window (Settings + About tabs): full proxy config form + app prefs (start-at-login, hide-dock), and an About tab with the app icon, name, and version. Adds core.Controller.Refresh(), prefs.go (desktop-only prefs), icon.go (generated menu-bar hub icon: black template idle / green running). - Hallmark redesign of panel.html + settings.html: native-macOS dark, single cool accent, translucent hairlines, mono/tabular numerals, sliding segmented toggle, native switches, :focus-visible rings, reduced-motion. Verified both render in a headless browser against a mock API.
…-blur, polish
- Window: frameless translucent (MacBackdropTranslucent) rounded shell; hide the
panel when it loses focus (click-away dismiss).
- Per-service stats: cpu %, memory (MB), process uptime, and 'discovered N ago'
(procStats via ps on unix; first-seen tracked in the dashboard). New
core.CheckTailscale() drives a setup screen with install steps + link when
Tailscale isn't detected, and a login banner when it's not up.
- Start/Stop shows a spinner and is guarded against double-clicks; the Funnel/Serve
toggle is locked while running ('Stop to switch mode').
- Buttons are icon+text (Refresh, Settings, Config, Quit). New proxy/router glyph
(anti-aliased exchange arrows) for the menu-bar icon + setup tile.
- Verified the panel, stats, and setup states render in a headless browser.
…Esc/icon polish - Settings window now hides instead of closing (WindowClosing → Cancel + Hide), so it reopens reliably. - New menu-bar icon: a fan-out routing glyph (one entry → many services); the setup tile uses the matching SVG. Settings/About tab icons unified to one ring/line style. - Service cards restructured: identity (slug · 127.0.0.1:port · folder) on the left, a right-aligned metrics column (cpu / MB / uptime) that lines up across rows, then the open button — much easier to scan. - Buttons use a pointer cursor; Esc dismisses the panel.
…, no right-click - Each service row gets a ⋯ menu: Open URL, Copy URL, Open folder, Copy info, Kill process. Backend endpoints (/api/copy, /api/kill, /api/openfolder) are gated to pids/dirs that belong to a currently-discovered service; clipboard via pbcopy/clip/xclip, kill via TERM/taskkill. - List no longer flickers: rows are keyed by slug and updated in place (no per-poll teardown). - Uptime formatted as HH:MM (or 'Nd HH:MM'). - Native right-click context menu disabled in both panel and settings; Esc closes the action menu first, then the panel.
… uptime label - Per-service menu now offers Open local URL (127.0.0.1:port), Open proxy URL and Copy proxy URL (the ts.net entry), Open folder, Copy info, then Kill. - Kill process opens a styled confirmation dialog (warning icon, Cancel/Kill); Esc dismisses confirm → menu → panel in order. - Uptime formatted as HH:MM with H/M markers and an 'up' label (e.g. 06H:22M up).
…blish Manual workflow_dispatch (version input) builds the Wails app on macOS (arm64 + Intel), Windows, and Linux runners, packages each (macOS .app→.dmg via make-macos-dmg.sh, Windows windowsgui .exe→.zip, Linux tar.gz), and publishes a desktop-v<version> GitHub release with install notes.
The Cancel+Hide-on-close approach didn't survive this Wails alpha — closing the window destroyed it, so Show() on the dead reference was a no-op. Now the settings window is created on demand and the reference is cleared on close, so open → close → open always works.
- Add a polished app icon (gradient squircle + fan-out routing glyph) at website/public/app-icon.svg, and a clean panel screenshot. - New website 'Desktop app' page (/desktop): hero, per-platform download buttons, screenshot, feature list, per-OS install steps, requirements — linked in the nav and from the home page. - README 'Desktop app' section with the icon, screenshot, and download links. - desktop/README documents the desktop-release workflow + downloads.
Resolve conflicts after PR #1 was squash-merged: keep this branch's newer desktop code (settings recreate-on-demand fix, docs/download page) and adopt master's CI notification changes (ci.yml/release.yml/ci-notifications.md).
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
… updates - Replace the stale ring-dot About logo with the fan-out routing mark so it matches the app/menu-bar icon. - Add a Report an issue button (opens GitHub new-issue) and a Check for updates button backed by core.CheckUpdate() (latest GitHub release vs running version, with a Download/Releases link).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to the desktop app (#1, already merged) — packaging, docs, and polish.
Release builds & install
desktop-releaseworkflow — manual dispatch builds the Wails app on macOS (arm64 + Intel), Windows, and Linux runners, packages each (.dmgviamake-macos-dmg.sh, windowsgui.exe→.zip, Linux.tar.gz), and publishes adesktop-v<version>GitHub release with install notes./desktop: app icon, per-platform download buttons, screenshot, feature list, per-OS install steps. Linked from the nav, the home page, and the README (with a polishedapp-icon.svg).App polish (since #1)
⋯menu: Open local URL, Open proxy URL, Copy proxy URL, Open folder, Copy info, Kill process (with a confirmation dialog). Endpoints gated to live services; clipboard via pbcopy/clip/xclip, kill via TERM/taskkill.This branch also merges
master(the squash-merge of #1 + the CI Slack/Discord notification changes), so it's up to date.Verified:
coretests pass, desktop builds (CGO/WebKit), all workflows are valid YAML, the website builds with the new page, and every panel/menu/confirm/setup state was checked in a headless browser. Live tray/translucency + the packaging runners need a real session to eyeball.