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


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