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

4+ años de entregas, en una línea

Santa Cruz, Bolivia · Remoto · horario CET / UTC-4 flexible. Español (nativo), Inglés (profesional)

  1. 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
  2. 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
  3. 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.

estado
En producción
en vivo
church-os.com
periodo
ago 2026 – Actualidad

El problema

para quién

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é
  1. 01Cuentas para varias iglesias con 4 roles; el pastor ve totales de ofrendas, nunca donantes individuales.
  2. 02Personas y familias, con importación desde Excel/CSV y fusión de duplicados.
  3. 03Registro de asistencia con QR desde cualquier celular.
  4. 04Ofrendas por fondos y lotes, cierre mensual de gastos, constancias de donación en PDF y reporte del tesorero.
  5. 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
ChurchOS arquitecturaInterfaz en elcelularclientNext.js en VercelappSesión de better-authservicewithTenant() + can()servicePostgres con RLS(Neon)dataVercel BlobinfraResendexternalRol de migración enCIinfraSentryexternal
  • 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.

Tu organización, fuera del Excel: personas, asistencia y dinero en un solo lugar seguro.Quiero algo así →¿Reclutas? Versión de 30 segundos →

Capítulo 2 de 4

PilotBoard

PilotBoard: búsqueda de empleo con IA que no inventa tu experiencia.

Un tracker de búsqueda de empleo, pensado primero como API, que evalúa el encaje con IA y adapta CVs sin inventar logros.

estado
Demo en vivo (pagos y correo desactivados)
en vivo
pilotboard.dev
periodo
oct 2026 – Actualidad

El problema

para quién

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é
  1. 01Tablero Kanban con tareas, contactos y seguimientos automáticos.
  2. 02Importación por URL: API de Greenhouse, descarga protegida contra SSRF, JSON-LD y Claude como respaldo.
  3. 03Adaptación donde Claude solo puede reordenar o reformular; cada afirmación se verifica antes de mostrarte el cambio.
  4. 04API REST versionada con OpenAPI y API keys, un servidor MCP y un SDK tipado.
  5. 05Tu propia clave de Anthropic cifrada, PDF compatible con ATS y cabeceras de seguridad CSP/HSTS.
  • Next.js 16
  • React 19
  • TypeScript
  • Postgres (Neon)
  • Drizzle
  • Better Auth
  • Anthropic SDK
  • TypeSafe (Jev)
  • MCP SDK
  • zod
  • Paddle
  • Vitest
  • Playwright + axe
  • npm workspaces
  • Vercel

Demo

bucle 16:9, datos ficticios

Arquitectura

mapa del sistema
PilotBoard arquitecturaNavegadorclientClientes MCP · REST ·SDKclient/api/v1 (auth, CSRF)appReglas centrales +evaluación de encajeservicePostgres (Neon) +DrizzledataRunner de importaciónde empleosserviceGreenhouse · JSON-LD· ClaudeexternalWebhooks de PaddleexternalCron de limpiezainfra
  • Navegador → /api/v1 (auth, CSRF): HTTPS
  • Clientes MCP · REST · SDK → /api/v1 (auth, CSRF): API keys
  • /api/v1 (auth, CSRF) → Reglas centrales + evaluación de encaje
  • Reglas centrales + evaluación de encaje → Postgres (Neon) + Drizzle: Drizzle
  • /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.

IA que hace la parte tediosa del trabajo, verificada antes de llegar a ti.Quiero algo así →¿Reclutas? Versión de 30 segundos →

Capítulo 3 de 4

Jarvis

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é
  1. 01Wake word local → Whisper (voz a texto) → Claude → voz de ElevenLabs en streaming, con interrupción.
  2. 02Niveles de permiso en código: lectura, local, externo, prohibido; lo externo requiere un "sí" hablado.
  3. 03Seguimiento de contaminación (taint tracking): texto de la web o de un repo no puede disparar acciones externas.
  4. 04Trabajos de código e investigación en worktrees de git aislados (hasta 3), dirigidos desde un HUD en three.js.
  5. 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
Jarvis arquitecturaMicrófono + wake wordclientWhisper (voz a texto)serviceMente (Claude)appFiltro de permisosserviceHerramientas / MacinfraAltavoz (ElevenLabs)externalClaude Code enworktreesserviceHUD (SSE)clientWhatsAppexternal
  • 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.

Resultado

pruebas
  • En uso diario, siempre encendido desde oct 2026.
  • Primer audio en unos 0,6 s.
  • 8/8 evaluaciones de pedidos riesgosos superadas.
  • Unas 1.900–2.000 pruebas; el código es privado.

Software que te escucha y actúa, y pregunta antes de lo importante.Quiero algo así →¿Reclutas? Versión de 30 segundos →

Capítulo 4 de 4

Quick

Quick: pequeños negocios vendiendo en línea.

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é
  1. 01Una tienda por negocio, en su propio subdominio.
  2. 02Checkout con pin en el mapa y opción de factura.
  3. 03Pagos QR por negocio: credenciales cifradas, webhook y un cron de conciliación.
  4. 04Máquina de estados de pedidos con precios congelados y seguimiento en vivo por enlace mágico.
  5. 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
Quick arquitecturaClienteclientCaddy (TLS bajodemanda)infraNext.js (negociosegún el Host)appPostgres (Neon) + RLSdataProveedor de pagos QRexternalImágenes enCloudflare R2infraAPI de courierexternalWeb push → panel delnegocioserviceSeguimiento porenlace mágicoclient
  • 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.
  • Unas 1.260 pruebas en 129 archivos.
  • 26 migraciones de base de datos.
  • CI/CD a AWS con GitHub Actions.

Tu negocio vendiendo en línea: tienda propia, pagos QR y entrega en el mapa.Quiero algo así →¿Reclutas? Versión de 30 segundos →

Cómo trabajo

Hecho rápido con IA. Revisado como si importara.

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.

  1. 01EspecificarPrimero defino qué significa "terminado": alcance, casos límite y las pruebas que deben pasar.
  2. 02ConstruirLos agentes implementan según la especificación, cada uno en su propio git worktree, en paralelo.
  3. 03FiltrarTipos, lint, pruebas unitarias, de integración y end-to-end en CI, y revisión de seguridad en cambios sensibles.
  4. 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.

David BarreraTech Lead · Stack Builders
Contacto

¿Contratando, o tienes un proyecto? Hablemos.

Contratas para un equipo

Escríbeme →

Tienes un proyecto

Escríbeme →