Web

Makmur Motor

An edge-native showroom and inventory CMS for a used-car dealer in Denpasar — Next.js on Cloudflare Workers with D1 and KV, so the owner manages stock, photos and sold units without touching code.

Next.js 15Cloudflare WorkersD1SEO
Impact0 servers to manage

Built for a used-car dealership in Denpasar, Bali.

23Cars at launch
5Catalogue filters
3Cloudflare services

See it in action

The live product on desktop, tablet and phone.

makmurmotor.biz.id
Makmur Motor on desktop
Makmur Motor on a tablet
Tablet
Makmur Motor on a phone
Mobile

Case Study

The Challenge

A used-car dealer needed more than a brochure site. Inventory changes every week, cars sell, prices move — and the owner had to be able to update all of it from a phone, with photos, without calling a developer. The site also had to rank locally and push buyers straight into WhatsApp.

My Approach

I ran Next.js 15 on Cloudflare Workers through OpenNext, with D1 (SQLite) for inventory and KV for uploaded photos — no origin server, no separate storage bucket. Drizzle ORM keeps the D1 queries type-safe, and sold cars are filtered out at the query layer so they disappear from the public site but stay in the admin panel.

The admin panel uses a small custom auth — PBKDF2-SHA256 password hashes and HMAC-signed session cookies behind middleware — instead of a heavy dependency. Owners add, edit, delete and mark cars as sold, and drag-and-drop photos with a chosen cover image. The public side has a catalogue with five filters that can be shared by URL, detail pages with a lightbox gallery, WhatsApp deep links per car, and structured data (AutoDealer + Product), a dynamic sitemap and per-page metadata for SEO.

The Results

A live showroom at makmurmotor.biz.id that the dealer runs on their own: inventory, photos and sold status are all self-serve, pages render fresh from D1 on every request, and there is no server for anyone to patch.

Tech Stack

Next.js 15React 19TypeScriptOpenNextCloudflare WorkersD1KVDrizzle ORMZodFramer MotionTailwind CSS