A booking and operations platform for a Jeep and UTV rental company in Aruba. Public reservations, seasonal pricing, online and counter payments, signed rental agreements, and the back office the staff run the day from.
7Jeep and UTV models bookable online, 23 units, with per-vehicle availability
7Seasons in the rate card, recurring every year by month and day
12Optional add-ons and protections
6Steps from picking dates to a paid, confirmed rental
5Pickup and return points across the island
2,364Automated tests passing on the live release, 2026-10-07
01
What this is.
Aventurova rents Jeeps, UTVs and cars to visitors arriving by plane and cruise ship. The public side had to quote a real price for real dates on vehicles that were genuinely free, and the counter side had to survive a busy morning: hand a vehicle over, take payment however the guest wants to pay, print an agreement, and know at a glance what is going out and coming back today.
01Dates and availability come first, so a guest never picks a vehicle that is not free.02
The problem underneath it.
Rental pricing is not a price list. The rate depends on the season, on how long the guest stays, and on the vehicle — and the same booking can be paid online, on a card at the desk, or in cash, each of which moves the balance differently. Getting any of that wrong is not a cosmetic bug; it is money. The system also had to be usable by staff who were not hired to operate software.
02UTVs are quoted as four- and eight-hour packages. A machine that is out says when it returns rather than showing an empty card.03
How we approached it.
We built one pricing engine and made every surface ask it — the public booking flow, the staff booking form, the quote a guest is emailed. Prices are never duplicated in code or copy, so a rate change lands everywhere at once. Around it we built the parts a rental counter actually needs: a six-step booking flow, payment handling for online and desk transactions, generated rental agreements the guest signs, a day board for pickups and returns, and reporting the owner reads to see where the money came from.
03The public site the booking flow sits behind — the same brand, carried through to the checkout.04
What shipped.
Seasonal pricing engine with duration ladders — the per-day rate falls as the trip lengthens, priced per day against that day's own season.
Six-step booking flow that quotes live availability and a real total before the guest commits.
Online payments through Stripe, live on real money since September 2026, alongside cash and card at the desk, with refunds back to the card and secure payment links staff can send.
A public price feed that partner websites read, so a partner's page can never show a price the booking page would not honor.
Rental agreements generated as signed PDFs, itemizing every add-on and protection so nothing is charged without being named.
Referral links for hotels and tour desks that attribute a booking automatically and pay commission on the rental, never on tax.
Operations back office: day board, fleet and maintenance, staff scheduling, and financial reporting.
05
6 phases, in the order they happened.
1
March 2026 · Adventure rules first
UTVs rent by the hour, only in daylight, and return to one office. Those rules had to be modeled before the booking flow could be honest about them.
2
The public flow
Six steps from dates to payment, showing which machines are free and when the busy ones come back.
3
June 2026 · The main build
The counter and the back office: fleet, contracts, scheduling and financial reporting, kept in step with the sister platform.
4
September 2026 · Money
Stripe live on real money on 10 September under a US LLC; payment links staff can send.
5
October 2026 · Trust
Refunds to card, the AI assistant quoting exact totals, the WhatsApp icon, cancellation and payment-link hardening.
6
Still running
Ongoing work against the live business: card refunds switching on after a Stripe test.
Application
Next.js 14 App Router, TypeScript, React Server Components
Data
PostgreSQL on Neon with Prisma 5, serializable transactions on anything that moves money
Payments
Stripe Checkout, refunds and webhooks under a US LLC, USD in and out; cash and terminal card at the desk
AI
Google Gemini with function calling, totals only from the pricing engine
Documents
Server-generated rental agreement PDFs, signed and stored per booking
Delivery
Vercel, Cloudflare R2 for uploads, a public price feed for partner sites
Tests
Vitest, 2,364 tests including a real-Postgres integration suite; 1,000+ commits on the live branch
06
The decisions that took longest to get right.
01
A UTV is not a car with fewer doors
UTVs rent in four- and eight-hour packages, only between 8:00am and 5:00pm, and only return to one office. Those are not display copy — the availability calculation, the booking-rules panel and the vehicle card all read the same constraints, so the flow never offers a slot the business cannot honor.
02
Telling a guest when the machine is free again
When a vehicle is out, an empty card teaches the guest nothing and loses the booking. Each unavailable machine shows the moment it comes back, computed from the reservation it is actually sitting inside, so a visitor can move to the afternoon instead of leaving.
03
Two platforms, one set of habits
This runs alongside a sister platform for a car-rental business. They are separate products with genuinely different rules — protections are taxed here and exempt there — but the money invariants, date handling and reporting buckets are kept deliberately identical, so a fix found in one is applied to both rather than the two drifting apart.
04
A price feed partners cannot get wrong
Hotels and tour desks list Aventurova on their own sites and used to copy prices by hand, which drifted. A public price feed now serves the same numbers the booking page computes, so a partner page reads live prices and never shows one the booking would not honor.
05
An AI that cannot invent a price
The guest assistant gets totals only from a tool that calls the same pricing engine as checkout, and a guard rejects any money figure that did not come from that tool. Quoted totals match checkout to the cent, in English and Spanish.
06
Extensions that stay legible in the accounts
Guests extend on the day, at the counter. An extension re-prices the new window through the same engine and records what was added, so it appears in financial reporting as extension revenue rather than as an unexplained change to the original total.
07
Where it ended up.
Aventurova takes reservations online and runs the counter from the same system, with one source of truth for what a vehicle costs. The platform is live and in daily use.
08
In the client's words.
“The team was always available, no matter the time. Guljar and his talented team developed three professional booking software systems and designed and developed more than four outstanding websites.”