JST --:--:--

Dilli

Online shop for a clothing brand

An online shop for Dilli, a clothing brand born in Japan and now worn in Australia too. Oversized graphic tees, each print starting with a place or a symbol, sold on a site in English and Japanese that is simple to order from.

Visit Live Site arrow_outward
Dilli homepage in a desktop browser: the wordmark above a fan of five shirt photos
9:41
Dilli homepage on a phone
The problem

Dilli needed a shop that feels like the brand: black and white like its logo, real people wearing the shirts, English and Japanese, and ordering a shirt in under a minute.

Top highlights

Dilli homepage: the wordmark above a fan of five shirt photos
1

A homepage that leads with the shirts

While the photos load, the DL mark breaks apart into the full Dilli wordmark. Then the five shirts fan out underneath it. Every photo is a real shirt being worn, with no mockups or AI images.

9:41
Ask Dilli, the shop assistant, open on a phone
2

Ask Dilli, the shop assistant

Ask Dilli answers questions about the shirts, sizing, the brand and ordering, in the visitor’s language and in a few short sentences. It is told never to invent shipping costs, stock or returns, so when it doesn’t know it points to the contact page.

Dilli product page for the Legacy shirt, with sizes and an add to cart button
3

Pick a size, send the order

Each shirt has its own page with photos, the price in yen, sizes, fabric and care. Checkout asks only for a name, phone number and email. There is no card payment yet, so the Dilli team emails back to confirm the size, shipping and payment.

9:41
Dilli homepage in Japanese on a phone
4

English and Japanese

On a first visit the site picks the language from the visitor’s phone or computer. A button in the top bar switches it, and the site remembers that choice next time.

Dilli’s Our story page: Wear the places that made you
5

The story behind the prints

Every Dilli print starts with a place or a symbol: the Himalayas, the Trishul, antique art, the Om. The Our story page tells that story in black and white, to match the logo.

Behind the site, for the team

Orders and stock in one place

Every order and message lands in the admin. Stock is kept per size, taken when an order is marked paid and given back if it is cancelled.

Visitor stats without cookies

The admin shows visits and top pages without cookies and without storing anyone’s IP address, so the site needs no consent banner.

Reports, spending and invoices

Weekly and monthly email reports, plus spending, invoices, discount codes and a site notice, all managed from the same admin.

Project overview

Client
Dilli, a clothing brand born in Japan and now worn in Australia too. It makes oversized graphic tees in a cotton and Lycra blend.
My role
Design and development of the online shop, the shop assistant and the admin.
Deliverables
  • Shop with a home page, five product pages, cart, checkout, story, contact and privacy pages
  • Every page in English and Japanese
  • Ask Dilli, an AI shop assistant
  • A loading animation built from the logo
  • Ordering by email confirmation, ready for card payments later
  • Admin with orders, stock, customers, discount codes, visitor stats, spending and reports
Status
Live at dilli.jp.
Technical details for developers

Stack, architecture and how it is built.

Stack

Frontend
Next.js 16 (static export) React 19 TypeScript 5 Tailwind CSS v4 Motion Magic UI Radix UI
Backend
Cloudflare Workers Cloudflare D1 Workers Rate Limiting Cron Triggers
Ai
OpenRouter Claude Haiku 5.5

Architecture

bolt

Static site, small Worker

The shop is a static Next.js export served from Cloudflare. Only requests to /api reach a Worker, which handles orders, the contact form, the assistant and the admin, and stores data in D1 (SQLite).

forum

Ask Dilli

The chat goes through the Worker to Claude Haiku 5.5 on OpenRouter and streams the reply back as it arrives. Its instructions are built from the same product file as the shop, so it only knows the real shirts. Each IP gets 12 messages a minute, only the latest 12 messages are sent, and chats are not stored.

receipt_long

Orders and stock

Checkout saves the order with its shirts, sizes and total, and the form is limited to 3 sends a minute per IP. Stock per size lives in D1 and only changes when the team marks an order paid or cancelled.

Highlights

visibility_off

Cookieless Analytics

Each page view is recorded without a cookie and without storing the visitor’s IP address. Weekly and monthly reports are sent by cron.

lock

Locked-Down Admin

The admin password exists only as a hash in a Worker secret, and sign-in attempts are rate-limited per IP.

Want something like this?

I build online shops that look like the brand and are simple to order from.