The editor, the machine, the services and the habits behind the work on this site — named, with the reason each one earns its place.
Building the web
What the sites and platforms here are made of.
Next.js + TypeScript
see it →The App Router, static wherever a page can be static. This site is the example — every route you have opened was prerendered as HTML before a line of JavaScript ran.
React
For the parts that genuinely need state — the booking flow, the scoping wizard, the assistant. Everything else stays a server component so it costs the visitor nothing.
Tailwind CSS
Used where a design system earns it. Much of this site is deliberate inline styling instead, because one-off compositions do not benefit from a utility layer.
Vercel
Deploys by CLI, static output, image optimisation. Chosen because the framework and the platform being the same removes a category of problem.
WordPress
The deepest practice, and the tools that make it repeatable.
WordPress + WooCommerce
see it →Plugin development, deep customisation and commerce built into the same install as the services — the pattern behind the clinic build.
Elementor Pro
see it →On builds where a non-technical team will keep restyling the site. Chosen deliberately, with the licence and the lock-in accounted for.
Own plugins
see it →Six of them, all free to download — page speed, Elementor animation, link management, prescriptions into a WooCommerce cart.
Own rescue tooling
see it →A forensic analyser and a Playwright utility that rebuilds a whole site from a backup archive. Both written because the manual version kept costing days.
Data and backend
Where the state lives.
Supabase / PostgreSQL
see it →Relational by default, with row-level security so the access rules sit with the data rather than in application code that has to remember.
Node.js
see it →The pipelines and scrapers behind the AI work — the YouTube back-catalogue scorer runs on it.
PHP
Because plugins are PHP, and pretending otherwise is how people ship WordPress code they cannot maintain.
Resend
Transactional email over plain fetch, no SDK. One POST does not justify a dependency and a supply chain.
AI and automation
The layer that removes the repeated work.
Claude, via the Anthropic SDK
see it →The model behind the transcript, archive and relevance-scoring systems in the work here.
Retrieval and vector search
see it →Chosen over fine-tuning almost every time, because facts change and answers have to be attributable to a source.
n8n
see it →For the connective automation where a workflow tool is genuinely the right answer, self-hosted when the data should not leave.
Claude Code
Agentic development as part of the actual workflow rather than an experiment — including on this site.
How the work runs
Habits that are load-bearing, not preferences.
The build is the check
No dev server in this workflow. Changes are built, deployed and verified on a real URL, because a thing that only works locally has not been tested.
Push and deploy in parallel
Every ship is both, because the repository and the live site drifting apart is a silent failure.
Zero legacy
Superseded code, stale docs and dead files get deleted rather than left. Several components and a whole route have been removed from this site for exactly that reason.
No claim without proof
Counts derive from the content files, case studies link to live sites, and anything that cannot be backed one click away does not ship.
Missing from this list on purpose: hardware, editor and desk. They are not written down because they have not been asked about — and a page like this is only worth reading while everything on it is true. If you want to know what I would use for something specific, ask.



