Engineering notes
Things I have had to explain more than three times
Long-form technical writing on the decisions that actually move a project: what crawlers see, why a RAG assistant must be able to refuse, how a performance budget survives contact with a sprint, and how to pick a stack honestly.
- AI
- Architecture
- CI/CD
- Consulting
- Core Web Vitals
- Engineering
- LLM
- Next.js
- OWASP
- Performance
- RAG
- React
- Rendering
- SEO
- Security
- WordPress
- 7 min readFeatured
What Google actually sees on your React site
A client-rendered page gets indexed eventually, sometimes. A server-rendered one gets indexed reliably. Here is how to tell which you shipped, using curl.
- SEO
- Next.js
- React
- Rendering
- 8 min readFeatured
The most important feature of a RAG chatbot is the refusal
Everyone measures retrieval hit rate. Almost nobody tests whether the assistant correctly says "I don't know" — the failure that actually costs a customer.
- AI
- LLM
- RAG
- Engineering
- 6 min read
A performance budget nobody enforces is a number that drifts
Core Web Vitals work that is not wired into CI regresses within two sprints. Here is the Lighthouse CI setup that fails the build instead.
- Performance
- CI/CD
- Core Web Vitals
- Next.js
- 6 min read
Why my portfolio runs on six different stacks
Static HTML, WordPress, hand-written PHP, Astro, a Vite SPA and Next.js — one portfolio, all correct. The stack follows the constraint, not the preference.
- Architecture
- Consulting
- Next.js
- WordPress
- 7 min read
The pre-launch security pass: nine checks, one afternoon
Most breaches are boring, and so is preventing them. The OWASP-derived checklist I run against every project before it goes to production.
- Security
- OWASP
- Next.js
- CI/CD
Rather have this applied to your project than read about it?
Send the brief and we'll start with what your constraints actually are.