Escribiendo sobre diseño de software, construcción de proyectos y desarrollo en Laravel.

Todas mis reflexiones sobre programación, construcción, diseño de productos y mucho más, recopiladas en orden cronológico.

Cómo utilizar la interfaz de línea de comandos de VS Code

Marzo 21, 2023

Al instalar VS Code, también te dará acceso al comando `code` desde el terminal. Aunque si estás en Mac OS, tendrás que ir a la paleta de comandos y encontrar la opción para instalar el comando `code` en tu path de usuario.

Personalizando las notificaciones y errores de Laravel

Febrero 15, 2023

Generalmente, se puede distinguir qué apps han sido creadas con Laravel con ver el diseño del email para las notificaciones que envían. Fondo gris azulado con un encuadre blanco. Y el botón de acción en gris.

Alternativa "low tech" al "Beacon" de Helpscout

Febrero 11, 2023

Una de las partes más esenciales en mis proyectos es poder recibir _feedbak_ rápido por parte de mis usuarios. Ya sea para reportar algún _bug_ o sugerir alguna mejora.

Modo Dark con Tailwind CSS y Alpine.js

Febrero 04, 2023

Una tendencia que existe últimamente, entre los web apps, es la introducción de un _theme dark_. Y ahora que estoy desarrollando [Olidisco](https://olidisco.com) quería intentar implementarlo también....

Creando paquetes para PHP

Septiembre 13, 2022

La creación de paquetes es una de las mejores formas para volver a aprovechar código y emplearlo en más de una app o proyecto. También hace que las apps sean más mantenibles. Si arreglamos un bug en n...

Principales novedades en Laravel 9

Septiembre 12, 2022

Laravel 9 fue lanzado el 8 febrero de 2022 e incluye múltiples mejoras y nuevas funcionalidades. Agrupación de rutas por controlador, una nueva API para definir accesores y mutadores, un nuevo motor d...

Cómo crear un sitio en Forge

Septiembre 10, 2022

Con un servidor _app_ o _web_ aprovisionado por Forge, podemos crear y administrar sitios web fácilmente y de forma ilimitada. En la configuración de sitios hay un sitio que Forge genera automáticame...

Creando un servidor en Laravel Forge

Septiembre 09, 2022

Veamos cómo crear un servidor en Laravel Forge paso a paso. Desde la configuración de un proveedor de servidores, hasta el despliegue de una aplicación web. --- ## Configurando un proveedor de servi...

Cómo usar Faker en Pest

Septiembre 08, 2022

Pest nos ofrece un plugin que nos permite acceder a Faker de forma más funcional. ## Instalando Faker El plugin lo instalamos vía Composer. ```bash composer require pestphp/pest-plugin-faker --dev...

Expectativas en Pest

Septiembre 05, 2022

Pest proporciona una API de expectations o expectativas. Una API limpia, declarativa y extensible para hacer verificaciones. Inicializamos la API de expectativas al declarar el helper `expect()`. Y l...

Helper para iniciar sesión en tests Pest

Septiembre 05, 2022

Iniciar sesión como un usuario es algo muy usual que hacemos en nuestros tests. Principalmente en endpoints donde la creación de modelos deben estar asociados al usuario que los haya creado. Por ejemp...

Cómo instalar Pest en un proyecto Laravel

Septiembre 03, 2022

[Pest](https://pestphp.com/docs/installation) es un Framework de testing para PHP enfocado en ser simple pero funcional. Creado por [Nuno Maduro](https://nunomaduro.com). Cuenta con un [plugin](https...

Testing Hooks en Pest

Septiembre 03, 2022

Al trabajar en nuestros tests Pest, frecuentemente nos encontraremos con querer ejecutar un mismo código de preparación para múltiples tests. Por ejemplo, contar con un usuario ya creado en varios tes...

Un side project puede cambiar tu vida

Agosto 09, 2022

Hace trece años publiqué una plantilla para Wordpress llamada wpClassifieds. Una plantilla que facilitaba la creación de webs de clasificados. Relativamente popular en su momento. Llegó a ser utilizad...

El Internet de las plataformas sociales

Agosto 01, 2022

Cuando el Internet llegó a casa, comenzó un nuevo mundo para mi. Un lienzo en blanco. Uno en el que no había reglas. Ideal para explorar y también para experimentar. Últimamente eso ha cambiado. Part...

Cómo instalar PHP 8.2 en una Mac

Julio 19, 2022

PHP versión 8.2 está próxima a ser lanzada. Su lanzamiento está programado para el día 24 de noviembre del 2022. Algo recomendable, es probar nuestras aplicaciones o paqueterías antes del lanzamiento...

Desplegando Laravel en Fly.io

Junio 24, 2022

Fly.io nos permite desplegar web apps en 21 regiones en todo el mundo. Reduciendo la latencia entre usuario y app. Hacer un despliegue de cualquier app desarrollada en Laravel es bastante sencillo....

Probando Laravel Pint

Junio 23, 2022

[Laravel Pint](https://github.com/laravel/pint) es un nuevo paquete del ecosistema Laravel. Creado por Nuno Maduro. Permite corregir el estilo y mantener la consistencia de nuestro código base. <ifra...

Incrustar el widget de pago de Paddle con Laravel Cashier

Enero 12, 2022

Una opción para una integración más transparente con Paddle es incrustar el widget de pago dentro de una página de pago pre-existente. Esto puede reducir la sensación de estar dejando el sitio web par...

Auto-resetear semanalmente una app demo en Laravel

Enero 11, 2022

Trabajé en un proyecto donde necesitaba presentar una demo pública del trabajo en progreso pero necesitaba resetear el demo después de una semana al re-establecer la base de datos a su estado original...

Tips para trabajar como desarrollador web freelancer

Enero 07, 2022

El último par de años me he dedicado al trabajo freelance para proyectos de desarrollo web. No siempre es fácil, pero esto es lo que he aprendido como freelancer. La mejor forma de encontrar clientes...

Get relative path with `route()` in Laravel

Noviembre 18, 2021

I needed to generate a relative path, but the Laravel `route` helper generates absolute paths by default. Turns out it also accepts a third `$absolute` argument, and setting it to `false` generates a...

Chokidar file watcher to auto-run Pest tests

Noviembre 17, 2021

When working with [Pest](https://pestphp.com) tests, I usually use Chokidar file watcher to auto-run my test and have instant feedback after changing any code. ```shell chokidar "app/**/*.php" "tests...

Chaining "Where" conditions using dynamic methods

Noviembre 15, 2021

Laravel Eloquent can chain "where" conditions using dynamic/magic methods to fetch entries: `Order::whereMethodAndStatus('card', 'paid')->get();` ```php // before Order::where('method' 'card')...

Model factories with relationships by using magic methods

Noviembre 13, 2021

When using factories with relationships, Laravel also provides magic methods: `User::factory()->hasPosts()->create();` Perhaps not the most IDE friendly option, but I think it feels more readable....

Tax calculation with Laravel Cashier for Stripe

Noviembre 11, 2021

Dealing with Tax calculation on checkout pages always makes me sweat, especially EU Taxes. Luckily, Stripe and Laravel Cashier, in recent releases, have simplified it. You only need to add `calculate...

Handle Paddle's marketing consent with Laravel

Noviembre 09, 2021

On Paddle, a buyer can opt-in to receive marketing emails and is stored as a new audience member. But, by using an event listener, you can handle the Paddle's marketing consent on Laravel Cashier too...

Custom styling the pay button with Laravel Cashier Paddle

Septiembre 05, 2021

When using Laravel Cashier Paddle, the styling provided for the pay button is not the prettier. Fortunately, Laravel Cashier provides a `paddle-button` blade component with the option to add custom st...

Embed Paddle's checkout widget with Laravel Cashier

Septiembre 04, 2021

An option for a more transparent Paddle integration is to embed the Paddle's checkout widget within your existing checkout page. It can remove the sense of your users leaving your website to pay. <im...

Weekly auto-reset a Laravel demo app

Septiembre 02, 2021

I have worked on a client's work where I needed to present a public demo of the work in progress App, but wanted to reset the demo after a week by restoring the database to its clean state. I did it...

Remove the personal_access_tokens table on a fresh Laravel App

Septiembre 01, 2021

Since Laravel v8.6.0, Sanctum is now the default API authentication stack. However, initially most of my projects don't need an API, but because of the Sanctum package I end up with an extra `personal...

Deploy Umami analytics with Launcher

Agosto 27, 2021

I have recently moved my deployment solution to [Launcher](https://oliver.mx/launcher-first-impressions) and I wanted to use it to deploy Umami in my server too. It involves a few steps. Create a new...

Fix Laravel storage:link using Launcher

Agosto 21, 2021

Somehow, the `php artisan storage:link` command doesn't work as expected using the Launcher service, and files stored in local public disk are not publicly accessed. To fix it, SSH into your site con...

Launcher: first impressions

Agosto 20, 2021

My Laravel Forge subscription was about to expire, and regardless of being a happy customer, I was looking for a cheaper alternative. Having to pay $19 per month was a bit expensive for my little side...

Integrating Tiptap in a Laravel-Livewire project

Junio 23, 2021

**Install Javascript dependencies.** ```shell npm install -D alpinejs@2 @tiptap/core @tiptap/starter-kit ``` **Install Livewire.** ```shell composer require livewire/livewire ``` **Initialize the...

Probando Google Ads con RadioCúbito(Design)

Marzo 11, 2021

Desde el pasado mes comencé un nuevo producto para promover mis servicios de diseño web, [RadioCúbito(design)](http://radiocubito.design). Un servicio de diseño web ilimitado mediante subscripción. P...

How to run a Ghost blog on Laravel Forge

Enero 08, 2021

Since I have a Laravel Forge account to help me manage my server, I wanted to host this [Ghost](https://ghost.org/) blog in it too, and it's relatively easy. ## Create a server on Forge I'm using a...