Roomy is a mobile application designed to simplify and streamline the complexities of co-living. This repository contains the source code for the Roomy Flutter application.
Join the Beta Program: https://onelink.to/roomy Visit our website: theroomyapp.com
This repository focuses on the Roomy Flutter application. The broader Roomy ecosystem includes several other interconnected projects, all housed within this monorepo:
roomy-firebase/README.md for more details.roomy-astro-website/README.md for more details.roomy-react-email-starter/README.md for more details.roomy-workspace/README.md for more details.Coordinating chores, managing shared grocery lists, splitting bills, and keeping track of who's done what can quickly become sources of friction in any shared home. Roomy tackles these common pain points head-on, offering intuitive solutions to keep your household running smoothly.
This Flutter application aims to provide a seamless and user-friendly experience for managing shared living spaces.
The Roomy app includes the following core features:
Roomy's Flutter application is built using the Model-View-ViewModel (MVVM) architectural pattern, promoting a clear separation of concerns.
shadcn_ui and custom T widgets.veto package.Key architectural principles include:
auth, shopping_lists, cleaning).get_it for managing services and ViewModels.RmyApi (based on turbo_firestore_api) for Firestore interactions.TProvider and context extensions for consistent UI.informers package for observable state within ViewModels.turbo_response for consistent success/failure states.TAnalytics base class with global TSubjects and consistent verb-based method naming.TCard component for consistent content grouping and layout across the application.SlideShrink for conditional rendering, TButton for interactive elements with built-in animations.For a more detailed explanation, refer to the Architecture Document.
veto, informers.go_router.shadcn_ui, custom T widgets.get_it.turbo_firestore_api (custom), RmyApi.hive_ce, flutter_secure_storage.posthog_flutter.firebase_crashlytics.loglytics.flutter_animate.json_serializable.fl_chart for payment analytics visualization.shake_gesture for feedback trigger.The project follows a feature-first directory structure under lib/:
lib/
โโโ analytics/ # Analytics and crash reporting
โโโ auth/ # Authentication, user profiles
โโโ cleaning/ # Cleaning tasks and schedules
โโโ core/ # Core app setup, locator service
โโโ data/ # Shared data models, constants, extensions
โโโ environment/ # Environment configurations
โโโ feedback/ # User feedback UI (dialogs, toasts)
โโโ firebase/ # Firebase specific code (APIs, DTOs)
โโโ forms/ # Form configurations and base classes
โโโ generated/ # Auto-generated code (localization)
โโโ households/ # Household management features
โโโ http/ # HTTP and connectivity services
โโโ inbox/ # In-app messaging and notifications
โโโ l10n/ # Localization files and services
โโโ nlp/ # Natural Language Processing utilities
โโโ payments/ # Payment tracking and expense management
โโโ routing/ # Navigation and routing setup
โโโ shopping_lists/ # Shopping list features
โโโ state/ # Core state management utilities, base classes
โโโ storage/ # Local and cloud storage services
โโโ typography/ # Text styling and custom text widgets
โโโ ui/ # Base UI components, theming system
โโโ whats_new/ # Changelog display feature
โโโ main.dart # Application entry point
For more details on specific architectural rules and guidelines, refer to the CLAUDE.md file.
Clone the repository:
git clone https://github.com/theroomyapp/roomy.git
cd roomy/roomy-mobile
Install Flutter dependencies:
flutter pub get
Configure Firebase:
google-services.json (for Android) and GoogleService-Info.plist (for iOS) files in the appropriate directories (android/app/ and ios/Runner/).Generate code:
The project uses build_runner for code generation (e.g., for DTOs, localization).
flutter pub run build_runner build --delete-conflicting-outputs
Or use the provided script:
./scripts/run_build_generator.sh
flutter run
Run all tests (Flutter + Firebase Cloud Functions):
make test
Run only Flutter tests:
make test flutter
Run only Firebase Cloud Function tests:
make test firebase
Or use Flutter directly:
flutter test
Run with a specific environment (e.g., emulators):
flutter run --dart-define=env=emulators
If running on a physical device or iOS simulator with emulators, you might need to specify your machine's IP:
flutter run --dart-define=env=emulators --dart-define=ip=YOUR_MACHINE_IP
Run with staging environment:
flutter run --dart-define=env=staging
Ensure Firebase emulators are installed and configured.
Start the emulators (you can use the provided script):
./scripts/run_emulators.sh
Or manually:
firebase emulators:start --import=./firebase-data --export-on-exit
Run the app with the emulators environment flag as shown above. The app is configured to connect to emulators when this flag is present (see lib/environment/config/emulator_config.dart).
The application supports different environments, primarily for connecting to Firebase services:
prod (Default): Connects to live Firebase services (the-roomy-app).staging: Connects to staging Firebase services (the-roomy-staging-app) for internal testing.emulators: Connects to local Firebase emulators.Environment selection is done via the --dart-define=env=<environment_name> flag when running the app. The configuration is managed in lib/environment/enums/environment.dart.
The scripts/ directory contains utility scripts for common development tasks:
run_build_generator.sh: Runs the build_runner for code generation.dart_fix.sh: Applies Dart static analysis fixes.run_emulators.sh: Starts the Firebase emulators.add_brick.sh (in lib/): Adds the turbo-flutter brick.copy_to_brick.dart (in lib/): Updates the __brick__ directory for the Mason brick.Make sure scripts are executable (chmod +x script_name.sh).
The project includes a Makefile for convenient command execution:
make test: Run all tests (Flutter + Firebase Cloud Functions)make test flutter: Run only Flutter testsmake test firebase: Run only Firebase Cloud Function testsmake sync claude: Sync Claude Code agents and commandsmake build: Run build generator and format codemake fix: Run dart fix and format codeThe project uses Codemagic for automated builds and deployments:
The project uses separate icons for different purposes:
assets/icon/app-icon.png (512x512) - Used for app launcher iconassets/icon/splash-icon.png (477x460) - Used for splash screen logoImportant: Never use the same file for both purposes as it causes the square icon issue on Android splash screens.
To regenerate icons:
flutter pub run icons_launcher:createflutter pub run flutter_native_splash:createContributions are welcome! Please follow these steps:
git checkout -b feature/your-feature-name).CLAUDE.md for detailed conventions).flutter analyze and flutter test to ensure everything passes.git commit -m 'Add some feature').git push origin feature/your-feature-name).Please ensure your PR description clearly describes the changes and their purpose.
This project is licensed under the MIT License - see the LICENSE.md file for details (assuming one exists, otherwise specify).
Happy Co-living with Roomy! ๐
Reacties