Gaizka JiménezDesarrollador de softwarecon IA en producción
Gaizka Jiménez es desarrollador de software en Bilbao. Lleva IA generativa y apps móviles a producción.
La IA en Python, el producto en TypeScript. La app nativa, hasta la tienda.
Cuatro años de software, dos de ellos con RAG, agentes y pipelines LLM en producción. Ahora en CODX Digital como ingeniero de IA y móvil. En paralelo hago emap, el mapa de movilidad de Euskadi. Está en la App Store.
Jiménez
Respuestas cortas.
¿Quién es Gaizka Jiménez?
Gaizka Jiménez es desarrollador de software en Bilbao. Lleva IA generativa y apps móviles a producción: la capa de IA en Python, el producto en TypeScript y la app nativa hasta la tienda.
¿Está disponible para un equipo?
Sí. Busca un equipo en Bizkaia, presencial o híbrido, y también remoto en España o la UE. El correo es contacto@gaizkajimenez.com.
¿Qué es emap?
emap es el mapa de movilidad de Euskadi: transporte público en vivo, rutas puerta a puerta y datos abiertos. La app iOS está en la App Store y la web en emapapp.com.
Ficha de emap→¿Qué es emap Labs?
emap Labs es un benchmark abierto de búsqueda geográfica en euskera y castellano, con DOI 10.5281/zenodo.21282784. Si el buscador se inventa la respuesta, suspende.
Ficha de emap Labs→
Producto propio, y producto de equipo.
Están en producción: se pueden abrir, descargar o citar. En cada una hay una decisión distinta (infra propia, varios proveedores de IA, nativo, o un ecosistema cerrado). Eso es el trabajo.
- Obra / 01PropioEn producción
emap
Plataforma de movilidad de Euskadi
RolDiseño, desarrollo e infraestructura — en solitarioTransporte público de Bizkaia, Gipuzkoa y Álava con tiempos de espera en vivo, rutas puerta a puerta en coche, moto, bici, a pie y transporte público, y capas de datos abiertos. App iOS publicada, web pública y API propia. Trilingüe ES/EU/EN y accesibilidad WCAG 2.1 AA auditada.
Decisión claveNo depender de la API de rutas de nadie. Levanté tres motores de routing propios en un VPS — OSRM para coche en Euskadi, Valhalla para el resto de España y moto, OpenTripPlanner para transporte público — con despliegues blue-green y rollback. Cuando Madrid entró en producción, el grafo conjunto destapó un NPE de frecuencias en OTP 2.7 cuyo fix upstream solo existía en la 2.8, que elimina la API REST que uso: materialicé las frecuencias del GTFS en vez de migrar.
Resultados- App iOS publicada en la App Store (Navegación)
- CarPlay en producción y Android Auto nativo con Car App Library
- Navegación 3D en WebGL con oclusión por edificios y alturas reales de catastros forales
- Tiempo real de 4 redes de transporte vía GTFS-RT
React NativeExpoPythonFastAPIMapLibre GLOSRMOpenTripPlannerValhallaPeriodo2026 — ActualidadRolProyecto propio, en solitarioResultadoiOS publicada · web en producción - Obra / 02PropioPublicado · Apache-2.0
emap Labs
Benchmark abierto de búsqueda geográfica en euskera y castellano
RolAutor — código Apache-2.0, datos CC-BY / ODbLLa capa de datos e IA de emap, publicada con DOI. Corpus dorado de 139 búsquedas hiperlocales sobre 22 capas, held-out estricto y casos de abstención: si el buscador se inventa la respuesta, suspende.
Decisión claveEl hallazgo que no esperaba: la brecha del euskera no era del idioma, era del modelo. Con MiniLM la etapa semántica apenas aportaba nada en euskera; al cambiar a multilingual-e5-large el held-out en castellano subió del 58% al 73% y el euskera del 63% al 71%. El euskera del corpus se escribe y se coteja con Itzuli, el traductor del Gobierno Vasco — no es traducción automática sin revisar.
Resultados- DOI citable: 10.5281/zenodo.21282784
- 22 capas y 27.515 puntos de interés de Euskadi, versionados
- Primer servidor MCP de movilidad hiperlocal, con 5 herramientas
- Evals en CI con gates de regresión en cada push
PythonFastAPIfastembede5-largeMCPGitHub ActionsPeriodo2026RolAutorResultadoOpen source · DOI · v0.2 - Obra / 03EquipoEn producción
Kunoa
Salud y nutrición con IA generativa
RolIngeniero de IABackend de IA para planes de nutrición. Pipeline de generación en cinco pasos sobre AWS Lambda, porque los trabajos largos se salían del timeout de la API. Encima, varios proveedores de LLM y RAG sobre una base nutricional.
Decisión claveLiteLLM con OpenAI y Anthropic Claude, para no atarme a un solo modelo: el proveedor es configuración, no arquitectura. Encima, RAG en Pinecone y reconocimiento de comida por foto para estimar macros.
Resultados- 35% de reducción de churn con la personalización por IA
- Base de reconocimiento de +18.000 platos
- Pipeline de 5 pasos con trabajos largos fuera del límite de timeout
PythonAWS LambdaLiteLLMPineconeSwiftKotlinPeriodoCODX Digital · 2025—RolIA y móvilResultadoiOS + Android, en producción - Obra / 04EquipoEn producción
ChutApp
Vídeo social para fútbol base
RolIngeniero móvil y backendJugadores, equipos y familias comparten clips y momentos de entrenamiento en un entorno moderado pensado para menores de 18. Trabajé el streaming en vivo, los clientes nativos y el sistema de moderación.
Decisión claveNativo en iOS y Android desde el primer día, sin atajo híbrido. El vídeo corto se nota en el gesto, la captura y la reproducción. El precio es hacer cada función dos veces.
Resultados- 12.000 usuarios en la plataforma
- Streaming en vivo en producción con AWS IVS, operado en eventos reales
- Sistema de moderación de contenido de diseño propio
SwiftKotlinNext.jsAWS IVSDynamoDBPeriodoCODX Digital · 2025—RolMóvil y backendResultadoiOS + Android, en producción - Obra / 05PropioConstruido · sin publicar
China Survival Guide
Mini Program de WeChat para extranjeros en China
RolProyecto en solitarioUna guía para moverse por China, publicada como Mini Program de WeChat. Dos vistas, un almacén de contenido, sin backend. Hecha y probada dentro del runtime de WeChat.
Decisión claveMe quedé en WXML, WXSS y JavaScript. Sin puente, sin React, sin backend. Quería ver cómo funciona WeChat por dentro, no disfrazarlo de algo conocido.
Resultados- Build funcional validado con más de 50 expatriados
- Publicación bloqueada solo por el requisito de entidad legal china
WXMLWXSSJavaScriptWeixin DevtoolsPeriodo2026RolEn solitarioResultadoFuncional · sin publicar - Obra / 06PropioEn revisión · App Store
Schengen Days
Motor 90/180 en el bolsillo
RolDiseño y desarrollo — en solitarioUna sola regla: 90 días dentro de los 180 anteriores. El historial se queda en el iPhone, sin cuenta y offline. React Native y Expo, como emap. Español e inglés. Apple la tiene en revisión: todavía no se descarga.
Decisión claveEl recuento 90/180 no me aplica: soy ciudadano europeo. El problema lo vi en Tailandia. La app es el recorte: un motor con tests contra fixtures, no un índice de pasaportes. Entrada y salida cuentan. Si dos viajes se pisan, los días se unen.
Resultados- Regla rolling de hoy hacia atrás 179 días, con tests
- Datos en el dispositivo: sin servidor para hacer la cuenta
- Enviada a App Store Connect; aún sin ficha pública
React NativeExpoTypeScriptPeriodo2026RolEn solitarioResultadoEn revisión · App Store
Todo esto se puede comprobar.
El CV se lee. Esto se abre: la app, el repo, el DOI, las evals. Sin formulario. Sin pedirme hora.
- Prueba / 01App Store
emap, publicada
App de navegación en la App Store española. Se descarga ahora, sin pedirme nada.
Ver en la App Store↗ - Prueba / 02Publicación
DOI 10.5281/zenodo.21282784
Benchmark de búsqueda geográfica en euskera y castellano, citable y con licencia Apache-2.0.
Ver la publicación↗ - Prueba / 03Código
github.com/r3tr0eth/emap-labs
Corpus, harness de evaluación y resultados versionados. Reproducible en tres comandos, con evals en CI.
Abrir el repositorio↗ - Prueba / 04Producción
emapapp.com
Web pública y API en producción, sobre infraestructura de routing propia en un VPS.
Abrir la web↗
Castellano · actualizado en 2026
Trabajo para que el siguiente lo entienda.
Hábitos que ya uso en los proyectos de arriba. Se pueden auditar en el repo.
Las decisiones se escriben, no se recuerdan.
Llevo decisiones de arquitectura numeradas (en emap van por la D-023), con el contexto y la alternativa que descarté. Quien llegue después no tiene que preguntarme por qué el routing no usa la API de un tercero: está escrito, con fecha.
El CI en verde es la condición de terminado.
Regla dura conmigo: tras cada push miro el pipeline, y si está rojo se arregla antes que cualquier otra cosa. En la capa de datos las evals tienen gates de regresión: si una métrica baja, el push no pasa.
No se finge.
Lo que no se puede medir, se omite. Los benchmarks que publico premian un «no lo sé» antes que inventar. Las limitaciones van junto a los resultados, sesgo de cobertura incluido. Prefiero un número pequeño que aguante una entrevista entera.
- Cambios de interfaz verificados con captura, no de palabra
- Accesibilidad WCAG 2.1 AA auditada con axe-core
- Castellano, euskera e inglés en paridad, sin traducción automática
Lo que hay en el taller.
Proyectos más pequeños, en distintos estados. Los dejo a la vista: es lo que hago cuando nadie me lo pide.
- Taller / 01Uso diario
LanguageOS
Sistema propio para aprender idiomas, por inmersión y contexto. Sin gamificarlo.
EstadoHerramienta interna en uso diario y desarrollo activo.
language-os.vercel.app↗ - Taller / 02Open source
Susurro
Dictado por voz en local para Claude Code: transcripción en la propia máquina, sin enviar audio a ningún servicio.
EstadoCódigo público en GitHub, con diario de desarrollo publicado.
github.com/r3tr0eth/susurro↗ - Taller / 03Lista de espera
QuestClub
Juego social privado para grupos de amigos: misiones por temporada y competición que dura.
EstadoSistemas de onboarding y bucles de juego en desarrollo.
questclub.app↗
Notas de trabajo sobre lo que construyo.
Los diarios de build cuentan cómo se construyó algo, con las decisiones y los callejones sin salida. El resto son notas de IA, móvil y tech en Asia.
- 2026 · 09 · 07Field log
Play me rechazó por un aviso que solo estaba en la ficha
Google Play pidió tres cosas. Dos ya estaban en la ficha y en la web. La que tumbó el envío era la que no estaba dentro de la app: decir, en Ajustes, que emap no es oficial. De propina, un permiso de micrófono que no usábamos.
Leer → - 2026 · 09 · 04Field log
Apple rechazó emap por un flag de audio que no usaba
Guideline 2.5.4. El revisor, en un iPad Air M4, no encontró audio persistente en segundo plano. Tenía razón: emap no es un reproductor. El flag lo había metido expo-audio por defecto.
Leer → - 2026 · 09 · 02Field log
Play no me deja publicar hasta que 12 personas usen la app 14 días
El AAB de emap estaba listo. Google Play, con una cuenta personal nueva, no deja pedir producción hasta que 12 testers usen la app 14 días seguidos en closed testing. El reloj era el bloqueo, no el binario.
Leer → - 2026 · 08 · 31Field log
He enviado mi segunda app a la App Store. Ahora toca esperar a Apple
emap ya se descarga. Schengen Days está en revisión. No me aplica la regla 90/180: el problema lo vi en Tailandia. Lo que he mandado a Apple es un motor, no un índice de pasaportes.
Leer → - 2026 · 08 · 17Field log
Los peores bugs de emap no dieron ni un error
Repasando el registro de sesiones de emap encontré un patrón: los fallos que más tiempo me costaron no lanzaron ninguna excepción. Un service worker que dejó de repartir despliegues, una API caída devolviendo 200, props que la librería descarta sin avisar y el bug que tuve que arreglar dos veces.
Leer →