Asia/Dubai) with an all-black fleet of twelve cars.
Two booking surfaces sit over one store: a multi-day rental flow for the
fleet, and a classic chauffeur flow with real drivers.
Live demo
Source code
Deploy to Vercel

NOIR Drive — the storefront on desktop, set in Dubai

Homepage hero — cinematic, all-black, with Book a car up front
Multi-day booking
Customers pick a car, choose pick-up and return dates on a range calendar that reads the car’s live availability, then choose Deliver to my address or Collect at the garage and a handover window. Per-day extras (excess waiver, additional driver) are priced × days, and fixed extras (child seat, prepaid fuel) once. Driving licence and ID uploads and a deposit-and-terms checkbox are regular checkout questions. The total is always days × daily rate + extras, the same maths the engine charges.
Book a car — range calendar on live availability, handover windows and a running total
The rental model
This is the part worth copying even if you never ship NOIR Drive itself. It uses existing Opencals features only.{ fromDate: '2026-11-09', fromTime: '20:00:00', toDate: '2026-11-12', toTime: '20:00:00' }:
three days, three units, three × the daily rate.
Give each car its own product rather than a variant: variants don’t block each
other, so the same car could be booked twice.
What’s inside

Car page — specs and the daily rate, with a jump to the availability calendar

Rates — one price per day, with deposit and km allowance for every car

Chauffeur — packages booked through the classic staff flow
Get started
Clone and install
Add your API key
OPENCALS_API_KEY and
AUTH_SECRET in .env.Run it
Deploy
{storefrontBaseUrl}/link/{token}, so if it still
points at localhost those emailed links go nowhere.Make it yours
MIT-licensed: rebrand it, restructure it, or use it for client work. All business copy lives inlib/site-config.ts: name, currency and timezone,
per-car specs and deposits, handover windows, delivery zones, FAQs and contact
details. Every colour and font is a Tailwind v4 @theme token in
app/globals.css:
rentals-multi-day reference with the full pattern.