February 6, 2026
The simple trick behind complex deployments
There's a clever trick Laravel Forge uses when you click "Deploy" that takes your script, uploads it to a remote server, runs it in the background... and magically knows exactly when it finishes. The script phones home. Think about it: you hit a button, a few seconds later you see "Deployment complete" with full logs. How does the tool...
Read more
Read more
February 6, 2026
The failed OpenSSL attempt: how I made SSH key generation work in Laravel
I was building a web app that needed to connect to remote SSH servers to run commands. The obvious security requirement: no passwords. SSH keys were the answer. The straightforward approach in PHP would be OpenSSL. It's built right into PHP, so I tried it. I generated keys with `openssl_pkey_new()`, extracted them with `openssl_pkey_ex...
Read more
Read more
February 4, 2026
The ugly truth about shipping: why low-fidelity wins
I spent a couple months building antihq/fuse. It looked nice. Modals that eased in with smooth animations. Empty states with illustrations. Support text for every form field. Subheadings that contextualized every page. I did ship it. But it was half-done. I polished before the app was functionally complete. I ran out of steam and left ...
Read more
Read more
February 4, 2026
I use AI to help me write. I'm not cheating. Here's why.
Yesterday, I discovered a tool that detects AI-generated content called Originality.ai. I ran a few tests on my writing. It detected basically everything as AI-written. It made me think twice about using AI. It made me feel like I was cheating. Originality.ai made me think that it devalued my writing, my ideas, my insight. But I should...
Read more
Read more
February 3, 2026
I wrote same feature twice. Here's what I learned.
I wrote same feature twice without realizing it. My cofounder saw innovation. I saw code duplication. The setup I'm a developer at Picstome, a platform for photographers. We help them manage their workflow: galleries for client proofing, contracts, portfolios, payments, client management (CRM), and even bio links for Instagram. We have...
Read more
Read more
February 2, 2026
How hard could it be? Building my own password manager
I lost access to my password manager. After years of jumping from Chrome's built-in manager to 1Password to Secrets (included in my Setapp subscription), I stopped paying for Setapp and suddenly found myself locked out of all my passwords. I could have migrated to a free alternative like Bitwarden or KeePass. But I had something else g...
Read more
Read more
February 2, 2026
Mexico's banking finally caught up to Europe. Here's how to profit from it
Two weeks ago, a friend messaged me: "Have you seen? Revolut finally launched in Mexico." I knew this day would come. Years ago, a friend in Barcelona told me about Revolut. It was revolutionizing banking across Europe with its online-first approach, no physical branches, and incredible features. Back then, I told him it wasn't availab...
Read more
Read more
February 2, 2026
I watched DHH's Omarchy demo and nearly switched to Linux. Here's why I didn't.
I watched DHH's Omarchy demo and nearly wiped my Mac to install Arch Linux. Here's why I didn't, and how I got 80% of the benefits in 5 minutes. You've probably seen the video by now. DHH showing off his keyboard-centric workflow on Arch Linux. Everything through shortcuts, no mouse needed, windows tiling automatically. He navigates hi...
Read more
Read more
January 31, 2026
The lost art of walking for pleasure
I live in Mexico City. I walk a lot. But what I've noticed is that mostly, nobody walks for pleasure. You see people walking their dogs, but they're not actually walking; they're just standing there waiting for the dog to pee or poop. The dog walks, the human waits. Everyone is walking to commute. Walking to get somewhere. Walking beca...
Read more
Read more
January 31, 2026
The ethics of digital necessity: When you can't afford to pay
I work 5 hours a week and make 84% less than I did before. To save money, I had to cancel Spotify. This wasn't an easy decision. Music isn't optional for me: it's how I focus, how I decompress, how I get through the day. But I'm currently in an accidental sabbatical, working minimal hours as a contractor, with drastically reduced incom...
Read more
Read more
January 30, 2026
How I use one AI subscription for everything
I refuse to pay $100+ per month for ChatGPT, Claude Code, Raycast AI, Perplexity, Gemini, and the next ten AI subscriptions launching this year. Here's how I get all their value for the price of one. The subscription fatigue problem AI is everywhere now, and every vendor wants you to pay for their walled garden. ChatGPT Plus: $20/month...
Read more
Read more
January 30, 2026
The hidden cost of lock-in
"I'm locked in for 11 months. I just can't believe I did this." It started with a tweet. The new AI model's official announcement scrolled past on Twitter, complete with benchmark results showing performance on par with frontier models. As I read through the impressive capabilities, I felt that familiar pang of FOMO. Then came the real...
Read more
Read more
January 29, 2026
The best automation is removing the need for it
I muted "Clawdbot" on Twitter last week because the automation flood felt overwhelming. I was scrolling through my timeline and came across a new Hackers Incorporated podcast episode. Ben was talking about how he'd spent $600 in just a few weeks on AI automation credits. He was describing all the things he was building agents to do: ma...
Read more
Read more
January 29, 2026
Why I pay for imperfect AI (and you should too)
I'll be honest, I was staring at my dashboard today, watching the token speed fluctuate between 25 and 45 tokens per second. It was peak hours, and I could feel the frustration building. The thought crossed my mind again: Why do I put up with this? Why not just pay for Claude Code's $200/month plan and get consistent 40+ tokens per sec...
Read more
Read more
January 29, 2026
Why colorful themes sabotage your AI code reviews
I had an epiphany the other day that changed how I think about code review forever. I was staring at AI-generated code, reviewing what OpenCode had just written. The syntax was perfect: no compilation errors, no typos, the formatting was impeccable. The AI had done exactly what it was supposed to do: write syntactically correct code. B...
Read more
Read more
January 29, 2026
How I handle customer support in 5 hours/week using AI
Two years ago, customer support was consuming 20+ hours of my week. I knew I needed a change, but I didn't want full automation. I wanted something different: a minimal automation approach where I'd still review every single reply before it went out. I started with a simple Raycast AI command and a 26-word prompt. The result? Today, I ...
Read more
Read more
January 29, 2026
I disabled Dependabot on my Laravel app. And I'm more secure for it
Dependabot comes enabled by default on GitHub repositories. It feels like the right thing to do, after all, who doesn't want security monitoring for their dependencies? But there's a problem: Dependabot creates noise, not signal. I disabled Dependabot on my active Laravel project. And I believe I'm more secure for it. The illusion of s...
Read more
Read more
November 4, 2025
Update notes quickly!
With Picstome’s new simple CRM feature, you can manage customers more efficiently. The main reason to edit a customer is often to update the notes section with the latest information or to record important details. Editing notes should be quick and easy, without requiring you to fill out the entire customer edit form. Previously, you h...
Read more
Read more
October 29, 2025
WIP commits? Nah! Let AI write your commits
Have you ever felt lost in a wall of “WIP” commits? I often do. Writing detailed messages can slow me down, but a cluttered history isn’t any better. What if AI could instantly generate clear and meaningful commit messages with just one command alias? Imagine commit messages like fix(auth): resolve invalid token bug during login. It's ...
Read more
Read more
October 28, 2025
Hunting a .com domain
As someone from Mexico aiming to build a global software brand, I quickly faced a common challenge: almost every desired .com domain was already taken. While many new domain extensions exist, .com remains the most trusted and memorable option. Instead of giving up, I got creative. I overcame the .com obstacle by adding prefixes and suf...
Read more
Read more
October 24, 2025
Raycast AI with a GitHub Copilot subscription
GitHub Copilot is one of the best investments I have made. I have access to premium models (with limited requests) and unlimited GPT-4.1, which is excellent. Unfortunately, I cannot use my subscription with other AI services or applications that offer AI capabilities, like Raycast. While Raycast's UI for asking anything to AI is fast w...
Read more
Read more
October 24, 2025
Oh! Just got a new payment
Now that Picstome is gaining traction, we are starting to receive new payments and renewal payments. However, we noticed that we aren't receiving any notifications from Stripe about these payments. We expected to receive notifications because we got one when we received our first payment. It turns out that, by default, receiving a noti...
Read more
Read more
October 21, 2025
Provisioning Servers, second iteration
I’ve revisited how the server provisioning flow works on Terrific Fuse and found ways to improve the experience. From naming servers and optimizing PHP and MySQL based on server memory, to sending notifications when provisioning completes, the process is now much smoother. Previously, to provision a server, you had to create it on your...
Read more
Read more
October 19, 2025
Cleaning up ran scripts
To manage your provisioned server, Fuse uses a flow where it generates a bash script for tasks like managing authorized SSH keys or handling deployments. Fuse uploads the script to your server and then runs it. All these uploaded scripts and their output logs are stored in the `.fuse` folder, either under the fuse `user` or the `root` ...
Read more
Read more
October 18, 2025
Hunting the right exit code
To run a command on a remote server with Fuse, I upload the script as a .sh file to the server. Then, I use SSH to execute a bash command and use `tee` in a pipeline to write the script output to a .log file. The command looks like this: bash /home/fuse/.fuse/task-1.sh 2>&1 | tee /home/fuse/.fuse/task-1.log However, I also wanted to ca...
Read more
Read more
October 18, 2025
SSH keys, second iteration
Now that I’m feeling comfortable with the current Fuse API for creating and running tasks on remote servers, I have revisited the SSH key management feature since a few important options were still missing. Previously, you could add your public SSH keys so they would be authorized on newly provisioned servers. However, there was no way...
Read more
Read more
October 16, 2025
Laravel Queue Daemon Made Easy
One of Laravel’s best features is its queue system. To run it in production, you need to install a daemon that starts the Laravel queue command, monitors it, and keeps it running. Traditionally, installing a daemon on the server requires SSH access and manually creating a Supervisor configuration file. However, with Fuse, I’ve made it ...
Read more
Read more
October 12, 2025
Deploying private repos
You can deploy almost any Git repository URL with Fuse, using either HTTPS or SSH (git@). However, to use git@ URLs, you must ensure your server has access to your repositories. To grant access, you typically register your server’s public SSH key with your source provider, such as GitHub. Previously, to obtain the public SSH key, you h...
Read more
Read more
October 10, 2025
Deployment logs
This is something I have wanted for a long time: the ability to see deployment logs and inspect what was run. Fortunately, by storing the output of scripts when they finish, I was finally able to implement this feature. When a deployment is triggered, a script runs on the remote server to start the deployment process. It also makes a c...
Read more
Read more
October 10, 2025
Failing deployments
Deployments can fail for various reasons. A faulty deployment script might run before or after the deploy, or a bad script could execute before activating the release. Sometimes, things just go wrong, and previously, Fuse had no way to detect a failed deployment. It’s time to address this issue. One way to detect a failed deployment is...
Read more
Read more
See more posts »