YOUR MARKETING SITE.
NOW SHOPPABLE.
You don't need another theme. You need one fetch. Keep your Next.js site exactly as it is — plug Nexus in for products, cart, and Razorpay. One API, your domain, no rebuild.
Razorpay (UPI / Card / Wallet) + COD · INR · Your domain · Your SEO
1. Headless API — recommended
Your site stays your site. Fetch from Nexus, render with your components, checkout via Nexus.
No rebuild
2. Buy Button
Drop <BuyButton /> on any page — Next.js, Webflow, HTML. One variant, one click to Razorpay.
3. Hosted shop
Need it live today? Your catalog at /shop/yourbrand instantly.
4 STEPS TO LIVE
Keep your site. Add commerce. No schema fork.
01
Create store — 15 sec
Register → onboarding → pick subdomain yourbrand → INR → dashboard. One store per account, isolated by storeId.
POST /api/auth/register { email, password }
POST /api/stores/update { name: "Your Brand", subdomain: "yourbrand", currency: "INR" }
// Store isolated by JWT storeId02
Add products — one schema for anything
Same form for any product: title, vendor, productType, tags, price, stock, images. No hard-coded categories.
Example A
Canvas Tote — Natural
vendor: Your Brand · type: tote · tags: canvas, everyday · ₹1,800
Example B — same schema
Refill Kit — 3 Pack
vendor: Your Brand · type: kit · tags: refill · ₹2,400
03
Connect Razorpay — per store, India-native
Settings → Payments → paste Key ID / Secret (live or test) → toggle COD. Keys stay in DB, never in code.
Razorpay connected
rzp_live_•••• · COD: ON · INR
04
One fetch in your site
In any page, fetch Nexus. Render your grid, your PDP. Copy the URL from Settings → API.
app/products/page.tsx
const { products } = await fetch(
"https://bluenexus.vercel.app/api/storefront/yourbrand/products?limit=24",
{ next: { revalidate: 60 } }
).then(r => r.json());
return <Grid products={products} />BuyButton.tsx
import { BuyButton } from "@/components/shop/buy-button";
<BuyButton
variantId={product.variants[0].id}
subdomain="yourbrand"
price={Number(v.price)}
codEnabled
/>
// → POST /checkout → Razorpay → POST /verify → PAIDSecured at every layer
Middleware blocks /admin/* without JWT. APIs check storeId from JWT or x-admin-token. Storefront reads are public; writes verify Razorpay signature with that store's secret.