Zazzlers
A full production e-commerce platform for a clothing label — storefront, payments, notifications and a complete admin back office.

The problem
Built for Zazzlers, a clothing label — heavyweight graphic tees and wide-leg denim. They needed more than a storefront: order management, payments that reconcile, stock control and customer comms, without handing a platform a cut of every sale.
What I built
An end-to-end store in Next.js. Front: catalogue, cart, wishlist, reviews, an editorial lookbook, checkout. Payments: Razorpay with a verify step and a webhook. Comms: SMS and email on order events, plus in-app notifications, PDF invoices and order QR codes. Behind it, a full admin dashboard — products with bulk actions, orders with payment/shipping/status-history control, users, categories, coupons, messages and analytics.
What I learned
That the hard part of commerce isn’t the checkout button — it’s the states after it: partial payments, refunds, status history, and making the admin side fast enough that the client actually uses it.
Overview
Zazzlers is an Indian fashion label — heavyweight graphic tees and wide-leg denim. The site is the full commercial system I built for them: a shoppable storefront and the operational tooling to run it.
Features
Storefront
Collections, product detail, search, cart, wishlist, reviews and an editorial lookbook.
Checkout
Razorpay integration with a server-side verify step and a webhook, plus UPI reference capture.
Customer comms
SMS (Twilio) and email (Resend) on order events; in-app notifications.
Documents
Generated PDF invoices and per-order QR codes.
Admin back office
Products with bulk edit, orders with payment / shipping / status-history control, users, categories, coupons, contact messages and dashboard stats.
How it's put together
- 01Prisma schema of around twenty models: users and auth, catalogue, cart / wishlist, orders with status history, addresses, coupons, notifications.
- 02Storefront and admin each get their own Route Handler API surface under app/api.
- 03Auth.js v5 with credentials + bcrypt and a full password-reset flow; Postgres and file storage on Supabase.
Challenges
Payment integrity
A checkout that survives a dropped connection — the order, the Razorpay verify call and the webhook all have to agree before anything ships.
Admin performance
The order and product tables had to stay fast with real data, which drove the bulk-action and filtering design.
Where it landed
A deployed storefront with a working admin back office — the full loop from browsing to a fulfilled, paid order. The repo is private (it’s a client’s running store), so this write-up is the walkthrough.
Screens

Want something like this?
Get in touch →