Case Study / Development

Ayooh Naturals: E-Commerce Site for a Wellness Brand.

From a blank canvas to a live store processing real orders — how I designed, built, and scaled an e-commerce platform for a wellness products brand rooted in Haridwar, Uttarakhand.

Client

Ayooh Naturals

Timeline

Jul 2024 - Mar 2025

Last Updated

Feb 2026

Status

Live

Ayooh Naturals storefront — Premium Essential Oils & Wellness Products

Context

The Brand

Ayooh Naturals is a Haridwar-based wellness company offering pure essential oils, traditional attars, carrier oils, room fresheners, and aromatherapy products — ethically sourced directly from farmers.

The Problem

The brand had real products and a loyal wholesale base, but no online retail presence. Orders came through WhatsApp and word-of-mouth — there was no product catalogue, no payment system, and no way to scale.

My Role

I was the sole developer — responsible for architecture, design, content modelling, payment integration, and ongoing feature development post-launch.

The Idea

A brand that sources from the foothills of the Himalayas deserves a storefront that feels as clean as its products.

The Origin

The client approached me with a simple ask: make the products available online. What started as a basic product listing grew into a full e-commerce platform with CMS-driven content, a loyalty programme, and a blog — built iteratively over 8 months.

Core Assumptions

  • A clean, content-first design would match the brand's natural and premium positioning.
  • Sanity CMS would let the client manage products without developer involvement.
  • Razorpay was the right payment gateway for the Indian market.
  • The real growth channel would be returning customers, not ad traffic.

Build Process

v0.1

Foundations & Content Model

Before writing a single UI component, I spent the first two weeks mapping out the product taxonomy. Ayooh Naturals had over 30 SKUs across 5 categories — essential oils, carrier oils, attars, room fresheners, and diffuser blends. I designed the Sanity schema to handle product variants, pricing, category taxonomy, and rich media from day one.

Sanity schema — product document type (simplified):
export default {
  name: 'product',
  type: 'document',
  fields: [
    { name: 'title', type: 'string' },
    { name: 'slug', type: 'slug', options: { source: 'title' } },
    { name: 'category', type: 'reference', to: [{ type: 'category' }] },
    { name: 'price', type: 'number' },
    { name: 'mrp', type: 'number' },
    { name: 'images', type: 'array', of: [{ type: 'image' }] },
    { name: 'inStock', type: 'boolean' },
    { name: 'description', type: 'array', of: [{ type: 'block' }] }
  ]
}
v1.0

Store Launch — Core Shopping Experience

The first public release shipped in March 2025 with the complete product catalogue, category filtering, a Razorpay-powered checkout, order tracking via a custom order management flow, and a mobile-first responsive layout built to reflect the brand's natural aesthetic.

Key Decision

Used Next.js App Router with server components for product pages — giving fast page loads and excellent SEO out of the box, critical for a product-catalogue site.

Trade-off

Chose Razorpay over Stripe for its zero-friction UPI and NetBanking support. This made the Indian checkout process feel completely native. However, Razorpay's documentation and webhook reliability were challenging to work with — requiring custom solutions for idempotent order handling.

v1.1

Product Reviews & Advanced Filtering

Three months post-launch (September 2024), I added a product review system and enhanced category filtering. Reviews were stored in the database and surfaced via a star-rating component on product pages. Filtering was upgraded to support multi-tag selection, price range, and in-stock toggle — improving the browsing experience significantly as the catalogue grew.

Technical Lift

Built a debounced client-side filter state that synced to URL params — so filtered views could be shared and preserved across page refreshes without any server round-trip.

User Insight

Needed a way to lessen the friction by reducing the number of steps during checkout.

v2.0

Rewards Programme & Blog

In February 2026, I delivered two major features that transformed the store from a simple shop into a retention engine. The Rewards Programme lets customers earn points on purchases, referrals, and social actions — redeemable for discounts. The Blog section, built on Sanity, gave the brand a platform to publish guides on aromatherapy, essential oil usage, and wellness — driving organic traffic.

Rewards Engine

Custom-built points ledger with a referral system — new users get 15% off (up to ₹300) and referrers earn 200 points. Fully managed through the Sanity dashboard and a custom admin view.

Blog & SEO

Structured the blog around long-tail keywords for essential oil searches in India. The first 5 posts targeted queries like 'eucalyptus oil for cold' and 'how to use diffuser oil at home'.

Validation & Reality

The store went live in March 2025 and immediately started processing orders from customers who previously ordered via WhatsApp. Within a month, the client had fully transitioned away from manual ordering. The Rewards Programme launched in February 2026 drove a measurable spike in repeat purchases.

We used to take orders on WhatsApp and forget half of them. Now everything is tracked, and customers come back on their own.

What Worked

  • Sanity CMS — client manages products independently
  • Razorpay UPI checkout reduced cart abandonment
  • Mobile-first design matched customer device patterns
  • Rewards programme drove repeat purchase behaviour

What Didn't

  • Initial SEO wasn't prioritised — fixed in v2.0 with the blog
  • No abandoned cart recovery at launch
  • Image optimisation was an afterthought — caused slow LCP on mobile early on

Challenges

Inventory & Variant Management

Ayooh Naturals sells the same oil in multiple sizes (30ml, 100ml, 250ml) each at different price points. Modelling this cleanly in Sanity — and surfacing it correctly in the cart — required multiple iterations of the schema and checkout logic.

Razorpay Webhook Reliability

Payment webhooks occasionally arrived out of order or were delayed, causing order status inconsistencies. I implemented an idempotent order status handler and a fallback polling mechanism to resolve this without user-visible failures.

Client Content Management

The client had never used a CMS before. The initial Sanity schema was too technical — field labels like 'slug' and 'portableText' were confusing. I restructured the studio UI with custom input labels and simplified the publishing workflow, making the client self-sufficient within a week.

Outcome & Key Learnings

The Current State

Ayoohnaturals.com is live, actively processing orders, and under ongoing development. The client now manages all product updates and blog content independently through Sanity. A current site rework is underway to modernise the visual design and improve mobile performance.

Key Learnings

  • 01 CMS design is product design — bad field labels cost real hours.
  • 02 Webhook idempotency is not optional in payment systems.
  • 03 The client's self-sufficiency is a feature, not a bonus.
  • 04 Speed of checkout matters more than breadth of features.

Next Steps

  • / Complete ongoing site visual rework.
  • / Implement abandoned cart email recovery.
  • / Expand the blog with SEO-optimised content.
  • / Add automations to auto manage the site and content updates.

Growth

Current Phase

All

Happy Customers

Visit Ayooh Naturalsarrow_forward

Looking for Essential Oils or Natural Products?