// the_story
The Real Thing
Every project before this had one thing in common: if it broke, nobody outside of me would notice. The Silver House was different. A real client, a real friend, a real business — 925 sterling silver jewellery from Srinagar, and Adeeb needed a storefront that could actually sell it. First freelance project. Still live. Still maintained by me today.
No safety net.
The Brief
The Silver House needed more than a static catalogue. Silver pricing is weight-based and market-driven — the price of a ring changes as the live spot price per gram changes. The client needed to update inventory without touching code. Orders happen through WhatsApp, not a payment gateway — that's how the business actually operates. And the product had to look like jewellery: clean, elegant, mobile-first.
Sanity v3 as the headless CMS meant Adeeb could add products, update categories, and manage the full catalogue through a clean dashboard — zero developer involvement for day-to-day operations. Next.js 15 App Router for the frontend. Tailwind for styling. Framer Motion for the scroll animations. Deployed on Vercel.
What I Built
Collections — gender and category filters over the full product catalogue, pulled live from Sanity via GROQ queries.
Product modal — multi-image slider, product code, weight in grams, and a price calculated on the fly from a live silver rate feed.
WhatsApp integration — no payment flow, no checkout. The "Order" button generates a pre-filled WhatsApp message with the product name, code, and weight. One tap to contact the seller directly. That's not a technical limitation — it's how Adeeb's business actually works, and building around it rather than against it was the right call.
Dynamic pricing — weight × live silver rate per gram. When the market moves, every price on the site moves with it.
Wishlist — persistent via localStorage. No login required.
The Part Nobody Sees
The hardest part of a freelance project isn't the code — it's understanding that the client's workflow is the product. Adeeb doesn't want to open a terminal. He doesn't want a Stripe integration he doesn't need. He wants to add a new bangle collection on a Tuesday afternoon and have it live by evening. The CMS schema design, the content editing experience, the naming of fields — those decisions matter as much as the frontend architecture.
Building for a portfolio teaches you to code. Building for a real user teaches you to think.
Still Running
The Silver House is live. Products get updated. New collections go up. The silver price feeds through. I push fixes when something needs attention. That ongoing relationship — maintaining something in production for someone who depends on it — is a different kind of responsibility than shipping a side project and moving on.
Phase Two
A week after launch, Adeeb messaged me. He'd been manually entering products into the Sanity dashboard — name, code, weight, category, images, one by one. He'd done 100. There were 2,000 left. He was done.
"Bhai I can't do this."
I put down the TypeScript and picked up Python.
The Script That Saved Him Weeks
The problem was straightforward: a spreadsheet of ~2,000 SKUs with metadata and a folder of product images, none of it in Sanity. The Sanity HTTP API can accept document mutations in bulk. A Python script could bridge the two — read the sheet, upload the images as Sanity assets, and create the product documents programmatically.
AI came in for the product descriptions — GPT to generate a clean two-liner for each SKU from just the name, weight, and category. Not perfect, but Adeeb reviewed and confirmed the outputs were solid for a first pass. Every product, described, uploaded, and live.
The script ran for 20 minutes. It posted everything that would have taken Adeeb weeks — if not longer, because if we're being honest, he would have quit at 200.
2,000 products. 20 minutes. One friend slightly less tired.
What I Learned
- The tech stack should disappear. The client doesn't know Sanity from a spreadsheet. They know whether they can update their products easily. Choosing the right CMS was a UX decision, not a tech decision.
- WhatsApp is a payment gateway. In a lot of real-world small business contexts, the order flow goes through messaging. Building a Stripe integration nobody asked for would have been showing off, not solving the problem.
- Dynamic pricing is a data integrity problem. When every price on the site is computed from a live rate, a bad API response means bad prices. Caching, fallbacks, and error states aren't optional.
- Maintenance is the job. Shipping is the beginning, not the end. The Silver House being live and functional today — not just at the launch moment — is what makes it a delivered product.
- Know when to switch tools. The frontend problem was solved. The new problem was a data pipeline problem. Putting down Next.js and picking up a Python script wasn't a detour — it was the right call. The best engineers aren't loyal to a stack; they're loyal to the solution.
For Adeeb — hardworking, ambitious (but lazy) , and one of the people who makes you want to build things that actually matter.



