Saltar al contenido
Escritos

Blog

Notas sobre construir para web y móvil: rendimiento, arquitectura, IA y el oficio de lanzar productos.

2
series
32
artículos
24
Temas

Todos los artículos

Ilustración: el dinero del cliente recorre un camino en cobre que se detiene en una caja cerrada con candado, y solo sigue hacia el desarrollador cuando una entrega marcada con un visto cruza el otro sentido; debajo, un camino secundario lleva a una balanza
Producto23 sep 202616 min de lectura

Por qué contratarme por Upwork: pagos protegidos, reputación verificable y arbitraje

Qué gana un cliente al contratar por Upwork: dinero en custodia hasta aprobar cada hito, horas auditables, reputación que nadie edita y arbitraje si algo falla.

Leer más
Ilustración de Jev: un estado entra a un nodo de decisión y sale convertido en tres valores tipados, un sí o no, una opción y una puntuación, sin texto de por medio
IA23 sep 202614 min de lectura

Qué es Jev: el modelo de TypeSafe AI que decide en vez de escribir

Qué es Jev, el modelo System One de TypeSafe AI: devuelve decisiones tipadas con probabilidades en lugar de texto. Cómo se llama su API, cuánto cuesta y cuándo usarlo.

Leer más
Ilustración: bloques irregulares y apagados, amontonados sin orden, pasan por una línea de lectura en cobre y salen como tres filas ordenadas dentro de un documento, dos marcadas con un visto y una descartada
Producto19 sep 202616 min de lectura

Heredaste un producto: la auditoría de código antes de seguir

Qué revisa una auditoría de código cuando heredas un producto de otro equipo, qué dice el veredicto escrito y cómo decidir entre conservar, reparar o reescribir.

Leer más
Ilustración: un ticket suelto que termina en un bloque de código, frente a un camino continuo que va de la decisión a la construcción, la publicación y el mantenimiento de un producto
Producto19 sep 202614 min de lectura

Qué es un ingeniero de producto y en qué se diferencia de un programador

Qué hace un ingeniero de producto, en qué se diferencia de un programador y cómo saber cuál de los dos necesita tu negocio antes de contratar.

Leer más
Ilustración de una app en el centro rodeada de superficies del sistema: un widget, una isla dinámica, un reloj y un símbolo de modelo local, conectadas a ella
Móvil13 sep 202617 min de lectura

Lo que solo puedes hacer en nativo: WidgetKit, Live Activities, App Intents, StoreKit 2, Foundation Models y watchOS

Las capacidades de iOS que React Native no ofrece y que justifican Swift ante un cliente: WidgetKit, Live Activities, App Intents y Siri, StoreKit 2, el modelo de lenguaje en el dispositivo con Foundation Models y watchOS. Cierre de la serie y argumento de venta.

Leer más
Ilustración de una tabla de casos donde cada fila se compara con una referencia, junto a un cronómetro que representa el tiempo de compilación
Móvil12 sep 202617 min de lectura

Testing y tooling en iOS para seniors: Swift Testing, snapshots, mocks, Instruments y tiempos de compilación

Cómo testear una app iOS viniendo de Jest y Testing Library: Swift Testing frente a XCTest, snapshot testing, mocks vía protocolos y URLProtocol sin jest.mock, XCUITest frente a Maestro, Instruments, SwiftLint y cómo modularizar para bajar los tiempos de compilación.

Leer más
Ilustración de una cadena de eslabones que une un certificado, un perfil y un paquete firmado, con un sello al final que representa la revisión
Móvil11 sep 202617 min de lectura

Build, firma y App Store: lo que EAS te escondía

Todo lo que EAS Build hacía por ti y ahora es tuyo: certificados, provisioning profiles y entitlements explicados de una vez, Fastlane match para compartir la firma, TestFlight, las guidelines de App Review que más rechazan, el Privacy Manifest y Tuist para acabar con los conflictos del .pbxproj.

Leer más
Ilustración de una forma que se transforma en tres fases hacia otra posición, con una escala de tamaños de texto y un símbolo a un lado
Móvil10 sep 202615 min de lectura

UI, theming y animaciones en SwiftUI sin NativeWind ni Reanimated

Cómo hacer theming, animaciones y accesibilidad en SwiftUI viniendo de NativeWind y Reanimated: design tokens con Asset Catalog, Dynamic Type como estándar, SF Symbols, withAnimation, matchedGeometryEffect, PhaseAnimator, gestos nativos y Liquid Glass como API del día uno.

Leer más
Ilustración de una fila de módulos pequeños del lado izquierdo conectados uno a uno con bloques del sistema del lado derecho, con un bloque marcado como principal
Móvil9 sep 202617 min de lectura

Del ecosistema expo-* a los frameworks de Apple: la tabla de equivalencias por dominio

Qué framework de Apple reemplaza a cada paquete expo-* al pasar de React Native a iOS nativo: cámara, ubicación, autenticación, pagos, notificaciones, archivos y más, con los permisos de Info.plist y el crash silencioso que todos cometen.

Leer más
Ilustración de tres capas de almacenamiento apiladas, con una caja aparte sellada que representa al Keychain y una nube que sincroniza con la capa principal
Móvil8 sep 202614 min de lectura

Persistencia en iOS: SwiftData, GRDB y Keychain, y por qué Realm ya no es opción

Cómo decidir entre SwiftData, GRDB y Core Data para persistir datos en una app iOS, por qué Realm dejó de ser una opción, por qué el Keychain sobrevive a la desinstalación, y cómo plantear offline-first y sincronización con CloudKit.

Leer más
Ilustración de varias tareas que corren en paralelo dentro de un mismo marco y convergen en un único punto de salida, con un actor aislado a un lado
Móvil7 sep 202616 min de lectura

Concurrencia en Swift: adiós al event loop. async let, TaskGroup, actores y Swift 6

Swift Concurrency para quien viene de JavaScript: por qué no hay event loop, cómo async let y TaskGroup reemplazan a Promise.all, qué son los actores y @MainActor, qué exige Sendable y por qué en Swift 6 un data race es un error de compilación.

Leer más
Ilustración de sanitype: un payload atraviesa un límite y sale con los campos sensibles enmascarados, más un reporte de lo que se tocó
IA7 sep 202621 min de lectura

Datos sensibles fuera del prompt: una librería de TypeScript escrita en 39 minutos desde su especificación

sanitype redacta, enmascara o elimina datos sensibles dentro del proceso antes de que un payload salga hacia un LLM, un log o un tercero. Así está implementada en TypeScript.

Leer más
Ilustración de una capa de datos: la red y un almacén local alimentan un mismo flujo que llega a la vista, con la caché como fuente principal
Móvil6 sep 202617 min de lectura

Data en Swift: lo que TanStack Query hacía por ti y cómo construir tu capa de caché

En Swift no hay TanStack Query. Cómo diseñar la capa de datos de una app iOS con URLSession y Codable, un repositorio que emite con AsyncStream, SwiftData o GRDB como caché local, invalidación y supabase-swift.

Leer más
Ilustración de una pila de pantallas apiladas en profundidad, con un enlace externo que entra directamente a una pantalla intermedia
Móvil5 sep 202614 min de lectura

Navegación en SwiftUI sin file-based routing: NavigationStack, un enum de rutas y deep links

Cómo migrar mentalmente de Expo Router a SwiftUI: NavigationStack con un enum Route, el patrón Coordinator, deep links y Universal Links, y qué aporta swift-navigation cuando sheets y alerts se vuelven estado.

Leer más
Ilustración de Spec-Driven Development: una especificación se convierte en criterios de aceptación y de ahí en la lista de sismos de una app móvil
IA5 sep 202623 min de lectura

Spec-Driven Development en React Native: un MVP que lista los sismos del mundo, especificado antes de escribir código

Apliqué Spec-Driven Development a un MVP en React Native que lista los sismos del mundo: la especificación decide qué entra en la lista y sus criterios de aceptación se convierten en los tests.

Leer más
Ilustración de un agente de voz: una llamada entra, un backend resuelve fechas y opciones, y sale una cita confirmada en el calendario
IA4 sep 202626 min de lectura

Agente de voz que agenda citas: ElevenLabs, Cal.com y un backend que no deja adivinar al modelo

Cómo monté un agente de voz que agenda citas de 30 minutos con ElevenLabs y Cal.com, y por qué el backend en Fastify es lo que evita que el modelo invente horarios.

Leer más
Ilustración de un estado central del que salen vistas que solo observan la parte que leen, con módulos separados alrededor
Móvil4 sep 202616 min de lectura

Estado y arquitectura en SwiftUI: de Zustand y Redux a @Observable y TCA

Cómo manejar estado en SwiftUI viniendo de Zustand y Redux: MVVM con @Observable como default, cuándo TCA justifica su curva, inyección de dependencias con swift-dependencies o Factory y por qué modularizar en packages desde el día uno.

Leer más
Ilustración de un árbol de vistas donde cada nodo propone un tamaño a sus hijos y recibe una respuesta, con un camino principal marcado
Móvil3 sep 202616 min de lectura

SwiftUI no es React, aunque se parezca: body, identidad, modifiers y layout

SwiftUI explicado para quien viene de React: qué es body frente a render, por qué la identidad de una vista importa, cómo el orden de los modifiers cambia el resultado, el sistema de layout sin flexbox y el mapa de hooks a property wrappers.

Leer más
Ilustración de dos sistemas de tipos: una forma que se copia al pasar de mano en mano y otra que se comparte por referencia, con un contenedor que puede estar vacío
Móvil2 sep 202617 min de lectura

Swift para quien ya domina TypeScript: las cinco diferencias que cambian cómo diseñas

Swift explicado para desarrolladores de TypeScript: value vs reference semantics, opcionales como sistema de tipos, enums con datos, protocolos con extensiones y Codable en lugar de zod.

Leer más
Ilustración de dos caminos que salen del mismo punto: uno cubre dos plataformas con una sola capa y el otro llega directo a las capacidades del sistema
Móvil1 sep 202617 min de lectura

Por qué un senior de React Native debería aprender nativo en 2026

Cuándo iOS nativo le gana a React Native (widgets, APIs del día uno, ML en el dispositivo), cuándo pierde (dos plataformas, OTA, equipo) y por qué aprender Swift suma en vez de reemplazar.

Leer más
Ilustración de los límites duros de un agente: el loop del agente encerrado en un marco de comprobaciones —presupuesto, allowlist de comandos, allowlist de paths— con un interruptor de apagado afuera y un registro de cada vuelta
IA31 ago 202634 min de lectura

Los límites duros de un agente autónomo: lo que evita el desastre

Los límites que separan un experimento de un agente que dejarías corriendo: topes de iteraciones y tokens como presupuesto, allowlist de comandos y paths, kill switch, idempotencia y observabilidad.

Leer más
Ilustración de una persona entrenando a un robot: le entrega un ejemplo etiquetado con una marca de verificación y la señal de entrenamiento fluye hacia el robot
IA25 jul 202613 min de lectura

Trabajos de anotación de datos: en qué consiste etiquetar y revisar respuestas de IA

Qué son los trabajos de anotación de datos y revisión de respuestas de IA: qué tareas incluyen, cómo alimentan el entrenamiento (RLHF) y cómo se mide la calidad.

Leer más
Ilustración de una flota de agentes: un prompt se reparte hacia varios agentes en paralelo, cada uno en su propio worktree
IA6 jul 202616 min de lectura

Orca: el ADE para orquestar una flota de agentes de código en paralelo

Probé Orca, el Agent Development Environment (ADE) de código abierto, para correr una flota de agentes de código en paralelo: Claude Code, Codex y más, cada uno en su worktree aislado.

Leer más
Ilustración del sistema de punta a punta: un ticket de Jira entra por un disparador, pasa por una cola con estado, se procesa en un workspace efímero y sale como un pull request que vuelve como comentario a Jira
IA2 jul 202630 min de lectura

De un ticket de Jira a un PR: el sistema autónomo de punta a punta

Cómo convertí el agente en un sistema autónomo: un ticket de Jira lo dispara (webhook o polling), una cola con estado persistente lo procesa una sola vez y devuelve un PR y un comentario en Jira.

Leer más
Ilustración de un agente aislado: del repositorio sale una copia de trabajo separada sobre su propia rama, el loop trabaja ahí dentro y la salida es un pull request, no un merge
IA30 jun 202620 min de lectura

El agente dentro de un repo real: aislar tareas con git worktree y entregar un PR

Cómo poner un agent loop a trabajar sobre un repositorio real: aislar cada tarea con git worktree, reproducir el bug con un test, correr toda la suite y entregar un PR en vez de un merge.

Leer más
Ilustración del loop ReAct: un agente elige entre cuatro herramientas —leer, buscar, escribir, correr— y con cada observación construye su propio contexto
IA30 jun 202621 min de lectura

De generar archivos a usar herramientas: el loop ReAct de un agente de código

El paso de generar la función entera a un agente que lee, busca, edita y corre con herramientas: el loop ReAct y por qué el agente construye su propio contexto en vez de recibirlo en el prompt.

Leer más
Ilustración de tres niveles de input para un agente: tests escritos a mano, ejemplos que el agente convierte en tests, y la suite del repo que ya existe como evaluador
IA30 jun 202624 min de lectura

Quién escribe los tests del agente: tres formas de definir qué es correcto

Quién escribe los tests de un agente define qué es correcto. Tres niveles de input: spec y tests a mano, ejemplos que el agente convierte en tests, o la suite del repo como evaluador.

Leer más
Ilustración del sandbox de ejecución: el texto del modelo entra a un recinto aislado con temporizador, pasa por cuatro filtros y sale como una observación clasificada
IA30 jun 202621 min de lectura

El sandbox de un agent loop: del texto del modelo a una observación fiable

El sandbox de un agent loop convierte el texto del modelo en una observación fiable: extraer el código de la prosa, validar que parsea, ejecutar con timeout y aislar el proceso.

Leer más
Ilustración del loop write-test-fix: un nodo escribe código, otro lo prueba, y el fallo regresa como contexto hasta que los tests pasan
IA30 jun 202624 min de lectura

El loop más simple que funciona: un agente write-test-fix paso a paso

El agente más simple que sirve: spec y tests a mano, el modelo escribe el código, se ejecuta y el fallo vuelve como contexto. Un loop write-test-fix completo y en código que corre.

Leer más
Ilustración de un agent loop: un objetivo entra en un ciclo de decidir, actuar y observar que se repite hasta una condición de parada
IA29 jun 202613 min de lectura

Qué es un agent loop (y qué no): estado, acción, parada

Qué es un agent loop y qué no: sus tres componentes —estado, acción y condición de parada— y por qué 'hazme una app' es input de chat, no de agente.

Leer más
Ilustración de un pipeline de noticias: varios feeds RSS convergen en un flujo que filtra, reescribe con IA y publica un borrador
Automatización29 jun 202617 min de lectura

Automaticé un medio de noticias con n8n: de 20 feeds RSS a borradores en WordPress

Cómo construí en n8n un pipeline que lee 20 feeds RSS, deduplica con Postgres, cura y reescribe con IA por niveles, y deja el artículo como borrador en WordPress con imagen y aviso por Telegram.

Leer más
Ilustración de routing de modelos: una petición se reparte entre varios modelos, con la mayoría del tráfico hacia el modelo principal
IA29 jun 202626 min de lectura

Routing de modelos con OpenRouter y DeepSeek para minimizar costos sin perder calidad

Cómo enruté modelos en producción con OpenRouter usando DeepSeek para la mayor parte del tráfico y modelos premium solo donde importa, recortando costos de LLM sin degradar la calidad.

Leer más