Designing an ecommerce site for one-of-one products: what doesn't work from the standard template
When stock equals 1 and every item is unique, the standard ecommerce template stops helping and starts flattening the product. Here's what changed when I designed for hand-painted juttis.

Muzammil reached out to me about a small Karachi label called Painted Juttay. The brand sells juttis — traditional South Asian flat shoes — that are painted by hand, individually. No two pairs are the same. The question on the table from the first call was a specific one: how do you sell a one-of-one painted object inside a template language that was designed to sell ten of one t-shirt?
That sentence ended up shaping the whole engagement. It's not a question you can answer by reaching for the nearest Shopify theme and changing the accent colour. The standard ecommerce template assumes inventory depth — that "Brown Loafer, size 9" exists in a warehouse forty times over, that a shopper picking the brown loafer is choosing from a category of similar items, and that the photographer has shot the brown loafer cleanly against white so it looks identical to the next forty pairs. None of those assumptions hold when every pair on the site is its own piece of painted art with a stock count of one.
So the brief, from very early in the conversation, was honest: a hand-painted product can't be sold on a stock ecommerce template. Not because the template is bad — it's tuned for a different problem — but because every assumption in it gently flattens what makes the brand worth buying. The work I did on the Painted Juttay storefront was about identifying where the template was fighting the brand, and replacing the fighting parts with patterns that actually fit a one-of-one catalogue.
This post is the walkthrough of the four big design decisions that changed because stock was always going to equal one. If you're a founder thinking about how to design ecommerce for hand-made, small-batch, or commissioned work — or a designer who's been handed a similar brief — these are the places the standard template stops helping.
Why the standard template stops helping
A generic ecommerce IA is built around two ideas: categories (men / women / sale) and attributes (size, colour, brand, price). Both are forms of compression. They take a catalogue of hundreds of items and let a shopper narrow it down to a manageable few without scrolling forever. That's the job they exist to do, and they do it well — when the catalogue is structured for it.
The compression breaks the moment the catalogue is one-of-one. "Men's / Women's" doesn't carve a Painted Juttay catalogue meaningfully — the same pair of juttis can be a men's 8 or a women's 10 depending on who's wearing it, and the painting is the actual product. "Colour" is even worse. At Zara, "blue" means this t-shirt comes in blue. At Painted Juttay, every pair has many colours, and the arrangement of those colours is what makes the pair valuable. A "blue" filter that returns thirty pairs because each contains a blue brushstroke is a filter that has stopped being useful.
The grid of identical thumbnails has the same problem in reverse. A standard product grid is designed to look uniform — same image dimensions, same background, same crop — so the eye can scan it for the one attribute that varies. When every product is visually unique, imposing uniformity on the thumbnail strips the catalogue of the exact thing it's selling. The shopper isn't comparing apples to apples; they're being shown apples to oranges and told to ignore the difference.
So the template fails in three concrete places before you've even touched the product page: the navigation collapses, the filters lose their grip, and the grid actively works against the brand. The redesign decisions that follow are the four moves that addressed those failures without throwing out the parts of ecommerce that shoppers actually need (cart, checkout, sizes, shipping).
The IA decision that changed the whole shop: palette mood over colour filter
The single biggest IA shift on the Painted Juttay site was replacing the colour filter with a palette mood filter. Instead of "blue / red / green," the shop filters by warm / cool / earthy / monochrome. That sounds like a small move. It's not — it changed user behaviour at the catalogue level.
The reason the standard colour filter fails here is that it's asking a question that doesn't have a meaningful answer for the product. A shopper looking at hand-painted juttis isn't trying to find "the blue ones." They're trying to find a pair whose overall tone matches their taste — warm rust-and-ochre, cool slate-and-indigo, a single-colour monochrome painting, a quiet earthy palette. Those are the actual buckets shoppers compare across. The standard ecommerce vocabulary doesn't have a word for them, so it defaults to colour swatches and lets the shopper translate.
Palette mood does the translation up front. It also maps better to how people actually shop for art versus how they shop for apparel. At a gallery, you don't ask the curator "do you have anything in blue?" — you ask for something that fits the room. The palette-mood filter is the ecommerce version of that question. It treats the shopper as someone choosing a piece, not as someone matching a colour swatch to an outfit they already own.
Here's the diff between the standard IA the project rejected and the IA that shipped:
| Standard ecommerce IA | Painted Juttay IA |
|---|---|
| Men / Women / Sale | Shop · all available work, browsable as a gallery |
| Filter: size, colour, brand, price | Filter: motif, palette mood, size |
| Grid of identical thumbnails | Gallery — every pair its own card, no forced uniformity |
| "About us" company page | "About" — the painter's hand visible, not a corporate page |
| Returns / FAQ | "Care" — how to look after a hand-painted pair |
The pattern across the right-hand column is the same: every node in the IA earns its place by answering a question a shopper of this brand would actually ask. Nothing inherited from the standard template just because it's standard.
One thing worth being honest about: replacing the colour filter with palette mood costs you something. A shopper who arrives looking specifically for "a green pair" can't bypass mood and go straight to colour. That's a real friction. The trade is that the friction protects the brand from looking like a fast-fashion catalogue, and it nudges every visitor toward the way the product actually wants to be browsed. That trade is the right one for a craft label. It would be the wrong trade for a high-volume apparel store. The principle is the same; the trade-off resolves differently depending on what you're selling.
A product page built for stock = 1
The product page is where every ecommerce site either trusts the product or doesn't. For a hand-painted pair, "trusting the product" has a specific meaning: the painting has to fill the viewport before any UI does.
That sounds obvious until you look at how a standard product page is laid out. The default Shopify product page hands you a hero image roughly half the width of the viewport, a buy button immediately to its right, a price tag in a bold weight, and — increasingly — a "12 people are viewing this" tag, a countdown timer, a "selling fast" banner. Each of those elements competes with the photograph for the visitor's attention. For a t-shirt that's fine; the photograph isn't the thing, the t-shirt is. For a hand-painted jutti, the photograph is the thing, and any UI element fighting it is a UI element flattening the product.
The Painted Juttay product page is built around four small but deliberate moves:
- The painting fills the column first, UI second. Multiple shots of the same pair from different angles — top, side, sole — because a painted object reads differently from each angle. A single hero image, even a good one, hides half the work.
- Scarcity stated in plain language. "One pair available." Not "selling fast," not "only 1 left!" in red, not a countdown clock. The truth (stock: 1) is enough on its own, and trusting the viewer to read it is part of the brand.
- The painter's notes replace the generic product description. A short caption on each piece — what the motif is, what inspired it. The voice on the page belongs to the painter, not to a marketing template.
- No pressure copy. No urgency banners, no "12 people viewing," no scarcity timer. Pressure tactics work for fast-fashion impulse buys; they actively undercut craft positioning. A shopper buying a piece of painted art is not making an impulse decision, and the page shouldn't pretend otherwise.
The decision not to add a countdown timer was an active one — not an oversight. The standard ecommerce playbook says timers lift conversion. They probably do, on the average store. The trade is that a timer signals "this is a fast-moving inventory item, you should panic" — which is the opposite of what a hand-painted product is. The brand promise is that this pair is unique, slow-made, and worth thinking about. A timer would lie about that.
The honest version of scarcity, for a one-of-one catalogue, is the stock number itself. "One pair available" is a stronger scarcity signal than any countdown timer because it's structural rather than manufactured. Once a shopper internalises that every pair on the site has stock of one, they stop comparing the page to a fast-fashion product detail page and start comparing it to a small painting at a gallery — which is the right comparison.
A visual system pulled from the product
Most ecommerce visual systems are imposed on the product: a brand designer picks an accent colour, a hero font, a corner radius, and the product photography is then asked to live inside that frame. For a one-of-one craft brand, that order is backwards. The system has to come from the product, not be applied to it.
Concretely, every token in the Painted Juttay design system has a defensible origin in the work itself. Colour pulled from recurring motifs in the painting work — a deep brown that matches the outline paint, a red lifted from a recurring motif, a gold reserved specifically for one-of-one labels. Type paired to feel handwritten without being literal — a serif that reads as written, not typed, and a humanist sans for body copy that keeps long-form passages readable. Component shapes that echo the soft curve of a jutti silhouette: a card radius of around 20px, softer than the default Material or Tailwind preset, because hard right angles fight the rounded shoe shape.
The point of pulling everything from the product is that the site then feels of the brand, not stamped on top of it. A visitor never has the experience of "the photography is hand-painted but the rest of the site is generic Shopify chrome." Every screen — homepage, gallery, product page, cart, checkout — composes from the same components, the same colour tokens, the same type pairing. The system is small enough to be one designer's responsibility, and consistent enough that the boring screens (cart, shipping confirmation) carry the same texture as the hero screens.
This is what brand-led design actually looks like in practice. Not a moodboard pinned on a wall while the UI gets built from a kit. The kit is the moodboard, translated into tokens and components. Every colour swatch can be traced back to a brushstroke in the catalogue. Every radius can be traced back to a silhouette in the product photography. Defensible at the token level.
The trade-offs you keep
Designing outside the standard template costs you something, and it would be dishonest to pretend otherwise. You give up the speed of theme-based setup — a one-off custom IA takes longer to build than dropping in a Shopify theme. You give up some of the familiarity of conventional ecommerce patterns; a first-time shopper arriving at the palette-mood filter has to learn a vocabulary that "size / colour / brand" wouldn't make them learn. You give up the easy upgrade path that comes with a templated stack — every theme update is now a manual port.
What you gain, in exchange, is a storefront that reads as a small painting gallery first and a shop second. The product isn't flattened to fit the template; the template is shaped to fit the product. For a brand whose entire premise is that each pair is its own piece of art, that trade is the only one that actually works. Made the same trade for a high-volume catalogue and it would be the wrong call. The constraint — stock = 1, every item unique — is what makes the trade defensible here.
When this thinking applies
The Painted Juttay engagement was specifically about hand-painted juttis, but the constraint-grounded approach generalises. Any small-batch, craft-led, or brand-led product is in the same template trap: ceramics studios, indie perfumers, commissioned art, limited-run apparel, bespoke furniture. Each of them is being asked, by default, to design inside a template language built for high-volume inventory — and each of them is being subtly flattened by that template in the same four places: catalogue IA, filter vocabulary, product-page layout, and visual system.
If that's the brief you're working with, the full Painted Juttay case study has the screen-level detail of how each decision landed. The services page covers what an engagement like this looks like to scope, and the contact page has booking for a 30-minute intro call — free, and the right place to start if you're weighing whether a custom design is the right call for a one-of-one catalogue. The same constraint-grounded thinking applies whether the product is hand-painted, hand-thrown, hand-stitched, or one-off commissioned — the template trap is the same, and so are the four moves that get you out of it.
