A sleek, powerful stopwatch app with keyboard shortcuts and dark mode
|
|
1. Click "Add Stopwatch" to create a timer
2. Click the name to edit it
3. Click the time to start/stop
4. Click ✎ to manually edit time
5. Click × to remove
| Action | Key |
|---|---|
| Start/Stop All | Space |
| Relaunch All | R |
| Custom Shortcut | Set in UI |
| Button | Action |
|---|---|
| Add | Create new stopwatch |
| Start All | Start all stopped timers |
| Stop All | Stop all running timers |
| Relaunch All | Clear everything and start fresh |
| Clear All | Remove all stopwatches (when stopped) |
| Export to CSV | Download data (when stopped) |
This project uses Angular 19 LTS with TypeScript 5.6 strict mode.
npm install
npm start # Runs dev server at http://localhost:4200npm run build # Production build
npm run watch # Build with watch modesrc/
├── app/
│ ├── app.component.ts # Main component with stopwatch logic
│ ├── app.component.html # Template
│ ├── app.component.css # Component styles
│ └── app.module.ts # Module configuration
├── styles.css # Global styles with theme variables
└── index.html # Entry point
- Angular 19 LTS: Module-based architecture (not standalone)
- TypeScript 5.6: Strict mode with explicit types
- CSS Variables: For light/dark theme switching
- LocalStorage: For data persistence
- HTML5 Drag-and-Drop: For stopwatch reordering
The application automatically deploys to GitHub Pages via GitHub Actions when changes are pushed to the main branch.
- Live URL: https://johan.martinson.phd/stopwatch/
- Base href:
/stopwatch/for GitHub Pages routing - Build budgets: 500kb/1mb initial, 20kb/40kb per component style
Works in all modern browsers with localStorage and CSS custom properties support:
- Chrome/Edge 88+
- Firefox 85+
- Safari 14+