Web Development — Case Study
Cycle World Pondicherry — Headless Cycle Storefront
A server-rendered, SEO-optimized storefront for a real local cycle retailer — built headless on Next.js and Supabase, with realtime inventory and edge caching that keeps pages loading in under a second.
01 — Overview
A catalogue that needs to rank, and load instantly
Cycle World needed a storefront that real customers would find through search, not just a digital catalogue — which meant SEO and load speed weren't nice-to-haves, they were the point.
Client-rendered product listings are invisible to search engines and slow on first paint — both fatal for a local retailer competing on discoverability. The build needed server-rendered catalogue pages that ranked, product routing that scaled with inventory changes, and a backend that could keep stock data accurate without manual updates.
02 — Architecture
How it's built
Rendering layer
Built on the Next.js Web Router with server-side rendering for catalogue pages — product listings are fully rendered HTML on first request, optimized for search indexing, with dynamic routing per product.
Data layer
A normalized Supabase Postgres schema backs the catalogue, with Row-Level Security policies enforcing exactly which data each request context can access — no over-permissioned queries reaching the client.
Realtime & delivery
Supabase Realtime keeps inventory in sync as stock changes, while a Vercel deployment pipeline with edge caching pushes rendered pages close to the user — the combination behind the sub-second TTFB.
03 — Tech Stack
What it's built with
04 — Results
What it achieves
05 — Learnings
SEO shapes the architecture, not just the copy
Choosing SSR over client rendering wasn't a performance afterthought — it was the decision that made the storefront discoverable at all.
RLS as the default, not an add-on
Designing the Postgres schema with Row-Level Security from the start avoided retrofitting access control onto a schema that wasn't built for it.
Edge caching and realtime can coexist
Balancing aggressive edge caching for speed against realtime inventory accuracy meant being deliberate about what's cached versus what's always fetched live.