A client approached me with a simple ask: an online store for handcrafted bangles from Thrissur, Kerala. No Shopify. No monthly fees bleeding into margins. Just a clean, fast store that feels like the craft it sells.
Here's how I shipped a production-grade e-commerce platform — payments, inventory, emails, admin dashboard, the works — for under ₹1,000 in initial costs.
Bangles by Prakash Duo is a family-run bangle house from Thrissur, Kerala. They sell handcrafted traditional bangles — antique gold, AD stone, glass, thread, bridal sets. Everything is handmade. The business was running entirely on Instagram DMs and phone calls.
They needed a proper storefront. But the budget was tight — this is a small craft business, not a VC-funded startup.
| Service | Cost | Tier |
|---|---|---|
| Vercel (hosting) | ₹0 | Hobby (free) |
| Supabase (database) | ₹0 | Free tier — 500MB, 50K rows |
| Resend (transactional email) | ₹0 | Free tier — 3,000 emails/month |
| Razorpay (payments) | ₹0 setup | 2% per transaction, no monthly fee |
| Domain (.store TLD) | ~₹800/year | First year promo |
| Cloudflare (DNS) | ₹0 | Free |
| Total initial cost | ~₹800 |
No monthly hosting bills. No email service subscriptions. No payment gateway monthly fees. The only recurring cost is the domain renewal (~₹800/year) and Razorpay's 2% per transaction.
For context, a basic Shopify plan costs ₹1,999/month. That's ₹24,000/year before you've sold a single bangle.
Next.js 14 (App Router) — React framework with server-side rendering, API routes, and static generation. One codebase for both the storefront and the admin dashboard.
TypeScript — Catches bugs before they hit production. Non-negotiable for payment handling code.
Supabase (PostgreSQL) — Database, auth, and real-time subscriptions. The free tier is generous — 500MB storage, 50,000 rows, 2GB bandwidth. More than enough for a small catalogue store.
Razorpay — UPI, cards, net banking, wallets. No setup fee, no monthly fee. Webhooks for reliable payment confirmation. The 2% transaction fee is the only cost, and it's standard.
Resend — Transactional emails (order confirmation, shipping, delivery, cancellation). 3,000 emails/month free. Clean API, reliable delivery.
Tailwind CSS + shadcn/ui — Utility-first CSS with pre-built accessible components. Fast to build, easy to customise.
Framer Motion + GSAP — Animations. The landing page has scroll-triggered reveals, parallax effects, and micro-interactions that make it feel premium without being heavy.
Vercel — Deploy on push. Edge network. Free SSL. Zero config.
Five branded HTML email templates:
All emails use table-based layouts for Gmail/Outlook compatibility, branded with the store's heritage aesthetic.
Static product data + live inventory. Products are stored as static JSON (fast, no DB queries for browsing). Inventory is synced live from Supabase. This gives you the speed of static pages with the accuracy of real-time stock.
Webhook as single source of truth. The Razorpay webhook is the only codepath that commits stock, sends emails, and updates payment status. The client-side verification endpoint only checks the signature — it doesn't modify any state. This eliminates race conditions.
Stock reservation with cleanup. When a customer starts checkout, stock is reserved in the database. If they abandon (close the modal, browser crash), a daily cron job cleans up stale reservations. If they dismiss the payment modal, stock is released immediately.
No external auth service for customers. Customers don't need accounts. They enter their details at checkout, get an order ID, and can track their order. Reduces friction, increases conversion.
A complete e-commerce store that:
The client went from Instagram DMs to a proper storefront in under two weeks. Their customers can now browse, select sizes, pay via UPI, and get order confirmation emails — all without a single WhatsApp message.
Rate limiting from day one. I added it late. Should have used Upstash Redis rate limiting on the checkout endpoint from the start.
Batch stock reservation. The current implementation reserves items one-by-one in sequence. At scale, this should be a single database transaction. For a small catalogue store, it's fine.
Customer accounts. Currently there are no customer accounts — just order IDs. For repeat customers, accounts with order history would be nice. But for launch, the frictionless checkout was the right call.
You don't need Shopify. You don't need ₹2,000/month hosting. You don't need a payment gateway with setup fees.
With the right stack, you can build a production-grade e-commerce store for the cost of a domain name. The free tiers of Vercel, Supabase, and Resend are not toys — they're production-ready services that scale.
The constraint wasn't budget. It was knowing which tools to pick.
Stack: Next.js 14 · TypeScript · Tailwind CSS · Supabase · Razorpay · Resend · Vercel