Isaí Céspedes · Ingeniero full stack con foco en frontend · Web e IA
Construyo productos web y de IA que funcionan en producción.
Ingeniero full stack con foco en frontend y más de 4 años construyendo con TypeScript, React y Next.js para equipos de clientes en EE. UU., Reino Unido y España. En 2026 construí cuatro productos por mi cuenta, con un flujo de trabajo aumentado con IA y guiado por especificaciones. Baja para ver cada uno.
O baja para ver la historia completa ↓Descargar CV
Más de 4 años con TypeScript y React en producción
Equipos de clientes en EE. UU., Reino Unido y España
Remoto · horario CET / UTC-4 flexible
4 productos construidos solo en 2026
4+ años de entregas, en una línea
Santa Cruz, Bolivia · Remoto · horario CET / UTC-4 flexible. Español (nativo), Inglés (profesional)
20222023202420252026
Stack BuildersDesarrollador de software full stack. Consultora que desarrolla productos SaaS y B2B para clientes internacionales de EE. UU., Reino Unido y España.ene 2024 – jun 2026
Pylon DataDesarrollador de software full stack. Plataforma de gestión de energía solar para proveedores de electricidad de EE. UU.oct 2022 – feb 2023
MicroverseMentor técnico de pares. Contratado como staff mientras estudiaba, para apoyar a desarrolladores que empezaban.ene 2022 – oct 2023
Capítulo 1 de 4
ChurchOS
ChurchOS: la administración de la iglesia, fuera del Excel.
Gestión de iglesias gratuita y en español para congregaciones pequeñas, con los datos de cada iglesia aislados por la propia base de datos.
Las iglesias pequeñas de Bolivia funcionan con Excel y papel, casi siempre desde el celular. El pastor debe ver los totales de ofrendas, nunca quién dio cuánto.
Qué construí
y con qué
01Cuentas para varias iglesias con 4 roles; el pastor ve totales de ofrendas, nunca donantes individuales.
02Personas y familias, con importación desde Excel/CSV y fusión de duplicados.
03Registro de asistencia con QR desde cualquier celular.
04Ofrendas por fondos y lotes, cierre mensual de gastos, constancias de donación en PDF y reporte del tesorero.
05Español e inglés, registro de auditoría, borrado según GDPR y exportación completa de datos.
Next.js 16
React 19
TypeScript
Postgres (Neon) with RLS
Drizzle
better-auth
Tailwind CSS 4
react-pdf
Vercel Blob
Resend
Sentry
Vitest
Playwright
Demo
bucle 16:9, datos ficticios
Arquitectura
mapa del sistema
Interfaz en el celular → Next.js en Vercel: HTTPS
Next.js en Vercel → Sesión de better-auth: sesión
Next.js en Vercel → withTenant() + can(): acciones de servidor
withTenant() + can() → Postgres con RLS (Neon): tenant id local a la transacción
Next.js en Vercel → Vercel Blob: archivos
Next.js en Vercel → Resend: correo
Rol de migración en CI → Postgres con RLS (Neon): migraciones
Next.js en Vercel → Sentry: errores
La decisión más difícil
por qué importa
Aislar los datos de cada iglesia dentro de Postgres, con row-level security forzada sobre un tenant id local a la transacción.
en lugar de
Filtros WHERE en cada consulta desde la aplicación.
Configuración a nivel de sesión.
por qué
Un filtro olvidado falla en silencio y termina en una filtración. La configuración de sesión podía filtrar la iglesia anterior a través del pool de conexiones. Una suite de pruebas entre iglesias rompe el build si una ruta nueva no está registrada.
Resultado
pruebas
En producción en church-os.com.
Unas 2.400 pruebas automatizadas, incluidas 25 specs de Playwright.
CI que exige tipos, límites de dependencias, lint y pruebas end-to-end.
Migraciones de producción sin intervención manual y un simulacro de recuperación a un punto en el tiempo.
Buscar empleo es un ciclo repetido: evaluar el encaje, adaptar el CV, hacer seguimiento. La IA lo acelera, pero arriesga un CV que dice cosas que nunca hiciste.
Qué construí
y con qué
01Tablero Kanban con tareas, contactos y seguimientos automáticos.
02Importación por URL: API de Greenhouse, descarga protegida contra SSRF, JSON-LD y Claude como respaldo.
03Adaptación donde Claude solo puede reordenar o reformular; cada afirmación se verifica antes de mostrarte el cambio.
04API REST versionada con OpenAPI y API keys, un servidor MCP y un SDK tipado.
05Tu propia clave de Anthropic cifrada, PDF compatible con ATS y cabeceras de seguridad CSP/HSTS.
/api/v1 (auth, CSRF) → Runner de importación de empleos: importar URL
Runner de importación de empleos → Greenhouse · JSON-LD · Claude: descarga + extracción
Runner de importación de empleos → Postgres (Neon) + Drizzle: pasos con lease
Webhooks de Paddle → /api/v1 (auth, CSRF): eventos firmados
Cron de limpieza → Postgres (Neon) + Drizzle: limpieza
La decisión más difícil
por qué importa
Un runner propio de importación persistido en Postgres, en lugar de Vercel Workflow SDK.
en lugar de
Vercel Workflow SDK, que probé primero y funcionaba.
por qué
Sumaba una ruta pública con autenticación débil, 381 paquetes y 2 alertas de auditoría altas. Mi runner es una máquina de estados en Postgres con pasos protegidos por lease y atados a maxDuration: si falla una llamada a Claude, no se repiten los pasos ya pagados.
Resultado
pruebas
Demo en vivo en www.pilotboard.dev; pagos y correo desactivados.
Smoke test en producción: 12/12.
Unas 2.000 pruebas unitarias y de integración, más ~160 end-to-end.
Revisión de seguridad obligatoria antes de integrar cada hito.
Jarvis: un asistente de voz que pregunta antes de actuar.
Un asistente de voz bilingüe, siempre encendido en macOS, que funciona con Claude y abre, dirige y aprueba sesiones de Claude Code en vivo.
estado
Herramienta personal de uso diario (repositorio privado)
periodo
sept 2026 – Actualidad
El problema
para quién
Controlar mi Mac, la web y mis cuentas sin teclado. La voz fue lo fácil; lo difícil fue dejar que una IA actúe sobre cuentas reales solo con mi aprobación.
Qué construí
y con qué
01Wake word local → Whisper (voz a texto) → Claude → voz de ElevenLabs en streaming, con interrupción.
02Niveles de permiso en código: lectura, local, externo, prohibido; lo externo requiere un "sí" hablado.
03Seguimiento de contaminación (taint tracking): texto de la web o de un repo no puede disparar acciones externas.
04Trabajos de código e investigación en worktrees de git aislados (hasta 3), dirigidos desde un HUD en three.js.
05Canal de WhatsApp, memoria de notas enlazadas y autoactualización en su propio worktree.
Python 3.12
uv
Claude Agent SDK
openWakeWord
Whisper large-v3-turbo (MLX)
Silero VAD
ElevenLabs Flash 2.5
three.js
macOS LaunchAgent
Demo
bucle 16:9, datos ficticios
Arquitectura
mapa del sistema
Micrófono + wake word → Whisper (voz a texto): audio
Whisper (voz a texto) → Mente (Claude): texto
Mente (Claude) → Filtro de permisos: llamada a herramienta
Filtro de permisos → Herramientas / Mac: permitido
Mente (Claude) → Altavoz (ElevenLabs): respuesta
Mente (Claude) → Claude Code en worktrees: trabajos
Mente (Claude) → HUD (SSE): eventos
WhatsApp → Mente (Claude): mensajes
La decisión más difícil
por qué importa
Aplicar los permisos en código, no en el prompt.
en lugar de
Reglas solo en el prompt.
El clasificador de intenciones cerrado de la primera versión.
por qué
A un prompt se lo puede convencer; a una política en código, no. Herramientas generales detrás de esa política, más taint tracking, dieron flexibilidad sin confiar en el modelo. Aun así, una revisión de seguridad encontró huecos reales, como un puerto de depuración tratado como local. Ya están corregidos.
Plataforma multi-negocio de tienda en línea y punto de venta para pymes bolivianas: tiendas en subdominio, checkout con pin en el mapa, pagos QR y envío por courier.
estado
Lanzado · operó en producción jun–oct 2026 · hoy en pausa
periodo
jun 2026 – oct 2026
El problema
para quién
Pequeños negocios en Bolivia: las direcciones no son confiables, así que el checkout necesita un pin en el mapa, y cada pago debe llegar a la cuenta del propio negocio.
Qué construí
y con qué
01Una tienda por negocio, en su propio subdominio.
02Checkout con pin en el mapa y opción de factura.
03Pagos QR por negocio: credenciales cifradas, webhook y un cron de conciliación.
04Máquina de estados de pedidos con precios congelados y seguimiento en vivo por enlace mágico.
05Panel del negocio con reportes y CSV, punto de venta con recibos, alertas push y API de courier.
Next.js 16
React 19
TypeScript
Postgres (Neon)
Drizzle
zod
Tailwind CSS 4
MapLibre
web-push
Cloudflare R2
Caddy (on-demand TLS)
AWS EC2
GitHub Actions
Vitest
Playwright
PostHog
Demo
bucle 16:9, datos ficticios
Arquitectura
mapa del sistema
Cliente → Caddy (TLS bajo demanda): HTTPS
Caddy (TLS bajo demanda) → Next.js (negocio según el Host)
Next.js (negocio según el Host) → Postgres (Neon) + RLS
Next.js (negocio según el Host) → Proveedor de pagos QR: crear QR
Proveedor de pagos QR → Next.js (negocio según el Host): webhook + conciliación
Next.js (negocio según el Host) → Imágenes en Cloudflare R2: imágenes
Next.js (negocio según el Host) → API de courier: envío
Next.js (negocio según el Host) → Web push → panel del negocio: alertas de pedidos
Seguimiento por enlace mágico → Next.js (negocio según el Host): estado del pedido
La decisión más difícil
por qué importa
Pagos QR por negocio, con un adaptador de respaldo listo.
en lugar de
Otros seis proveedores, evaluados cuando el primero resultó estar muerto.
por qué
Descarté los que obligaban a usar un banco, liquidaban en USDC, juntaban el dinero de todos los negocios o pedían onboarding comercial. El QR por negocio paga directo a la cuenta de cada uno. El adaptador de respaldo deja un segundo proveedor listo.
Resultado
pruebas
Lanzado y en producción jun–oct 2026; hoy en pausa.
Lo digo sin rodeos: agentes de IA escriben buena parte de mi código. Lo que lo vuelve confiable es el proceso. Cada función empieza como una especificación escrita. Los agentes trabajan en ramas aisladas. Revisiones separadas, y yo, validamos el resultado. Nada se integra sin que pasen tipos, lint, pruebas y CI. Lo sensible pasa además por revisión de seguridad.
01EspecificarPrimero defino qué significa "terminado": alcance, casos límite y las pruebas que deben pasar.
02ConstruirLos agentes implementan según la especificación, cada uno en su propio git worktree, en paralelo.
03FiltrarTipos, lint, pruebas unitarias, de integración y end-to-end en CI, y revisión de seguridad en cambios sensibles.
04LanzarDespliegue por CI, con migraciones automáticas y un plan de recuperación probado.
La velocidad no es el riesgo. Saltarse las verificaciones sí.
Lo que dicen quienes trabajaron conmigo
Isaí consistently supports teammates and contributes to team productivity by collaborating on complex features, helping unblock others, and refining tasks before implementation. He communicates proactively to resolve blockers with both the team and client, follows strong engineering practices, and demonstrates openness to feedback during code reviews.
traducido Isaí apoya constantemente a sus compañeros y aporta a la productividad del equipo: colabora en funcionalidades complejas, ayuda a desbloquear a otros y refina las tareas antes de implementarlas. Se comunica de forma proactiva para resolver bloqueos con el equipo y con el cliente, sigue buenas prácticas de ingeniería y se muestra abierto al feedback en las revisiones de código.
Cristian MotocheTech Lead · Stack Builders
Isaí takes strong ownership of the tasks he works on, asking the right questions and ensuring features are delivered polished and production-ready. He contributes positively to team collaboration, supports technical alignment between client and team, improves development workflows, and provides thoughtful code reviews at a peer engineering level.
traducido Isaí asume de verdad la responsabilidad de las tareas en las que trabaja: hace las preguntas correctas y se asegura de entregar funcionalidades pulidas y listas para producción. Aporta a la colaboración del equipo, ayuda a alinear técnicamente al cliente y al equipo, mejora los flujos de desarrollo y hace revisiones de código cuidadosas, al nivel de un par.
Jota MartinezSoftware Engineer · Stack Builders
Isaí consistently delivers high-quality work and is recognized as a reliable and collaborative engineer, making him a great teammate to work with across teams and projects.
traducido Isaí entrega trabajo de alta calidad de forma constante y es reconocido como un ingeniero confiable y colaborativo, lo que lo convierte en un gran compañero en distintos equipos y proyectos.
KieranCliente · proyecto con Stack Builders
Isaí shows strong curiosity and initiative when improving the development environment, experimenting with tooling such as linters and editor extensions. He adapts quickly, learns fast, and provides reliable support during demanding periods while contributing to cleaner and more maintainable frontend code.
traducido Isaí muestra mucha curiosidad e iniciativa para mejorar el entorno de desarrollo, probando herramientas como linters y extensiones del editor. Se adapta y aprende rápido, da un apoyo confiable en los periodos más exigentes y contribuye a un código frontend más limpio y mantenible.