Back to home

Full-Stack AI Product

AI-Powered Car Rental Platform

A full-stack car rental platform pairing a customer storefront with a staff dashboard, where AI interprets free-text trip requests and qualifies inbound leads while Postgres remains the source of truth.

Context

Rental operations fail in two places: customers cannot describe what they actually need, and staff drown in unqualified inquiries. The goal was to use AI for interpretation and prioritization while keeping every car, price, and availability answer grounded in the database.

37

Postgres migrations

0

double bookings possible by design

2

surfaces in one codebase

Stack

Next.js 16React 19TypeScriptSupabasePostgreSQLGoogle GeminiTailwind v4

Case Study Overview

Built storefront and staff dashboard in a single Next.js 16 App Router codebase using server components and server actions.

Kept the AI layer bounded so it ranks and interprets, while Postgres supplies every candidate and deterministic scoring computes results.

Enforced booking correctness at the database layer rather than in application code.

What I Built

Single-Codebase Full-Stack Architecture

Built a customer storefront and staff dashboard in one Next.js 16 App Router codebase, using server components and server actions for all data access with no client-side fetching library.

Grounded AI Recommendation Pipeline

Designed a recommendation pipeline where Gemini interprets free-text trip requests and ranks results, while Postgres supplies every candidate and a deterministic scorer computes match percentages — making hallucinated cars or prices structurally impossible.

Automatic Lead Qualification

Implemented lead qualification that scores and prioritizes inbound inquiries, with model output grounded against database records so priority and missing-information fields are recomputed rather than trusted.

Database-Enforced Domain Model

Modeled the domain in Postgres with 37 migrations, row-level security, SQL views and RPCs, preventing double bookings via a date-overlap exclusion constraint enforced at the database layer.

End-to-End Notification Workflow

Built an inquiry → background qualification → Zapier → authenticated webhook → Resend email flow with bearer-token constant-time verification, rate limiting, and typed error classification with retry on transient upstream failures.

Analytics Dashboard

Developed a responsive dashboard with Recharts analytics, a d3-geo sales map, and URL-driven filtering, sorting and pagination shared across list pages; tables switch to card layouts on smaller viewports.

Outcomes

AI features that cannot invent inventory or pricing, because the database owns every candidate and price.

Booking integrity guaranteed by a database constraint instead of application-level checks.

Inbound inquiries triaged and routed automatically through a verified, rate-limited webhook pipeline.

Why This Matters

This project shows how to ship AI features under production constraints: the model handles interpretation and ranking, while correctness, availability, and pricing stay owned by the database.

Next case study