Used car marketplace app development, with inspection reports inside the listing

Written by the DevoraX engineering teamReviewed by Sameem Amjad, FounderLast updated Based on our own delivery record (service page)

DevoraX builds used-car marketplaces where the inspection report is part of the listing rather than a PDF sent on request. We shipped Dooz Inspected Cars: an Angular web marketplace, React Native iOS and Android apps, and a NestJS backend on PostgreSQL, with financing and insurance in one flow. The client reports 150+ inspection points per vehicle. It is live on the web and both app stores.

Builds that prove it

Dooz Inspected Cars

An all-in-one platform for buying, financing and insuring verified used vehicles, built as an Angular web marketplace and React Native iOS and Android apps over a NestJS backend on PostgreSQL.

What it proves: A used-car marketplace where the inspection is published as part of the listing and buyers filter on inspection outcomes alongside make, model, year, mileage, price and financing eligibility, with valuation, financing terms and listing availability resolving server-side against a vehicle whose condition has already been established. Live on the web, Google Play and the App Store.

  • The client reports 150+ inspection points per vehicle
  • The client reports 20,000+ verified vehicles on the platform
  • The client reports 1.2B+ JD in total transactions supported
  • The client reports a 98% customer satisfaction rate

Reported by the client, not independently audited by DevoraX.

Read the 1,287-word engineering case study

Afriva E-Commerce Platform

A multi-vendor e-commerce marketplace on Next.js 15 and Supabase, with separate admin, manager, seller and buyer dashboards and real-time delivery tracking over Postgres changes.

What it proves: Seller separation pushed down into the data layer rather than left as a UI concern, four role-scoped dashboards shipping from one deployment, and server-rendered catalogue pages a crawler can read. General goods rather than automotive, so it evidences the multi-vendor mechanics a dealer marketplace needs, not vehicle domain knowledge.

  • The client reports 1,245 active vendors
  • The client reports $1.2M in total revenue
  • The client reports coverage across 120+ cities

Reported by the client, not independently audited by DevoraX.

Read the 1,260-word engineering case study

What a build includes

In base scope

  • Buyer-facing web marketplace with server-rendered listing and category pages, so the catalogue is indexable rather than an empty shell
  • Faceted vehicle search over make, model, year, mileage, price and inspection outcomes, indexed and paginated server-side
  • Structured inspection records: every checkpoint stored with its own identity and result, photographic evidence addressable per point, and a versioned rubric so historic reports still render
  • The inspection report rendered inside the listing, not attached as a downloadable file
  • Seller or dealer accounts with listing creation, stock state and a dashboard scoped to their own inventory
  • Admin console for reviewing inspections, approving listings and policing the catalogue
  • Ownership and role rules enforced in the database schema, not only in the interface
  • Financing calculator with term, rate and deposit resolved server-side so every screen shows the same figure
  • Reservation and availability handling, so a reserved or sold vehicle disappears from search and saved lists everywhere
  • Buyer accounts, saved vehicles and enquiry capture

Scoped and quoted separately

  • Native iOS and Android apps alongside the web marketplace. Dooz has both, built in React Native from one codebase, but they are a separate line rather than base scope
  • Insurer quote integrations. Each partner is scoped individually, because the work depends entirely on what API they expose and what it returns
  • Lender and payment gateway integrations beyond the first
  • Automated or AI-assisted valuation. It depends on having enough structured condition data to price against, which a new catalogue does not have on day one
  • Migration of existing inventory from a dealer management system or a supplier feed
  • Support, monitoring and maintenance after handover

What do you actually get in a used car marketplace build?

Three layers, and they are not equally hard. The catalogue is the straightforward part: vehicles, photos, faceted search over make, model, year, mileage and price, server-rendered so listing pages are readable by crawlers. The inspection layer is the part most quotes underestimate. The transaction layer, where a reservation, a financing application and a unique physical asset must agree, is where the engineering cost sits.

Base scope is listed in full below. In short: a buyer-facing web marketplace, a dealer account with its own listing tools, an admin console for reviewing inspections and approving listings, structured inspection records rendered inside the listing, a server-side financing calculator, and reservation handling so a sold car leaves search everywhere at once.

Native apps, insurer integrations and automated valuation are things we have shipped, but each is quoted on its own rather than folded into a base price.

Have you actually built one of these before?

Yes, once, and it is publicly installable, so you can check rather than take our word. Dooz Inspected Cars runs at dooz.com, the Android app is on Google Play as com.dooz.app, and the iOS app is on the App Store as Dooz Cars. All three are served by the same NestJS backend.

Dooz was built against the exact problem this page describes. Buyers could not verify condition because inspection protocols were insufficient, and financing was complex enough to push deals offline. Every listed car is an inspected car, the inspection is published as part of the listing, and financing and insurance attach to a vehicle whose condition has already been established.

The client reports 150+ inspection points per vehicle, 20,000+ verified vehicles, 1.2B+ JD in total transactions supported, and a 98% customer satisfaction rate. Those come from the client's systems; DevoraX did not measure or audit them. The full case study is at /projects/25.

How does a 150+ point inspection become something a buyer can filter on?

By being data rather than a document. A PDF tells a buyer about one car. A structured inspection lets them compare every car against the same rubric, which is the point of a verified marketplace.

On Dooz that shows up in what a buyer can search on: make, model, year, mileage, price, financing eligibility and inspection outcomes, at once. The client reports 150+ inspection points per vehicle. PostgreSQL is the system of record, and vehicles, inspection records, listings and transactions are held as related data rather than as documents.

For your own build, that shape sets requirements we put in the proposal rather than leave to discovery. Each checkpoint needs its own identity and result so it can be queried. The rubric needs versioning, because a report captured under one revision still has to render after the checklist changes. Photographic evidence needs to be addressable per point and delivered efficiently to a phone. Those are scope lines for your system, not a description of anyone else's schema.

How do financing and insurance fit into the buying flow?

Buying, financing and insuring in one place is an integration problem more than an interface problem. A financing calculator has to model term, rate and deposit consistently, and the figure on the listing page has to be the figure at checkout. On Dooz, financing terms, valuation, inspection status and listing availability all resolve server-side rather than in the clients.

Insurance is harder because the quote is not yours. A third-party response arrives on someone else's latency budget and can be slow or absent. Anything the platform does not control is treated as unreliable by design: timeouts, retries and an explicit degraded state, so one slow insurer does not block the rest of the flow.

NestJS module boundaries let listings, inspections, valuation, financing and insurance live as separate domains behind stable interfaces, which is how Dooz is put together, and typed contracts mean a partner changing a field fails at compile time rather than showing a buyer a wrong number.

How do you keep dealer accounts separated from each other?

A marketplace with independent dealers is a multi-vendor system, and the rule that matters is that one seller cannot read or mutate another seller's stock. The wrong place to enforce that is the interface. A dashboard that hides a row is a presentation decision; a query that cannot return the row is a boundary.

Afriva is the build that evidences this. Four roles, admin, manager, seller and buyer, each with a dashboard querying only the slice of data that role is entitled to, on Supabase's managed Postgres. Because Supabase bundles authentication with the database, the identity that signs a user in is the identity Postgres sees on the query, so ownership rules live once in the schema rather than in every screen. The client reports 1,245 active vendors and $1.2M in revenue across 120+ cities.

Afriva is general-goods e-commerce, not automotive. It evidences the separation model; Dooz supplies the vehicle domain.

What does the build process look like, and what do you need from me?

It starts with a free 30-minute discovery call and ends with a written fixed-price proposal listing scope line by line. There is no hourly billing, so the scoping conversation has to be honest on both sides. An under-specified fixed price is bad for the client and worse for us.

The thing we need from you first is the inspection rubric. Not a description of it, the actual checklist, with the points, the result types and the pass criteria, because that document determines the data model and every filter built on top of it. We also need to know which lenders and insurers you intend to work with and whether they expose an API, whether listings come from your own inspectors or independent dealers, and where existing inventory lives. If you do not have a rubric yet, that is a scoping conversation rather than a blocker.

How is this priced?

Fixed price, in writing, after the discovery call. DevoraX publishes indicative starting points: MVP Starter from $2,900, Growth from $7,500, Enterprise custom-scoped. Those are starting points for the tiers, not quotes for this build. A marketplace with a structured inspection layer, dealer accounts and lender integrations does not sit in the entry tier, and we would rather say so here than in a third meeting.

What moves the number is rarely the catalogue. It is the count of third-party integrations, the depth of the inspection rubric, whether native apps ship alongside the web marketplace, and whether existing inventory has to be migrated. Each is its own line in the proposal, so one can be cut without reopening the whole scope.

No hourly billing means we absorb the cost of our own estimation errors. It also means a scope change is re-quoted in writing rather than quietly absorbed.

What happens after launch, and who owns the code?

You own all code and IP on final payment. That is not a negotiated extra. The repository, the schema, the deployment configuration and the inspection data model are yours, and nothing is retained as a bargaining chip.

Ongoing support is quoted separately, because it is a different commitment from a build and bundling the two produces a vague retainer neither side reads. If you have your own engineers, handover is a repository and a walkthrough. If not, say so during discovery and we will scope it.

Two things to plan for regardless of who maintains it. Third-party integrations break on someone else's schedule, so a lender changing a payload is an operational event rather than a build defect. And the inspection rubric will change. A checklist that grows or reorganises has to leave reports captured under the old revision still readable, which is why rubric versioning is base scope in the first release rather than a repair job after the first revision.

When should you not hire DevoraX for this?

If what you want is a classifieds board, where sellers post, buyers call and nobody verifies anything, do not commission a custom build. An off-the-shelf listings platform does that for a fraction of the cost, and the inspection engineering would be dead weight. If verification is not part of your product, nothing on this page applies to you.

Do not hire us to run the inspection operation. We build the software that captures, versions and publishes a report. Recruiting inspectors and standing up the physical network is a different business, and not one we have done.

And if procurement requires hourly billing, a named team of five, or a compliance certification on file, we are the wrong supplier. DevoraX is two people, Sameem Amjad and Usman, founded in 2019, and we work fixed-price. We will not clear those bars.

When not to hire us for this

If your model is a classifieds board, where sellers post, buyers call and nobody verifies anything, do not pay for a custom build. An off-the-shelf listings platform does that cheaply, and the inspection layer is the only part it cannot do. Skip us too if you need the inspection operation itself staffed: we build the software that captures and publishes a report, not the inspector network. And if procurement requires hourly billing or five named engineers on your standups, DevoraX is two people working fixed-price and will not clear that bar.

Questions buyers ask

Can you attach a full inspection report to every listing?

Yes. On Dooz the inspection is published as part of the listing rather than sent on request, and the client reports 150+ inspection points per vehicle. Buyers filter on inspection outcomes alongside make, model, year, mileage and price. For your build we model each checkpoint as a record rather than a document, because that is what makes condition comparable across a catalogue instead of readable one PDF at a time.

Do I get mobile apps as well as a web marketplace?

Dooz has both: an Angular web marketplace plus React Native iOS and Android apps, all on one NestJS backend. For a new build, the web marketplace is base scope and the apps are quoted separately. React Native means one codebase serves both stores, so a listing or financing flow is implemented once and behaves the same on each. What that is worth against a web-only scope comes out of the discovery call.

Can buyers apply for financing and get insurance inside the app?

On Dooz, yes. Financing and insurance attach to a vehicle whose condition has already been established, which is the point of the product. For your build, each lender or insurer is scoped and quoted individually, because the work depends on whether that partner exposes a usable API and how reliable its responses are.

Are the figures on this page yours or the client's?

The client's, all of them. On Dooz: 150+ inspection points per vehicle, 20,000+ verified vehicles, 1.2B+ JD in total transactions and a 98% customer satisfaction rate. On Afriva: 1,245 active vendors, $1.2M in revenue and coverage across 120+ cities. Every one comes from the clients' own systems. DevoraX did not measure or audit any of them, and the published case studies say the same thing.

What will it cost?

We do not quote before a discovery call and we do not bill hourly. You get a written fixed price after a free 30-minute call. Published starting points are $2,900 for MVP Starter and $7,500 for Growth, with Enterprise custom-scoped. Those are starting points, not quotes. A marketplace with a real inspection layer and lender integrations sits above the entry tier.

Who owns the code when it is finished?

You do, on final payment: code, IP, schema and deployment configuration. Nothing is withheld to secure a maintenance contract. Support after launch is a separate quote because it is a separate commitment, and if you have your own engineers you may not want it at all.

How do you stop one dealer from seeing another dealer's stock?

By enforcing ownership in the database rather than the interface. On Afriva each role queries only the slice of data it is entitled to, and because Supabase bundles authentication with Postgres, the identity that signs a user in is the identity the database sees on the query. A hidden row is a presentation choice; a query that cannot return it is a boundary.

Is this the same build as a general multi-vendor marketplace?

The vendor mechanics overlap: seller accounts, role-separated dashboards, ownership rules in the schema, order state that has to stay fresh on every surface. What differs is uniqueness, since every car is one unit rather than a stock item with a quantity, plus the inspection layer itself. For general goods, start from our multi-vendor marketplace development page.

Related work

Start with a scoping call

A free 30-minute call to work out what you are building and what is actually hard about it. If there is a fit you get a written fixed-price proposal. If there is not, we will say so on the call.

Book a call