A simple, beautiful interval timer SPA for workouts or focus sessions. The app orchestrates time-based phases (delay → work → break) with sound cues, clear visual feedback, and predictable repetition behavior.
- Configurable work intervals and break periods
- Optional start delay countdown
- Infinite or fixed repetition modes
- Audio cues during countdown (synthesized, no external files)
- Mobile-first responsive design with large tap targets
- Settings persistence via local storage
- Dark/light theme support
| Layer | Technology |
|---|---|
| Framework | React 19 + TypeScript |
| Build | Vite with React Compiler |
| Styling | Tailwind CSS 4 |
| Components | shadcn/ui |
| State | Jotai |
| Audio | Tone.js |
| Icons | Lucide React |
| Deployment | GitHub Pages (static SPA) |
# Install dependencies
pnpm install
# Start development server
pnpm dev
# Build for production
pnpm build
# Preview production build
pnpm previewsrc/
├── components/ # React components
│ └── ui/ # shadcn/ui primitives
├── lib/ # Timer logic, state, and utilities
├── main.tsx # App entry point
└── styles.css # Global styles (Tailwind)
For detailed business logic, state machine behavior, audio rules, and UI feedback guidelines, see AGENTS.md.
The app automatically builds and deploys to GitHub Pages via the workflow in
.github/workflows/gh-pages.yaml. Every push to main triggers a new deployment.
MIT