A lightweight always-on-top Windows overlay for deep work sessions.
Transparent panels for task management, Pomodoro timer, and progress tracking —
sitting quietly on top of any app, zero CPU when idle.
- Task panel — add, check off, and remove tasks; auto-resizes as your list grows
- Pomodoro timer — configurable work/rest duration, auto-loops between phases, custom end-of-phase messages and beep sounds
- Stopwatch mode — simple count-up timer with start/stop/reset
- Progress panel — live X/Y task counter with a green progress bar
- Settings menu — three-dot menu to switch modes, set durations, set messages, hide panels, and quit
- Native drag — each panel drags independently anywhere on screen
- Transparent — panels float over any app using WebView2 for rendering
- Minimal CPU — ~0% CPU when idle, ~1–2MB RAM
- Windows 10 / 11 (x64)
- WebView2 Runtime — pre-installed on most Windows 11 machines
- Download
FocusOverlay-Setup.exefrom Releases - Run it — no admin required, installs per-user
- Launch from desktop shortcut or Start Menu
- Download
FocusOverlay-Portable.zipfrom Releases - Extract anywhere
- Run
FocusOverlay.exe
- Visual Studio 2022+ with Desktop development with C++ workload
- Windows 10/11 SDK
- NuGet packages (restored automatically on first build):
Microsoft.Web.WebView2Microsoft.Windows.ImplementationLibrary
git clone https://github.com/KUNAL01011/FocusOverlay.git
cd FocusOverlayOpen FocusOverlay.sln in Visual Studio → set configuration to Release x64 → Ctrl+Shift+B.
Copy ui/ and assets/ into x64/Release/ before running.
FocusOverlay/
├── src/
│ ├── main.cpp # Entry point, message loop, panel wiring
│ ├── PanelWindow.h/cpp # Win32 + WebView2 base panel class
│ └── Pomodoro.h/cpp # Timer logic (Pomodoro + Stopwatch)
├── ui/
│ ├── task-panel.html # Task list UI
│ ├── progress-panel.html # Progress bar UI
│ └── pomodoro-panel.html # Timer UI
├── assets/
│ ├── icons/
│ │ └── focusoverlay.ico
│ └── sounds/
│ ├── beep1.wav # Work phase end
│ └── beep2.wav # Rest phase end
├── installer/
│ └── FocusOverlay.iss # Inno Setup script
└── FocusOverlay.sln
| Layer | Technology |
|---|---|
| Window management | Win32 API |
| UI rendering | WebView2 (Chromium-based) |
| UI language | HTML / CSS / JavaScript |
| Backend logic | C++20 |
| Build system | MSVC / MSBuild |
| Installer | Inno Setup 6 |
C++ owns all state (tasks, timer). HTML panels are pure UI. They communicate via the WebView2 message bridge:
User clicks START in HTML
→ postMessage({type: "POMODORO_TOGGLE"})
→ C++ Pomodoro::Toggle()
→ Windows timer ticks every second
→ C++ sends TIMER_UPDATE back to HTML
→ HTML updates the display
Dragging uses WebView2's native app-region: drag CSS property wired to the parent WS_POPUP window — no JS math, no shaking.
PRs welcome. Open an issue first for anything significant.
MIT — do whatever you want with it.

