Voice-first note-taking & call transcription app for Android
Features • Screenshots • Getting Started • Architecture • Tech Stack • Contributing • License
Voiceon is an offline-first, privacy-respecting mobile app that lets you capture ideas, meeting notes, and tasks using your voice. Just tap record, speak your mind, and Voiceon saves both the audio and an AI-generated transcript — organized, searchable, and always on your device.
Beyond voice notes, Voiceon can also import and transcribe your phone call recordings, giving you a searchable archive of conversations with speaker diarization.
No account required. No cloud sync. Your data stays on your phone.
- One-tap recording — Open the app, tap the mic, and start talking. Recordings are saved as AAC/M4A files.
- AI transcription — Your recordings are automatically transcribed using your choice of AI provider (see Supported AI Providers).
- 5-minute max — A built-in timer enforces a 5-minute limit per recording, with a visual warning at 4:30.
- Background recording — Recording continues even if you switch apps or the screen turns off.
- Rich metadata — Add a title, description, priority level (Low / Medium / High), tagged people, and more to every note.
- Re-record & re-transcribe — Not happy with a recording? Replace the audio or re-run transcription from the detail screen.
- Mark notes as todos — Toggle any note into a todo item with optional due dates.
- Dedicated Todo tab — Separate view for all your todos with completion tracking.
- Swipe to complete — Quickly toggle completion status with a swipe gesture.
- Due date warnings — Cards due within 24 hours pulse with a red glow.
- Import call recordings — Automatically imports recordings from your phone's built-in call recorder.
- Speaker diarization — Identifies and labels different speakers in the conversation (when using WhisperX or supported providers).
- Contact matching — Matches recordings to your contacts using the call log.
- Auto-sync — New recordings are detected and imported automatically on app launch.
- Full-text search — Search across note titles, descriptions, and transcripts.
- Filter by priority — Quickly find high-priority items.
- Filter by people — See all notes tagged with a specific person.
- Smart sorting — Notes with upcoming due dates appear first, followed by overdue items, then undated notes.
- Light & dark themes — Beautiful Material 3 design with a refined blue-teal color palette.
- Animated waveforms — Real-time audio visualization during recording.
- Smooth transitions — Staggered list animations, animated tab indicators, and polished micro-interactions.
- Custom typography — Open Sans for body text, DM Serif Display for display headings.
Voiceon sends audio to an external AI service for transcription. You choose and configure the provider in Settings → AI Transcription. All processing happens between your device and the API — no intermediary servers.
| Provider | Free Tier | Notes |
|---|---|---|
| Groq | ✅ Free | Fast inference using Whisper large-v3 |
| OpenAI Whisper | ❌ Paid (~$0.006/min) | Excellent quality |
| AssemblyAI | ✅ 5 hours free | High accuracy |
| Deepgram Nova-2 | ✅ $200 free credit | Very fast |
| Rev.ai | ✅ 5 hours free trial | Good accuracy |
| Custom WhisperX | ✅ Self-hosted | Your own server with speaker diarization |
Note: You need to provide your own API key. Voiceon does not include any API keys.
| Tool | Version | Install |
|---|---|---|
| Flutter SDK | 3.22+ (stable) | flutter.dev/docs/get-started/install |
| Dart SDK | 3.11+ | Included with Flutter |
| Android Studio | Latest | developer.android.com/studio |
| Android device or emulator | API 24+ (Android 7.0+) | — |
Verify your setup:
flutter doctor- Clone the repository
git clone https://github.com/x0911/voiceon-flutter.git
cd voiceon-flutter- Install dependencies
flutter pub get- Generate code (Drift database & Riverpod providers)
dart run build_runner build --delete-conflicting-outputs- Run the app
flutter runTo create a release APK:
flutter build apk --releaseNote: Release builds require signing configuration. Create a
key.propertiesfile in theandroid/directory with your keystore details. See the Flutter deployment docs for more info.
Voiceon follows a feature-first project structure with a clean separation of concerns:
lib/
├── main.dart # App entry point
├── core/ # Shared app-wide infrastructure
│ ├── database/ # Drift ORM — tables, DAOs, generated code
│ │ ├── tables/ # Table definitions (notes, people, calls, ...)
│ │ └── daos/ # Data Access Objects
│ ├── models/ # Domain models (NoteModel, CallRecord, ...)
│ ├── repositories/ # Repository layer (abstracts DB access)
│ ├── services/ # Audio service, sync service, transcription
│ ├── transcription/ # AI provider configs & transcription logic
│ ├── providers/ # Global Riverpod providers
│ ├── theme/ # Light/dark theme definitions
│ ├── router/ # GoRouter navigation config
│ ├── utils/ # Date formatters, helpers
│ └── widgets/ # Shared reusable widgets
└── features/ # Feature modules
├── home/ # Notes list screen
├── todo/ # Todo list screen
├── recording/ # Audio recording screen
├── metadata/ # Note metadata form (post-recording)
├── note_detail/ # Note detail/edit screen
├── call_vault/ # Call recordings list & detail
├── settings/ # App settings screen
└── shell/ # Bottom navigation shell
UI Widget → Riverpod Provider → Repository → Drift DAO → SQLite
↘ AudioService → flutter_sound
↘ TranscriptionService → AI Provider API
The app uses a StatefulShellRoute with GoRouter for bottom-tab navigation:
| Tab | Route | Screen |
|---|---|---|
| Notes | / |
Voice notes list (non-todo only) |
| Todo | /todo |
Todo items with completion tracking |
| Calls | /call-vault |
Imported call recordings |
| Settings | /settings |
Theme, Call Vault, AI provider config |
Additional routes: /record, /metadata, /note/:id, /call-vault/:id
The app uses Drift (type-safe SQLite ORM) with 5 tables:
notes— Voice notes with label, description, transcript, priority, todo flags, audio path, and timestampspeople— Tagged people (unique names)note_people— Junction table linking notes to people (many-to-many)calls— Imported call recordings with contact info, direction, duration, transcription statuscall_utterances— Speaker-diarized transcript segments for calls
| Category | Technology |
|---|---|
| Framework | Flutter 3.22+ |
| Language | Dart 3.11+ |
| State Management | Riverpod (flutter_riverpod + riverpod_annotation) |
| Navigation | GoRouter |
| Database | Drift (SQLite ORM) |
| Audio Recording | flutter_sound |
| Audio Waveforms | audio_waveforms |
| Category | Technology |
|---|---|
| Theming | FlexColorScheme (Material 3) |
| Typography | Google Fonts (Open Sans + DM Serif Display) |
| Animations | flutter_animate |
| Category | Technology |
|---|---|
| HTTP | http |
| Permissions | permission_handler |
| URLs | url_launcher |
| Preferences | shared_preferences |
| UUIDs | uuid |
| Date Formatting | intl |
| Category | Technology |
|---|---|
| Code Generation | build_runner |
| Drift Codegen | drift_dev |
| Riverpod Codegen | riverpod_generator |
| Linting | flutter_lints |
Voiceon requests the following Android permissions:
| Permission | Why |
|---|---|
INTERNET |
Send audio to AI transcription APIs |
RECORD_AUDIO |
Record voice notes (requested at runtime) |
VIBRATE |
Haptic feedback for recording events |
READ_CONTACTS |
Match call recordings to contact names (Call Vault) |
READ_CALL_LOG |
Match recordings to call log entries (Call Vault) |
POST_NOTIFICATIONS |
Android 13+ notification support |
Microphone permission is requested at runtime with a rationale dialog. Call Vault permissions are only requested if you enable the feature.
# Install dependencies
flutter pub get
# Generate Drift + Riverpod code (run after any DB or provider changes)
dart run build_runner build --delete-conflicting-outputs
# Watch mode (auto-regenerates on save)
dart run build_runner watch --delete-conflicting-outputs
# Run the app (debug)
flutter run
# Run on a specific device
flutter run -d <device-id>
# Build release APK
flutter build apk --release
# Analyze code
flutter analyze
# Run tests
flutter test
# Clean build artifacts
flutter clean && flutter pub get
# List connected devices
flutter devicesContributions are welcome! Here's how to get started:
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature-name - Make your changes — follow the existing code style and architecture patterns
- Run code generation if you modified Drift tables or Riverpod providers:
dart run build_runner build --delete-conflicting-outputs
- Test your changes on a device or emulator
- Commit with a descriptive message:
git commit -m "feat: add your feature description" - Push and open a Pull Request
- Follow the existing feature-first folder structure
- Use Riverpod for state management (prefer annotation-based providers)
- Use the Repository pattern to abstract database access
- Keep widgets focused and composable
- Write descriptive commit messages following Conventional Commits
- 📱 iOS support
- 🌍 Multi-language UI localization
- 📤 Export notes as PDF or Markdown
- ☁️ Optional cloud backup/sync
- 🏷️ Tags and categories for notes
- 📊 Analytics dashboard (recording stats, word counts)
- 🧪 Widget and integration tests
- 📸 Screenshots and store listing graphics
Does Voiceon work offline?
The app itself is fully offline — recording, saving notes, and browsing all work without internet. However, AI transcription requires an internet connection to send audio to your configured provider's API.
Is my data sent to any server?
Only when you transcribe audio. The audio file is sent directly from your device to the AI provider you configured (e.g., Groq, OpenAI). No data passes through any Voiceon server. All notes, metadata, and recordings are stored locally on your device.
Can I use Voiceon without an AI provider?
Yes! You can record voice notes and manage them without configuring any AI provider. Transcription simply won't be available — you can type notes manually instead.
How does Call Vault work?
Call Vault imports recordings that your phone's built-in call recorder has already saved. Voiceon reads from a folder you select (using Android's Storage Access Framework), copies the files into its private storage, and transcribes them. Voiceon does not record calls itself.
Is call recording legal?
Laws vary by country and jurisdiction. Voiceon displays a legal consent dialog before enabling Call Vault. You are responsible for ensuring compliance with local laws regarding call recording and consent.
This project is open-source and available under the MIT License.
Built with ❤️ using Flutter










