Notes from the field.
Engineering decisions, tradeoffs and lessons from building real-time interfaces and modern web platforms.

Four reviews of one release
A Flight Deck release added a fifth skill, a fourth optional hook, and rules to three existing skills, and went through four adversarial reviews before it shipped. Here is what each review caught that the one before it structurally could not, and what running four of them cost.
The anti-over-engineering skill that fought itself
Flight Deck 1.10.0 shipped a fourth skill, code-craft, whose whole job is to stop a coding agent from over-engineering. Writing it kept producing the exact failure it was written to prevent: a premise that wanted to add what already existed, an orchestrator that quietly cancelled its central clause, and a minimalism rule that told the model to delete a guard on a destructive path. Here is each one and the fix it forced.
What Opus 5 changed in my delegation doctrine
Flight Deck 1.9.0 shipped with a half nobody sees: a rewrite of the model routing grid, because Opus 5 now sits between Sonnet 5 and Fable 5. Recalibrating it meant demoting verifier subagents, capping parallel fanout, and admitting that reasoning effort is now a lever you pull down, not up. Here is the before and after, and why a delegation doctrine goes stale at every model release.
Claude Design: one prompt, three art directions, one shot
I pointed Claude Design at a full-site creative redesign with Fable 5 and reasoning effort on High. After one validated choice it landed a near-perfect one-shot, then a second prompt turned it into a client sales deck. Here is the exact prompt I used, why each part of it exists, and the one thing the model did that I did not ask for.
Wispr Flow vs superwhisper: why I switched
I dictated my way through work with superwhisper for a good while, then moved to Wispr Flow on my MacBook Pro. The gap in context understanding surprised me, and one editing feature changed how I write. My honest take, including where superwhisper still wins.
Playwright MCP over the Chrome extension for checking a frontend
Checking a frontend against a design with Claude Code, the claude-in-chrome extension kept handing back screenshots that looked broken when the build was fine, and verdicts that called an actually broken page fine. Moving the render-and-capture step to the Playwright MCP fixed both, and they turned out to be two unrelated bugs sharing one symptom.
Opus 4.8: why I default to High effort, not xHigh
Claude Code lets you set Opus 4.8's reasoning effort with /effort, and xHigh sounds like the obvious pick: more thinking, better answers. In my own hands-on use it was consistently slower and heavier for output that, most of the time, matched High. Here is what I saw, and when I still reach for xHigh anyway.
Running Claude Code Remote Control with the lid closed
Claude Code Remote Control runs on my own Mac, so closing the lid used to end the session. Amphetamine keeps the MacBook awake with the lid shut, for free. Here is the setup and the honest caveats.
Building Flight Deck, a skill package for Claude Code
Claude Code barely delegates, forgets what it already knows, and calls things done too soon. I packaged my answer to those seven default weaknesses into an open source skill and shipped it. Here is how.
Theming Tailwind CSS v4 without a config file
My whole design system lives in one CSS file: OKLCH color tokens, an @theme inline block, keyframes and plugins, with no tailwind.config at all. How config-less Tailwind v4 works in practice.
A blog without MDX
I built this blog with plain TSX pages and a typed registry instead of MDX. Zero bundler configuration, full type safety, and file-convention metadata and Open Graph images per post.
Motion v12: per-element whileInView beats variant propagation
Scroll reveals kept landing in the wrong state when parents orchestrated children through variant propagation. One Reveal primitive with per-element whileInView fixed it for the whole site.
Fixing pnpm's packages field error on Vercel
A settings-only pnpm-workspace.yaml deployed fine locally but broke Vercel with "packages field missing or empty". The real cause was pnpm 9 versus 10, corepack, and a dead serverless region left over from an old project.
Building a portfolio with Next.js 16
How I rebuilt julientavernier.fr from scratch on Next.js 16, Tailwind v4 and Motion: the performance decisions, the animation architecture and a debugging war story.