Ingeniero backend. Construyo APIs y sistemas de datos con Python (FastAPI, SQLAlchemy, PostgreSQL) y servicios de bajo nivel con Rust (Axum, Tokio).
Me interesa la parte difícil: aislamiento multi-tenant, consistencia de datos, rendimiento medido y código que otra persona pueda leer sin preguntarme nada. Trabajo con documentación antes que con prisa — cada proyecto que publico incluye sus decisiones escritas, sus números reales y una sección honesta de limitaciones.
Si no está medido, no está terminado.
Dos sistemas backend que construyo desde cero y despliego con docker compose up. Ambos arrancan con datos precargados, así que se pueden probar en un minuto. El roadmap, las decisiones y los estándares viven en el hub Portafolio.
Caliber — laboratorio de calidad para búsqueda y RAG, en Python. Cargás un corpus y un set de preguntas de oro, corrés experimentos comparables (texto vs vectorial vs híbrido, chunking, embeddings) y publicás métricas reproducibles: recall@k, MRR, nDCG. Todo se ve en una consola de evidencia con visita guiada de 60 segundos. Es la diferencia entre construir un RAG y saber si funciona.
Continuum — motor de ejecución durable escrito en Rust. Workflows declarativos que sobreviven caídas: journal event-sourced, reintentos, timers, señales y efectos exactly-once verificados con tests de crash-injection en CI. Incluye benchmarks publicados (workflows/s, p99 de scheduling, tiempo de recuperación) y un botón CAOS que mata un worker en vivo y demuestra la recuperación sin duplicar efectos.
Ambos están en construcción — el código se publica de forma incremental, tarea a tarea, con CI verde desde el primer commit. Prefiero decirlo a enseñar un repo vacío.
También he trabajado con gRPC, Kafka, Elasticsearch, RabbitMQ y CI/CD en entornos de producción.
- Diseño antes de codificar — esquema, contratos y trade-offs escritos antes de la primera línea.
- TDD donde duele — propiedad e integración (Testcontainers) en lo crítico, no por cumplir un porcentaje.
- CI desde el primer commit — lint, tests y build en cada push. Sin badge verde, no hay merge.
- Métricas o no existe — p95, throughput, recall@k, tiempo de recuperación, cobertura. Números medidos, no adjetivos.
- Documentación en español — cada épica deja su explicación: qué se construyó, por qué así y cómo verificarlo.
Un post técnico por proyecto, en dev.to, cuando cada sistema cierre su última épica. No son tutoriales de "hola mundo": son el relato de las decisiones que costaron algo — por qué un journal event-sourced en lugar de snapshots en memoria, cómo se verifica exactly-once con crash-injection, y qué recall gana entre texto, vectorial e híbrido al medirlo.
Cada proyecto sigue el mismo contrato, para que puedas evaluarlo en minutos sin instalar nada más que Docker:
docker compose up— arranca con datos de demo ya cargados. Nunca una pantalla vacía.- Ruta de revisión en el README — qué archivo leer primero y dónde está la decisión difícil, en lugar de dejarte adivinar entre 200 ficheros.
make test— la suite completa con sus números de cobertura, y el CI verde enlazado.docs/decisions/— los ADRs: contexto, decisión, alternativas descartadas y consecuencias.
Y una sección de limitaciones en cada README. Un proyecto que no declara lo que no hace suele esconder algo.
- Afianzando Rust de sistemas (Tokio, durabilidad, concurrencia, backpressure) — es el diferenciador del mercado suizo y alemán.
- Alemán en progreso, de cara al mercado DACH.
- Construyendo este portafolio con agentes de IA bajo mi dirección, y documentando cada épica en español para poder defender el diseño en una entrevista. La regla que me puse: si no lo entiendo, no se commitea.
Abierto a oportunidades de backend / backend-AI en España desde febrero de 2027, y en remoto para la UE. Español nativo, inglés profesional, alemán en progreso.
Tarjeta ancha y baja: cabecera, actividad, comunidad y lenguajes. Se regenera a diario dentro de este mismo repo con lowlighter/metrics (sin depender de servicios de terceros).


