Commit Graph

23 Commits

Author SHA1 Message Date
Michael Chihlas
ca4bd8da7a feat(rust): register plugins, global shortcut, commands 2026-05-08 19:25:14 -04:00
Michael Chihlas
c1085e073a feat(rust): commands module with click-through toggle helpers 2026-05-08 19:19:31 -04:00
Michael Chihlas
87843e3be4 docs(plan): drop core:window:allow-set-opacity
Not a real Tauri 2.11.x permission identifier. Discovered when cargo
check listed the actual valid permissions. Opacity is Rust-side only
and routes through our custom command.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 19:14:07 -04:00
Michael Chihlas
4782c087b4 feat(security): per-window capabilities, overlay locked down
Removed `core:window:allow-set-opacity` from the default capability —
that permission identifier doesn't exist in Tauri 2.11.x. Window
opacity is exposed only on the Rust side; the JS layer routes through
our custom `set_window_opacity` command (added in Task 16).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 19:13:49 -04:00
Michael Chihlas
7e21a39c7f chore(rust): add store, window-state, global-shortcut, tokio
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 19:13:42 -04:00
Michael Chihlas
0bc76fc95e feat: wire App + main with persist + hooks
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 18:59:44 -04:00
Michael Chihlas
4dc5604566 feat: control panel UI components
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 18:55:49 -04:00
Michael Chihlas
8359e4df45 feat: live overlay wiring and backend click-through sync hooks
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 18:53:18 -04:00
Michael Chihlas
fdeb6e8a19 feat: load + debounced persist via tauri-plugin-store
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 18:51:14 -04:00
Michael Chihlas
a91be65354 docs(plan): add set_window_opacity Rust command
Tauri 2 JS WebviewWindow does not expose setOpacity (only the Rust
side has set_opacity), so the JS layer routes through a custom
command. Surfaced during Task 9 implementation; updates Tasks 16 and
17 to register the command.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 17:55:25 -04:00
Michael Chihlas
2269e443b8 feat: overlay window API boundary
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 17:53:47 -04:00
Michael Chihlas
ce88841209 feat: zustand store for overlay state 2026-05-08 17:49:34 -04:00
Michael Chihlas
7bfc09207d feat: debounce helper with flush
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 17:47:25 -04:00
Michael Chihlas
45adba1643 feat: url normalization and http(s) allowlist
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 17:44:44 -04:00
Michael Chihlas
1e4bd8082b feat: add overlay state types and IPC constants
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 17:42:09 -04:00
Michael Chihlas
36dc73ac32 chore: remove scaffold App.css and react.svg
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 17:41:17 -04:00
Michael Chihlas
2f0814ad19 feat: wire tailwind v4 with charcoal design tokens 2026-05-08 17:40:14 -04:00
Michael Chihlas
d1e010bb65 chore: add frontend deps (zustand, lucide-react, tauri plugins, tailwind v4) 2026-05-08 17:38:02 -04:00
Michael Chihlas
ed89979a08 chore: tighten tsconfig and set dark page base 2026-05-08 17:32:34 -04:00
Michael Chihlas
6e62673f7e docs: address review of MVP plan
Patches:
- Wire tauri://destroyed listener through onDestroyed callback so
  taskbar-close keeps isOpen in sync (was: defined onOverlayClosed
  but never wired).
- Drop Rust-side opacity restore in apply_state; JS event handler
  reads useOverlayStore.getState().opacity and restores. Fixes
  hotkey-from-50%-opacity stuck at 100%.
- Replace event-based hotkey-registration signal with pull-style
  AppState.hotkey_status + get_hotkey_status command. Eliminates
  the listener-not-yet-registered race.
- Remove unused LogicalPosition/LogicalSize imports (would have
  failed tsc under noUnusedLocals).
- Remove unused urlError selector in OpenOverlayButton (same).
- Replace flushPendingPersist with flushPendingPersistSync that
  fires the write fire-and-forget; document the bounded staleness
  trade-off (<= 300ms loss on crash).
- Drop broken docs/screenshot.png reference from README.
- Collapse Task 18 down: syncClickThroughCache now lives in Task 9
  alongside lib/overlay.ts; Task 18 only touches the live-wiring
  hook to keep the cache in sync on UI-side toggles.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 17:25:32 -04:00
Michael Chihlas
4a3d380b54 docs: add Phase 1 MVP implementation plan
Twenty bite-sized tasks covering project hygiene, Tailwind v4 setup,
Zustand store + tested URL/debounce helpers, the WebviewWindow API
boundary, persistence, Rust plugin registration with click-through
toggle, capability files (overlay locked down), manual verification
checklist, and README + tag.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 16:14:24 -04:00
Michael Chihlas
605b5dc860 docs: add Phase 1 MVP design
Captures the brainstormed design for the two-window overlay app:
architecture, frontend structure, Rust backend split, persistence
model, click-through escape hatch, and the manual verification
checklist that defines "Phase 1 done."

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 16:05:31 -04:00
Michael Chihlas
a8255b90d5 Initial commit: scaffold Tauri app 2026-05-08 14:31:16 -04:00