Context
Used-vehicle dealership operations are a coordination problem dressed up as a paperwork problem. A car arrives. It needs a service. It needs a detail. It needs a motor-vehicle inspection. It moves between lots. It eventually sells, then needs to be delivered. Each step involves a different vendor, a different person, and a different way of finding out whether the previous step is actually done.
Carevo runs that operation across multiple lots in Eastern Canada. The brief was to put the whole flow — vehicles, services, vendors, lots, deliveries, and the audit trail behind all of it — behind a single mobile-first web app, with a QR scan on the key fob as the way in.
The brief
- One system, every lot. Carevo runs vehicles across multiple lots; the app needs to be the single ledger for all of them.
- Vendors are first-class users, not bolt-ons. Service shops, detailers, MVI vendors — they update their own work in the system rather than emailing status to a logistics coordinator.
- The phone is the primary device. Lot staff and vendors are walking around vehicles, not sitting at a desk. The interface has to work with one thumb on a hot afternoon.
- The key is the entry point. A QR tag on the key fob lets anyone with permission scan, see the vehicle’s current state, and update it. No “what’s the stock number?” hunt.
- Build a real audit trail. Who did what to which vehicle, when. Vehicles have value; ops decisions need to be reviewable.
How it works
The app is a focused operations console — not a CRM, not a sales tool, not an inventory portal — and it stays focused on purpose.
The dashboard is built around two questions: what needs my attention? and what’s already in flight, and with whom? Service requests are grouped by vendor, so the next phone call (or the next non-call) is obvious from one screen.
The vehicle ledger
Every vehicle across every lot lives in a single searchable list — colour, year/make/model, lot, status. Status surfaces (Sold, Available, Delivered) read at a glance because the goal isn’t to admire data, it’s to find a specific car fast.
The vehicle detail view
Scanning a key tag — or tapping into a vehicle from the list — lands here. This is the screen that does the work.
A few things earn their keep on this screen:
- Status and condition are separate. Sold is a status; Dirty or Low fuel is a condition. Treating them as one field would conflate “what’s happening to the car” with “what’s wrong with it right now.”
- Cleanliness as a numeric rating. Detail vendors care about the gap between current state and target state, not a yes/no flag.
- Quick actions are verbs, not menus. Request Move, Request Service, Add Task, Add Note — the actions someone standing next to the vehicle would actually take, surfaced one tap from the scan.
- Tabs (Details / Services / Tasks / Logs / Tag). The Logs tab is the per-vehicle audit trail; the Tag tab regenerates the QR if a key fob’s tag is lost or replaced.
Services and vendor coordination
A service request is a small workflow — created with instructions, assigned to a vendor, tracked through stages, and closed out when the vendor marks it complete.
The vendor portal is the same application, scoped down. A vendor signs in and sees only the requests assigned to them, can update progress, and can close the request when the work is done. Logistics doesn’t have to chase a status update; the vendor is the one with the wrench.
Deliveries
When a vehicle sells, it gets delivered — and Carevo wanted both the operational view (which cars are queued for delivery) and the management view (how the lot’s actually performing month over month).
The auto-cleanup line at the top is doing real work: ops data ages out automatically so the view stays focused on the current quarter rather than slowly turning into a graveyard.
How it’s built
- Front end — Nuxt 4 on Vue 3.5, TypeScript, Tailwind. shadcn-vue / radix / reka primitives for the component layer; Lucide and Iconify for the icon set.
- State — Pinia for client-side state, scoped narrowly because the source of truth lives server-side.
- Backend — Supabase for auth, real-time, and Postgres hosting. Prisma sits on top of the same Postgres for schema-first model definitions and typed queries from server routes.
- QR layer —
vue-qrcode-readerfor in-browser camera scanning (no native app install for vendors),qrcodefor tag generation, and the per-vehicle Tag tab to regenerate or reissue if a key fob’s tag is lost. - Multi-vendor access — vendors are first-class users with a permission model that scopes them to their own assigned work. The same application code serves Carevo staff and vendors; access is what differs.
- Observability — Sentry for errors and performance; an Audit surface in-app for the operational version of the same question (“what changed, by whom, when”).
- Quality gates — Vitest with happy-dom for unit and component, ESLint and Prettier on every commit, a
pnpm readyscript that runs lint, format, schema validate, typecheck, tests with coverage, and a build before anything ships. - Hosting — small footprint; cheap to run at the per-lot scale Carevo needed.
Outcome
The app has been the daily operations system for Carevo’s lots since 2023. What it changes:
- Vendors update their own work. Logistics doesn’t field “what’s the status?” calls because the status is in the system, updated by the person doing the work.
- The QR-on-the-key flow eliminates the lookup tax. Scan the key, see the vehicle, take the action. No stock-number hunt, no spreadsheet open in another tab.
- Multi-lot operations on one ledger. Vehicles, vendors, services, lots, deliveries — one system, queryable across the whole operation.
- A real audit trail. Per-vehicle logs and an organization-wide audit surface, because vehicles have value and ops decisions need to be reviewable.
The screenshots in this case study are pulled from the live application — the May 2026 delivery numbers (137) are real production data, not a demo.
A note on the build
Carevo is the longest-running project in the studio’s portfolio, and the one with the most context worth knowing.
It went from blank repo to MVP in four months, with a couple more months of focused tweaking after that, and has been continuously maintained since. The first release was in 2023 — before the AI-coding revolution. There was no Claude Code, no Cursor, no agentic dev loop. It was built one line at a time, by hand, the way real-product software was always built.
That’s worth knowing for two reasons. First, because the surface area you’ve just read about — multi-lot vehicle ledger, vendor portal, QR flow, services, deliveries, audit — is what a single developer can ship in four months when the brief is clean and the stack choices earn their keep. Second, because the parts that have aged well have aged well because they were thought about up-front. There was no AI to hand-wave a pattern into existence; every choice was made on purpose.
The same product today would be faster to build. It would not, on its own, be better.
What’s next
Active maintenance and incremental capability work, driven by what Carevo’s lot operations actually need next. For specifics on the QR flow, the vendor permission model, the multi-lot schema, or how a stack like this scales without ballooning costs — book a call.