DIREKT Android UI Specification

Platform

  • Kotlin;
  • Jetpack Compose;
  • Material 3;
  • edge-to-edge layout;
  • Navigation Compose;
  • adaptive layout where device width permits;
  • Android system patterns over custom imitations.

Screen architecture

Each route owns:

  • immutable UI state;
  • user intents/events;
  • side effects separated from state;
  • ViewModel;
  • navigation contract;
  • loading/empty/error/offline states;
  • analytics hooks;
  • previews with synthetic data;
  • Compose UI tests for critical behaviour.

Composable functions must not directly perform network/database work.

Layout

  • compact phones are primary;
  • support larger phones/tablets without stretched single-column content;
  • use navigation rail only after adaptive testing;
  • bottom navigation labels remain visible;
  • maps never obstruct essential list/filter access;
  • sheets/dialogs respect system insets and back behaviour.

Forms

  • validate on submit and appropriate field transitions;
  • retain user input after recoverable errors;
  • mask sensitive values;
  • use camera/document capture guidance;
  • display upload size/type requirements before selection;
  • never silently compress beyond readability;
  • declarations require explicit acceptance.

Permissions

  • explain value before system prompt;
  • request only at point of use;
  • support denial and “don’t ask again”;
  • no background location in Version 1;
  • camera/media choices follow current Android permission model;
  • notifications are optional except in-app centre.

Images

  • Coil;
  • server-generated thumbnails;
  • placeholder and retry;
  • no evidence image in public cache;
  • strip unnecessary metadata on approved upload path;
  • cache public images with versioned URLs.

Themes

  • light theme required;
  • dark theme supported before public release unless product decision records a justified deferment;
  • dynamic colour evaluated but must not weaken trust semantics;
  • screenshot tests cover semantic status states.

Test identifiers

Use stable semantic tags/accessibility content rather than implementation-specific coordinates.