Web app

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
Open the live site ↗
The story
01 — The situation

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.

Bookstore — Catalogue by category
Catalogue by category
02 — The constraint

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.

Bookstore — Splash
Splash
03 — The move

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.

Bookstore — Mobile
Mobile
04 — The build

What shipped

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

Bookstore — Browse
Browse
05 — The turn

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.

Bookstore — Detail
Detail
06 — After

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.

Bookstore — Catalogue by category
Catalogue by category
Identity

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
Built with
  • Next.js
  • Supabase
  • Tailwind
What it does
01

Category bands

Sports, animals, fiction — each a full-width band with its own row, so browsing is scrolling rather than filtering.

02

Load more, not pagination

Rows extend in place. Nobody browsing a bookshop wants to be sent to page 4.

03

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.

04

Own domain, own stack

Runs on bookstore.ganeshg.in off Supabase — my own infrastructure end to end, catalogue through cart.

What it looks like
Bookstore — Catalogue by category
Catalogue by category
Bookstore — Splash
Splash
Bookstore — Mobile
Mobile
Bookstore — Browse
Browse
Bookstore — Detail
Detail
NextRetail Intelligence for CPGA retail intelligence platform that went from hackathon idea to live in 22 markets.