Back to Projects
RentalWheels App

RentalWheels

Modern Android Car Rental Platform

Kotlin 1.9.20 Jetpack Compose 1.5.4 Firebase Backend 2024

5 Criteria, One Search

Users narrow down hundreds of vehicles to their perfect match through a cascading filter system — each criterion refines the results in real time.

All Vehicles — 120+ cars
Brand Filter — ~40 cars
Year + Fuel Type — ~15 cars
Transmission + Price — ~5 cars
Your Perfect Car

Firestore compound queries + client-side Flow operators for instant results

The Rental Experience

RentalWheels is a modern Android car rental application that reimagines how users browse, filter, and book vehicles. With an interactive catalog, smart multi-criteria filtering, and a real-time Firebase backend, the app delivers a seamless rental experience from discovery to booking.

Built with Jetpack Compose and Material Design 3, it features dynamic theming (Light/Dark/System), a booking analytics dashboard, and real-time Firestore synchronization with offline support — showcasing modern Android architecture best practices.

App Screens

RentalWheels Home Screen Home
RentalWheels Browse Cars Browse Cars
RentalWheels Car Details Car Details
RentalWheels Smart Filters Smart Filters
RentalWheels Bookings Bookings
RentalWheels Dark Mode Settings Settings (Dark)

Architecture & Stack

MVVM + Repository Pattern

Clean separation of concerns with Hilt dependency injection and Firebase-backed repositories.

  • UI Layer: Jetpack Compose with Material 3
  • ViewModel: StateFlow + Coroutines for async state
  • Repository: Firestore CRUD with offline cache
  • DI: Hilt modules for Firebase & repository injection

Technology Stack

Language Kotlin 1.9.20
UI Compose 1.5.4 + Material 3
DI Hilt
Backend Firebase (Firestore, Auth, Storage)
Images Coil
Kotlin Compose Material 3 Hilt Firebase Coil Coroutines Flow

Data Flow

Compose UI ViewModel Repository Firestore StateFlow UI Update

Core Implementation

Smart Vehicle Filtering

Advanced multi-criteria filtering system allowing users to find their perfect rental by brand, year, fuel type, transmission, and price range — all with real-time results.

  • 5 simultaneous filter criteria with instant Compose recomposition
  • Firestore compound queries with client-side fallback filtering
  • Price range slider with dynamic min/max from available inventory

Booking Analytics

Dashboard with booking history, spending trends, and usage statistics via AnalyticsViewModel.

  • Custom Compose chart components
  • Aggregated Firestore queries
  • Time-based trend analysis

Dynamic Theming

Full Light/Dark/System theme support with Material 3 dynamic color extraction.

  • Material 3 dynamic color system
  • DataStore theme persistence
  • Smooth animated transitions

Firebase Auth & Sync

Secure user authentication with real-time Firestore data synchronization and offline support.

  • Firebase Auth with email/password
  • Firestore offline persistence
  • Cloud Storage for vehicle images

Technical Deep Dive

Type-Safe Navigation

Compose Navigation with type-safe route definitions, deep linking support, and seamless back-stack management across the entire app flow.

Reactive Data Layer

Kotlin Flow-based repository layer with Firestore snapshot listeners that push real-time updates through the ViewModel to the UI automatically.

Coil Image Pipeline

Coil integration for efficient vehicle image loading with disk caching, crossfade animations, and placeholder shimmer effects.

Booking Cart System

Simulated booking workflow with cart management, date range selection, price calculation, and booking confirmation — all backed by Firestore transactions.

Problems Solved

Complex Filter Composition

Firestore's limited compound query support meant combining 5 filter criteria required creative architecture.

Solution: Hybrid approach — primary filter via Firestore query, secondary filters applied client-side with Kotlin Flow operators for reactive chain processing.

Real-time Availability

Showing accurate vehicle availability while multiple users browse and book simultaneously.

Solution: Firestore snapshot listeners for real-time inventory updates, with optimistic UI updates and conflict resolution on booking confirmation.

Key Learnings

  • Compose + Firebase — building reactive UIs that respond to real-time Firestore updates through Flow-based data pipelines.
  • Dynamic Theming — implementing Material 3's dynamic color system with theme persistence and smooth transitions across the entire app.
  • Complex Filtering UX — designing a filter system that feels instant and intuitive while handling multiple asynchronous data sources.
  • Analytics Architecture — structuring ViewModel and repository layers to efficiently aggregate and present booking trend data.

Interested in the code?

RentalWheels is open source. Explore the architecture, patterns, and implementation details.