Bookstore
A browsable bookstore on my own domain — catalogue, search and cart end to end.
- Role
- Design & build
- Client
- Self-directed
- Year
- 2026
- Stack
- Next.js · Supabase · Tailwind
- Status
- Live

What was broken
I wanted a commerce build I fully owned — catalogue, search, cart, domain — rather than another marketing site. A bookstore is the honest test case: hundreds of items, heavy imagery, and browsing that has to stay pleasant.

What made it hard
Book covers are loud and clash with each other. Any interface with an opinion fights them, and a grid of six hundred covers turns to noise about two scrolls in.

What I decided
Give the interface nothing. Blue and white category bands to break the grid into shelves, one serif for section headings, and no colour anywhere else — the covers supply all of it.

What shipped
Next.js on Supabase: categorised catalogue, load-more rows, cart, WhatsApp ordering handle, deployed to my own subdomain.

The moment it worked
The banding was what fixed it. The same covers that read as noise in one continuous grid read as shelves once they were cut into alternating bands.

What it left behind
It's the reference I reuse whenever a client needs a catalogue — the pieces are proven and the domain is mine to demo from at any time.

How it looks, and why
Books already carry every colour on the page, so the interface takes none. Alternating blue and white bands separate the categories and let the covers do the work — a serif for section headings so it reads like a shelf label, everything else plain. The chrome deliberately recedes; on a catalogue page, the design's job is to lose the argument with the product.
Palette — sampled from the live site- Next.js
- Supabase
- Tailwind
Category bands
Sports, animals, fiction — each a full-width band with its own row, so browsing is scrolling rather than filtering.
Load more, not pagination
Rows extend in place. Nobody browsing a bookshop wants to be sent to page 4.
Cart and WhatsApp on the rail
A persistent cart count and a direct WhatsApp handle — how orders actually get placed here, so it's on screen the whole time.
Own domain, own stack
Runs on bookstore.ganeshg.in off Supabase — my own infrastructure end to end, catalogue through cart.




