// full-stack developer · product builder

Exploring the intersection of AI, code,product, and architecture.

Product-oriented developer with 10+ years building high-impact, data-driven products. Former professional swimmer, background in psychology — I bring discipline and behavioral insight to how software gets designed and shipped.

10+ yrs shipping/ex-pro athlete/psychology background
LATEST WRITINGS
From $39/Month to $1: How I Moved 10+ Sites Off Hostinger for FreeLast month I finally did the math I'd been putting off: $39/month on Hostinger for 10+ sites, none of which needed a server running 24/7. Here's what I moved, what it cost, and the one piece that was actually hard to replace.GitHub Issues Is Going to Be My Support ChannelI run a few products at once, each with its own support inbox, and I'm done managing a different tool for every one of them. Here's the fix: a customer email becomes a GitHub Issue, and my comment becomes their reply.AI doesn't fix direction. It accelerates the one you already haveIf you're heading in the wrong direction, AI will get you there faster. Companies are dropping AI into broken processes and expecting it to fix them. It doesn't. It amplifies whatever was already there.Stop Paying AI to Forget What You Already KnowEvery project I build needs Stripe. Every project needs transactional emails. For a while I let AI write those integrations from scratch every time — expensive, and dumb. Here's the repo that fixed it.How I migrated a WordPress site to Cloudflare Pages using AI (and what broke)WordPress does everything. That's both the problem and the solution. Here's how I moved a WordPress site to Astro on Cloudflare Pages with AI handling the tedious parts, including the honest list of what broke along the way.How to add a contact form to a Next.js app without a backendYou want a contact form, not a backend. Here's a complete Next.js App Router contact form with validation, spam protection, and email delivery, and zero server code to maintain.AI Without Standards Is Just Faster ChaosEvery engineering team I talk to is using AI. Nobody’s debating that anymore. What nobody’s talking about is that every developer on the same team is using it differently. The Problem Nobody Admits Ten developers. Ten different setups. Ten different rules files. Ten different prompting habits. Same codebase, same tickets, same sprint – ten differentYour 404 Logs Are a Security Report You’re IgnoringMost WordPress developers install a redirect plugin, set up a few 301s, and never look at their 404 logs again. If they do, it’s for SEO, fixing broken links, cleaning up crawl errors. That’s the obvious use. But there’s something else in those logs that almost everyone ignores. Your 404 logs are a real-time mapWhat 150+ Feature Votes Taught Me About Building the Wrong ThingsI’ve been using WPFeatureLoop on two of my own plugins for just over a month. In that time, I collected over 150 votes across 11 feature requests, and it already changed what I’m building next. Here’s what the data actually looks like, and what it taught me about my own blind spots as a developer.In the AI Era, Soft Skills Are the Hard SkillsThe more powerful AI gets, the more human the bottleneck becomes. You open a new chat, type a vague prompt, get a mediocre response, and blame the model. The model isn’t the problem. What Actually Changed For the past decade, the most valuable thing a developer could do was execute. Write the code, ship thewp_add_inline_script doesn’t work in Block Themes (FSE) — Cause and FixYou call wp_add_inline_script() inside a shortcode. It works fine on classic themes. You switch to a block theme — or your user does — and suddenly: nothing. No PHP error, no warning, just a silent failure and a X is not defined in the browser console. This is a known inconsistency tracked in WordPress TracHow I Improved WPFeatureLoop’s Activation Rate by 80% with WordPress PlaygroundMost SaaS products have a gap between signup and the moment users actually get it. For WPFeatureLoop, that gap was brutal. Users would create an account, look at the dashboard, and then… nothing. The next step was installing an SDK via Composer. For a WordPress developer who just wanted to see if the tool wasWhy You Should Stop Using left and right in CSSAnyone who has been in programming for a while has gotten used to writing margin-left, padding-right, and rounded-l almost automatically. It’s muscle memory for any developer, and most people still write CSS like this: Or, in Tailwind: It works. It always has! But there are situations where this stops being just a detail and startsMasky.js: A Lightweight Alternative to Inputmask, Cleave.js, and IMaskFinding the right input masking library can be tricky. There are many options, each with its pros and cons. Some are feature-packed but heavy, while others are lightweight but miss critical functionalities like validation or mobile-friendly optimizations. In today’s world, where performance and user experience are top priorities, selecting the right library is crucial. AExciting Updates for Form Masks for Elementor Free and PRO Versions!We’re thrilled to announce the latest updates to Form Masks for Elementor, both for the Free and PRO versions. With these enhancements, we’ve taken form input control and customization to the next level. Whether you’re a Free version user or a PRO subscriber, there’s something new for you! What’s New in the PRO Version? OurHandle Elementor Popup Events Without jQueryIf you’ve ever worked with Elementor and tried to manipulate its popups programmatically, you’ve probably noticed that the official documentation provides event handling examples only with jQuery. However, if you prefer a modern and lightweight solution using Vanilla JavaScript, this guide is for you. With the MutationObserver API, you can monitor changes to the DOMHow to Self-Host WordPress Plugins on Github and Deliver UpdatesManaging plugin updates can be a challenge, especially if you’re not relying on the WordPress Plugin Repository. But what if you could self-host your plugins on GitHub and deliver updates seamlessly, without the need for complex libraries or third-party services? In this guide, I’ll walk you through a simple yet powerful solution that adheres toAction after confirm payment on WooCommerceYou need start any action only payment is confirmed? If yes, this post will help you. This a simple but very efficient snippet. How to create action after payment confirmed on WooCommerce? Snippet to start specific function after payment is confirmed on WooCommerce. In this example, after payment is confirmed set the new value toHow to add a mask to the Elementor form [FREE]Form Masks for Elementor create a custom control in field advanced tab for your customize your fields with masks. This plugin require the Elementor Pro (Form Widget). The masks function with filed types ‘text’ and ‘tel’. Add a mask to the Elementor form Just download the plugin in the WordPress directory and install it onHow to center Tabs on ElementorDid you ever need to use the Elementor tabs widget (or Tabs), and needed to center the tabs, but did not find these options in the widget? (unfortunately this option does not even exist in the Widget). Yeah, you’re not the only one. I have received this doubts on social networks and through our consultancy.How to center the Contact Form 7 submit buttonThis is a very common question of WordPress users: how to centralize the contact form 7 submit button? It’s easier than you think. I’ll show below. How to center the Contact Form 7 submit button To do this is very simple. You just need to create your contact form the way you want it, and