Superior Car Rental
Premium & Exotic Vehicle Rental Platform — Web + Mobile.

Context
A two-client product (Next.js web + React Native mobile) sharing a single Supabase backend, Stripe payment pipeline, and auth model. Customers browse the fleet, book a daily or hourly rental, stack loyalty points / wallet credits / promo codes at checkout, and pay via Stripe Payment Intents with webhook-reconciled confirmation. Ops receives every booking instantly through a Telegram bot.
The Challenge
Superior operates a premium and exotic fleet in Dubai. Reservations ran on phone calls and walk-ins, with manual coordination between dispatch, accounting, and the customer. No online channel, no payment automation, no retention mechanic for repeat customers.
Approach
Two clients on a single backend: Next.js web for SEO and desktop conversion, React Native (Expo) mobile for the recurring user. One Supabase database, one auth layer, one Stripe integration. Every feature ships once and runs on both surfaces.
Key Decisions
Supabase as the single backend
One Postgres database, one auth provider, one storage bucket for car media and customer documents. Both clients run against the same row-level-security policies.
Stripe Payment Intents with webhook reconciliation
Bookings are created in a pending state and confirm only when the `payment_intent.succeeded` webhook fires. The `payment_intent.payment_failed` path releases inventory. Source of truth is Stripe's event, not the client.
Stackable incentives at checkout
Loyalty points, wallet credits, and promo codes apply to the same booking. The pricing engine validates each layer, computes the max usable wallet balance against the post-discount total, and returns one auditable breakdown.
Daily and hourly rental in one pricing engine
Both modes handled by the same engine, plus insurance tiers, delivery fees, extra-kilometre charges, and after-hours surcharges — all configurable per vehicle.
Push notifications with deep linking
Six notification types route to specific screens in the mobile app. Ops receives every new booking on a Telegram channel.
SEO-led acquisition surface
Per-brand listing pages, per-vehicle detail pages, a markdown blog, and a dynamic sitemap. Each route ships its own metadata and Open Graph image.
What Shipped
- 01Four-step booking wizard: dates → extras → pricing breakdown → Stripe payment
- 02Daily and hourly rental modes in one pricing engine (insurance, delivery, extra-km, after-hours surcharges)
- 03Stripe Payment Intents with webhook reconciliation — booking only confirms on `payment_intent.succeeded`
- 04Stackable checkout incentives: loyalty points + wallet credits + promo codes, applied in one breakdown
- 05Six push-notification types with deep linking; ops alerts via Telegram bot
- 06Admin: car inventory, bookings, offers, push campaigns, markdown blog
- 07SEO surface: per-brand pages, per-car detail pages, blog, dynamic sitemap
Outcomes
- →01One product ships across web and mobile from a single backend and auth model.
- →02Booking confirmations reconciled against Stripe webhooks.
- →03Loyalty, wallet, referrals, and promos wired into the same checkout.
- →04Ops receives every new booking on Telegram instantly.
- →05Per-brand SEO pages drive organic traffic for specific vehicle queries.