Case study · Mobility · Car rental & ride sharing
Rentalsols: Car Rental and Location-Based Car Pooling Web App
Car rental marketplace plus location-based car pooling, built as our own product by a team of three with React, Firebase and Google Maps.
- Client
- Rentalsols (own product)
- My role
- Full-Stack Developer (team of 3)
- Year
- 2023
- React
- Redux Toolkit
- Ant Design
- SQL database
- Firebase Auth
- Firebase Storage
- Firebase Hosting
- Google Maps API

Overview
Rentalsols is a web app with two sides:
- Car rental: car owners and rental shops list their cars, and renters check available dates and rates, then send a booking request.
- Car pooling: a driver going, for example, from Gulshan to DHA posts the trip with pickup and drop-off points on a map. Anyone within about 1 km of that route sees the trip in their feed and can ask to join.
Rentalsols is our own product, built by a team of three. I worked as a full-stack developer on it, using React on the frontend, a SQL database for listings, bookings and trips, Firebase for sign-in, photo storage and hosting, and the Google Maps API for picking locations and calculating which riders are within range.
The challenge
Getting around a big city like Karachi is expensive and slow, and many cars travel the same routes with empty seats. At the same time, people who need a car for a few days have no simple way to find one from local owners. The app had to:
- Let owners and shops list cars with details, photos and daily rates
- Let renters see availability and request a booking without phone calls back and forth
- Let drivers publish a trip with exact pickup and drop-off points
- Show each trip only to people nearby, so the feed is relevant and not a city-wide list
- Make locations accurate without users typing full addresses
My role
- Frontend (React): all screens, from listings and booking forms to pooling and account settings
- State management: Redux Toolkit slices for listings, categories, bookings, map state and pooling
- Maps and location: Google Maps integration for pinning addresses, choosing pickup and drop-off points, and radius-based matching
- Data: SQL database design for cars, shops, bookings and pooling trips
- Firebase: authentication, file storage for car photos, and hosting
- Forms and validation: listing, shop, booking and pooling forms with clear validation
The approach
Listing cars for rent
Owners and shops add a car with its name, brand, vehicle number, mode and daily rate, plus photos uploaded to Firebase Storage. Shops register through a short three-step sign-up (shopkeeper info, shop basics, shop social), and pin their location on the map instead of typing an address.

Booking requests
A renter picks a car, checks the available dates and rate, fills in a short form and sends a request. The owner sees the request in the web app and accepts or declines it there. This keeps the process simple for both sides and avoids double bookings.
Car pooling with Google Maps
A driver creates a pool by choosing a pickup point and a drop-off point on the map, a departure time and the number of seats. The app stores the trip with its coordinates.

Showing trips only to nearby riders
When someone opens the pooling feed, the app compares their location with each trip's points and shows the trips within roughly a 1 km radius. A rider near Gulshan sees the Gulshan-to-DHA trip; someone across the city doesn't. From the feed, the rider sends a request to join, and the driver accepts it in the app.
The distance check uses the Google Maps API, so matching is based on real map coordinates rather than typed addresses.
Accounts and security
Users sign in with Firebase Authentication, can change their password (with re-authentication for safety), and see their own listings and pools in one place.
Architecture
- React web app → Firebase Auth: Sign in
- Firebase Hosting → React web app: Serves
- React web app → Firebase Storage: Upload photos
- React web app ↔ Google Maps API: Locations · 1 km match
- React web app → SQL database: Read / write
Technical highlights
- Location-based matching: trips filtered by distance so each rider only sees pooling options within about 1 km
- Map-first input: pickup, drop-off and shop addresses chosen by pinning on Google Maps, which is faster and more accurate than typing
- Two-sided marketplace: owners, shops, renters, drivers and riders all served by one app, with requests accepted in-app
- Built as a product team: designed, built and launched by a team of three as our own product
- Organised state: separate Redux slices for listings, bookings, map and pooling keep a complex app manageable
- Code splitting: the app is split into many lazy-loaded chunks so first load stays light
Results
- Car rental marketplace and location-based car pooling in one app
- 2 products
- Pooling trips shown only to riders within range of the route
- 1 km
- Designed, built and launched as our own product
- Team of 3
