← All work
CarShopUSED-CAR SEARCH FOR JAMAICA
Marketplaces & consumerLivecarshopja.com

CarShop

A search-and-compare engine that pulls used-car listings from across Jamaica's classifieds sites into one place, with AI-enriched details, a price-by-year view, and a loan calculator.

37,000+
used vehicles aggregated
Many sites, one search
into a single pool
AI-enriched
details, price-by-year and a loan calc

The problem

Buying a used car in Jamaica means opening five or six classifieds sites, each with its own search, and trying to compare in your head. CarShop pulls all of those listings into one place so you can actually search and compare across the whole market at once.

What it does

It continuously gathers listings from Jamaica's existing car-classifieds sites, cleans them up into one consistent format, and removes duplicates of the same vehicle appearing on more than one site. The homepage is a single fast search over that combined pool — filter by make, model, year and price, with bottom-sheet filters on a phone.

Each vehicle page adds what the original listings usually don't: AI-enriched details, a chart of how price varies by year for that model, and a loan calculator — plus a clear link back to the original listing to make contact. It installs like an app, and behind it runs a full admin back-office for the team managing listings, dealers and data quality.

Key features

  • The whole market in one search

    Instead of opening several classifieds sites, you search one combined pool of listings — so comparing a Honda across the whole island is one search, not six tabs.

  • Duplicates collapsed automatically

    The same car posted to three sites shows up once, not three times, so the list you're scanning is the real set of vehicles, not noise.

  • Price-by-year, so you know if it's fair

    A chart of how that model's price moves by year tells you at a glance whether an asking price is reasonable — context a raw listing never gives you.

  • A loan calculator right there

    You can work out the monthly payment on the car you're looking at without leaving the page or guessing.

  • Straight back to the source to buy

    Every vehicle links out to its original listing, so making contact is one click — CarShop is where you find and compare, not another middleman.

Where it stands

It aggregates and compares listings from other sites — it isn't a place individual sellers post their own cars, and there's no in-app buyer/seller messaging. Contact happens on the original listing.

Under the hood — for the technically-minded

How it's built

A set of site-specific collectors pull listings from Jamaica's classifieds sites on a schedule, normalize them into one shared shape, and deduplicate by a vehicle fingerprint so the same car across two sites becomes one record. The app itself is React Router 7 over Postgres with Drizzle, with Redis and a background-job runner behind the collection pipeline.

It's a real migration story, not a greenfield app: an older Elixir/Phoenix and Next.js stack was moved to React Router 7 and Drizzle, and shares its backend, database and sign-in with a sibling property-search app. Sign-in is delegated to a self-built OAuth identity service with passkey support that the team wrote for both apps.

The hard problems

  • One clean pool out of many messy sources

    Each source site formats listings differently and re-posts the same car more than once. The hard part is normalizing all of it into one consistent shape and deduplicating by vehicle fingerprint, so a search returns the real set of cars rather than a pile of near-duplicates.

  • A search-and-compare tool, not a middleman

    CarShop deliberately doesn't insert itself between buyer and seller — there's no messaging layer or seller-posting flow. It aggregates, enriches and compares, then links straight back to the source, which keeps its role honest and its scope focused.

  • Security reviewed before it shipped

    The platform went through two rounds of adversarial security review with tracked findings, and the fixes shipped with in-code notes referencing the specific issues — including a deliberate 'fail closed, never sign sessions with a public constant in production' rule.

Built with

  • React Router 7
  • Drizzle
  • Postgres
  • AI enrichment
  • PWA

Building something in this space?

Work with us →