A multi-timer countdown web application for managing multiple parallel timers with persistent state storage. Perfect for kitchen timers, workout intervals, task scheduling, and more!
Features:
Status
# clone
git clone https://github.com/amdersz5g7/kitchen-timer.git
cd kitchen-timer
# install deps
npm install
# start dev server (Rollup watch + sirv)
npm run dev
Open http://localhost:5000 in your browser. The dev server supports hot-reload when you edit files under src/.
Note: if you hit peer-dependency warnings during npm install, use npm install --legacy-peer-deps as a fallback for older packages.
# produce optimized build into `public/build`
npm run build
# serve the built site (sirv)
npm start
# optionally expose on network
npm start -- --host 0.0.0.0
The production bundle is placed in public/build/ and can be deployed to any static host (Netlify, Vercel, GitHub Pages, etc.).
Add Timer to create a new countdown. Each timer shows remaining time and items.localStorage ā refresh the page and they remain.Delete All button (with confirmation) to clear everything.kitchen-timer/
āāā src/
ā āāā App.svelte # Main app component (UI + logic)
ā āāā main.js # App bootstrap
ā āāā lib/
ā ā āāā persistent.js # small local persistent store helper (localStorage)
ā āāā scripts/
ā āāā gtag.js # GA helper
āāā public/
ā āāā index.html # HTML shell
ā āāā build/ # generated bundle (bundle.js, bundle.css)
āāā rollup.config.js
āāā package.json
Implementation notes
src/lib/persistent.js helper to persist Svelte stores to localStorage. This replaced the previous external dependency to avoid compatibility issues with newer build tools.npm run dev ā start development server with watch + hot reload (port 5000)npm run build ā compile optimized production bundle into public/buildnpm start ā serve public/ using sirv-clilocalStorage via the local persistent store. The app keeps an ever-incrementing ls_count to avoid ID collisions.finish_full timestamp and is updated via setInterval every second. Interval IDs are tracked per-timer and cleared when timers are removed.mini.css for base layout + component-scoped CSS in App.svelte.Security note: The original code reconstructed objects using eval in some older implementations. The current persistent helper stores and restores plain data (no eval) and converts date strings to Date objects when needed.
App.svelte into smaller components for maintainability.If you'd like help implementing any of the above, open an issue or a PR.
See the LICENSE file at the project root.
Created and maintained by amdersz5g7
Last Updated: 2025-11-29
Version: v25.11