Mobile App Overview¶

The OpenSTR mobile app is a Flutter application built for cleaners to manage and execute cleaning sessions on iOS, Android, and Web.
Tech Stack¶
| Component | Technology | Version |
|---|---|---|
| Framework | Flutter | 3.10+ |
| Language | Dart | 3.10+ |
| HTTP Client | Dio | 5.9 |
| State Management | Provider | 6.1 |
| Secure Storage | flutter_secure_storage | 10.0 |
| Image Capture | image_picker | 1.2 |
| Navigation | Material NavigationBar | Built-in |
Project Structure¶
mobile_flutter/
├── lib/
│ ├── main.dart # Entry point, routing, providers
│ ├── theme.dart # OceanTheme design tokens
│ ├── models/
│ │ └── models.dart # All data models
│ ├── screens/
│ │ ├── auth/
│ │ │ └── login_screen.dart # Login page
│ │ ├── common/
│ │ │ └── photo_viewer.dart # Photo carousel with zoom
│ │ ├── history/
│ │ │ ├── past_cleans_screen.dart # Completed session list
│ │ │ └── clean_detail_screen.dart # Session detail view
│ │ ├── profile/
│ │ │ ├── profile_screen.dart # User profile & settings
│ │ │ └── about_screen.dart # App info & license
│ │ ├── schedule/
│ │ │ └── schedule_screen.dart # Upcoming cleans list
│ │ ├── session/
│ │ │ ├── active_session_screen.dart # Cleaning workflow
│ │ │ └── guest_rating_screen.dart # Post-clean rating
│ │ └── standards/
│ │ └── standards_screen.dart # Cleaning reference
│ ├── services/
│ │ ├── api_service.dart # Dio HTTP client
│ │ ├── auth_service.dart # JWT auth management
│ │ ├── network_service.dart # WiFi detection
│ │ └── storage_service.dart # Secure token storage
│ └── widgets/ # Custom widgets (future)
├── pubspec.yaml
├── analysis_options.yaml
├── android/
├── ios/
└── web/
Key Features¶
- Schedule management — view upcoming cleans, accept assignments, claim open sessions
- Cleaning workflow — room-by-room process with before/after photos and task checklists
- Photo documentation — camera capture with metadata, file compression
- Guest ratings — 5-star rating with optional notes after each clean
- Cleaning history — past sessions with detailed timeline and photo review
- Network awareness — detects local WiFi to restrict active cleaning to on-site only
- Standards reference — browse cleaning checklists by room type
- Secure storage — platform-specific secure token storage (Keychain/Keystore)
Running the Mobile App¶
Development (Web)¶
Development (Device)¶
Production Build (Web)¶
The Flutter web build is included in the Docker production stack and served at /app/.
Production Build (Mobile)¶
# Android
flutter build apk --dart-define=API_URL=https://yourdomain.com
# iOS
flutter build ios --dart-define=API_URL=https://yourdomain.com
Configuration¶
API URL¶
The API URL is configured at build time via Dart defines:
Default: http://localhost:3000
Theme¶
The app uses a custom "Ocean" theme with Material 3:
| Token | Color | Usage |
|---|---|---|
| Primary | #0D7E8A (Teal) |
Primary buttons, active states |
| Secondary | #1A5FA8 (Blue) |
Secondary actions |
| Surface | #F5F7FA (Light Gray) |
Background surfaces |
| Text | #1A2332 |
Primary text |
| Text Secondary | #64748B |
Secondary/muted text |
Status colors:
| Status | Color |
|---|---|
| Pending | Warning (amber) |
| In Progress | Primary (teal) |
| Submitted | Purple |
| Approved | Success (green) |
| Rejected | Error (red) |
Dependencies¶
| Package | Purpose |
|---|---|
dio |
HTTP client for API calls |
provider |
State management (ChangeNotifier pattern) |
flutter_secure_storage |
Secure token storage (Keychain/Keystore) |
shared_preferences |
Local storage (web fallback) |
image_picker |
Camera photo capture |
url_launcher |
Open external URLs |
go_router |
Navigation (imported, not actively used) |
cupertino_icons |
iOS-style icons |
Platform Configuration¶
Android¶
- Namespace:
com.openstr.openstr_mobile - Java version: 17
- Kotlin JVM target: 17
iOS¶
- Display name: "Openstr Mobile"
- Orientations: Portrait + Landscape (all)
- iPad support: All orientations
Required Permissions¶
- Camera access (photo capture via
image_picker) - Photo library access (photo selection)
- Network access (API communication)