Pāriet uz saturu

CA Navigator — UX/UI Heuristiskais Audits

Versija: v1.11.x (post-local-sync-2026-05-07) Audita ietvars: 10 Nielsen heiristikas + lauka konteksta specifiskās bažas Mērķauditorija: mežstrādnieki + meža īpašnieki, lauka apstākļi (saule, lietus, cimdoti pirksti, peldoša GPS, slikts internets)


Procedūra

  1. Iziet katru no 14 ekrāniem lib/screens/ ar reālu ierīci
  2. Katram aizpildīt sekciju zemāk: kas labi, kas slikti, prioritāte
  3. Prioritāte: P0 (krit. drošībai), P1 (nopietns lietojamības trūkums), P2 (uzlabojums), P3 (kosmētika)
  4. Pēc audita: GitLab Issues katram P0/P1 ar konkrētu fix
  5. Atkārtot pēc katra major release

1. Visibility of system status

Lietotājam jāzina, ko sistēma dara, kāds ir stāvoklis.

Pāriets ekrāni

  • input_screen — CA ielāde rāda spinneri, status banner pēc ielādes ✓ labi
  • map_screen — GPS ikon kreisajā augšā parāda accuracy (StatusBar) ✓ labi
  • monitored_properties_screen — expand kartīti rāda 4 paralēlus loadings (VZD, forest, LAD, env) bez kopējās "loading…" indikatora — P1 risks

Atklātās problēmas

ID Problēma Lokācija Prioritāte Fix idea
UX-1.1 Pēc CA ielādes skipping notification — lietotājs nezina, vai geofence aktīvs geofence_service.dart:233 P1 Toast: "Geofence aktīvs — 2s intervāls"
UX-1.2 LAD sekcijas spinner nav vienots ar VZD/forest spinneru — flickeris monitored_properties_screen.dart P2 Centralizēt loading state
UX-1.3 Kompass GPS heading switch (>1.3 m/s) nav lietotājam redzams geofence_service.dart:97 (effectiveHeading) P3 Subtle ikon switch

2. Match between system and the real world

Lietot lietotāju valodu, ne tehnisko žargonu.

Pāriets ekrāni

  • CA = "ciršanas apliecinājums" — pareizs latviešu termins, mežstrādnieki lieto šo akronīmu
  • Kadastrs / LIZ / Mikroliegums — domain terms, lietotāji tos saprot ✓
  • add_ca_screen (jauns) — "Pievienot CA" ekrāns vēl nav verificēts ar lietotājiem

Atklātās problēmas

ID Problēma Lokācija Prioritāte
UX-2.1 "Geofence" = angļu termins. Latviešu mežstrādniekam neskaidrs geofence_settings_screen.dart P2
UX-2.2 "AGRO_DIZKOKI" → "Dižkoks" pāreja LadLandscapeElement.displayName ✓ lad_service.dart OK

3. User control and freedom

Atpakaļ poga, undo, izeja no kļūdas.

ID Problēma Prioritāte
UX-3.1 DrawingToolbar — pēc poligona apstiprināšanas nav undo (jādzēš + jāzīmē atpakaļ) P1
UX-3.2 Pēc CA dzēšanas no saraksta nav "Atjaunot" snackbar P2
UX-3.3 Onboarding pabeigšanu nevar atgriezties, lai pārskatītu P3

4. Consistency and standards

ID Problēma Prioritāte
UX-4.1 Daži ekrāni izmanto Material 2 buttonus, citi M3 (inkonsekventi pēc Sprint 11 light theme migrācijas?) P2
UX-4.2 "Saglabāt" vs "Pievienot" vs "OK" — nav konsekvents primary action label P3

5. Error prevention

Labāk nepieļaut kļūdu, nekā informēt par to.

ID Problēma Prioritāte
UX-5.1 CA numura ievades regex apstiprina formātu, bet nav warn par tipisku kļūdu (atstarpes, dažādu garumu) P2
UX-5.2 Dzēšana no Mani īpašumi bez apstiprinājuma — case sensitive P1
UX-5.3 "Eksportēt KML" bez warn par overwrite, ja file jau eksistē P2

6. Recognition rather than recall

Lietotājam nav jāatceras pati visu — UI to atgādina.

ID Problēma Prioritāte
UX-6.1 Iepriekšējās ievadītās CA nav pieejamas saraksta dropdown'ā P2
UX-6.2 Iestatījumu sadaļās nav visualizēts pašreizējais izmainītais slieksnis (piem. geofence cooldown) P2

7. Flexibility and efficiency of use

Power user shortcuts, batch operācijas.

ID Problēma Prioritāte
UX-7.1 Mani īpašumi — nav batch select dzēšanai P3
UX-7.2 Onboarding 3 ekrāni — nav "Skip all" iespēja experienced user P3

8. Aesthetic and minimalist design

ID Problēma Prioritāte
UX-8.1 Map status banner satur 5+ informāciju (cut type, area, owner, deadline, GPS) — pārpilns mazos ekrānos P2
UX-8.2 LAD sekcijā fieldBlocks + landscapeElements + declaredFields = 3 saraksti vienā ekspand'ā — vajag tabu vai accordion? P2

9. Help users recognize, diagnose, and recover from errors

Pareizs valodas tonis, konkrēti soļi.

ID Problēma Prioritāte
UX-9.1 "VMD API timeout" — lietotājam neskaidrs (kas ir VMD API?). Vajag: "Servera atbilde ilgst — pamēģini pēc minūtes vai pārbaudi internetu" P1
UX-9.2 LAD endpoint 503 → fallback uz direct LAD bez lietotāja brīdinājuma — labi UX, bet nav diagnostikas iespējas P3
UX-9.3 GPS atļauja noraidīta — nav skaidru soļu, kā to ieslēgt P1

10. Help and documentation

ID Problēma Prioritāte
UX-10.1 Help screen ir, bet vai tas ir aktuāls pēc daudziem sprintiem? P2
UX-10.2 Geofence sliekšņi nav skaidri (kāpēc 20m, kāpēc 30s cooldown?) P3

Lauka konteksta specifiskās bažas

Ne klasiskā Nielsen, bet kritiskas šim mežstrādnieka use-case:

ID Problēma Prioritāte Fix idea
LAUKS-1 Touch target izmērs ar cimdotiem pirkstiem — vai pogas ≥48dp? P1 flutter_inspector audits
LAUKS-2 Saules atspulgs — vai dark theme atrodama vienkāršs toggle? P1 Pievienot HOME ekrānā quick-toggle
LAUKS-3 Akumulators — geofence 2s GPS ik dienā — battery drain measurement P0 Mērīt ar Android Battery Historian
LAUKS-4 Offline 3G — kuri servisu izsaukumi cieš pirmie? P1 NetworkStatus widget + retry queue
LAUKS-5 Skaņas brīdinājums — vai tas dzirdams pa motorzāģa fonu? P0 Lauka tests ar mežstrādnieku
LAUKS-6 Display sleep + GPS background — vai tracking turpinās? P1 Foreground service config audits

Audita procedūra atkārtošanai

  1. Pārkopēt šo failu uz UX_AUDIT_<datums>.md
  2. Aizpildīt katru ID ar reāliem novērojumiem
  3. Konvertēt P0 + P1 issues uz GitLab Issues, kategorija ux, milestone "Quality Q3"
  4. P2/P3 paliek šajā dokumentā kā backlog

Nākamie soļi

  • Iet pa visiem 14 ekrāniem ar reālu Samsung G970F + cimdiem (1 lauka diena)
  • Filmēt 5 testētājus 10 min katru (User Testing pamati)
  • Veidot Lighthouse-style metric (load time, render FPS) ar Flutter DevTools
  • Akumulatora mērījumi 8h field session

Periodiski auditi

Overflow scan (Flutter RenderFlex)

Flutter DEBUG režīmā parāda dzelteni-melnās svītras "RIGHT/BOTTOM OVERFLOWED BY N PIXELS", kad Row/Column bērni nevar ietilpināties. Release APK to slēpj — bet kods joprojām ir bojāts: elementi tiek apgriezti vai pārklājas. 2026-05-10 incidents: lietotājs uzrādīja ekrānu ar "RIGHT OVERFLOWED BY 93 PIXELS" pārklājot kadastra tap-info sheet.

Procedūra: Reizi 2-3 nedēļās palaiž specializētu Claude Code agentu, kas:

  1. Atrod visus Row( ar Text( bērniem bez Expanded/Flexible wrap
  2. Atrod ListTile/ExpansionTile title: ar Row-iebūvētu garu Text
  3. Krustpārbauda assets/translations/lv.json atslēgas, kuru vērtība > 40 simbolu, ar to lietošanas vietām bez maxLines + overflow: TextOverflow.ellipsis
  4. Atgriež TOP 15 prioritāru sarakstu ar fails:rinda + risks + ieteikums

Agenta prompt (kopēt uz Claude Code Explore agent):

Atrod visas potenciāli overflow-pakļautās vietas geo-mobile lib/ direktorijā.
Patterns, kas rada problēmas:
1. Row ar Text bez Expanded/Flexible — visizplatītākais
2. Row ar mainAxisSize.min un dažādiem fixed-width children, kuru summa > screen width
3. ExpansionTile/ListTile title ar garu Text
4. Translation atslēgas > 40 simbolu lietotas Rows bez Expanded wrap

Atgriez Markdown tabulu: | # | Fails:rinda | Konteksts | Risks | Iesakums |
Maksimums 15 atradumi, no augstākā riska uz zemāko.

Akcijas: P0 (saraksta TOP 5) — fix nedēļā; P1 (TOP 6-10) — fix sprintā; P2 — backlog.

Touch target audit

docs/TOUCH_TARGET_AUDIT.md — atsevišķs dokuments. Reizi 1-2 mēnešos pārbaudīt vai visi tap targets ≥ 48×48 px (Material guideline) un brīvprātīgi 56×56 px lauka apstākļos ar cimdiem.

Translation key length audit

Reizi sprintā: python -c "import json; d=json.load(open('assets/translations/lv.json')); [print(k, len(v)) for k,v in d.items() if len(v) > 40]" — atrod garākās translation atslēgas. Pārbaudīt katras lietojuma vietas, vai ir maxLines + ellipsis.