A small desktop Pomodoro app built with Tauri 2, Rust, TypeScript, Vite, HTML, and CSS.
This project is completely vibe-coded.
It was built as a fast, practical, good-enough solution for one specific use case. If you are looking for pristine architecture, layered abstractions, or long-term platform strategy, this repo is not trying to impress you.
The goal was simple: make something that fits my workflow quickly and feels right to use. The app has since been cleaned up heavily on the frontend, but the original spirit is still the same.
- Pomodoro, short break, and long break modes
- Custom durations for all timer modes
- Focus mode to hide the remaining time
- Optional micro-breaks with two variants
- Local persistence for timer state, settings, and activity stats
- Simple activity report with focus hours and streaks
- Windows tray support
- Single-instance behavior so reopening the app restores the running window
- Tauri 2
- Rust
- TypeScript
- Vite
- Vitest
- HTML
- CSS
- Vanilla DOM
src/
index.html
styles.css
main.ts
app/
domain/
infrastructure/
ui/
utils/
src-tauri/
src/lib.rs
tauri.conf.json
Requirements:
- Node.js
- Rust
- Tauri CLI
- Microsoft WebView2 Runtime on Windows
Install dependencies:
npm installInstall the Tauri CLI if needed:
cargo install tauri-cli --version "^2.0"Start the frontend in development mode:
npm run devOr run the full desktop app:
cd src-tauri
cargo tauri devCreate a frontend production build:
npm run buildCreate the desktop production build:
cd src-tauri
cargo tauri buildBuild artifacts will be available in:
src-tauri/target/release/
Rust check:
cd src-tauri
cargo checkTypeScript check:
npm run typecheckTest suite:
npm testThe app currently stores data locally using these keys:
pomofocus-state-v1pomofocus-analytics-v1pomofocus-settings-v1
- Closing the window with
Xsends the app to the tray instead of quitting immediately - The tray menu lets you reopen or fully exit the app
- Only one instance can run at a time
No license file is currently included in this repository.