Building the operating system behind a vehicle rental marketplace.
Hobblix is a vehicle rental marketplace built end to end by one developer. Listings and bookings are the visible product; the real system underneath handles multi-context identity, booking lifecycle, payment settlement, handoff evidence, and the tooling to operate all of it.

- Role
- Sole full-stack developer
- Timeframe
- 2024 - 2026
- Product
- Vehicle rental marketplace and operations platform
- Core stack
- Nuxt, Vue, Prisma, Supabase, Stripe Connect
Overview
Hobblix serves renters, personal hosts, company hosts, company teammates, and platform operators. The product includes discovery and listings, but the deeper challenge is the system behind the marketplace: who owns what, who can act, when bookings move, how money settles, and what happens when pickup or return does not go smoothly.
I built the product as a full-stack system rather than a set of isolated pages. That meant shaping the data model, Nuxt frontend, Supabase authentication, Prisma-backed application data, Stripe Connect payments, booking lifecycle, incident handling, notifications, chat, admin tooling, and production-readiness documentation.
A marketplace with operational depth
Vehicle rentals create more state than a typical marketplace listing flow. A booking is not finished when checkout succeeds. It has to move through owner acceptance, payment authorization or future payment setup, pickup, active rental period, return, review, payout, and possible support cases.
That complexity made the product a domain-modeling challenge. The goal was to make renter and host experiences feel understandable while keeping the underlying booking, money, handoff, and support states explicit enough for operators to reason about.
One login, multiple operating contexts
The app separates authentication from operating context. A person can rent personally, host personally, act inside a company, invite teammates, or use admin surfaces depending on memberships and roles.
This model affects nearly every feature. Listings, bookings, chat, notifications, dashboards, Stripe readiness, and admin actions all depend on whether the user is acting personally, through a company, or as a platform operator.
- Supabase authentication mapped into Prisma application users.
- Personal and company contexts with server-verified company membership.
- Company roles and invitation flows, including claim verification for invited teammates.
- Separate app admin authority from company-level authority.
Host onboarding, listings, and availability
Hosts need to satisfy readiness checks before their vehicles become useful supply. Listings can belong to individuals or companies, move through draft and published states, include media and structured vehicle data, and expose public search information without leaking operational details too early.
Availability is also not a static calendar. Listing rules, price rules, time slots, occupancy, booking holds, and listing-local timezone behavior all shape whether a renter can reserve a vehicle.
- Personal and company host onboarding with Stripe readiness gating.
- Draft, published, active, deleted, and payment-capable visibility conditions.
- Availability rules, price rules, time slots, occupancy checks, and calendar feeds.
- Public location boundaries separated from exact handoff details.
Lifecycle state beyond checkout
The booking system distinguishes customer-visible status from operational overlays. A booking can be pending, confirmed, active, completed, cancelled, or declined, while also carrying payment state, handoff proof, no-show claims, support cases, and audit logs.
I centralized human-triggered status transitions so booking changes, notifications, chat lifecycle messages, optimistic concurrency, and booking references could stay aligned. Scheduled jobs handle expiry, auto-confirm/decline, active/completed transitions, future payment work, and reminders.
- Booking-side snapshots for schedule, location, and extras so history does not change when listings are edited.
- Server-owned date intent and listing-local timezone resolution for reservations.
- Shared status transition command with optimistic concurrency and lifecycle side effects.
- Cron-driven movement for payment holds, pending deadlines, active/completed status, and review requests.
Smart Handoff, no-shows, and support cases
The product treats pickup and return as operational phases, not as passive booking timestamps. Smart Handoff flows capture confirmations, photos, proof items, evidence grades, and magic-link access for participants.
No-show handling is where the marketplace becomes an operations product. Claims can freeze bookings, create support cases, allow thaw or resume flows, and escalate after grace periods. End-phase scenarios are more severe because the vehicle may not have been returned.
- Pickup and return confirmation with proof capture and evidence grading.
- No-show claims for renter or owner, at start or end phases.
- Freeze, thaw, resume request, post-grace escalation, and critical vehicle-not-returned paths.
- Support cases for manual reports, no-show escalation, and damage-related evidence.
Marketplace payments, refunds, and payouts
The money layer is designed around the fact that marketplace bookings settle over time. Near-term bookings authorize the card first and capture later. Far-future bookings save a payment method and charge closer to the trip.
The system tracks payment state, future-payment processing, refund decisions, receipts, Stripe webhook events, payout eligibility, payout records, and reconciliation. Admin and staff surfaces expose finance diagnostics so operational state is visible instead of hidden inside Stripe.
- Manual capture for immediate bookings and SetupIntent flow for future bookings.
- Refund service for cancellation-driven authorization cancel or captured-payment refund behavior.
- Receipt generation, webhook storage/retry, payout eligibility, payout integrity, and reconciliation.
- Stripe Connect host payouts with settlement checks and finance-review paths.
Admin tooling and production posture
A marketplace needs tools for the people operating it after launch. Hobblix includes admin surfaces for bookings, users, companies, support cases, complaints, cron controls, emails, payments, payouts, reports, diagnostics, and documentation.
The documentation is part of the engineering work. The repo contains system maps, flow maps, domain docs, production-readiness notes, and operations references so the system can be understood beyond the code itself.
- Admin booking and log views, user/company management, support and complaint handling.
- Staff Inbox, cron controls, email testing, finance diagnostics, payout integrity, and reconciliation tooling.
- System documentation for identity, listings, bookings, incidents, payments, communications, admin, and launch readiness.
Outcome
The hardest problems in Hobblix were never individual pages; they were keeping identity, booking state, money movement, and incident handling consistent with each other as the system grew. Most of the engineering effort lives in those seams: status transitions that keep notifications, chat, and logs aligned, payment states operators can actually read, and incidents that escalate without corrupting bookings.
The repo documents itself the way I would want to inherit it: system maps, flow maps, domain docs, and production-readiness notes that track what is implemented, proven, or still open.