# PedScribe Mobile App Native mobile wrapper for Pediatric AI Scribe using Capacitor. Provides background audio recording that survives screen lock on both iOS and Android. ## Features - Background recording (screen lock safe) - Configurable server URL (supports self-hosted instances) - Android foreground service with wake lock for reliable recording - iOS background audio mode - App Store and Play Store ready ## Prerequisites - Node.js 18+ - Android Studio (for Android builds) - Xcode 15+ (for iOS builds, macOS only) - Apple Developer account ($99/yr for App Store) - Google Play Developer account ($25 one-time) ## Setup ```bash cd mobile npm install npx cap sync ``` ## Build Android ```bash # Open in Android Studio npx cap open android # Or build APK directly cd android && ./gradlew assembleRelease ``` The APK will be at `android/app/build/outputs/apk/release/app-release.apk` ## Build iOS ```bash # Open in Xcode (macOS only) npx cap open ios # Build and sign in Xcode # Product > Archive > Distribute ``` ## How It Works 1. App launches with a local launcher page 2. User enters their PedScribe server URL (default: app.pedshub.com) 3. URL is saved to localStorage for future launches 4. App navigates to the remote web app 5. Web app runs inside the native WebView with full native API access ### Background Recording **Android:** Uses `AudioRecordingService` — a foreground service that acquires a wake lock and shows a persistent notification during recording. The CPU stays active even when the screen is off. **iOS:** Uses `UIBackgroundModes: audio` in Info.plist, which allows the WKWebView to continue audio capture when the app is backgrounded. ## App Structure ``` mobile/ capacitor.config.json # Capacitor configuration package.json # Dependencies src/ index.html # Launcher page (server URL config) launcher.js # Auto-redirect logic launcher.css # Launcher styles android/ # Android native project app/src/main/ java/com/pedshub/scribe/ MainActivity.java AudioRecordingService.java AndroidManifest.xml ios/ # iOS native project App/App/ Info.plist # Background audio + microphone permission ``` ## Changing the Default Server Edit `src/launcher.js` and change the `DEFAULT_URL` variable: ```javascript var DEFAULT_URL = 'https://your-server.example.com'; ``` Users can also change the server URL at any time from the launcher screen.