Skip to content

Mobile App Overview

Property exterior — where cleaners do their work

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)

cd mobile_flutter
flutter run -d chrome --dart-define=API_URL=http://localhost:3000

Development (Device)

cd mobile_flutter
flutter run --dart-define=API_URL=http://YOUR_LAN_IP:3000

Production Build (Web)

The Flutter web build is included in the Docker production stack and served at /app/.

cd mobile_flutter
flutter build web --dart-define=API_URL=https://yourdomain.com

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:

flutter run --dart-define=API_URL=http://localhost:3000

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)