
SIRI
A curated online store for luxury ethnic wear.
- Design and engineering
- 2026
- Live
- Next.js
- TypeScript
- Prisma
- Neon Postgres
- Clerk
- Razorpay
- ImageKit
- Resend
- Zustand
- Tailwind CSS
- shadcn/ui
- Zod
- Vitest
Overview
SIRI by Sapna Agarwal is a Pune boutique for Indian ethnic wear. This is its storefront and a custom admin panel: a shop that feels like a lookbook first, with the catalogue one click away.
The storefront
- Editorial home page with a full-bleed hero, product thumbnails and a "Browse Collection" call to action.
- Catalogue organised by the boutique's own categories, with sizes and stock per product.
- Cart and wishlist that persist between visits.
- Checkout through Razorpay, with order confirmation and shipping emails.
- Accounts with email or Google sign-in, and an order history.
The admin panel
The shop owner manages products, images, stock and orders herself. Marking an order as shipped sends the customer their shipping email. Admin access is limited to an allowlist of email addresses.
The payment path
This is the part that must not break, so it is built defensively.
- Checkout re-reads prices and stock from the database. Prices sent by the browser are never trusted.
- A pending order is created alongside the Razorpay order, and the payment widget opens.
- When Razorpay confirms the payment, the webhook verifies the signature, checks the payment hasn't been processed before, then reduces stock and marks the order paid in a single transaction.
- The confirmation email goes out after the transaction commits, so an email failure can never affect an order.
All money is stored as whole paise, never as decimals, and the webhook signature, stock transaction and pricing logic are covered by tests.
Outcome
Live at siribysapnaagarwal.com.
