Start selling with a single photo. A minimal nas.com-style creator commerce platform.
- Creator storefronts at
/s/<handle> - Product pages with Stripe Checkout
- Magic-link auth (no passwords)
- Next.js 16 (App Router, Turbopack)
- Supabase (auth + Postgres + RLS)
- Stripe Checkout
- Tailwind CSS
- Deployed to Vercel
npm install- Go to supabase.com → create a new project.
- Once it's ready, open the SQL Editor and paste the contents of
supabase/schema.sql. Run it. - In Settings → API, copy these values into
.env.local:Project URL→NEXT_PUBLIC_SUPABASE_URLanon publickey →NEXT_PUBLIC_SUPABASE_ANON_KEYservice_rolekey →SUPABASE_SERVICE_ROLE_KEY(server-only)
- In Authentication → URL Configuration, add your site URL
(e.g.
http://localhost:3300) to the redirect allowlist.
- Go to stripe.com → grab your test keys.
- Copy the secret key into
.env.localasSTRIPE_SECRET_KEY. - For local webhook testing:
Copy the
stripe listen --forward-to localhost:3300/api/stripe/webhook
whsec_...it prints into.env.localasSTRIPE_WEBHOOK_SECRET.
cp .env.example .env.local
# fill in the values abovenpm run dev| Path | What it is |
|---|---|
/ |
Landing page |
/login |
Magic-link sign in |
/dashboard |
Edit your store + add products |
/s/<handle> |
Public storefront |
/s/<handle>/<id> |
Public product page with Stripe checkout |
/api/checkout |
Creates a Stripe Checkout session |
/api/stripe/webhook |
Marks orders paid on checkout.session.completed |
- Push this repo to GitHub.
- Import it on vercel.com.
- Paste the same env vars from
.env.localinto Project Settings → Environment Variables. - After deploy, configure the Stripe webhook:
- Stripe Dashboard → Developers → Webhooks → Add endpoint
- URL:
https://<your-vercel-domain>/api/stripe/webhook - Events:
checkout.session.completed,checkout.session.expired - Copy the signing secret into Vercel as
STRIPE_WEBHOOK_SECRET, redeploy.
- In Supabase Authentication → URL Configuration, add your Vercel domain to the redirect allowlist.
- Image uploads (products use image URLs)
- Stripe Connect (all payments land in the platform account — not per-seller payouts)
- Community / messaging
- Ads / analytics