Skip to content
SYSTEMS NOMINALall platforms operationalSOC 2 Type II · ISO 27001 in progress

MD Motors — Dealership back-office.

Daily back-office for a Vermont used-car dealership. The dealer's existing Google Sheet is the input; the app pulls inventory from it, layers PDF window-sticker import with VIN dedupe, NHTSA decode on-demand per vehicle, and a CSV export ready for the accountant.

Year
2025
Engagement
Long-running back-office build, owner-operated
Platforms
Web · Internal
Stack
Next.js 15 · TypeScript · Postgres
M
Inventory
For sale
2021 Ford Mustang GT
1FA6P8CF6M5•••42
$36,400
+$4,250
MILES
28,400
DAYS LISTED
11
SOURCE
Auction
Imported from sheet · NHTSA decoded
Problem

Inventory, sales, and profit for a used-car dealer

A Vermont used-car dealer was running the lot on a Google Sheet plus manual paperwork — inventory, sales, and accountant-side reporting were all hand-touched, and PDF window-stickers were re-keyed by hand whenever new vehicles came in.

Approach

Built a Next.js back-office that ingests the dealer's existing Google Sheet (read-only feed) into a Postgres-backed store, layered a PDF parser that extracts vehicles from window-sticker dumps and dedupes against the existing VIN list before insert, and gave the dealer an NHTSA decode button per vehicle so unfamiliar VINs can be enriched on demand.

Architecture
  • Stack
    Next.js 15 App Router + TypeScript + Postgres. Cloudflare Turnstile gates the login route against bot traffic.
  • Sheets feed
    Google Sheets API is read-only (`spreadsheets.readonly` scope) — the dealer's sheet keeps being the dealer's sheet; the app reads it and persists into Postgres.
  • PDF import
    Window-sticker PDFs parse into vehicle rows; existing VINs in the DB are fetched up-front so the importer can flag duplicates before insert.
  • VIN enrichment
    NHTSA decode is a per-row action in the UI — surfaced when the dealer wants to enrich a VIN, not blocked behind a mandatory step.
Outcomes
  • PDF → DB
    Window-sticker dumps become inventory rows with VIN dedupe in one upload, instead of hand-keying each vehicle.
  • CSV
    Accountant-ready inventory export at `/api/mdmotors/inventory/csv` — `Content-Disposition: attachment`, daily-usable.
  • Sheet → DB
    Existing dealer sheet remains the input; the app never writes back, so the dealer's workflow is preserved.
What we'd build next
  • Add a profit column to the accountant CSV by reusing `deriveProfit` from the inventory card so the dashboard tile and the export agree.
  • Wire automated NHTSA decode on PDF import so a window-sticker upload finishes fully enriched without a per-row button click.
  • Bidirectional Sheets sync so updates from the app surface back into the dealer's spreadsheet without breaking the read-only-feed posture.
Case study verified against code on 2026-05-20
Have something in mind?

Want one of these for your team?

Two engagements open for Q3 2026. Discovery starts at $24K.

MD Motors — Case study | 802.software | 802.software