Magic Car — a modern layer around an existing system, not a replacement.
A B2B platform for car-accessory traders, built around an ERP that stays the source of truth. We built the trader experience, the admin tools, and the integration layer that connects the two.



01Context & constraint
Business context
Magic Car sells to wholesale traders, and its daily operation runs on an existing ERP that manages products, prices and accounts. Traders needed a modern way to browse and order, and the team needed tools to review orders and run campaigns.
The core constraint
The existing system works and holds the real business data. Replacing it would add risk with no benefit. So it stayed authoritative, and the new layer had to respect its boundaries.
02Integration boundaries
What the existing system owns, and what the new layer owns.
The ERP stays the source of truth. The integration layer reads from it, keeps a reliable copy of the catalog, and returns to it on every order before any commercial commitment.
media: S3 → Lambda → CloudFront
A product catalog that holds
ERP data · reliable cache · cloud media
ERP
source of truth
- ItemID
- Barcode
- Price
- Stock / availability
Catalog refresh
full-snapshot validation
- Fetch catalog
- Validate completeness & linkage
- Build candidate snapshot
Last-known-good
last-known-good · atomic swap
- In-memory stable snapshot
- Durably persisted good copy
- Restored on startup
Product composition
enrich product with campaigns & media
S3 → Lambda → CloudFront
Safe product API
a safe trader contract — no stock quantity, no cost
- ItemID
- Name
- Price
- Campaign price
- Availability
- Image URL
Flutter apps
Web · iOS · Android
03A catalog that holds
The app stays honest even when the source is down.
- D-01
Last-known-good catalog
If the ERP is unreachable, the app shows the last good catalog instead of a blank screen or invented data.
- D-02
Live validation at order time
The stored catalog is for browsing only. The order-acceptance path bypasses it: admin reviews the order, then price and availability are re-validated against the existing system directly. That is why the cart total is shown as “estimated”.
- D-03
Sensitive data is never exposed
A trader sees only “available” or “unavailable” — never the real stock quantity or cost price — and an unknown price is never shown as zero.
- D-04
Independent media pipeline
Images and video are uploaded to S3, processed through Lambda, and served via CloudFront, away from the existing system.
S3 → Lambda → CloudFront · last-known-good cache · live validation
04Trader experience
Fast ordering, with numbers that don’t claim what they don’t know.
The cart shows quantities, a note per line and an estimated total, with a clear warning that prices are subject to Magic Car’s confirmation. After submitting, the trader tracks each order’s state: in review, accepted, or rejected.


05Operational workflow
Admin sees what needs attention first.
The admin dashboard starts with what is waiting on a decision — and from there the team reviews orders, links customers to ERP trader accounts, and runs campaigns and announcements, all in the same app.

06Engineering lessons
Respect the source of truth
A modern layer around an existing system reduces risk and speeds delivery — provided the ownership boundaries are clear from day one.