tigerabrodi.blogStripe Lifetime Access with ConvexIntroduction You built a thing. You want people to pay once and use it forever. Here is exactly how to do that with Convex and @convex-dev/stripe. Install npm install @convex-dev/stripe stripe npx c18h ago·3 min read
tigerabrodi.blogPractical Prompt Engineering LessonsIntroduction This post is co-written with stonechat. We worked every day together during my time at Spawn. He was the first engineer at Spawn and built our entire chat. Insanely cracked. Give examples1d ago·2 min read
tigerabrodi.blogHow To Fix Framer Motion AnimatePresence Collapse Leaving a GapIntroduction You added overflow: hidden and the collapse still looks wrong. The problem is not the motion component. It is the gap on your parent flex container. What is happening AnimatePresence keep2d ago·2 min read
tigerabrodi.blogHow to Build a Proper Auto-Growing TextareaThe Problem With a Fixed Textarea A normal <textarea> has a fixed height. When content overflows that height, the browser adds a vertical scrollbar. This is fine for long-form editing like a notes app2d ago·7 min read
tigerabrodi.blogHow to Handle Trackpad Pinch-to-Zoom vs Two-Finger Scroll in JavaScript Canvas AppsIntroduction You are building a canvas app. An infinite canvas. Something like Figma, Miro, or Excalidraw. You want two things: Two-finger scroll → pan around the canvas Pinch gesture → zoom in and 2d ago·6 min read