Digital Susu — Ghana-first savings, susu, wallet and group-management platform. Flutter app (home rebuilt to match the React design reference) with a Node/TS/Express backend.
# Digital Susu V2
Ghana-first digital savings, **susu**, wallet, contribution, group-management
and financial-record platform — built with Flutter.
> **Status: verified on Flutter 3.47.0 stable — `flutter analyze` clean,
> 98/98 tests pass, production web build OK.** Current focus: Phase 6–7
> (contributions, payments, susu systems).
## Quick start
Requirements: Flutter SDK (stable, Dart ≥ 3.4).
```sh
# 1. Fetch dependencies
flutter pub get
# 2. Static analysis (must be clean)
flutter analyze
# 3. Run tests (must pass)
flutter test
# 4. Run the app with mock data (default behaviour)
flutter run --dart-define=USE_MOCK_DATA=true
# 5. Run against a real backend when one is available
flutter run --dart-define=USE_MOCK_DATA=false \
--dart-define=API_BASE_URL=
api.example.com
```
> **If `flutter pub get` fails on the `intl` version:** your Flutter release
> pins a different `intl` inside `flutter_localizations`. Set `intl` in
> `pubspec.yaml` to the exact version your Flutter pins (check with
> `flutter pub deps`) and run `flutter pub get` again.
## Verification status
| Check | Status |
|-------|--------|
| `flutter pub get` | ✅ Passed (Flutter 3.47.0 / Dart 3.13.0 — `intl` pinned to `^0.20.3` to match `flutter_localizations`) |
| `flutter analyze` | ✅ Passed — **No issues found** (lib/ + test/) |
| `flutter test` | ✅ Passed — **98/98 tests** |
| `flutter build web --release` | ✅ Passed — production bundle in `build/web` |
> **Verified on 2026-08-16 with Flutter 3.47.0 stable** (installed at
> `/home/wuying/flutter`). The hand-written Phase 1–5 code had dozens of
> broken relative imports, a missing `core/network/` layer (ApiClient /
> ApiConfig / ApiEndpoints / TokenStore / repository_selector — implemented
> to match the repository + test contracts), a missing
> `TextTheme.emphasis/caption` extension, plus Flutter-3.47 API removals
> (`caption`, `RadioListTile.groupValue`) and test bugs (minor/major unit
> mix-up, mock sort order, missing Materia …