← All case studies
Custom Products & Platforms

Retro Louve E-Commerce Platform

A brand-owned, India-first fashion commerce platform: custom Next.js storefront plus a permissioned admin panel on one Supabase backend.

https://www.retrolouve.comOpen live ↗

The context

Retro Louve is a direct-to-consumer retro/vintage fashion brand in Delhi, India, selling men's, women's, and unisex apparel and accessories. Rather than a templated Shopify shop, the brand wanted to own its experience and operations end to end. The result is two focused Next.js (App Router) applications sharing a single Supabase project: a fast, video-rich customer storefront at retrolouve.com, and a separate internal admin panel the team uses to run the catalog, inventory, orders, returns, customers, marketing, and store content. Prices are in INR and payments run through Razorpay.

The problem, precisely

·

Off-the-shelf wasn't enough. A growing apparel brand needed full control over its storefront experience and back-office operations, not the constraints of a templated platform. The goal was a branded store the team could shape and run day to day.

·

Indian commerce has specific rules. Shoppers expect UPI, cards, net banking, and Cash on Delivery, all priced in INR. The platform also needed a store wallet for refunds and re-use at checkout, plus India-aware details like E.164 phone normalization.

·

Apparel needs real sizing. Selling clothing online means tracking stock per size, blocking out-of-stock sizes, and helping shoppers pick the right fit instead of guessing, which otherwise drives returns.

·

Staff need safe, scoped access. The owner runs everything, but fulfilment and support staff should only touch their own areas. The team needed role-based access with destructive actions locked to super admins, plus an audit trail.

What we built ✓ verified in code

Custom storefront and admin panel on a shared Supabase backend

Two independent Next.js App Router apps share one Supabase project (Postgres, Auth, Storage). The customer site and the privileged back-office stay in separate deployments and codebases, communicating only through the shared database and Supabase Auth.

Razorpay payments with server-side signature verification

Online payments create a Razorpay order server-side (INR, in paise), run through the hosted Razorpay Checkout widget, and are verified on the server with HMAC-SHA256 signature checks plus a payment fetch before any order is recorded. The flow also supports Cash on Delivery and wallet-only orders.

Server-backed cart, coupons, and a store wallet

The cart persists in Supabase and loads through a SECURITY DEFINER RPC, with per-size stock caps. Checkout validates coupons against the database (validity window, minimum order, percentage vs fixed, max-discount cap, new-user-only and per-user usage limits) and lets shoppers apply store wallet balance, including wallet-only orders when the balance covers the full amount.

Apparel-grade sizing and inventory

Stock is tracked per size (XS through XXL) with out-of-stock sizes blocked at the product page. A measurement-driven size recommendation matches a shopper's body measurements to category-specific size charts managed from the admin panel.

Operator-grade admin with DB-enforced RBAC

The admin panel covers products, inventory, orders, returns and exchanges, customers, discounts, and wallets, plus a TipTap blog CMS, homepage-media customization, and PDF/Excel reporting with charts. Access is governed by a per-resource CRUD permission matrix enforced in both the database and the UI, with super-admin-only destructive actions and an activity log.

How it works

  1. 1

    Browse and pick a size. Shoppers land on a video-rich homepage, browse curated men's and women's collections or search, then open a product where they pick an in-stock size and can use the size guide or measurement-based recommendation, seeing sale pricing where it applies.

  2. 2

    Add to an authenticated, server-backed cart. Adding to cart requires login. The cart persists in Supabase per user with per-size quantity caps, so it survives across sessions and devices, and expired sessions cleanly reopen the login flow.

  3. 3

    Check out in three steps. Address, then Payment, then Review. Shoppers choose Online (Razorpay), COD, apply a coupon, and apply wallet balance. Totals are recomputed against a fresh cart at Place Order using centralized pure-function money math to avoid stale price or stock.

  4. 4

    Pay, then create the order atomically. For online payments the database order is created only after server-side signature verification succeeds, so cancelled or failed payments leave no order. The order, its line items, and any discount, coupon, and wallet deduction are written in a single create_order_from_cart Postgres function.

  5. 5

    Fulfil from the admin panel. The team works orders by status and date, prints packing slips, and updates status with courier and tracking, which triggers customer emails via Resend. Returns and exchanges are approved, processed, and can be refunded to the store wallet for re-use, all gated by the RBAC matrix.

The outcome

The result is a maintainable, brand-owned commerce platform that covers the full lifecycle from discovery to delivery to returns, with operations handled in-house rather than rented from a template. The brand controls its storefront experience and its back-office, with correctness pushed into the database: atomic order creation, payment-first integrity that prevents ghost or unpaid orders, verifiable money math, and authorization that stays in sync between the database and the UI. It is India-ready by design, with UPI, cards, net banking, COD, and a store wallet all in INR, and apparel-aware with per-size inventory and measurement-driven sizing.

The stack ✓ verified in code

Next.jsTailwind CSSSupabaseRazorpay

Want this for your business?

We design, build and ship production software and AI for founders — from first wireframe to live.

Book a free strategy call