🎯 An Android application for real estate listings
Screen_Recording_20250615_155123_realestate.1.mp4
📦 pexels/
├── 📂 app/ # Main application module
├── 📂 core/ # Core utilities and shared logic
│ └── 📂 common/ # Common module shared between modules
│ └── 📂 data/ # Data module which provides repositories, paging sources
│ └── 📂 database/ # Database module
│ └── 📂 datastore/ # Datastore module
│ └── 📂 domain/ # Domain module which provides use cases, repositories
│ └── 📂 model/ # Model module
│ └── 📂 network/ # Network module
│ └── 📂 testing/ # Testing module
├── 📂 features/ # Features module
│ └── 📂 listproperties/ # Real estate list feature
└── 📂 gradle/ # Gradle wrapper and build scripts
- 🧑💻 Android Studio: Meerkat
- 🛠️ Android Gradle Plugin: 8.9.0
- ⚙️ Gradle: 8.13
- 🏘️ Property Listings with Pagination — Browse a large catalog of real estate properties efficiently using Paging 3.
- ⭐ Bookmarks — Mark favorite properties and access them anytime, even offline.
- 📶 Offline-first — Property Listings & bookmarked are stored locally to ensure availability offline.
- 🗂️ Modular Architecture — Designed for scalability with clean architecture principles.
-
Clone the repository:
git clone https://github.com/vanxioussss/SMG.git
-
Sync the build project as usual.
In case you can't build the project,
Check the release here
-
🏗️ Architecture: Clean architecture - Single Activity - MVVM Design pattern - Multi-moduled
-
📦 Libraries:
-
Compose: Jetpack Compose
-
Navigation: Navigation Component
-
Dependency Injection: Hilt
-
Networking: Retrofit
-
Database: Room
-
Asynchronous Programming: Coroutines
-
Reactive Streams: Flow
-
Pagingination: Paging 3
-
This section outlines the rationale behind key architectural and UX decisions made during the development of this application.
🏗️ Architecture:
-
Clean Architecture + MVVM
Ensures clear separation of concerns across layers: UI, Domain, and Data. Each layer has a well-defined responsibility, improving testability and maintainability. -
Modularization
Even though the app requirements are simple, the project is modularized to support scalability. This allows different features to be developed in isolation without conflicts, making the codebase future-proof and team-friendly. -
Single Activity with Jetpack Compose & Navigation Compose
The app uses a single-activity architecture, with features separted into submodules. This centralizes navigation and simplifies lifecycle handling across screens. Even if there is only one feature now, Navigation will help for future growth of the project. -
Offline-first with Pagination and RemoteMediator
Even though the current API does not support pagination, Paging 3 with RemoteMediator is already integrated into the architecture to ensure offline-first behavior and future scalability.
Some planned or possible enhancements:
Improve image loading performance
Currently the time to load each image is still high.
Support Build variants
Due to time constraint, I don't have enough time to support build variance but it will be a good
improvements in the future.
Improve Code quality