An impressive, modern Pomodoro timer web application built with TypeScript and Bun. Boost your productivity with the proven Pomodoro Technique in a beautifully designed interface.
- Full Pomodoro Cycle: Work sessions, short breaks, and long breaks
- Customizable Durations: Adjust work and break periods to your needs
- Auto-progression: Automatically advance between sessions (optional)
- Visual Progress Ring: Beautiful circular progress indicator
- Session Tracking: Keep track of completed Pomodoro sessions
- Modern Design: Clean, minimalist interface with smooth animations
- Responsive Layout: Works perfectly on desktop, tablet, and mobile
- Dark Mode Support: Automatic theme switching based on system preference
- Accessibility: Keyboard navigation and screen reader friendly
- PWA Support: Install as a native app on your device
- Offline Capability: Works without internet connection
- Sound Notifications: Audio alerts for session starts and ends
- Browser Notifications: Desktop notifications when timer completes
- Keyboard Shortcuts: Control timer with spacebar and other shortcuts
- Settings Persistence: Your preferences are saved locally
- Daily Statistics: Track your productivity progress
- Session Persistence: Running timers survive page refreshes
Space- Start/Pause timerR- Reset timerS- Toggle settings panelEscape- Close settings panel
Visit the live application: https://pomodoro.kajkowalski.nl
- Visit the live demo link
- Click the "Install" button in your browser
- The app will be installed on your device like a native app
# Ensure Bun is installed (https://bun.sh)
curl -fsSL https://bun.sh/install | bash
# Clone the repository
git clone https://github.com/kjanat/pomodoro-timer.git
# Navigate to the project directory
cd pomodoro-timer
# Install dependencies
bun install
# Install pre-commit hooks (recommended for contributors)
pip install pre-commit
pre-commit install
# Optional: Run pre-commit hooks on all files to verify setup
pre-commit run --all-files
# Start development server
bun run devpomodoro-timer/
βββ src/ # Source files
β βββ index.html # Main HTML document
β βββ manifest.json # PWA manifest
β βββ sw.ts # Service worker for PWA
β βββ css/
β β βββ styles.css # Modern CSS with variables and animations
β βββ js/
β β βββ app.ts # Application initialization and utilities
β β βββ audio.ts # Tone playback helper
β β βββ timer.ts # Core timer logic and UI management
βββ tests/ # Test files
βββ .github/
β βββ workflows/
β βββ deploy.yml # GitHub Actions for automatic deployment
βββ tsconfig.json # TypeScript configuration
βββ package.json # Project configuration
βββ README.md # This fileThe Pomodoro Technique is a time management method developed by Francesco Cirillo:
- Work for 25 minutes (one "Pomodoro")
- Take a 5-minute break
- Repeat for 4 cycles
- Take a longer 15-30 minute break
- Start the cycle again
This technique helps maintain focus and prevents burnout while maximizing productivity.
- Frontend: TypeScript, HTML5, CSS3
- Runtime: Bun
- PWA: Service Worker, Web App Manifest
- Build: Bun bundler, GitHub Actions for CI/CD
- Deployment: GitHub Pages
- Testing: Vitest
The timer uses a tiny Web Audio API helper to beep when sessions start and finish. playTone(frequency, duration) lives in src/js/audio.ts and keeps a single AudioContext instance for efficient playback.
- Start beep: 440Β Hz
- Finish beep: 880Β Hz
- Toggle with the "Sound notifications" checkbox in settings.
- Type-Safe: Built with TypeScript for reliability and maintainability
- Lightweight: Fast loading and minimal resource usage
- Modern Standards: Uses latest web APIs and best practices
- Mobile-First: Designed for all device sizes
- Privacy-Focused: All data stays on your device
- Fully Tested: Comprehensive test coverage with Vitest
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
-
Fork the repository
-
Create a feature branch (
git checkout -b feature/amazing-feature) -
Install dependencies and set up pre-commit hooks:
# Ensure Bun is installed (https://bun.sh) curl -fsSL https://bun.sh/install | bash # Install project dependencies bun install # Install pre-commit framework (choose one method) pip install pre-commit # or pipx install pre-commit # Install git hooks locally pre-commit install # Optional: Run hooks against all files to verify setup pre-commit run --all-files
-
About pre-commit hooks: The hooks use remote Prettier integration with its own Node environment:
-
Prettier formats supported files (
.ts,.json,.md,.html,.css,.yml,.yaml) using theprettier-config-standardshareable config -
TypeScript files are type-checked with
tsc --noEmit -
Automatic fixes are applied where possible
-
Runs locally, on GitHub Actions, and on pre-commit.ci
- Make your changes
- Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Inspired by the Pomodoro Technique by Francesco Cirillo
- Icons and emojis from Unicode/Emoji standards
- Font families from Google Fonts
If you have any questions or run into issues, please open an issue on GitHub.
Made with β€οΈ for productivity enthusiasts