2026-06-10 13:38:11 -07:00
|
|
|
# Buzz Mobile
|
2026-04-13 09:55:14 -07:00
|
|
|
|
2026-06-10 13:38:11 -07:00
|
|
|
Flutter mobile client for Buzz.
|
2026-04-13 09:55:14 -07:00
|
|
|
|
|
|
|
|
## Setup
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
cd mobile
|
|
|
|
|
flutter pub get
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Run
|
|
|
|
|
|
|
|
|
|
```bash
|
2026-05-29 18:26:24 -04:00
|
|
|
# From repo root (recommended — starts Docker, relay, and simulator):
|
|
|
|
|
just mobile-dev
|
|
|
|
|
|
|
|
|
|
# Direct (requires services and relay already running):
|
|
|
|
|
cd mobile && flutter run
|
2026-04-13 09:55:14 -07:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Checks
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
dart format --output=none --set-exit-if-changed .
|
|
|
|
|
flutter analyze
|
|
|
|
|
flutter test
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Or from the repo root: `just mobile-check` and `just mobile-test`.
|
|
|
|
|
|
2026-07-13 16:29:35 -07:00
|
|
|
## Android release signing
|
|
|
|
|
|
|
|
|
|
Android release builds fail unless all upload-key inputs are supplied through the
|
|
|
|
|
environment:
|
|
|
|
|
|
|
|
|
|
- `BUZZ_ANDROID_UPLOAD_KEYSTORE_PATH`: path to a CI-vended keystore file
|
|
|
|
|
- `BUZZ_ANDROID_UPLOAD_KEYSTORE_PASSWORD`
|
|
|
|
|
- `BUZZ_ANDROID_UPLOAD_KEY_ALIAS`
|
|
|
|
|
- `BUZZ_ANDROID_UPLOAD_KEY_PASSWORD`
|
|
|
|
|
|
|
|
|
|
The keystore path must be absolute, and the keystore must remain outside the
|
|
|
|
|
repository. Development and debug builds do not require these variables.
|
|
|
|
|
|
2026-07-16 11:32:10 -07:00
|
|
|
Release pipelines that sign through the central APK Signer service instead of
|
|
|
|
|
a local upload keystore must set `BUZZ_ANDROID_RELEASE_SIGNING=external`. That
|
|
|
|
|
mode produces an unsigned release bundle and refuses to run if any
|
|
|
|
|
`BUZZ_ANDROID_UPLOAD_*` value is also set.
|
|
|
|
|
|
2026-04-13 09:55:14 -07:00
|
|
|
## Architecture
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
lib/
|
|
|
|
|
├── main.dart # Entry point, Riverpod bootstrap
|
|
|
|
|
├── app.dart # MaterialApp with theme
|
|
|
|
|
├── shared/
|
|
|
|
|
│ └── theme/ # Catppuccin light/dark, spacing tokens, extensions
|
|
|
|
|
└── features/
|
|
|
|
|
└── home/ # Placeholder home surface
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
- **State management:** Riverpod + Hooks (`HookConsumerWidget`)
|
|
|
|
|
- **Theme:** Catppuccin Latte (light) / Macchiato (dark) — matches desktop
|
|
|
|
|
- **Spacing:** `Grid` tokens for consistent spacing
|
|
|
|
|
- **Linting:** `flutter_lints` + `riverpod_lint` via `custom_lint`
|
|
|
|
|
- **Feature isolation:** No cross-feature imports except `shared/`
|