Cardeed – Car Rental & Fleet Management Platform
Peer-to-peer car rental marketplace with real-time booking, document verification, Stripe payments, and fleet management tools.

Technology Stack
Overview
Car rental marketplaces in India face a trust problem — renters don't trust that vehicles will be as listed, and owners don't trust that renters will return vehicles undamaged. Traditional rental companies address this with physical offices, paper contracts, and cash deposits. A peer-to-peer platform needs to solve these problems digitally.
Cardeed is a platform where car owners list their vehicles and renters book them — similar to Airbnb for vehicles. The system handles the entire lifecycle: discovery via map-based search, booking with time-slot conflict detection, document upload and verification, Stripe payment processing, and post-rental damage assessment.
The platform includes both a React web application (for hosts managing their fleet) and a React Native mobile app (for renters on the go).
The Problem
Trust and verification: How do you ensure a renter is who they claim to be, has a valid driving licence, and won't damage the vehicle? How does an owner prove their vehicle is as listed?
Booking conflict management: A vehicle can only be booked by one renter at a time. Overlapping bookings, cancellations that affect connected bookings, and real-time availability updates required careful system design.
Payment and security deposit handling: Collecting payment upfront while holding a security deposit, releasing the deposit post-rental, handling partial refunds for cancellations, and managing disputes all required Stripe integration beyond basic charge creation.
Fleet management for hosts: Vehicle owners with multiple cars needed tools to manage availability calendars, pricing by season or day, and maintenance windows across their entire fleet.
The Solution
Document Verification Workflow:
Renters upload driving licence, Aadhar/PAN card, and a selfie. An admin verification team reviews documents within 4 hours. Owners upload vehicle registration and insurance. Verified users are marked with a trust badge visible to all parties.
Conflict-safe Booking Engine:
Bookings lock the vehicle for the selected time slot atomically using database-level locking. A background job releases locks if payment is not completed within 15 minutes. Cancellation rules are configurable per owner.
Stripe Integration:
Payment intents with automatic confirmation. Security deposits held as uncaptured payment intents, captured only if the owner files a damage claim within 48 hours of rental completion. Partial refunds calculated based on cancellation timing.
Google Maps Integration:
Vehicle location displayed on map with distance from renter's location. Search by area (drawn on map) or city. Routing directions to pickup location.
React Native Mobile App:
Full booking flow available on mobile. Push notifications for booking confirmations, pickup reminders, and status updates. In-app messaging between renter and owner.
Architecture
Frontend (Web):
React with Inertia.js — server-rendered pages with React components. No separate API needed; Inertia handles the data layer through Laravel controllers. Significantly reduces development overhead compared to a decoupled SPA + REST API approach.
Frontend (Mobile):
React Native with Expo. Shares business logic and some UI patterns with the web app but is a separate codebase optimised for mobile UX. Uses Expo's notification system for push notifications.
Backend:
Laravel 11. Controllers stay thin — business logic in dedicated services: BookingService, PaymentService, DocumentVerificationService, FleetService. Queue workers handle email notifications, document processing, and post-rental cleanup.
Payments:
Stripe with Payment Intents API. Webhooks for asynchronous payment event handling (capture, refund, dispute). All webhook events are idempotently processed.
Key Implementation Details
- Built conflict-safe booking engine with atomic database locking and 15-minute payment window
- Implemented document verification workflow for renters (licence, ID) and owners (registration, insurance)
- Integrated Stripe Payment Intents with security deposit hold-and-capture pattern
- Built Google Maps vehicle discovery with area-based search and routing
- Created fleet management dashboard for multi-vehicle hosts (calendar, pricing, maintenance blocks)
- Built React Native mobile app with full booking flow and push notification integration
- Implemented real-time availability updates using database-level conflict detection
- Created post-rental inspection workflow with damage claim and deposit release management
- Built in-app messaging system between renters and vehicle owners
Screenshots




Business Impact
- Platform launched with 50 vehicles listed in first month from beta host network
- Document verification completion rate: 87% of registered renters complete verification within 24 hours
- Zero disputed bookings attributable to system-level conflicts — all disputes were user-initiated cancellations
- Security deposit automation eliminated manual refund processing entirely
Key Engineering Challenge
The most complex part was the booking conflict prevention at scale. A naive implementation would check for conflicts and then create a booking in two separate operations — allowing a race condition where two users book the same vehicle simultaneously. The solution was a database transaction with a SELECT FOR UPDATE lock on the vehicle availability record, ensuring only one booking could be committed per vehicle per time slot, regardless of concurrent requests. Stripe's payment hold pattern (create uncaptured Payment Intent for security deposit, capture only if needed) is not well-documented for this use case. I went through several iterations of the webhook handling to correctly handle payment Intent expiry (after 7 days, uncaptured intents expire automatically — we had to build a job to either capture or cancel before expiry).