# OpenScribe app Flutter mobile app (Android + iOS): provision the device, browse the library, play audio, read transcripts and summaries, export and share. > Status: planned (M7). The full Flutter project is generated when M7 starts, to avoid > committing a large generated tree before there is code to run. This README is the plan. ## Responsibilities - **Provisioning (BLE):** connect to the device, send WiFi credentials and the upload target, read status. BLE is used for control/provisioning only (iOS restricts background BLE), so bulk transfer goes over WiFi. - **Device dashboard:** battery, storage, recording state; start/stop; trigger a WiFi sync. - **Library:** list recordings from the server API, with sync/transcription state. - **Playback:** stream/download audio (device REST API on the LAN, or server). - **Transcript + summary:** show the faster-whisper transcript and the Ollama summary. - **Export/share:** audio, TXT, SRT, VTT, Markdown, JSON via the export endpoint. - **Settings:** server URL + API token, device management. ## Planned stack - Flutter (Dart), state management to be chosen at M7 (likely Riverpod). - BLE: `flutter_reactive_ble` or `flutter_blue_plus`. - HTTP: `dio` or `http`, generated against `../api/openapi.yaml`. - Audio: `just_audio`. ## API The app talks to two surfaces defined in `../api/openapi.yaml`: the device on the LAN (provisioning/transfer) and the self-hosted server (library, transcripts, summaries, exports). ## Create the project (at M7) ```bash flutter create --org casa.discworld.openscribe --project-name openscribe_app . flutter pub get flutter run ```