Core screens
- Home, scheduled/previous cases and connectivity check.
- Consent and camera/microphone permission.
- Live consultation with remote/AI state, local preview, transcript and mute/camera controls.
- One-instruction-at-a-time camera guidance.
- Network mode and reconnect status.
- Result with observations, diagnosis, alternatives, action and sources.
- Officer join/handoff and case status.
- Retention and privacy settings.
Live-call UX
- Use a prominent local camera preview and an unmistakable “AI can see / cannot currently see” state.
- Keep spoken instructions short and mirror them as large on-screen Urdu text.
- Confirm accepted evidence with a non-colour cue, haptic feedback and concise Urdu acknowledgement.
- Do not show model-internal probabilities as a substitute for understandable uncertainty.
- Provide immediate mute, camera-off and end-call controls.
Guided camera evidence
The system requests the whole plant or affected area, front, underside, close-up, optional field-wide view and comparison with an unaffected plant. On-device/server checks cover blur, severe exposure, inadequate subject size, duplicates, poor focus, unsupported media and unrelated or screenshot content.
Network state and degradation
LIVE_VIDEO_HIGH
→ LIVE_VIDEO_REDUCED
→ AUDIO_WITH_STILLS
→ PUSH_TO_TALK_WITH_UPLOADS
→ QUEUED_CASE
Any state → RECONNECTING → previous viable state
Use idempotency keys and content hashes for selected stills. Remove local media only after server acknowledgement and according to retention choice.
Urdu and mixed script
Use bidirectional isolation around English names and numbers. Preserve original and normalized transcript separately. Let users correct detected entities rather than editing long text. Provide captions and text scaling.
Ponytail implementation
Use native Flutter/WebRTC capabilities and official LiveKit SDKs before custom media frameworks. Avoid a general form-builder or bespoke component system during the pilot.