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.

- 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.