Articles
Long-form pieces, first published on Medium.
AI Agents
A word or a numberThe same refund decision asked three ways, 540 times: a chat model, the same model held to a strict schema, and a decision model that returns a probability. Accuracy tied. The number found the one ticket I had labelled wrong.
E-commerce Search
A results page on someone else's storefrontOne script that renders search results inside stores we do not host: what moved into a per-store config, how it mounts, and why old and new run side by side.
Motion Graphics
Motion graphics, written as codeHow the animated drawings on this site are made: SVG scenes on one clock, generated by short functions, written with Claude Code. With the real scenes running in the page.
AI-Assisted Development
Same model, different workflowThe written version of a session I gave my team on fixing bugs with an AI assistant: four steps, a context budget, the limits, and the demo I staged on purpose.
Web Push
The widget that worked on the second visitA blocked-notifications widget appeared only after a reload. Three small fixes: a race between two scripts, a cookie mistaken for the permission, and one state with three names.
React
A guard against saving to the wrong brandA tab showed one brand while the server session held another. The guard that blocks it, and a pass over 11 dashboards in a shared codebase.
React
A product URL becomes an email blockA product block inside a third-party email editor: mock data first, a wrap-once guard, a cookie-less request, an update loop and a context-aware inspector.
TypeScript
A dry-run CLI that rolled search out to 271 brandsHow a TypeScript CLI installed a new search on 271 of 272 brands: dry-run by default, status classes, backups, read-back vs independent verify, rollback.
React
Building an admin platform from scratch: an ops console and a RAG Document CenterHow I built Revotas's new admin platform alone: CRM, support and billing on legacy APIs, plus a Turkish RAG assistant that cites sources or abstains.
React
The builder compiles, the storefront just runs itHow I built a no-code Deal of the Day builder: React state compiled into one self-contained script, previewed live in an iframe, with zero schema change.
React Native
The push that opens the right screenReact Native push taps arrive through three different APIs. One router, payload normalisation, token care, and a backend debug that went wrong.
JavaScript
Recommendations in the store's own designBrands said our recommendation widget didn't look like their site. So the engine copies their product card and fills it with ours.
JavaScript
One search script, 271 storefronts I don't controlShipping a search overlay into 271 stores: rolling back @layer, race guards, Turkish folding, client-side typo tolerance and facets, and a debug catalogue.
Learning
Access to Knowledge Is Easy; Focus Is the ConstraintAI and the web make learning material abundant. Progress still depends on protecting attention, practising regularly and applying what you learn.
Web Security
Why AI API Keys Leak, and the Server Route That Stops ItGemini changed what public Google keys can do and NEXT_PUBLIC_ ships secrets to the browser. Keep model calls behind a server route.
Software Engineering
From Vibe Coding to Agentic EngineeringLetting a model write code is the easy part. Planning, verification and owning the result are where software engineering work moves next.
Developer Tools
A Repo Structure Coding Agents Can FollowA clear layout, standard commands and an AGENTS.md file tell coding agents where to work and how to verify changes.
CS50
Finishing CS50x and CS50 Web: The Habits That WorkedMost online learners never finish Harvard’s CS50. The study habits that got me through CS50x and CS50 Web: daily practice, smaller problems, patient debugging.
Notes
Short breakdowns of AI and developer-tool news, first posted on LinkedIn.
AI Engineering
ldraw-nova: AI agents build LEGO models by writing Python geometryIn ldraw-nova, models write a plan and a Python generator instead of raw coordinates, but nothing checks physics or stability.
AI Engineering
Multi-agent handoff notes: when Claude reads memory as ordersIn stillwet's painter chains, Claude read earlier notes as instructions and missing notes failed silently, so label, log and verify agent handoffs.
AI Engineering
Pi 1.0 agent harness: the Claude Opus planner drove 95% of the costIn Pi 1.0's demo, Opus used a fifth of the tokens yet cost 18x more than GPT 6 Luna, so log cost per model and count cache misses.
Web Performance
Netlify Edge Functions on Firecracker microVMs: 5x faster warm callsNetlify's heavier Firecracker sandbox won because it removed a network round trip; count hops and track cold start rate before blaming the runtime.
AI Engineering
Magnitude vs llama.cpp: 2x faster decode, only 9% faster prefillMagnitude's 2x speedup is decode, but at 64K context an agent turn is mostly prefill, so the whole turn gets only about 12% faster.
Claude Code
Claude Code mods: a command guard warns, permission rules blockClaude Code mods see every event, but a guard matching command text misses $(...), aliases and scripts; hard blocks belong in permission rules.
AI Engineering
OpenAI Dots agents: revoking app access doesn't erase their memoryDisconnecting an app from an OpenAI Dots agent stops new reads, but pulled-in context stays, so revoking access and forgetting need separate steps.
AI Engineering
livenerf on Claude Opus 5.5: output tokens catch model drift firstlivenerf's validation found accuracy noise bigger than the real change, while output token counts clearly showed effort shifts.
AI Engineering
PostHog Jeeves: when reasoning pays off for a 9B classifierReasoning made Jeeves five points more accurate but pushed p90 latency to 17 s; reasoning only below 0.9 confidence keeps most of the gain.
AI Engineering
Claude Sonnet 5.5 migration: same price, new 400s on old requestsSonnet 5.5 keeps Sonnet 5 pricing but rejects forced tool_choice and disabled thinking, so check your requests before swapping the model ID.
AI Engineering
taiga-s1: a 1.2M-parameter model drives FreeCAD via valid actionstaiga-s1 builds FreeCAD parts at about 1 ms per decision because the app lists valid commands each step; check your app's interface first.
AI Engineering
Claude Code and Remotion: a launch film with sync as a failing checkClaude Code built a 33-second launch film overnight; the repo muxes audio with ffmpeg and fails the build if sync drifts past 1 ms.
AI Engineering
OpenAI agent escaped via DNS: why sandboxes need a real kill switchAn OpenAI research agent reached a public chatbot through DNS despite a proxy; the alert fired fast, but stopping the run took 2.5 hours.
AI Engineering
llama.cpp prompt lookup: a missing ampersand beat a faster hash mapIn llama.cpp prompt lookup drafting, reading maps by reference gave 4.5x to 25x, while a flat hash map added only up to 13%. Profile for copies first.
ReactJS
GitHub Primer's CSS Modules migration: guardrails before AI agentsGitHub halved server render time moving Primer to CSS Modules; agents cleared the last 900 sx props only because shims, flags and snapshots existed.
Web Security
Cloudflare Turnstile: a widget without Siteverify stops no botsTurnstile tokens can be forged, so your backend must call Siteverify; Cloudflare now flags widgets that skip it with Fix with Spin.
ReactJS
GitHub Copilot app: virtualizing million-line diffs with commentsGitHub's Copilot app PR view keeps exact code row heights and measures review comments in one batched pass near the viewport, never mid-scroll.
AI Engineering
Cursor cut its agent system prompt by two thirds; token cost fell 7%Most of Cursor's agent spend sits in growing context, not the cached system prompt; on-demand tools and cache breakpoints moved the bill.
ReactJS
How claude.ai got 3x faster: gate CI on counts, not millisecondsAnthropic made claude.ai about 3x faster and protected the wins by failing CI on deterministic counts instead of noisy wall-clock milliseconds.
AI Engineering
NVIDIA Nemotron 3 Diarization: low latency is cheap, crowds are notNemotron 3 Diarization loses almost no accuracy at low latency, but its error roughly triples past four speakers, so test on your own audio.
AI Agents
DigitalOcean Managed Agents: stop paying for idle coding agent timeDigitalOcean Managed Agents pause microVM billing while sessions sit idle; check idle time, secrets, resume behavior and quotas before moving agents.
AI Engineering
Opus 5.5 and GPT-6 Sol/Luna: the price war moved to cached tokensOpus 5.5 cut cache reads 60% and GPT-6 gives 90% off cached input, so agent costs now hinge on a stable prompt prefix.
No post matches that filter.
Have a problem worth solving?Let's make it reliable
Start a conversationOpen to full-stack and applied AI roles, remote or hybrid.
Tell me about the role, the team and the problem.