ShopWell — wellness marketplace
An Australian wellness e-commerce storefront and marketplace scaffold: curated product catalogue, buyer accounts, seller/admin areas, and Stripe Checkout with webhook-backed order state. Compliance-oriented copy (lifestyle products, no therapeutic claims).
- Live demo: shopwell-two.vercel.app
- Source: github.com/wencano/shopwell
Problem
Launching a credible wellness retail experience needs more than product grids: auth, role-aware areas (buyer, seller, admin), AUD pricing, and a payment path that keeps order state consistent after redirect-based checkout.
Solution
Next.js App Router app with Supabase Auth for sessions and middleware-protected routes. Application data flows through server-side Drizzle access to Postgres so keys and RLS stay controlled. Checkout creates pending orders, hands off to Stripe, and completes via signed webhooks.
Impact
- End-to-end commerce flow from catalogue browse to paid order, suitable as a portfolio-grade marketplace baseline.
- Seed data and scripts make demos and local onboarding repeatable for reviewers.
Lessons learned
- Webhook idempotency and signature verification are non-negotiable for Stripe order state.
- Keep auth (Supabase) and app data access (Drizzle on server) responsibilities explicit early.
- AU-focused defaults (AUD, compliance copy) are cheaper to bake in at the start than retrofit.
Tech stack
- Frontend: Next.js (App Router), React, TypeScript
- Auth & database: Supabase Auth, PostgreSQL (Drizzle ORM)
- Payments: Stripe Checkout + webhooks
- Testing: Vitest, Playwright
Screenshots
Storefront
