David ParkOpen to roles
All work
Case study 02 — Execution · Product judgement

The launch date was fixed. Half the platform wasn't connected.

Close to launching our lead-based platform, the build had stalled. I stepped in, filled the gaps, and rebuilt the part brands would touch most: promotions.

RoleCo-founder & CEO, leading product, design and build
Timeline[Month] – [Month] 2026
TeamMe, taking over from one developer
ToolsFigma, Next.js, Node, MongoDB
Live promotions on the Carmate home page: model-level cashback and discounts from Toyota, Mitsubishi and Honda
01  Context

A launch with holes in it

We had moved Carmate to a lead-based model, and the new platform had a launch date. As it got close, the build had stalled. Pages weren't linked to each other, parts of the logic were wrong or missing, and some pages didn't exist yet.

02  The call

Fill the gaps myself

Waiting was the safe option. I took the risk of working directly in code I hadn't written, guided by years of knowing how the product should behave. I redesigned pages, fixed the logic that ties listings, articles and model pages together, and built what was missing from scratch:

aMy Account for buyers and sellers
bSell Your Car
cA separate area for dealership staff
dSaved cars, working across every type of car card
895My commits in August 2026 · previous monthly average: 194
$36KA year saved once I ran the codebase myself
03  What I saw

A promotion tool nobody would use

Seller Central only let brands create a promotion for a single trim. But I had been collecting brands' promotion posters, and they never work that way. It's a model name and “−$3,000”. Even brand staff often don't know their exact trim names.

And in Cambodia, promotions are paid ads that run and quietly disappear. Nobody tracks them, so nobody takes them seriously. A tool that didn't match how brands already think would never be used.

Live promotions on Carmate, written the way brands advertise them: model name plus cashback
04  The insight

“Build promotions the way brands already sell.”

If brands were going to take our promotions seriously, they had to be right everywhere: the normal price, the promo price and the dates, on every page they touch.

05  The design

Scope first, then confirm the price

I redrew the flow in Figma and built it myself, working from the data structure underneath.

1Choose what the promotion covers: the whole brand, a model, or one trim.
2Enter the offer and its dates.
3Confirm the result. “−$3,000 on a model” lists every trim with its new price before anything goes live.
+Promotion types became an editable list instead of values fixed in the code, so a new kind of offer needs no release.
06  The harder question

What about cars already in stock?

When a model is on promotion, its in-stock listings are affected too. Whether a particular car belongs in the offer isn't clear-cut, and it's the brand's call, not ours.

Apply it automaticallyFor: Easiest to build, no extra work for staffAgainst: Prices change on cars the brand never chose, so brands hesitate to run promotions at allRejected
Staff opt in per listingFor: The brand stays in control of every priceAgainst: One optional field to fill inChosen

Each affected listing now shows an optional promo price. Staff fill it in only for the cars they want included. Control, not automation, is what makes brands willing to open a promotion.

07  Result

Launched on schedule

0 daysLaunch delay from the promotions rebuild
[N]Promotions live on the site

The platform launched with a promotion system built around how brands in Cambodia actually advertise. Since then I have run the whole codebase myself.

08  In hindsight

What I'd do differently

I'd put the posters in front of the build from day one. The insight about how brands advertise was there before a line of the first promotion tool was written.

Next — Case study 03Our first dealership couldn't add a photo.