SharpSpace LTD
A production e-commerce storefront for a Kenyan electronics retailer, serving every product page as static HTML while staying fully CMS-driven. Next.js 16 React Server Components query Sanity directly with no client-side fetching, an embedded Studio lets the client run the catalogue on their own domain, and five JSON-LD entity types give crawlers machine-readable structure.
It contains product catalogue, categories and rich descriptions authored in an embedded Sanity Studio CMS and queried with GROQ. The storefront renders as React Server Components with statically generated product pages. Cart and wishlist run on Redux Toolkit, and the interface is a token-driven design system in Tailwind CSS v4.
Frontend
Product sections are async React Server Components that await Sanity directly - no client-side fetching, no loading states, no API layer to maintain. generateStaticParams prerenders every product and category route, so all pages ship as static HTML while staying fully CMS-driven.
Redux Toolkit holds only what the user creates: four slices for cart, wishlist, quick-view and product details. Server data stays on the server.
Backend
Sanity is the single source of truth, with the Studio embedded in the app via an optional catch-all route. The catalogue is managed on the same domain they sell from, with no second deployment.
GROQ queries back the storefront, from catalogue reads to URL-driven filters (category, price, search) and a deals query ranked by discount depth. Images resolve through @sanity/image-url so transforms happen at the CDN; long product copy is Portable Text, so editors get real rich text.
SEO
Five JSON-LD components (Organization, Product, Category, Article, Breadcrumb) give crawlers machine-readable structure, and one produced the subtlest bug in the project: the schema sat in a "use client" layout, so it rendered empty in the server HTML and only appeared after hydration — invisible to the crawler it existed for. The fix was moving it into the true server layout rather than patching the symptom.