The problem, the
decisions, and the
software.

We show work as a system rather than a gallery of screenshots. Where we cannot yet publish the real decisions, the slot stays empty. Nothing on this page is invented to make the portfolio look larger.

Dealership management SaaSProduct preview · Sample data

MotorBazaar

One operating system for vehicle inventory, preparation, enquiries, and daily dealership work.

Problem
Fragmented workflow across disconnected tools
Our role
Product design and full engineering
Scope
Inventory, preparation workflow, enquiry tracking, dealer roles
Stack
TypeScript, Node.js, PostgreSQL, AWS
Shown note
Interface preview built with sample data
mb / operations

Inventory

+ Add vehicle
Available48+8% vs last weekIn prep07−1 vs last weekEnquiries12+3 vs last week

2024 Atlas SESUV · Automatic · 1,800 km

Listed

2023 Valor P250SUV · Automatic · 25,600 km

In prep

2024 Civic SportSedan · Automatic · 8,100 km

Listed

2022 Corolla AltisSedan · Automatic · 44,200 km

Reserved
schema · vehicle lifecycle● write to confirm
vehicle_state.sql

-- A vehicle only moves forward through real steps.
create type vehicle_state as enum (
  'intake', 'prep', 'listed', 'reserved', 'sold'
);
create table vehicle (
  id uuid primary key,
  dealer_id uuid not null,
  vin text unique not null,
  state vehicle_state not null
);
Accuracy 94.2%Precision 91.8%Human override rate 6.1%

A car is a state,
not a row.

The first instinct is to model a vehicle as a list of attributes: make, price, photos. That breaks the moment someone asks why a sold car is still in the workshop. The model gives every vehicle an explicit lifecycle, enforced in data rather than only in the interface. Every transition is legal, visible, and auditable.

Case study two.

This space is intentionally empty until the work can be shown with an approved problem statement, decisions, and evidence. We do not manufacture portfolio entries.

Yours could be the case study we show next.