[← back to projects]

[live]

Damascus Frontier

Ecommerce store for hand-forged blades

3 months

A direct-to-collector store for a blade maker — 71 products, Stripe checkout, and an admin that handles its own media.

Damascus Frontier screenshot 1
Damascus Frontier screenshot 2

The problem

A maker selling hand-forged swords and knives through marketplaces wanted their own store: a large photo-heavy catalogue, made-to-order pieces alongside in-stock ones, and payments that never oversell.

What I built

A Next.js store with guest checkout through Stripe, an admin panel for products, orders, and media, and all product media served from Cloudflare R2.

Core features

  • -Catalogue of 71 products and 686 images with category pages and filters
  • -Guest checkout through Stripe with server-side price, stock, and shipping checks
  • -In-stock and made-to-order fulfilment with separate quantity rules
  • -Admin for products, orders, and uploads (including iPhone HEIC photos and video)
  • -Storage page that finds and clears files no product uses

Engineering highlights

  • -Idempotent order fulfilment in one transaction, so the Stripe webhook and the success page can both confirm an order without double-counting stock
  • -Moved about 700MB of media to R2 without rewriting a single database row, then shrank git history from over a gigabyte to 1.3MB
  • -Found that cookie reads in the layout had silently made every page dynamic; fixed it so all 71 product pages are static again
  • -Presigned uploads straight to R2 to get past Vercel's 4.5MB request limit, with HEIC converted to JPEG in the browser
  • -Made-to-order items marked as back order, not out of stock, so search engines keep listing them

Tech stack

Next.jsReactTypeScriptTailwind CSSshadcn/uiPrismaPostgreSQLAuth.jsStripeCloudflare R2VercelGitHub Actions

Impact

  • -71 products and 686 images live, all verified returning successfully
  • -CI on every push: typecheck, lint, unit tests, migrations, and an integration test against Postgres

Want something similar built?

Happy to talk it through — drop me a line.

[get in touch]