Work / 2026

Stammer Knives

An online shop and admin console for my brother's handmade knife business, so he can sell knives, take commissions and run the site without me.

Role
Built for my brother. Design together, build and hosting by me.
Built with
Next.js, React, TypeScript, PostgreSQL, Drizzle, Stripe, Tailwind CSS, Docker

Visit the shop

The Stammer Knives gallery page, a grid of photos of handmade chef's knives with wooden and resin handles.

Why I built it

My brother makes chef’s knives by hand in Plymouth. Every knife is one of a kind, so a standard shop template fitted badly, and he needed to run the site himself without asking me to change things.

What it does

  • A shop for one-off pieces, with photo galleries, search, a wishlist and Stripe checkout.
  • A “workshop seconds” shelf where buyers make offers on knives with small flaws, and he accepts, declines or counters.
  • Commission enquiries for custom knives, plus contact and newsletter forms.
  • Customer accounts with order history and shipping emails.
  • An admin console for stock, orders, offers, enquiries, reviews and the gallery, with editable page copy and traffic figures, so he never has to touch code.

Engineering

  • Next.js App Router with PostgreSQL through Drizzle: 15 tables, including an event log that records every step of an offer negotiation.
  • Payments through Stripe, with orders created from Stripe’s webhooks rather than trusting the browser.
  • An image pipeline that compresses uploads with sharp and gives each knife a readable URL, plus a sitemap for search engines.
  • A small CMS backed by the database, so page text can change without a deploy.
  • Push to deploy. A push to main rebuilds the Docker image on a self-hosted GitHub Actions runner and health-checks the site. It’s live in about a minute and a half.
  • Self-hosted on my own server behind a Cloudflare Tunnel. I’ve moved it between machines once, with about 15 seconds of downtime.