DropShot is a mobile-first badminton scorekeeping PWA. It tracks points by shot
type, keeps match history and player statistics, and supports hands-free scoring
by voice. Data stays in the browser's localStorage, so the app works offline
after it has been installed and loaded once.
- Start, resume, abort, and finish matches.
- Log points by tapping a player, then choosing the shot type.
- Undo the last point.
- Hands-free scoring with a configurable wake word.
- Player management with soft delete and restore.
- Editable shot types, win threshold, and win-by margin.
- Match history, player profiles, and win/loss statistics.
- JSON export and import.
- Installable PWA with automatic updates.
Voice scoring can use the browser's built-in speech recognition or an optional offline engine based on sherpa-onnx. The offline engine downloads its model once and then runs locally in WebAssembly.
- Svelte 5 and Vite
- TypeScript
- Tailwind CSS 4 and DaisyUI 5
vite-plugin-pwafor the manifest and service workerlocalStoragefor the data store- sherpa-onnx WebAssembly for offline speech recognition
The source lives in src/: views are in src/routes, shared libraries in
src/lib, and the reactive app store in src/stores. The older vanilla
JavaScript version is kept in 4d/ for reference. The detailed design and
behavior notes are in report.md.
npm install
npm run dev # development server
npm run check # Svelte/TypeScript diagnostics
npm run build # type-check and production build into dist/
npm run preview # preview the production builddist/ is generated by the build and is not committed. Deploy the contents of
dist/ to any static host; Netlify settings are in netlify.toml.