000%
COMMISSION Nº 08 · 2026 — MOBILITY · QUOTE FUNNEL
LOTTE RENT-A-CAR · WEB

Car Quote — a real-time rental-quote funnel, built for a single salesman.

A commissioned web service for a long-term-rental sales manager at Lotte Rent-a-Car: a public funnel that turns a spreadsheet of confirmed prices into instant, binding monthly quotes, and an admin back office that owns every car, price cell, and lead. Roughly three weeks, solo, from first commit to a live custom domain — delivered and closed out.

FIG. 01CAR QUOTE — WEB — LOTTE RENT-A-CAR · WEB
COMMISSIONWEB · ADMIN · SEO/GEO/AEONEXT 16 · NEON · DRIZZLE · VERCEL2026.07

The client is the salesman, not the company: a long-term-rental manager who needed a lead channel of his own. The domain rule that shapes the whole product is that prices are never computed — they are looked up. Each car carries a twelve-cell matrix — three contract terms, two mileage plans, two deposit levels — holding confirmed monthly rates, so the quote a visitor sees is not an estimate but the number the contract will actually carry. Visitors select their conditions and see the corresponding confirmed price, instead of browsing a static price table.

The application is written in Next.js 16 App Router with React 19 and TypeScript, styled with Tailwind, on Neon Postgres through Drizzle ORM, deployed on Vercel with car imagery in private Blob storage. There is no separate backend — the app's API routes are the backend, eight of them, behind a JWT-authenticated admin gate.

The back office provides car CRUD with image upload and the twelve-cell price grid, consult-lead management, and telemetry the client can actually read — a conversion funnel from quote explored to consult opened, per-model conversion rates, anomaly detection on quote events, and a health check that flags any car missing one of its twelve price cells. Deploys run through a single script with seven gates, from unit tests to a post-deploy smoke pass.

For search visibility, I added structured data, sitemap, llms.txt, share cards, a favicon rebuilt byte-compatible with the ICO encoding Safari actually reads, and same-night registration across three search consoles with indexing requested. When the brand's head office raised concerns about the site being mistaken for an official one, I introduced person-first naming, disambiguation notices, and a structural anchor separating it from the official domain. Three days later, after sitting down with the client again, we tore that down and went brand-forward. The competing site used the brand prominently, and we decided to do the same.

The serverless functions and the database initially ran far from the users; relocating both closer to the users cut cold starts by 81 percent, measured. The database move surfaced a connection-pool failure — a pg_dump artifact pinned an empty search_path onto the connection pooler's recycled sessions, making tables that plainly existed unfindable until the poisoned backends were force-terminated.

The project took three weeks, with ninety-four source files and a hundred-odd commits. I delivered it on its own domain with search indexing, monitoring, and an operations manual the client uses himself.

— FIN —