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

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
mainrebuilds 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.


