Escribo sobre ingeniería web moderna, AWS Amplify y construir con IA.

Notas de problemas reales que he resuelto — Next.js y React, AWS Amplify Gen 2, autenticación y modelado de datos, rendimiento web y la práctica de construir software con IA — recopiladas en orden cronológico.

Desplegar una app fullstack de Next.js 16 en AWS Amplify Gen 2 (SSR): seis fallos y cómo evitarlos

Llevar una app de Next.js 16 con un backend de Amplify Gen 2 a Amplify Hosting SSR costó seis compilaciones fallidas — cada una revelando una capa más profunda que la anterior. Esta es la cadena completa: desincronización del lockfile, el límite de 220 MB de cómputo, el callejón sin salida de la especificación de despliegue, un binario xz ausente, un usuario de compilación sin permisos de root y una incompatibilidad entre layer y runtime — con la solución de cada uno.

Los Atributos de AWS Cognito User Pool No Pueden Ser Cambiados: Un Análisis Profundo.

Los atributos del pool de usuarios no pueden ser cambiados después de que se ha creado un pool de usuarios porque los atributos de Cognito User Pool son inmutables después de la creación. Fusionar ramas con diferentes configuraciones de autenticación rompe los despliegues. Solución Rápida: Elimina la pila de CloudFormation (aws cloudformation delete-stack --stack-name YOUR-STACK) y redespliega. Advertencia: esto elimina todos los usuarios. Prevenlo: Define todos los atributos de usuario y grupos antes de tu primer despliegue en producción. Usa aplicaciones Amplify separadas por entorno en lugar de despliegues basados en ramas.

No se puede resolver amplify_outputs.json

Para corregir el error de compilación "no se puede resolver amplify_outputs.json", añade npx ampx pipeline-deploy --branch $AWS_BRANCH --app-id $AWS_APP_ID a la configuración de compilación y adjunta la política AdministratorAccess-Amplify

Análisis web autohospedado gratuito con Umami, PlanetScale, Prisma y Vercel.

Tener mi propio análisis web autohospedado con Umami, PlanetScale, Prisma y Vercel, me está ayudando a componer un panorama completo de las analíticas web de mi sitio, sin sesgo de plataforma, con una solución simple y enfocada en la privacidad, y gratuita. Además, porque me interesa el lado técnico, ha sido una buena oportunidad para interactuar con alternativas de base de datos SQL como PlanetScale, ORM de Node.js como Prisma, y despliegues a Vercel. Esta guía cubre cómo adapté el proceso de instalación de Umami para funcionar con PlanetScale.

7 recursos gratuitos para aprender los fundamentos de blockchain.

Esta selección de 7 recursos cubre un amplio espectro de temas sobre blockchain, que lo explican en relación con el mundo real, utilizando formatos académicos y bootcamp. Incluye materiales de MIT, Berkeley, a16z y Web3 Foundation. Está dirigido a personas interesadas en los fundamentos de blockchain y finanzas descentralizadas.

6 recursos gratuitos para aprender Rust para principiantes.

Una lista de recursos que estoy usando para aprender Rust. Incluye videos, la documentación oficial y artículos de blog. Estos recursos se complementan entre sí, cubriendo diferentes estilos de aprendizaje y enfoques del lenguaje. Los considero amigables para principiantes y capaces de facilitar el aprendizaje en pequeños fragmentos a la vez. Hay más de una manera de aprender el proceso de masticar vidrio con Rust, y todos tenemos preferencias. Esta lista no es exhaustiva, tal vez esté sesgada. La actualizaré para incluir nuevos hallazgos y tus recomendaciones.

¿Debería aprender Rust o Solidity para desarrollar contratos inteligentes?

La tecnología Web3 y blockchain se van al espacio. En el corazón de esta revolución tecnológica está el contrato inteligente. La programación de contratos inteligentes no se hace de la misma manera y con las mismas tecnologías que programamos aplicaciones y sitios web tradicionales. Los dos blockchains principales que compiten por desarrolladores de contratos inteligentes son Solana y Ethereum. Como lenguaje de programación para desarrollar contratos inteligentes (programas) en Solana tienes Rust y para desarrollar contratos inteligentes en Ethereum tienes Solidity. Puedes comparar cada lenguaje de programación según sus habilidades transferibles, madurez, curva de aprendizaje, tamaño del blockchain objetivo, herramientas y salarios prospectivos.

El patrón inicializador de estado.

Un patrón simple usado en librerías tales como downshift y ReachUI para habilitar usuarios de un componente/hook, la inicialización o reinicio de tu estado a ese valor inicial.

La gig cripto economía está llegando a la consola, el teléfono, la tableta o la PC. Gana dinero mientras aprendes, juegas, creas y socializas.

Los modelos de remuneración-por-trabajo (labor-to-earn) han evolucionado para incluir otras opciones como renumeración-por-jugar (play-to-earn) donde obtienes ganancias de la reventa de los NTFs que has ganado en batallas, comprado anteriormente o recolectado según las dinámicas del juego. Remuneración-por-aprendizaje (learn-to-earn) donde acumulas criptomodenas por haber pasado lecciones y exámenes relacionados a determinada blockchain, protocolo, plataforma, app. Remuneración-por-participar (participate-to-earn) donde obtienes recompensas por postear, dar me gusta y compartir en redes sociales como Minds. Remuneración-por-crear (create-to-earn) donde tus creaciones se venden como algún tipo de coleccionable o NFT, como en OpenSea, o tu lista de reproducción en Audius. Incluso tienes la posibilidad de influenciar alguna causa que consideres importante en la modalidad jugar-con-propósito (play-for-purpose), como la protección del medio ambiente y la lucha contra el cambio climático, como es el caso del juego Zeedz.

Entendiendo la prop key de React

Traducción al español del artículo de Kent C. Dodds: React reutiliza el mismo elemento del DOM entre renderizados, así que el defaultValue de un input no se vuelve a aplicar cuando cambia el estado que lo respalda. Darle al input una key ligada a ese estado hace que React cree un elemento nuevo y tome el nuevo valor por defecto.

Actualización asincrónica de elementos relacionados con AWS DataStore en una aplicación web Next.js.

Al trabajar con AWS DataStore tienes que lidiar con operaciones async/await. Actualizar una lista de elementos cuando el orden de ejecución de las operaciones asincrónicas no es obligatorio es viable hacerlo con Promise.all() y map. Actualizar elementos relacionados, donde el resultado de la promesa del elemento anterior es necesario como entrada para el siguiente elemento, se puede lograr con la declaración for await...of.

Privacidad GDPR, estado de consentimiento "denegado", Google Analytics 4 y Next.js.

Mantén la privacidad de tus usuarios en el centro de tus prácticas según lo establecido por la GDPR y las leyes de California. Establece ad_storage="denegado", analytics_storage="denegado", gtag("set", "ads_data_redaction", true) y "anonymize_ip": true para menor intrusión mientras disfrutas de las excelentes características de la nueva Google Analytics 4 en tu aplicación web Next.js.

¿Cómo usar un dominio personalizado registrado con AWS Route 53 en una aplicación web Next.js implementada en Vercel?

Actualiza los servidores de nombres del dominio de AWS Route 53 o, los tipos de registros A y CNAME con los valores proporcionados por Vercel bajo ProjectName / Settings / Domains después de que agregaste un dominio al proyecto. Mostrará la información necesaria para configurar midominio.com y redirigir a www.midominio.com o viceversa. Después de que intentaste agregar el dominio a tu proyecto sin éxito, esa información también se enviará a tu correo electrónico explicando qué hacer. Vercel te permite configurar registros A (recomendado) y CNAME.