Spiceroad
A premium store for specialty spices and foods. Full payments (Stripe, PayPal, Moyasar), a multi-language storefront (next-intl), advanced product management, email marketing (Resend + React Email), media uploads (UploadThing), and a Google Maps store locator. Built with Next.js 16, Neon Postgres, and Drizzle ORM.
Specialty food crosses borders, and so should the checkout. Spiceroad pays three ways — Stripe, PayPal, Moyasar — speaks more than one language, sends its own receipts and shipping updates, and maps every seller, all on a typed, serverless Postgres stack.
What it solves
- Specialty-spice sellers lack a professional store with multi-currency pricing and global shipping estimates.
- Managing stock by hand leads to overselling and late orders.
- With no automated email for confirmations and shipping, customers are left guessing.
- Buyers split across Stripe, PayPal, and local gateways, so several integrations are unavoidable.
- Product image uploads are slow or lean on an external CDN.
Impact
Stripe, PayPal, COD
Built on next-intl
Resend with templates

Architecture
Data flow
- Browse → SSR home, ISR product pages
- Search by category / price → Drizzle query
- Add to cart → Server Action (public.carts + sessionCartId)
- Sign in → merge sessionCart into account
- Checkout → Stripe / PayPal → create order
- Payment webhook → validate + update status
- Resend sends receipt (React Email)
- Dashboards: order history; admin sales / inventory
Engineering decisions
Neon Auth + sessionCartId cookie
A guest cart is persisted to the user account on sign-in via a sessionCartId cookie, so there is no cart loss on logout.
Drizzle ORM (type-safe)
Prevents runtime query errors with full TypeScript support for migrations.
Separate Neon Auth schema
neon_auth.user (managed by Neon, read-only) plus public.* app tables (managed by drizzle-kit) decouple app logic from auth.
UploadThing for product images
Handles resize, optimize, and CDN delivery with no S3 key management.
Resend for transactional + marketing email
React Email templates are JSX — type-safe and composable.
Multi-payment fallback
Stripe → PayPal → Cash on Delivery, each with its own webhook validation.
Server Actions for cart
No REST API layer — Next.js server actions keep cart state in the database and session simultaneously.
Gallery
