Framer Motion useAnimate Returns Empty Animations Array. Fix for motion v12 and prefers-reduced-motionApr 10, 2026·3 min read
How to Build Good APIs With Next.js and TypeScriptIntroduction Stripe's API is the gold standard. Consistent error envelopes. Idempotency out of the box. Rate limit headers that actually help. SDK types that match the spec. Every endpoint feels like Apr 10, 2026·11 min read
Fix: Transparent Header Cells on Horizontal Scroll with TanStack Table + TanStack VirtualApr 6, 2026·2 min read
How to implement spring physics buttons with Framer MotionIntroduction Buttons that scale on hover with CSS feel dead. No overshoot. No bounce. No life. Spring physics fix this. The button pops past its target scale and settles back. Feels like it has weightApr 6, 2026·4 min read
Dynamic OG Images for a Vite SPA with ConvexThe Problem Vite SPA serves one index.html for all routes. Social crawlers (X, Discord, Slack, LinkedIn, etc.) read the first HTML response and don't run JavaScript. So every shared link shows the samApr 4, 2026·4 min read
How To Build a Performant AI Markdown RendererIntroduction Every AI chat app streams markdown to you token by token. ChatGPT, Claude, Gemini, they all do it. Making that render smoothly is harder than it looks. This post breaks down the problem fMar 29, 2026·15 min read
I dug into Pretext codebase. Lessons we can learn.General programming lessons I extracted while swimming through the pretext codebase.Mar 29, 2026·9 min read
When Do You Really Need startTransition?Introduction Most React developers have heard of startTransition. Few actually understand what it does. Even fewer know when they need it. Let me explain it from the ground up. How React renders withMar 28, 2026·8 min read
When Index-Based Keys Aren't Just Fine. They're What You Should UseIntroduction Every React tutorial tells you the same thing. "Never use array index as key." It is one of those rules people repeat without thinking about why it exists. And because they never think abMar 28, 2026·5 min read