An Android app that provides users with a seamless experience in exploring and booking accommodations, It presents a list of property listings using data from the provided JSON source, written 100% in Kotlin and Jetpack Compose using Android Jetpack Components.
To run the project in your local environment, you need
- Go to the android studio and create a new project using the 'Get from version control' option.
- Paste this link
https://github.com/daniel-waiguru/QuickStay.git
- Add your Google maps API Key to
local.properties
file - Build the project and run it
-
Tech-stack
- Kotlin - a modern, cross-platform, statically typed, general-purpose programming language with type inference.
- Coroutines - lightweight threads to perform asynchronous tasks.
- Flow - a stream of data that emits multiple values sequentially.
- StateFlow - Flow APIs that enable flows to emit updated state and emit values to multiple consumers optimally.
- Dagger Hilt - a dependency injection library for Android built on top of Dagger that reduces the boilerplate of doing manual injection.
- Gson A Java and Kotlin serialization/deserialization library to convert Kotlin/Java Objects into JSON and back
- Jetpack
- Jetpack Compose - A modern toolkit for building native Android UI
- Lifecycle - perform actions in response to a change in the lifecycle state.
- ViewModel - store and manage UI-related data lifecycle in a conscious manner and survive configuration change.
- DataStore - A data storage solution backed using Kotlin Coroutines and Flows that allows you to store key-value pairs or typed objects with protocol buffers
- Timber - a highly extensible Android logger.
-
Architecture
- MVVM—Model View ViewModel pattern with Feature-based modularization.
- N/B This can be modified to include a domain layer for each feature depending on the business logic needed to be handled.
- N/B This is a small project, hence Modularization is an overkill, but it is implemented to demonstrate how Feature-based modularization can be implemented in a large-scale complex project
-
Gradle
- Gradle Kotlin DSL - An alternative syntax for writing Gradle build scripts using Koltin.
- Version Catalogs - A scalable way of maintaining dependencies and plugins in a multi-module project.
- Convention Plugins - A way to encapsulate and reuse common build configuration in Gradle, see here
-
CI/CD
All the dependencies (external libraries) are managed using version catalogs and defined in a single place gradle/libs.versions.toml
file. This is a scalable approach to manage dependencies and use the same dependency version across all modules.
This repo uses Android Studio's built-in linter to analyze the codebase and identify potential code style violations, code quality issues, etc.
./gradlew lintDebug
Sign In | Properties | Properties Filtered |
---|---|---|
Property Details | Property Details Scrolled |
---|---|
Sign In | Properties | Property Info |
---|---|---|
Booking |
---|