Skip to main content
TemplateOpen sourceFix

NOIR Drive — open-source luxury car rental template

The fifth open-source Opencals template is live, and the first one built around multi-day bookings. NOIR Drive is a luxury car-rental website set in Dubai: the same Storefront API and typed TypeScript SDK as Haar, Frisor, Clear Care and VOLT, with a black cinematic design and cars booked by the day.Two booking surfaces over one store: a multi-day rental flow for the fleet, and a classic staff flow for chauffeur packages. Every screen is built with the public API.
  • Booked by the day — each car is one staffless product with a 1-day base duration and allowCustomDuration, on a continuous 24/7 schedule
  • Range calendar on live availability — reads getCurrentAvailabilitiesMerged and checks on the client that pick-up → return fits inside one range
  • Delivery or garage — a DELIVERY location with the address captured at checkout, or a PHYSICAL garage
  • Handover details as custom attributes — handover and return windows, flight number, collection address
  • Per-day extras with durationMultiplied, plus one-off extras
  • Licence and ID uploads and a deposit-and-terms checkbox as checkout questions
  • Chauffeur packages with real drivers and a preferred-car request
  • Rental-aware customer accounts: dates in the store timezone, day count, change dates (same length) or cancel within policy
  • AutoRental and Product structured data, Open Graph, robots.txt and sitemap.xml configured
  • Stack: Next.js 15, TypeScript, Tailwind v4, Framer Motion, @opencals/storefront-sdk v0.3.14
  • MIT licensed — clone, rebrand, deploy. One-click Vercel deploy.

Car-rental seed dataset

New Dev Stores can choose the NOIR Drive dataset (category Car rental, car_rental). It seeds twelve cars on a 24/7 schedule, a garage and a delivery location, per-day and fixed extras, the rental checkout questions, and four chauffeurs with their packages, so the template matches the demo out of the box.

Fix: bookings longer than 24 hours

Bookings with a custom duration longer than a day are now validated against continuous availability: the server checks that the whole span sits inside one free window. Before, validation used per-day slot generation and could reject a valid multi-day booking on a 24/7 schedule. No API or SDK changes.Live demo ↗ · GitHub ↗ · Template docs
Last modified on October 10, 2026