A voice capture app for Apple Watch and iPhone.
Record quick thoughts on your wrist. Transcribe and organize them on your phone.
Utter is built around a simple idea — the fastest way to capture a thought is to say it out loud. Hold a button on your Apple Watch, speak, and release. That recording gets sent to your iPhone where it's transcribed and automatically sorted into one of four categories based on what you said.
No typing. No unlocking your phone. Just speak and it's saved.
- Record on Apple Watch — Hold the screen to record, release to stop. Review the audio clip before sending.
- Send to iPhone — Tap the arrow to transfer the recording via WatchConnectivity.
- Transcribe — On iPhone, tap "Import from Apple Watch" to convert the audio to text using on-device speech recognition.
- Review and save — Check the transcript, confirm or change the category, then save it to your inbox.
- Inbox — Browse notes grouped by category. Tap a category to open it, check items off, or delete them.
| Category | Used for | |
|---|---|---|
| 🟢 | Todo | Tasks and actions |
| 🟠 | Reminder | Time-based follow-ups |
| 🟣 | Idea | Concepts and brainstorms |
| 🔵 | Note | Everything else worth keeping |
Auto-detection is keyword-based. Phrases like "remind me", "tomorrow", "call" → Reminder. "Buy", "pick up", "do" → Todo. "Idea", "what if", "build" → Idea. Everything else → Note.
Early sketches exploring different UI directions for the watch app before landing on the final design.
- SwiftUI — iOS + watchOS UI
- WatchConnectivity — Watch → iPhone audio file transfer
- AVFoundation — Audio recording and playback
- Speech framework — On-device transcription
- UserDefaults — Local memo persistence
- iOS 17+
- watchOS 10+
- Xcode 15+
- Apple Watch paired to iPhone (for full transfer flow)
Utter/
├── Utter/ # iPhone app
│ ├── ContentView.swift # Main UI — recording, inbox, review sheet
│ ├── VoiceMemo.swift # Data model
│ ├── SpeechManager.swift # Recording + transcription
│ ├── UtterApp.swift # App entry + PhoneConnectivityManager
│ └── Color+Hex.swift # Hex color helper
│
└── UtterWatch Watch App/ # Watch app
├── ContentView.swift # Watch UI — idle, recording, review, confirmed
├── WatchAudioRecorder.swift # Audio recording + playback
└── UtterWatchApp.swift # App entry + WatchConnectivityManager
- Clone the repo
git clone https://github.com/ritikajoshi/utter.git
- Open
Utter.xcodeprojin Xcode - Select your development team in Signing & Capabilities for both the
UtterandUtterWatch Watch Apptargets - Build and run on a real device — microphone access and WatchConnectivity require physical hardware for the full flow
- Simulator testing — WatchConnectivity
transferFiledoes not work between simulators. To test transcription in the simulator, manually copy a.m4afile into the app'sDocuments/utter-recordings/folder. - File naming — Watch recordings must be named
utter-<UUID>.m4ato be picked up bylatestWatchRecordingURL(). - Category detection — Lives in
detectedCategory(for:)inContentView.swift. Reminder keywords are checked first to avoid false Todo matches on phrases like "remember to". - Persistence — Memos are stored in
UserDefaultsunder the keyutter_saved_memosas JSON-encoded[VoiceMemo].
Built by Ritika Joshi · 2026






