Case Ref. ZV-002

Home Work Spotlight Furnishings

Project 002

Spotlight Furnishings.

Carpet & furnishings store

An online shop for a carpet and home-furnishings business in Srinagar, Kashmir. Customers browse and order with cash on delivery. The owner runs the whole thing from a phone.

Spotlight Furnishings storefront: a carpet and home-furnishings shop in Srinagar, with a hand-knotted carpet unrolled beside the headline
Year
2026
Place
Srinagar, Kashmir
Role
Design + build
Type
Storefront + admin
1
Codebase, shop + admin
0
Oversells possible
Paise
Money, integer-safe
COD
Cash on delivery

The situation

A carpet and home-furnishings business in Srinagar. It sells Irani, Turkish and Arabic carpets picked one at a time, with curtains, quilts and bedding to go with them. The catalogue lived in the owner's head and a phone gallery. There was no way to show the range, take an order, or know what was actually in stock without walking to the shelf.

What we built

One storefront and one owner's panel, from a single codebase. Customers browse by category, order with cash on delivery, and pay when the carpet reaches their door. The owner adds products, prices, coupons and stock, reads every order, and runs the whole business from a phone. No laptop, no separate back office.

What changed

The shop is now something you can send a link to. Stock on the website is the stock on the shelf, prices are set once and apply everywhere, and every order arrives with an address and a phone number instead of a half-remembered WhatsApp thread.

The number on screen can always be explained

Stock only ever changes through two functions, and both write a ledger row in the same database transaction. So any quantity on screen traces back to the exact event that set it. Checkout decrements stock conditionally, inside a transaction, which makes overselling impossible even if two people buy the last carpet at the same instant. Money is stored as integer paise from end to end, so nothing drifts by a rounding error between the cart, the order and the books.

Built to be run from a phone, and locked down

Admin sign-in uses argon2id password hashing, with sessions kept in the database rather than JWTs, so any lost or shared device can be revoked on the spot. The first visit to the admin walks the owner through creating the account. From there the panel covers products, categories, coupons, orders, inventory, settings, and a full audit log of who changed what.

The fine print

Next.js 16 serves both the storefront and the admin from one codebase. Data lives in Supabase PostgreSQL in the Mumbai region, reached through Drizzle ORM, with images on Cloudinary and error monitoring through Sentry. Self-tests cover the money, phone, pincode and discount logic, and a hardening step revokes public database roles after every migration.

  • Next.js 16
  • React 19
  • TypeScript
  • PostgreSQL · Supabase
  • Drizzle ORM
  • argon2id
  • Cloudinary
  • Zod
  • Sentry
  • Tailwind CSS

Want something
like this?

Thirty minutes, no slides, no obligation. Tell us what you are trying to build and we will tell you honestly what it would take.

[email protected]