cat ~/production/luxury-vehicle-catalogue-with-3d-and-ar/REPORT.md

Luxury Vehicle Catalogue with 3D and AR

Inherited a TypeScript and SQL codebase, migrated the stack, and came out with fewer models and more capability.

role Tech Lead, Migration and Backendtimeline 2025category platformclient A luxury vehicle dealer

Problem

An existing platform needed to keep working while changing underneath. The original was TypeScript over SQL with eighteen models, and the brief was to take it over, migrate the stack, and extend it with multi-language content and 3D or AR vehicle assets.

Approach

Took ownership of the inherited codebase, understood what the eighteen models were actually doing, and rewrote it against a new stack with sixteen. Fewer models with more capability is the direction that matters in a migration; more models usually means the original structure was copied rather than understood. Added four-language content on every text field and four separate upload paths for images, GLB, USDZ and video, since 3D and AR assets have different handling requirements from photos.

Outcome

A migrated platform with a smaller schema, four-language content throughout, and 3D and AR asset delivery. Documented with full endpoint tables rather than left as tribal knowledge.

16Models after migration · down from 18
4Content languages
4Asset pipelines · image, GLB, USDZ, video
48Route declarations
architecture --explain

How it's built

Complete rewrite rather than incremental port, model count reduced from eighteen to sixteen. Four distinct upload middlewares, because a GLB, a USDZ, an image and a video are not interchangeable.

Rewrite rather than incrementally port

An incremental port of a schema you did not design tends to preserve its mistakes. Rewriting forced a decision about every model, and two turned out to be unnecessary.

Higher upfront effort and a real cutover, against inheriting structure nobody could justify.

Language variants as fields rather than a translation collection

Content is read constantly and written rarely, and every read wants one language. Variant fields mean no join on the hot path.

The primary entity carries around fifty fields, half of them language variants, verbose in exchange for fast reads.

related --by-stack

Adjacent systems

REL-001 / platform

Freelance Marketplace with Escrow

Two-sided marketplace for architecture and design work: the platform holds the money until delivery is confirmed, with bidding happening in real-time chat.

REL-002 / platform

Vehicle Rental Platform

Rent a scooter or e-bike from an app: scan the QR, the physical lock opens over cellular, ride, park in a permitted zone, pay by the minute from a prepaid wallet.

REL-003 / platform

Offline-First Pharmacy Platform

A pharmacy management system that keeps selling when the internet drops, then reconciles every till operation exactly once when it returns.