A simple and aesthetic Progressive Web App (PWA) for timing tasks. Built with modern web technologies and designed for both desktop and mobile use.
🔗 Live App: https://stopwatch.chuggs.net
- ⏱️ High-precision timing with start/pause/reset functionality
- 📱 Progressive Web App - install on mobile devices and use offline
- 🎨 Multiple themes - choose from various dark and light theme options
- 📊 Timer history - persistent "laps" that save across sessions (unlike physical stopwatches)
- 🗂️ Multiple named timers - organize and separate timing data for different activities
- 📝 Session notes - add context to your timer entries
- 🧘 Zen mode - hide the timer display when active to avoid distraction
- 🚫 Ad-free forever - clean UX without compromising advertisements
- 💾 Local storage - your data stays on your device
Coming from React, this was my first Svelte application built to properly learn the framework. The goal was to create a distraction-free timing tool that solves common issues with existing timer apps:
- Persistent history: Unlike physical stopwatches, your timing data is saved and organized
- Focus-friendly: Zen mode prevents the timer display from becoming a distraction during work
- Multi-purpose: Named timers let you track completely different activities separately
- Clean experience: No ads or unnecessary features that compromise the user experience
- Framework: SvelteKit 2 with Svelte 5
- Styling: Tailwind CSS 4 + DaisyUI
- Build Tool: Vite
- Icons: Material Symbols via unplugin-icons
- PWA: vite-plugin-pwa with Workbox
- Testing: Vitest + Testing Library
- Linting: ESLint + Prettier
- Git Hooks: Husky + lint-staged
- Deployment: AWS S3 + CloudFront
- Node.js v22.13 (see
.nvmrc) - pnpm
-
Clone the repository
-
Install dependencies:
pnpm install
-
Start the development server:
pnpm run dev
pnpm run dev- Start development serverpnpm run build- Create production buildpnpm run preview- Preview production buildpnpm run test- Run all testspnpm run test:unit- Run unit tests in watch modepnpm run lint- Check code formatting and lintingpnpm run format- Format code with Prettierpnpm run check- Type check with svelte-check
The app is configured for static deployment with automatic CI/CD:
- Static Site Generation: Uses
@sveltejs/adapter-static - GitHub Actions: Automated deployment to AWS S3 on push to main
- CDN: CloudFront distribution with cache invalidation
- PWA: Service worker with offline support
This project is licensed under the ISC License - see the LICENSE file for details.