Skip to content

Genkigai/earshot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Earshot

A private audio-messaging PWA for two people. See PRODUCT_BRIEF.md for the vision, PROGRESS.md for the full current feature list + how to deploy, SETUP.md for backend setup, and SETUP-EXTRAS.md for push notifications + synced transcripts.

Far past the MVP now: record → Supabase sync → playback with waveform scrubber, skip-silence, autoplay, bookmarks, lock-screen controls; search / filters / day-timeline / stars / settings; a soundboard + voice effects + music-bed remix studio; and on-device (private) transcription with read-mode, tap-to-jump, and editing. Push notifications + synced transcripts are coded and need a one-time backend step (SETUP-EXTRAS.md).

What works now

  • 🎙️ Record with built-in noise suppression + auto-gain (voice-grade, ~32 kbps → tiny files), live waveform, pause/resume, timer
  • 🔍 Review before saving — preview, discard, or save
  • 📚 Library of memos, newest first, with unlistened dots
  • ▶️ Playback QoL: 0.5×–3× speed with pitch preserved (no chipmunk), −15s / +30s skip, draggable scrubber, resume where you left off, auto-mark-listened
  • 📴 Installable + offline: add to home screen; the app shell is cached by a service worker
  • 💾 Everything stored locally in IndexedDB (audio Blobs + metadata)

Cousin sync (Supabase) — Phase 1 built ✅

Auth, storage, realtime delivery, and an offline outbox are coded. To turn it on, follow SETUP.md (create a free Supabase project, paste 2 keys into config.js). Until then the app stays in local-only mode. Schema lives in supabase/schema.sql.

What's next (see roadmap)

  • 🔔 Push when the app is closed (Phase 2 — VAPID + Supabase Edge Function; scaffolded in sw.js)
  • 📝 Transcription, search, auto-threading, timeline
  • ✨ "Enhance" (ML noise removal), skip-silence, soundboard & music beds

Run it locally

The app needs to be served over http://localhost (mic access requires a secure context, and ES modules / service workers don't run from file://). Any static server works:

cd voice-app
python3 -m http.server 4321
# then open http://localhost:4321

To try it on your phone (real mic), host the folder anywhere with HTTPS — e.g. drag it onto Netlify Drop or npx vercel, then "Add to Home Screen" in Safari.

Files

File Purpose
index.html App shell + overlay markup
styles.css Dark, mobile-first, big-touch-target UI
app.js UI, library render, record flow, player wiring
recorder.js Mic capture, cleanup constraints, level metering
player.js Pitch-preserved speed, seek, resume
db.js IndexedDB wrapper (memos store)
sw.js Service worker (offline app shell)
manifest.webmanifest, icon.svg PWA install metadata

Data model (one memo)

{ id, createdAt, durationMs, blob, mimeType, sender, title, listened, positionMs, transcript }

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors