Case study
Radheshyam Glass House — End-to-End Digital Build
Overview
Radheshyam Glass House is a 30-year-old artisan mirror and glass business in Ulhasnagar, Maharashtra that operated entirely on word-of-mouth with no digital presence. I designed and built their complete digital setup from scratch: a performant, content-managed storefront that lets a non-technical client run their own catalogue, gallery and pricing — and a separate full-stack CRM (React, Node.js, PostgreSQL) that tracks every customer inquiry through a 9-stage inquiry-to-dispatch workflow with JWT-based role access.
Problem Statement
Local artisan businesses with premium products lose customers to competitors who simply show up on Google. The client's target audience — interior designers, hotels, homeowners — starts their search online. Without a website, Radheshyam Glass House was completely invisible to this discovery channel.
The second, harder problem: even after building a website, who maintains it? The client is non-technical. Any solution requiring a developer for routine content updates would become a bottleneck within weeks. The real product challenge was building something the client could own independently — forever.
Product Thinking
Target users:
Key use cases:
Key Features
Dynamic product collections
CMS-driven catalogue with categories (Designer Mirrors, Illuminated Mirrors, etc.), with individual detail pages per product driven by slug-based routing.
Live price calculator
H × W input gives instant ₹ estimate at ₹600/sqft base rate. Pure CSR React state — zero API calls. Rate is configurable in lib/constants.ts.
Project gallery
Showcases completed installations (residences, hotels, offices) with Sanity-managed photos served via CDN with auto-format transforms.
Enquiry form + email
Server Route Handler → Resend API → owner's inbox. WhatsApp CTA runs in parallel as a fast-response channel.
Headless CMS studio
Sanity Studio deployed on separate subdomain. Client has Editor-role access to manage products, gallery images, and hero banners independently — zero developer dependency.
CRM — Inquiry to Dispatch
The storefront captures demand; the CRM is where the business acts on it. It is a separate full-stack app — React frontend, Node.js API, PostgreSQL — with JWT-based authentication and role access so the owner and staff see different capabilities.
Tech Stack with Reasoning
Next.js 14 App Router
ISR support is built-in and zero-config on Vercel. File-system routing maps cleanly to product slugs. Server Components cut client JS bundle for content-heavy pages. Route Handlers replace a separate Express backend for the email endpoint.
Sanity.io
Sanity Studio can be deployed to a dedicated subdomain and given to the client as a standalone admin panel — no account dependency on developer credentials. GROQ is more flexible than REST for nested content queries. CDN image transforms (crop, resize, auto-format) are baked into the URL, so no image processing code needed.
Resend over Nodemailer/SMTP
Serverless functions have execution time limits and cold starts — SMTP connections often time out. Resend's HTTP API is reliable on serverless with better deliverability defaults and a generous free tier.
Vercel
ISR + Edge CDN without infra management. Free tier is sufficient for a local business site with modest traffic. Deploy previews work out of the box.
Architecture & Data Flow
Performance Optimisations
Challenges & Solutions
Challenge 1 — Non-technical client who can't use a GitHub repo or call a dev
The client manages a physical store and has no technical background. Any CMS requiring developer access for updates would break within weeks.
✓ Solution: Deployed Sanity Studio to a dedicated subdomain. The client logs in with their own Sanity account (Editor role). Documented a step-by-step guide covering exactly what they can manage. Zero developer dependency for content — permanently.
Challenge 2 — Pricing is variable — per product and per custom finish
Glass pricing depends on size, thickness, finish, and complexity. A single flat rate calculator would mislead customers.
✓ Solution: Two-layer system. Global base rate in constants.ts for the calculator widget (labelled as indicative). Per-product pricing fields in Sanity for the detail page. Calculator clearly prompts users to contact for custom finishes.
Challenge 3 — ISR content lag — client wants "publish now" behaviour
ISR revalidates every 60 minutes. If the client adds a product, it won't appear immediately.
✓ Solution: Documented the 1-hour revalidation window clearly upfront. For urgent cases, a manual Vercel redeploy takes 30 seconds. Long-term fix: Sanity webhook → Vercel revalidatePath() for on-demand ISR — noted as a future improvement.
Impact & Results
0 → Live
Digital presence built from scratch
~60%
Image payload reduction via CDN + Next/Image
<2s
Target LCP on mobile networks
0 devs
Needed for content updates post-launch