
Your Iyanat
A jewellery storefront built for the Bangladeshi market, with checkout and after-sales workflows.
An individual e-commerce build for a luxury ornament retailer: six jewellery categories, Taka pricing, four-zone delivery, coupon and flash-sale logic, order tracking and an after-sales surface, backed by a PostgreSQL database modelled with Prisma.
- Role
- Built the frontend and the API, including the schema, validation layer and checkout flow.
- Source status
- Reported — The deployment is public and was inspected, but the frontend and backend repositories are not published, so the data model and API internals could not be read.
+3 more in the case study
4 min read · 10 sections · 10 technologies
Your Iyanat is a luxury jewellery store aimed at the Bangladeshi market. The interesting constraint was never the catalogue; it was the checkout. Prices are quoted in Taka, delivery is priced by zone, and the payment methods a Bangladeshi customer actually uses are mobile financial services and cash on delivery.
This page is written carefully: the storefront is public and I have inspected it directly, but the application code is not published, so anything about internals is marked as reported rather than verified.
What the product does
Six jewellery categories
Bracelets, Bangles, Earrings, Pendants, Necklaces and Rings, with a gift finder to route shoppers to a starting point.
Taka-native pricing
Prices render with the ৳ symbol, for example
Eclipse Bangle ৳ 960andLunar Ring ৳ 3,200.Delivery pricing
A flat
৳50 Delivery Anywherecharge advertised across Bangladesh, alongside a reported four-zone model in the application logic.Coupon and flash-sale logic
IYANAT15is surfaced as 15% off with a minimum order of ৳500, alongside member-only flash sales.Order tracking and after-sales
Dedicated Track Order, Returns, Custom Orders and After-Sales surfaces, plus a concierge help channel.
Local payment methods
The storefront states
Pay safely with bKash, Nagad, cards, or cash on delivery.
Architecture
- 01Next.js storefrontApp Router, Turbopack build
- 02Express APIJWT-authenticated routes
- 03Prisma clientTyped access layer
- 04PostgreSQLJewellery, orders, users
The deployed storefront is a Next.js App Router application; 374 static chunks and a Turbopack chunk are present in its HTML, with no client-side data-fetching library in use.
Choosing PostgreSQL and Prisma over a document store is the decision that shaped most of this project. A jewellery catalogue is relational in a real way: an order has line items, a line item points at a variant, a variant carries its own stock, and a customer can have many orders. Document modelling that shape means either duplicating data or assembling it on every read.
Engineering notes
Validation at the boundary
Zod sits between the HTTP layer and the database. The reason to validate there rather than in the database is that the schemas describe intent: a coupon payload is not just any object, it is a code, a percentage, an expiry and a minimum. Expressing that in one schema means the route handler, the type inference and the runtime check all agree, and an invalid payload is rejected before it can reach a transaction.
Delivery zones as a pure function
Four-zone delivery pricing is the kind of rule that reads like data and behaves like code. The useful move is to keep it as a pure function that takes a district and a cart total and returns a number, so that the checkout screen, the order creation endpoint and the admin estimate all call the same implementation instead of three copies of the same conditional.
Checkout and payment
The reported integration is SSLCommerz, which is the gateway that fronts bKash, Nagad and card payments for Bangladeshi merchants. That matches what the storefront advertises to customers. The shape of the flow is the standard one: create an order in a pending state, hand the customer to the gateway, and move the order to paid only when the gateway calls back. The callback is the only thing that should be allowed to mark an order as settled.
Role-based access
The application distinguishes customer, admin and seller capabilities using JWT-based auth. The admin surface adds business statistics and low-stock workflows on top of the catalogue, which is the part that makes the difference between a storefront and a shop that its own staff can run.
Trade-offs
- A relational store for a read-heavy catalogue. Prisma and migrations cost more upfront than a document store, but order and stock integrity are enforced by the database rather than by application discipline.
- A separate API service. More deployments and one more network hop, in exchange for a clean boundary and a backend that can move independently of the storefront.
- Server-rendered marketing surface. The homepage ships its full copy in the HTML, which is what makes it indexable; the trade is that the cached HTML is regenerated whenever catalogue or promotional data changes.