CRM for an auto salvage yard

CRM for an auto salvage yard: donor cars, parts stock, sales and an OEM catalog

📅2026
⏱3 weeks
👥1 developer
RXLexus RX 350 · 2012 · AL10Donor #D-0418 · intake 03.11 · paint code 1F7 Mercury Metalliccost · owner onlyCatalog checklist · OEM parts for this trim#P-10422Headlamp LH81150-48B20present#P-10423Headlamp RH81110-48B20damaged#P-10424Front bumper52119-48450present#P-10425Hood53301-48080missing#P-10426Mirror LH87940-48530present#P-10427Tailgate67005-48300reservedSale #S-2207Client · +380 ••• •• 42 (blind index)Tailgate · #P-10427€ 340Mirror LH · #P-10426€ 85Discount 5 %€ 403.75⏱ reserve expires in 46 h · auto-releasePWA on every phoneStorekeeperintake · stockManagersales · reservesDirectorcosts · balance
737
automated tests on invariants
2
phases built in two weeks
1
workstation → every employee’s phone

The challenge

A Japanese-car salvage yard kept records in a 2010s desktop program over remote desktop: one workstation, no search from a phone, purchase costs visible to anyone at the computer. Parts were added by hand one by one with no link to a model or OEM number, so OLX listings and stock lived apart.

What was built

We designed and built a PWA CRM from scratch in two phases. Phase 1 — foundation and stock: donor intake, breakdown into parts where each part gets a permanent unique number (soft delete only), donor expenses; cost and balance are visible only to the admin and the director — a dedicated test catches any leak into any screen. Phase 2 — sales: customers with a blind phone index, reservation and sale from stock, statuses with cron jobs (reservations expire hourly, sales close daily), discounts. Then the catalog model → generation → trim → parts with OEM numbers and paint code: on donor intake the storekeeper just ticks “present / missing / damaged”.

1

Permanent part number

the part ID is its physical number forever; delete is soft only, history is never lost.

2

Costs under lock

purchase, expenses and balance visible only to the admin and director; an automated test catches leaks into any screen.

3

Reservations and sales

reserve from stock, multi-line sales, expired reservations released automatically every hour.

4

OEM catalog

model → generation → trim → parts with OEM numbers; donor intake as a “present / missing / damaged” checklist.

5

Paint code

donor and part colour by factory code, to match body parts without photos.

6

PWA on the phone

runs as an app on the storekeeper’s phone and updates itself; QR labels hidden behind a switch until needed.

The result

Instead of one workstation over remote desktop — a system on every employee’s phone. Only the owner sees costs, parts have permanent numbers, and the OEM catalog turns donor intake into a checklist. 614 backend and 123 frontend tests hold the invariants.

Tech stack

Laravel 12InertiaReact 18Tailwind 4PWAMariaDB

Have a similar challenge?

Discuss a project

Next case

3D fleet showcase

3D fleet garage: an isometric diorama →