- Changed to /api/auth/send-code and /api/auth/verify
- Properly check content-type is JSON
- Check for success: true in response
- Backend needs these endpoints added
- Added inou_api.dart with real API calls to /send-code and /verify
- Updated auth_service to use real API
- Added http package
- Changed all text to use Sora font (inou brand font)
- Logo uses Sora w800 'i'
- Logo: extra bold 'i' (w800) in tighter rounded square
- Changed 'Sign in to your inou account' → 'Enter your email to continue'
- Changed 'Welcome' → 'Welcome to inou'
- Changed 'Sign in with Biometrics' → 'Use Biometrics'
- Created AuthService for managing login state
- Created LoginScreen with email/password form
- Auto-prompts to enable biometric after first login
- Integrated login flow into main.dart
- Shows splash screen during initialization
- AuthGate wraps main app for biometric re-auth
- Add google_mlkit_barcode_scanning dependency
- Scan priority: Barcode → OCR text → Nothing found
- Support UPC-A/E, EAN-8/13, QR, DataMatrix, PDF417, Code128/39
- BarcodeData class with product code detection and NDC hints
- ScanResult with type indicator (barcode|text|empty)
- Updated capture screen with barcode-specific UI:
- Green overlay for barcodes, blue for text
- Product code badge for UPC/EAN barcodes
- Format-specific result display
- Backward compatible legacy API (extractText, getTextBlocks)
- Create BiometricService with local_auth integration
- Check biometric availability (Face ID, Touch ID, fingerprint)
- Authenticate with fallback to PIN
- Session state: don't re-prompt within session
- Configurable lock policies: always, after 5 min inactive, never
- Create AuthGate widget that wraps the app
- Shows biometric prompt on app launch
- Handles app resume from background
- Activity tracking for inactivity timeout
- Graceful error handling with user-friendly messages
- Update SettingsScreen with biometric configuration
- Enable/disable toggle with verification
- Lock timing policy selection
- Edge case handling: not enrolled, not available
- Store preferences in shared_preferences
- Handle multiple failures with attempt counter
- Create InouWebView widget with:
- JavaScript bridge for native ↔ web communication
- Auth cookie/token handling
- Pull-to-refresh support
- Loading indicator with progress
- Offline/error state handling with retry
- Enhance WebViewScreen with:
- Full-screen WebView with optional app bar
- Back button handling (WebView history first, then app nav)
- Share functionality (copies to clipboard)
- Menu actions (copy URL, open in browser)
- Haptic feedback support via JS bridge
- Add deep link handling in main.dart:
- inou.com/app/* URLs open in WebView
- Navigator route generation for deep links
JS Bridge API:
- window.inouNativeBridge.postMessage(action, data)
- window.inouNativeBridge.share(title, text, url)
- window.inouNativeBridge.haptic(type)
- window.inouNativeBridge.setToken(token)
- window.inouNativeBridge.logout()