Blog
Thoughts & ideas.
Development
The CSRF Token Bug That Only Broke in Safari: A Production Post-Mortem
A CSRF protection bug that only appeared in Safari on iOS cost me two days of debugging. Here's exactly what happened and how I fixed it.
Read →
Development
14 Session and Authentication Patterns I Wish I'd Known Earlier in PHP
PHP sessions look simple until they betray you in production. Here are 14 patterns I've learned the hard way building real authentication systems.
Read →
UI/UX
The Onboarding Flow That Silently Bled Users: A Post-Mortem on Progressive Disclosure Gone Wrong
I built an onboarding sequence that looked clean in Figma but quietly lost 60% of users before step three. Here's exactly what went wrong.
Read →
UI/UX
Error States That Don't Embarrass You: Redesigning Form Validation from Red Boxes to Clear Guidance
Most form validation UX feels punitive. I rebuilt a 5-year-old product's error handling and cut support tickets by 40%. Here's what actually changed.
Read →
UI/UX
Dark Mode Is Not Just an Invert Filter: The Color Contrast Decisions That Actually Matter
Most dark modes are an afterthought — a CSS variable swap that ships looking like a cave. Here's what I've learned about color contrast, surface layering, and the decisions that separate a real dark mode from a lazy one.
Read →
AI
AI-Assisted Code Review Saved Me Hours — Until It Confidently Broke My App
AI code review tools are genuinely useful, but blind trust in them is a fast track to subtle, hard-to-diagnose bugs. Here's what I learned from letting Claude audit my PHP codebase — and where it went quietly, confidently wrong.
Read →
UI/UX
12 Navigation Patterns Ranked: When to Use a Sidebar, Tabs, or a Command Palette
Navigation is the skeleton of every interface — get it wrong and users feel lost before they even start. Here's a ranked, practical catalog of 12 navigation patterns with the exact conditions that make each one the right choice.
Read →
AI
Why Claude Kept Lying to Me About PHP Sessions (And How I Finally Got Useful Answers)
I asked Claude to help me debug a broken session-based login system and it confidently gave me wrong answers three times in a row. Here's the post-mortem on what went wrong — and how I restructured my prompts to actually get reliable help.
Read →
Development
GSAP ScrollTrigger Is Overkill for 80% of What You're Building — Here's What to Use Instead
GSAP ScrollTrigger is a powerful tool, but reaching for it by default has real costs in complexity, bundle weight, and maintainability. After shipping dozens of animated sites, I've learned when native CSS and the Intersection Observer API are genuinely better choices.
Read →
AI
Prompt Engineering for Product Copy: From Bland to Brand-Ready in 5 Steps
Most AI-generated copy sounds like it was written by a committee of robots — because it was. This tutorial shows you exactly how to engineer prompts that produce product copy with real personality, precision, and conversion power.
Read →
Development
Before & After: How MySQL Indexing Turned a 4-Second Query Into 40 Milliseconds
A slow dashboard nearly killed a client project — until a few well-placed indexes changed everything. Here's the exact before-and-after breakdown of what I found, what I fixed, and why it worked.
Read →
Development
Bulletproof File Uploads in PHP: Validation, Renaming, and Safe Storage on cPanel
File uploads are one of the most exploited attack vectors in PHP applications — but most tutorials skip the dangerous parts. This step-by-step guide covers every layer of validation, safe renaming, and storage strategy you actually need on shared cPanel hosting.
Read →