<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>laravelconmanuel</title>
        <link>https://laravelconmanuel.dev</link>
        <description>Artículos de Laravel salidos de proyectos que están en producción.</description>
        <language>es</language>
        <atom:link href="https://laravelconmanuel.dev/feed" rel="self" type="application/rss+xml"/>
                <item>
            <title>El volumen que tres contenedores quisieron poblar a la vez</title>
            <link>https://laravelconmanuel.dev/articulos/el-volumen-que-tres-contenedores-quisieron-poblar</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/el-volumen-que-tres-contenedores-quisieron-poblar</guid>
            <description>mkdir file exists en medio de vendor/. La imagen estaba bien, el codigo estaba bien, y el error era que app, queue y scheduler arrancaron al mismo tiempo sobre un volumen vacio.</description>
            <category>Deploy</category>            <pubDate>Tue, 29 Sep 2026 21:00:00 -0600</pubDate>
        </item>
                <item>
            <title>A donde se va la RAM de un VPS: el demonio de Docker pesa mas que cualquier contenedor</title>
            <link>https://laravelconmanuel.dev/articulos/a-donde-se-va-la-ram-de-un-vps</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/a-donde-se-va-la-ram-de-un-vps</guid>
            <description>Medi los 36 contenedores de mi servidor esperando encontrar a Laravel comiendose la memoria. Las cinco plataformas juntas gastan 400 MB. El monitoreo gasta 351. Y dockerd, el solo, 404.</description>
            <category>Infraestructura</category>            <pubDate>Tue, 22 Sep 2026 15:00:00 -0600</pubDate>
        </item>
                <item>
            <title>El build que se quedo sin memoria: Vite pidiendo 2.5 GB en una maquina con 843 MB</title>
            <link>https://laravelconmanuel.dev/articulos/el-build-que-se-quedo-sin-memoria</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/el-build-que-se-quedo-sin-memoria</guid>
            <description>El contenedor moria sin mensaje y docker compose build decia exit code 137. El numero estaba en el Dockerfile: NODE_OPTIONS pedia dos veces y media la memoria que habia libre.</description>
            <category>Deploy</category>            <pubDate>Tue, 15 Sep 2026 21:00:00 -0600</pubDate>
        </item>
                <item>
            <title>Un esquema de Postgres por aplicacion, y la migracion que truena sin avisar</title>
            <link>https://laravelconmanuel.dev/articulos/un-esquema-de-postgres-por-aplicacion</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/un-esquema-de-postgres-por-aplicacion</guid>
            <description>Laravel deja poner el search_path en una variable de entorno. Lo que no hace es crear el esquema, asi que la primera migracion falla con un mensaje que no menciona la palabra esquema.</description>
            <category>Base de datos</category>            <pubDate>Tue, 08 Sep 2026 21:00:00 -0600</pubDate>
        </item>
                <item>
            <title>Tu propio S3: por que deje de guardar archivos en el disco del contenedor</title>
            <link>https://laravelconmanuel.dev/articulos/tu-propio-s3-cuando-conviene-y-cuando-no</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/tu-propio-s3-cuando-conviene-y-cuando-no</guid>
            <description>Un contenedor efimero y un disco no se llevan bien. Que gano al mover los archivos a un S3 propio, que se rompe si lo montas mal, y las tres veces que conviene mas pagarle a Amazon.</description>
            <category>Infraestructura</category>            <pubDate>Tue, 01 Sep 2026 21:00:00 -0600</pubDate>
        </item>
                <item>
            <title>Docker no es para escalar: es para que el servidor deje de ser un misterio</title>
            <link>https://laravelconmanuel.dev/articulos/docker-lo-que-realmente-te-devuelve</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/docker-lo-que-realmente-te-devuelve</guid>
            <description>Mi servidor no tiene PHP instalado. Ni Node, ni Composer, ni psql. Y aun asi corre cinco plataformas Laravel. Las tres ventajas de Docker que se cobran solas, contadas con la imagen de 282 MB que despliegue ayer.</description>
            <category>Arquitectura</category>            <pubDate>Tue, 25 Aug 2026 15:00:00 -0600</pubDate>
        </item>
                <item>
            <title>Como organizo los archivos de un proyecto: el modulo manda, la capa es el detalle</title>
            <link>https://laravelconmanuel.dev/articulos/como-organizo-los-archivos-de-un-proyecto-laravel</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/como-organizo-los-archivos-de-un-proyecto-laravel</guid>
            <description>Abri un proyecto de hace ocho meses y tuve los seis archivos que necesitaba en un minuto, sin buscar. No es memoria: es que el nombre del modulo se repite en cada capa, del controlador a la pagina de React.</description>
            <category>Arquitectura</category>            <pubDate>Tue, 18 Aug 2026 15:00:00 -0600</pubDate>
        </item>
                <item>
            <title>502 solo con la sesion iniciada: upstream sent too big header</title>
            <link>https://laravelconmanuel.dev/articulos/502-upstream-sent-too-big-header</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/502-upstream-sent-too-big-header</guid>
            <description>PHP registraba 200 y el navegador veia 502. El culpable estaba en medio, eran dos nginx y no uno, y cada capa tiene su propia familia de directivas.</description>
            <category>Infraestructura</category>            <pubDate>Tue, 11 Aug 2026 15:00:00 -0600</pubDate>
        </item>
                <item>
            <title>Ataque mi propio servidor: el perimetro estaba bien y aun asi era root</title>
            <link>https://laravelconmanuel.dev/articulos/ataque-mi-propio-servidor-lo-que-encontre</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/ataque-mi-propio-servidor-lo-que-encontre</guid>
            <description>El escaneo desde internet salia impecable. Lo que estaba mal solo se ve preguntando: si alguien ya esta dentro, hasta donde llega. Cinco hallazgos y por que ninguno era un exploit exotico.</description>
            <category>Seguridad</category>            <pubDate>Tue, 04 Aug 2026 15:00:00 -0600</pubDate>
        </item>
                <item>
            <title>Veinticinco contenedores en un solo VPS: un stack por aplicacion</title>
            <link>https://laravelconmanuel.dev/articulos/veinticinco-contenedores-en-un-solo-vps</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/veinticinco-contenedores-en-un-solo-vps</guid>
            <description>Cinco plataformas Laravel, un microservicio en Java, tres bots y almacenamiento S3 en una sola maquina. Por que un docker-compose por aplicacion y no uno gigante, y por que todo escucha en loopback.</description>
            <category>Infraestructura</category>            <pubDate>Tue, 28 Jul 2026 15:00:00 -0600</pubDate>
        </item>
                <item>
            <title>El @php de una linea que se traga tu vista de Blade</title>
            <link>https://laravelconmanuel.dev/articulos/blade-php-de-una-linea-se-traga-la-vista</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/blade-php-de-una-linea-se-traga-la-vista</guid>
            <description>Agregue una linea y el error salio cuarenta lineas mas abajo, en codigo que no toque. El compilado de la vista lo explico en diez segundos.</description>
            <category>Frontend</category>            <pubDate>Tue, 21 Jul 2026 15:00:00 -0600</pubDate>
        </item>
                <item>
            <title>El rol que no existia en el enum: 200 en todas las pantallas y cero filas</title>
            <link>https://laravelconmanuel.dev/articulos/el-rol-que-no-existia-en-el-enum</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/el-rol-que-no-existia-en-el-enum</guid>
            <description>Los permisos estaban bien, el login funcionaba y las rutas respondian. Pero tryFrom devolvia null en silencio y el usuario se quedaba sin territorio.</description>
            <category>Seguridad</category>            <pubDate>Tue, 14 Jul 2026 15:00:00 -0600</pubDate>
        </item>
                <item>
            <title>Aprender Spring Boot contra una base de Laravel con 249 mil registros</title>
            <link>https://laravelconmanuel.dev/articulos/spring-boot-sobre-la-base-de-laravel</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/spring-boot-sobre-la-base-de-laravel</guid>
            <description>En vez del CRUD de mascotas, reescribi una rebanada de una API que ya existe. Bcrypt compartido, ddl-auto en none, Specification y la idempotencia que solo se te ocurre con una red que se corta.</description>
            <category>Arquitectura</category>            <pubDate>Tue, 07 Jul 2026 15:00:00 -0600</pubDate>
        </item>
                <item>
            <title>IA de vision en dos niveles: valida barato, estima caro</title>
            <link>https://laravelconmanuel.dev/articulos/ia-de-vision-en-dos-niveles</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/ia-de-vision-en-dos-niveles</guid>
            <description>Un modelo pequeno decide si la foto sirve; uno grande solo analiza las que pasaron. Mas el acotado numerico que evita pedir tres camiones de asfalto para un hoyo.</description>
            <category>Integraciones</category>            <pubDate>Tue, 30 Jun 2026 15:00:00 -0600</pubDate>
        </item>
                <item>
            <title>Timbrar un CFDI 4.0 desde Laravel: lo que no dice la documentacion del PAC</title>
            <link>https://laravelconmanuel.dev/articulos/timbrar-cfdi-4-desde-laravel</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/timbrar-cfdi-4-desde-laravel</guid>
            <description>El PAC solo sella. Todo lo demas —catalogos del SAT, validar al receptor, la factura global, la cancelacion que tarda dias— es tuyo. Ocho cosas que hubiera querido saber antes.</description>
            <category>Integraciones</category>            <pubDate>Tue, 23 Jun 2026 15:00:00 -0600</pubDate>
        </item>
                <item>
            <title>Datos sensibles: no basta con saber quién entró, hay que saber para qué</title>
            <link>https://laravelconmanuel.dev/articulos/expediente-clinico-registro-de-acceso</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/expediente-clinico-registro-de-acceso</guid>
            <description>Un expediente clínico se consulta legítimamente cien veces al día. La bitácora que sólo guarda quién y cuándo no distingue una consulta legítima de una curiosidad. La columna que lo cambia todo es «motivo».</description>
            <category>Seguridad</category>            <pubDate>Tue, 16 Jun 2026 15:00:00 -0600</pubDate>
        </item>
                <item>
            <title>Salir de Expo Go tiene un precio, y a veces hay que pagarlo</title>
            <link>https://laravelconmanuel.dev/articulos/salir-de-expo-go-development-build</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/salir-de-expo-go-development-build</guid>
            <description>Expo Go es lo que hace que React Native se sienta ligero. El día que necesitas un módulo nativo se acaba, y hay que decidir entre cambiar el requisito o cambiar la forma de distribuir la app.</description>
            <category>Móvil</category>            <pubDate>Tue, 09 Jun 2026 15:00:00 -0600</pubDate>
        </item>
                <item>
            <title>Diseñar un bot que no canse: seis preguntas en lugar de diez</title>
            <link>https://laravelconmanuel.dev/articulos/disenar-un-bot-de-whatsapp-que-no-canse</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/disenar-un-bot-de-whatsapp-que-no-canse</guid>
            <description>Cada pregunta que le haces a alguien por WhatsApp es una oportunidad de que abandone. Tres decisiones que quitaron cuatro preguntas del flujo sin perder un solo dato.</description>
            <category>Integraciones</category>            <pubDate>Tue, 02 Jun 2026 15:00:00 -0600</pubDate>
        </item>
                <item>
            <title>El consentimiento como barrera de verdad, no como casilla</title>
            <link>https://laravelconmanuel.dev/articulos/consentimiento-en-un-bot-de-whatsapp</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/consentimiento-en-un-bot-de-whatsapp</guid>
            <description>Sin «acepto» no se guarda ni el nombre. El consentimiento lleva versión, y si el aviso cambia se vuelve a preguntar. La palabra BAJA borra todo. Cuesta tres nodos y evita una multa.</description>
            <category>Seguridad</category>            <pubDate>Tue, 26 May 2026 15:00:00 -0600</pubDate>
        </item>
                <item>
            <title>Dónde vive el estado de un bot de WhatsApp</title>
            <link>https://laravelconmanuel.dev/articulos/donde-vive-el-estado-de-un-bot-de-whatsapp</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/donde-vive-el-estado-de-un-bot-de-whatsapp</guid>
            <description>Cuatro columnas y una tabla en la base de n8n, no en la de tu plataforma. La decisión parece administrativa y define quién puede tumbar tu producción a las tres de la mañana.</description>
            <category>Integraciones</category>            <pubDate>Tue, 19 May 2026 15:00:00 -0600</pubDate>
        </item>
                <item>
            <title>Un motor de sincronización que no pierde capturas</title>
            <link>https://laravelconmanuel.dev/articulos/motor-de-sincronizacion-movil</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/motor-de-sincronizacion-movil</guid>
            <description>Subir antes que bajar. El reloj del servidor, no el del teléfono. Y no reintentar lo que ya fue rechazado. Tres reglas que parecen detalles y son la diferencia entre una cola sana y una atorada para siempre.</description>
            <category>Móvil</category>            <pubDate>Tue, 12 May 2026 15:00:00 -0600</pubDate>
        </item>
                <item>
            <title>Offline-first en React Native: la pregunta no es cómo, es para quién</title>
            <link>https://laravelconmanuel.dev/articulos/offline-first-en-react-native-por-rol</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/offline-first-en-react-native-por-rol</guid>
            <description>235,613 registros no caben en un teléfono. Pero el promotor que los captura sólo necesita los suyos. Cómo el volumen por rol define la arquitectura, y por qué la captura sí es offline para todos.</description>
            <category>Móvil</category>            <pubDate>Tue, 05 May 2026 15:00:00 -0600</pubDate>
        </item>
                <item>
            <title>Leer la credencial con OCR para React Native</title>
            <link>https://laravelconmanuel.dev/articulos/leer-la-credencial-del-ine-con-ocr</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/leer-la-credencial-del-ine-con-ocr</guid>
            <description>El plan era leer el PDF417 del reverso: dato estructurado, determinista, sin ambigüedad. Los modelos nuevos lo sustituyeron por un QR cifrado. Todo tiene que salir de OCR, y eso cambia el diseño entero.</description>
            <category>Móvil</category>            <pubDate>Wed, 29 Apr 2026 03:00:00 -0600</pubDate>
        </item>
                <item>
            <title>Bagisto: el framework de e-commerce en Laravel y Vue.js</title>
            <link>https://laravelconmanuel.dev/articulos/bagisto-framework-ecommerce-laravel-vue</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/bagisto-framework-ecommerce-laravel-vue</guid>
            <description>Evaluación previa, no experiencia. Qué promete Bagisto, dónde encaja frente a montar la tienda a mano y qué pienso verificar antes de recomendarlo.</description>
            <category>Herramientas</category>            <pubDate>Tue, 21 Apr 2026 15:00:00 -0600</pubDate>
        </item>
                <item>
            <title>Laracollab: gestión de proyectos para equipos de desarrollo, en Laravel y React</title>
            <link>https://laravelconmanuel.dev/articulos/laracollab-gestion-de-proyectos-laravel-react</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/laracollab-gestion-de-proyectos-laravel-react</guid>
            <description>Lo clonié para copiarle ideas, no para usarlo. Diecisiete modelos, Mantine en el frontend y una decisión sobre el registro de horas que me pareció mejor que la de las herramientas que pago.</description>
            <category>Herramientas</category>            <pubDate>Tue, 14 Apr 2026 15:00:00 -0600</pubDate>
        </item>
                <item>
            <title>El kit que reutilizo en cada proyecto (y cuándo lo suelto)</title>
            <link>https://laravelconmanuel.dev/articulos/el-kit-que-reutilizo-en-cada-proyecto</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/el-kit-que-reutilizo-en-cada-proyecto</guid>
            <description>Trece proyectos este año. Nueve modelos aparecen calcados en siete de ellos y en cero de otros cinco. Contar dónde está el kit y dónde no cuenta mejor la historia de lo que hago que cualquier currículum.</description>
            <category>Arquitectura</category>            <pubDate>Tue, 07 Apr 2026 15:00:00 -0600</pubDate>
        </item>
                <item>
            <title>Wayfinder: el año que dejé de usar Ziggy</title>
            <link>https://laravelconmanuel.dev/articulos/wayfinder-el-ano-que-deje-de-usar-ziggy</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/wayfinder-el-ano-que-deje-de-usar-ziggy</guid>
            <description>Revisé trece proyectos. Los ocho de Laravel 12 tienen Ziggy. Los cinco de Laravel 13, ninguno. No fue una decisión, fue que route(&#039;algo.mal.escrito&#039;) dejó de compilar.</description>
            <category>Frontend</category>            <pubDate>Tue, 31 Mar 2026 15:00:00 -0600</pubDate>
        </item>
                <item>
            <title>n8n y Laravel: recibir WhatsApp sin duplicar nada</title>
            <link>https://laravelconmanuel.dev/articulos/n8n-y-laravel-recibir-whatsapp</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/n8n-y-laravel-recibir-whatsapp</guid>
            <description>Los ciudadanos reportan baches por WhatsApp. n8n atiende la conversación, Laravel guarda el reporte. Lo difícil no fue conectarlos: fue que n8n reintenta, y un reintento no puede crear un bache de más.</description>
            <category>Integraciones</category>            <pubDate>Tue, 24 Mar 2026 15:00:00 -0600</pubDate>
        </item>
                <item>
            <title>Por qué genero los PDF con FPDF y no con HTML</title>
            <link>https://laravelconmanuel.dev/articulos/pdf-en-laravel-con-fpdf</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/pdf-en-laravel-con-fpdf</guid>
            <description>Convertir una plantilla Blade a PDF es lo cómodo. Después llega la factura que debe salir idéntica siempre, y el navegador headless que se come 300 MB por documento. Llevo doce proyectos dibujando por coordenadas.</description>
            <category>Documentos</category>            <pubDate>Tue, 17 Mar 2026 21:00:00 -0600</pubDate>
        </item>
                <item>
            <title>Laravel Auditing: instalarlo no es auditar</title>
            <link>https://laravelconmanuel.dev/articulos/laravel-auditing-auditoria-de-modelos</link>
            <guid isPermaLink="true">https://laravelconmanuel.dev/articulos/laravel-auditing-auditoria-de-modelos</guid>
            <description>Revisé mis trece proyectos de este año. Los trece tienen owen-it/laravel-auditing en el composer.json. Cuatro modelos, en total, lo implementan. Esto es lo que aprendí revisando mi propio descuido.</description>
            <category>Arquitectura</category>            <pubDate>Tue, 10 Mar 2026 21:00:00 -0600</pubDate>
        </item>
            </channel>
</rss>
