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¶
- Iziet katru no 14 ekrāniem
lib/screens/ar reālu ierīci - Katram aizpildīt sekciju zemāk: kas labi, kas slikti, prioritāte
- Prioritāte: P0 (krit. drošībai), P1 (nopietns lietojamības trūkums), P2 (uzlabojums), P3 (kosmētika)
- Pēc audita: GitLab Issues katram P0/P1 ar konkrētu fix
- 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¶
- Pārkopēt šo failu uz
UX_AUDIT_<datums>.md - Aizpildīt katru ID ar reāliem novērojumiem
- Konvertēt P0 + P1 issues uz GitLab Issues, kategorija
ux, milestone "Quality Q3" - 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:
- Atrod visus
Row(arText(bērniem bezExpanded/Flexiblewrap - Atrod
ListTile/ExpansionTiletitle:ar Row-iebūvētu garu Text - Krustpārbauda
assets/translations/lv.jsonatslēgas, kuru vērtība > 40 simbolu, ar to lietošanas vietām bezmaxLines+overflow: TextOverflow.ellipsis - 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.