Logo

Command Palette

Search for a command to run...

Command Palette

Search for a command to run...

Writing
PreviousNext

Building Shagnest: When the Code Is the Easy Part

A case study on Shagnest — a full Next.js and Appwrite e-commerce platform I built for a home-essentials brand. The build went well. The launch taught me that a project's success depends on things no developer controls.

Not every project ends the way you draw it up. This is one of those, and I think it is more useful than the ones that go perfectly.

Shagnest is a home-essentials brand in Agartala — my city. They source products from IndiaMart and China and sell them on Flipkart and Amazon: jars, staplers, oil bottles, mats, cleaning mops, the small stuff that quietly fills every home. My brother knew the people behind it personally, and that is how the work came to me. Same city, a real introduction, a handshake instead of a job post.

What they wanted was simple to say and big to build: their own website. Somewhere to sell directly, and — just as important to them — a clean catalogue they could put in front of offline wholesalers instead of forwarding a mess of marketplace screenshots.

The build

Because the products were homely and practical, I built the whole thing around a home-essentials theme — warm, uncluttered, the kind of storefront that makes an oil bottle look like something you would actually want on your counter.

Under that, it was a proper commerce platform, not a brochure. Next.js 16 on the front, Appwrite on the back, and a full admin dashboard so the owners could run the store themselves:

  • Product catalog with categories, inventory, and featured items
  • Cart, wishlist, checkout, and order management
  • Coupons with server-side validation so discount codes could not be forged from the client
  • Sales and stock-consumption reports so they could see what was actually moving
  • Customer accounts with Google OAuth, plus reviews
  • Automated emails through Nodemailer and PDF generation for documents

It was the most feature-complete thing I had built at that point. Everything worked. Everything was theirs to run.

And then the part I did not control arrived.

When good code isn't enough

Here is the uncomfortable lesson, and I am going to be honest about it because pretending otherwise helps no one.

A website does not sell anything on its own. It needs a domain pointed at it. It needs payment keys wired in. It needs someone to actually market the thing so humans show up. Those pieces sat on the client's side of the fence — and they never fully came. The domain lagged. The Razorpay keys lagged. The marketing never really started. So the store went live into silence: a fully working shop with almost no one walking through the door.

Traffic without marketing is a rounding error. And a live backend still costs money to run whether one person visits or a thousand do. When the visits did not come, keeping servers up to serve nobody stopped making sense. So the dynamic backend was shut down to save cost, and Shagnest was quietly downgraded to what it is today: a static product showcase. The catalogue still looks good. But purchases and enquiries all happen over WhatsApp now, and the real business runs where it always did — on Flipkart, where they still move 50 to 60 products a day.

I could be bitter about that. I am not. The code did its job. What it could not do was hold up the half of the project that was never mine to hold.

What I actually took from it

This is the project that taught me a developer's responsibility does not end at "it works."

If I built Shagnest again, I would treat the non-code dependencies as part of the deliverable, not someone else's homework. I would not call a store "done" until a domain, payment keys, and at least a first marketing push were nailed down — because a beautiful, functional site that nobody visits is, commercially, a very expensive static page.

The engineering here still stands on its own: a complete, self-hostable commerce platform with real admin tooling, built clean. But the honest headline of Shagnest is not a traffic number. It is a lesson I now carry into every client conversation before the first line of code — who is responsible for getting people to actually show up, and are they ready to do it?

The best code in the world cannot answer that question for you.