Record yourself reading scripts, save the audio locally in IndexedDB, and loop playback to memorize. Built with Vite, React, TypeScript, Tailwind, and Playwright.
npm run dev– start the dev servernpm run build– type-check and build production assets (also writesdist/404.htmlfor GitHub Pages SPA fallback)npm run preview– preview the production buildnpm run test:e2e– Playwright smoke test (Chromium)
vite.config.tssetsbaseusingGITHUB_PAGES_BASEor the repo name (/echomemo3/fallback). SetGITHUB_PAGES_BASE=/your-repo/when building if you host from a different path.postbuildcopiesdist/index.htmltodist/404.htmlso GitHub Pages routes fallback to your SPA.
- Manifest and service worker generated via
vite-plugin-pwa; icons live inpublic/. - Install button listens for
beforeinstallprompt. On iOS Safari (no prompt support) users see “Share → Add to Home Screen”. - Meta tags in
index.htmlenable iOS standalone mode.
- Audio is captured with
MediaRecorder(prefersaudio/mp4when supported; falls back to default) and stored in IndexedDB along with duration, size, and script text. - Playback view auto-loops the selected recording.
- Use a secure origin (https or
localhost). - Keep the recording page in the foreground while capturing audio; backgrounding Safari can stop the stream.