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
October 10, 2025
What commit was deployed
Wouldn’t it be nice to know which commit was deployed? Well, I just shipped that feature. Now, on the deployments table, you can see the commit hash that was deployed, so you’ll always know the latest commit deployed from your Laravel app. When a deployment script finishes, it calls back to Fuse to update the deployment status to "depl...
Read more
Read more
October 9, 2025
Better deployment monitoring
When a new deployment is triggered, Fuse dispatches a DeploySite job. However, there was previously no way to monitor the deployment—for example, if the deployment script ran too long without marking the deployment as successful. To address this, I improved the job to actively monitor the deployment status. First, if the deployment is ...
Read more
Read more
October 7, 2025
Server was created seconds ago
When provisioning a server with Fuse, the server you create with your provider may not be immediately ready for provisioning. This is often because the server is still running its package manager, which can conflict with the Fuse provisioning script. To address this, Fuse now checks if a package manager is running on your server before...
Read more
Read more
October 7, 2025
Catching provisioning errors
Provisioning a new server doesn't always go as expected. So far, Fuse hasn’t provided any feedback when an error occurs or if provisioning fails, which can cause the provisioning status to hang indefinitely. It’s time to address this issue. First, Fuse shouldn't attempt to provision a server that has already been provisioned. When a se...
Read more
Read more
October 5, 2025
Not all application deployments are the same
At Fuse, each new site created has an opinionated zero-downtime deployment flow that works for most basic Laravel applications. But not all application deployments are the same, and from now on, they can be customized. Because Fuse uses a zero-downtime deployment approach, you must first declare which directories and files can be share...
Read more
Read more
October 4, 2025
Let me know what’s the status, without refreshing
Fuse uses the Laravel Queues system internally to dispatch jobs for provisioning. This means the work is offloaded, and you, as a user, don’t really know if the status of the server has changed to provisioned unless you refresh the page. That’s not good; you want to always know what the latest status is without refreshing the page. The...
Read more
Read more
October 4, 2025
Launching a SaaS is only the beginning
Only a few hours have passed since I launched Fuse, and I continue shipping improvements. Let’s be honest, I was a bit in a hurry to launch Fuse; I needed to stop working only locally and actually ship it to the world. However, it means that a few things were not optimal: the UI was not clear, and UI copy was missing, but at least it’s...
Read more
Read more
October 3, 2025
Deploy your Laravel apps like never before
Well, probably with other services you can do it too, but here I'm presenting my very own personal service to deploy Laravel apps, from provisioning a fresh VPS server to deploying a Laravel app with zero downtime. It took a while; other services offer this service too; however, their pricing may not be the best. It’s something that I ...
Read more
Read more
September 5, 2025
Building Bio Links
Now that Picstome offers handles for public profiles for photographers, the next best use case for these handles is to display bio links. This feature allows photographers to showcase their social profiles in one place, serving as an alternative to linktr.ee. Customers should be able to create bio links, which we will display on their ...
Read more
Read more
September 3, 2025
Handling expired subscriptions with notifications and data deletion
Picstome currently has no customers, but it was fun to implement a feature that deletes galleries when customers stop paying for their subscriptions. Since storage is the primary cost for Picstome, our terms and conditions state that all galleries will be deleted seven days after a subscription expires. We plan to send reminders before...
Read more
Read more
September 3, 2025
Implementing user handles
We have exciting plans for Picstome to enhance its utility for photographers, particularly in showcasing work such as portfolios or external links like biolinks. However, we currently lack an option for users to have a handle like `picstome.com/@oliver`, so we needed to address this issue first. My plan was to generate a unique usernam...
Read more
Read more
August 20, 2025
¿Construir primero o vender primero?
La mayoría de los consejos que podemos leer sobre cómo construir y promover SaaS indican que primero debes comenzar por la landing page, incluso antes de haber desarrollado el producto. Siempre se sugiere tener una forma de promover lo que vas a construir. Crear una landing page antes de tener el producto fue una experiencia incómoda p...
Read more
Read more
August 19, 2025
Lanza rápido: Con una landing page minimalista
La landing page es el primer paso para validar el interés en un producto. Antes de invertir tiempo y recursos en el desarrollo completo, una landing page nos permite presentar nuestra propuesta a potenciales clientes y evaluar su reacción. Es el espacio donde podemos comunicar directamente el problema que podría enfrentar nuestro publi...
Read more
Read more
August 19, 2025
Decepción con GPT-5 mini
En las últimas semanas, he incorporado completamente el uso de IA en mi flujo de trabajo como creador de aplicaciones web. Utilizo modelos de inteligencia artificial para tareas clave como la redacción de landing pages, la implementación de nuevas funcionalidades mediante desarrollo guiado por pruebas (TDD), y la corrección de errores ...
Read more
Read more
August 17, 2025
Haciendo que los límites en un SaaS sean manejables: cuotas de contrato con Laravel Policies
En Picstome, recientemente tuvimos que limitar el acceso a la creación de contratos para los clientes. En lugar de permitir contratos ilimitados, los clientes gratuitos ahora solo pueden crear hasta cinco contratos al mes. Para simplificar, el conteo mensual de contratos comienza el primer día del mes, sin importar cuándo se creó la cu...
Read more
Read more
August 15, 2025
Haz más con menos código
Como desarrollador web que crea su propio producto, sabes que la velocidad y la calidad son fundamentales. Recientemente, enfrenté un desafío al implementar una función para compartir galerías. Los usuarios podían compartir galerías con fotos con marca de agua y también tenían la opción de descargar la galería. Sin embargo, estas dos o...
Read more
Read more
August 14, 2025
De Desarrollador a Copywriter: Usando IA para crear Landing Pages efectivas
Ahora que trabajo en un portafolio de productos, construirlos no es mi principal dificultad, al fin y al cabo soy desarrollador web. En cambio, me resulta desafiante actuar como vendedor, intentar vender un producto y escribir textos de marketing. Buscando ayuda: La Guía de Stripe Lo primero que consideré fue buscar ayuda. Tras una bús...
Read more
Read more
See more posts »