.png)



Brutally minimal athlete timer & streak tracker
Built with React + Vite + Tailwind CSS
| Layer | Technology |
|---|---|
| Framework | React 19 |
| Build Tool | Vite 8 |
| Styling | Tailwind CSS 3 |
| Audio | Web Audio API |
| Animation | HTML5 Canvas + requestAnimationFrame |
| Persistence | localStorage |
| Deployment | GitHub Pages |
# Clone the repo
git clone https://github.com/yourusername/kronos.git
cd kronos
# Install dependencies
npm install
# Start dev server
npm run dev
Open http://localhost:5173 in your browser.
npm run build
npm run preview
kronosmain branch — the included workflow will build and deploy automaticallynpm run build
Then upload the dist/ folder to your GitHub Pages branch.
Note: The
vite.config.jshasbase: '/kronos/'configured. If your repo name is different, update thebasepath accordingly.
kronos/
├── public/
│ ├── banner.png # Header banner image
│ └── favicon.png # App favicon
├── src/
│ ├── components/
│ │ ├── Controls.jsx # Play/Pause/Stop/Lap buttons
│ │ ├── NavBar.jsx # Bottom navigation tabs
│ │ ├── OrbitalCanvas.jsx # Canvas particle system
│ │ ├── PresetStrip.jsx # Preset chips with save/delete
│ │ ├── RoundCard.jsx # Draggable round editor
│ │ ├── StreakGrid.jsx # Heatmap calendar
│ │ └── TimelineStrip.jsx # Round progress dots
│ ├── hooks/
│ │ ├── useStopwatch.js # Count-up timer logic
│ │ ├── useStreak.js # Streak persistence
│ │ └── useTimer.js # Interval countdown logic
│ ├── screens/
│ │ ├── BuilderScreen.jsx # Session configuration
│ │ ├── StopwatchScreen.jsx # Count-up timer
│ │ ├── StreakScreen.jsx # Streak stats + heatmap
│ │ ├── TimerScreen.jsx # Active countdown (hero)
│ │ └── WelcomeScreen.jsx # Particle splash screen
│ ├── utils/
│ │ ├── audio.js # Web Audio API beep generator
│ │ └── time.js # Time formatting utilities
│ ├── App.jsx # Root component + routing
│ ├── index.css # Design system + Tailwind
│ └── main.jsx # Entry point
├── .github/workflows/
│ └── deploy.yml # GitHub Pages CI/CD
├── index.html
├── vite.config.js
├── tailwind.config.js
└── package.json
#000000)#C8D8FF)#C8A86B)MIT