Mitra §A: pre-home (S3a/S3b/AccountInactive) + design system + Bestie Home

- Port halo_tokens + halo_theme + HaloButton to mitra_app (rose palette,
  Bricolage display, Poppins body, JetBrainsMono).
- Build S3a Input WhatsApp (figma-bestie BestieS3 first half) with
  +62 chip, leading-zero/62 normalization, allow '+' in input.
- Build S3b OTP verification (6-digit, 60s resend timer, attempts hint,
  Focus(canRequestFocus:false) for maestro inputText compat) with full
  error branching (CODE_MISMATCH, OTP_EXPIRED, OTP_USED, ATTEMPTS_EXCEEDED,
  WRONG_FLOW, ACCOUNT_INACTIVE).
- Add AccountInactive terminal screen for is_active=false mitras.
- Typed MitraAuthError with Indonesian-first localized messages +
  retryAfterSeconds passthrough.
- Rebuild home_screen.dart to match figma BestieHome (greeting + status
  card + Ganti Status CTA + Pengingat + 2-tile dark grid).
- Backend: POST /internal/_test/seed-mitra (idempotent) and
  PATCH /internal/mitras/:id (display_name update).
- Control center: inline Edit Nama on mitras row + expandable inline log
  table under clicked mitra (vs old below-table panel).
- 5 maestro flows ts-mitra-A-01/03/04/05/06 covering invalid input, happy
  path, account inactive, phone-format normalization, and the back-to-S3a
  regression. All green.

Plan + memory documented in:
- requirement/phase4-mitra-prehome-plan.md
- requirement/flow_mitra.md / flow_mitra.mermaid.md §A

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-19 22:01:28 +08:00
parent ad02ee252d
commit 9696eadeaf
37 changed files with 3406 additions and 326 deletions

View File

@@ -40,14 +40,49 @@ dev_dependencies:
build_runner: ^2.4.13
custom_lint: ^0.7.0
riverpod_lint: ^2.6.2
# Generates launcher icons for Android + iOS from a single source PNG.
# Config block below; run `dart run flutter_launcher_icons` to regenerate.
flutter_launcher_icons: ^0.13.1
# In-repo lint rules — shared with client_app from the repo root. Adds
# the `no_ref_in_dispose` rule and any future repo-wide guardrails.
# See halo_lints/lib/halo_lints.dart and mitra_app/CLAUDE.md → Pitfalls.
halo_lints:
path: ../halo_lints
# Launcher-icon config. White background per the design-system rule
# documented in client_app/lib/core/theme/halo_tokens.dart: when the logo
# is full-color (mitra logo is pink on transparent), use surface #FFFFFF.
# Monochrome/white logos use brandLogoBg #FF699F (see client_app config).
flutter_launcher_icons:
android: true
ios: true
image_path: "assets/icons/logo.png"
remove_alpha_ios: true
background_color_ios: "#FFFFFF"
min_sdk_android: 24
adaptive_icon_background: "#FFFFFF"
adaptive_icon_foreground: "assets/icons/logo.png"
flutter:
uses-material-design: true
assets:
- assets/images/
- assets/images/splash/
- assets/fonts/
fonts:
- family: BricolageGrotesque
fonts:
- asset: assets/fonts/BricolageGrotesque-Variable.ttf
- family: Poppins
fonts:
- asset: assets/fonts/Poppins-Regular.ttf
- asset: assets/fonts/Poppins-Medium.ttf
weight: 500
- asset: assets/fonts/Poppins-SemiBold.ttf
weight: 600
- asset: assets/fonts/Poppins-Bold.ttf
weight: 700
- family: JetBrainsMono
fonts:
- asset: assets/fonts/JetBrainsMono-Variable.ttf