Write That Down is a Flutter mobile app for chatting with an LLM, switching into turn-based voice mode, and capturing structured idea tiles locally on-device.
- Text chat home screen
- Left-swipe ideas screen with local SQLite-backed idea tiles
- Right-swipe voice mode with native speech-to-text and native text-to-speech
- Manual idea saving from chat and voice mode
- Trigger phrase detection for
write that downandwrite that idea down - Provider settings for OpenAI, Anthropic, Google AI Studio, and Groq
- Provider API key storage via platform-secure storage
- Separate chat and idea-extraction provider/model selection
- Seeded voice conversations started from saved idea tiles
- Flutter
- Riverpod
- Dio
- SQLite via
sqflite flutter_secure_storagespeech_to_textflutter_tts
This workspace did not have Flutter installed, so the Dart and Flutter source was scaffolded manually. The native platform folders are not present yet.
To finish bootstrapping the project on a machine with Flutter installed, run:
flutter create . --platforms=ios,android
flutter pub getAfter that, reopen the workspace in VS Code or run flutter analyze and flutter run.
After flutter create ., add the required speech permissions to ios/Runner/Info.plist:
<key>NSMicrophoneUsageDescription</key>
<string>Write That Down uses the microphone for voice chat and idea capture.</string>
<key>NSSpeechRecognitionUsageDescription</key>
<string>Write That Down uses speech recognition so you can talk to the app.</string>After flutter create ., confirm microphone permissions exist in android/app/src/main/AndroidManifest.xml:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />- Chat requests use the selected chat provider and model.
- Idea extraction uses the selected extraction provider and model.
- If the extraction provider is unavailable but the chat provider is configured and enabled, extraction falls back to the chat provider.
- Voice mode uses device-native STT/TTS, not provider voice APIs.
lib/ui: screens and widgetslib/controllers: chat, voice, ideas, and settings orchestrationlib/services: storage, speech, and LLM integrationslib/models: app contracts and persisted data shapes
- Install Flutter locally and generate the missing
iosandandroidfolders. - Run
flutter pub get. - Validate speech permissions and audio session behavior on a real iPhone.
- Test each provider with real API keys and adjust model defaults if needed.
- Add app icons, launch screen assets, and App Store metadata.