Customizing Features
Audio Recording & Voice Notes
Record, store, and replay voice notes with Expo and your backend storage.
The audio recording feature (sometimes called "voice notes") lets users capture audio with waveform previews, save it to your backend, and replay or delete recordings.
vf add audio-recorderFrontend
- Route:
apps/native/src/app/(root)/(protected)/audio-recorder/index.tsxrenders the recorder screen. - Hooks:
apps/native/src/features/audio-recorder/hooks/use-audio-recorder.tsmanages permissions, start/stop/pause logic, and real-time level monitoring viaexpo-av. - Components: The folder contains the recorder UI, waveform (
audio-waveform.tsx), playback list, and recording cards. - Services:
audio-storage.tsuploads finished files, andrecording-manager.tskeeps metadata in sync.
Backend
packages/backend/convex/recordings.tsexposes mutations:createRecordingDraft,finalizeRecording,deleteRecording,listRecordings- Convex storage bucket persists file URIs for playback URLs on demand
packages/backend/src/services/recordings.tshandles CRUD operations and file metadata- Supabase Storage (
recordingsbucket) persists audio files - Database table:
recordingswith RLS policies for user isolation
Configuration
- Permissions: the recorder needs microphone permissions (
expo-avasks for them). If you run on bare workflow, ensureandroid.permission.RECORD_AUDIOand the iOS microphone usage description are present. - Storage: no extra API key required—your backend storage is used by default.
Customization
- Swap the waveform component or add effects by editing
audio-processor.tsinfeatures/audio-recorder/services - Persist additional metadata (tags, transcripts) by extending the recordings table and updating the service
Found an issue or bug in the docs?
Help me improve! If you spot any errors, typos, or have suggestions, please let me know.
Reach out on X/Twitter @zafarbuildzz