The Problem
Pomodoro timers are all functionally identical. Start, wait, stop, repeat. The rhythm of your day — whether you took real breaks, whether you had gaps, whether you worked in long continuous runs — disappears as soon as the session ends. I wanted a timer that made the shape of the day visible, and one I could actually run as a native desktop app without Electron's overhead.
A Pomodoro timer built with Tauri v2 and React. Each completed work session is rendered as a geometric shape layer in an SVG canvas that builds across the day. Shape family encodes how the session connected to the one before it: polygons for continuous work, circles for sessions that followed a timed break, stars for sessions that started after an untimed gap. Time of day scales each shape's size, and day-of-week drives shape complexity. The result is a visual record of your work rhythm that accumulates in real time.
What's interesting
Session mode classification
Each completed work session is classified as continuous, break, or gap based on what came before it. A session that follows a timed short or long break is break mode. A session that starts more than ten minutes after the last activity is gap mode. Everything else is continuous. The ten-minute threshold is tuned so a quick pause stays continuous but a meeting interruption registers as a gap.
Generative geometry encoding session data
Shape family maps to session mode: polygon for continuous, circle for break, star for gap. Shape complexity (number of polygon sides) increases with the day-of-week variant. Time of day drives the radial scale, so morning sessions render smaller and midday sessions larger. Stars are exclusive per time-scale bucket — a second gap in the same bucket renders as a polygon to avoid visual dominance.
Timer state machine with session history
Phases (idle, work, shortBreak, longBreak) and run states (idle, running, paused) are managed in Zustand with persist middleware. Interrupted sessions are recorded if more than five seconds elapsed. Session history survives refresh and accumulates across the calendar day. A calendar view shows completed sessions per day.
Tauri v2 for native desktop
The web layer is a standard React/Vite app that runs in the browser for development. Tauri wraps it in a native Rust shell for desktop distribution. No Electron runtime, no Chromium bundle — the final binary is a fraction of the size and starts significantly faster.
Why this matters
The generative geometry is the part that made this worth building. A timer that just counts down is a utility. A timer that shows you whether you actually rested between sessions, or just kept starting new ones without breaks, is a feedback tool. The shape canvas is that feedback made visible.