Software developershipping AI to production
End to end: the AI layer in Python, the product in TypeScript and the native app all the way to the store.
Four years building software and two shipping generative AI to production — RAG, agents and LLM pipelines. Currently at CODX Digital as an AI and mobile engineer. On the side I build emap, a Basque mobility platform published on the App Store.
Jiménez
My own product, and team product.
Things that are in production and can be opened, downloaded or cited. Each one made a different technical call — my own infrastructure, multi-provider AI, genuinely native, or living inside a closed ecosystem. The calls are the work.
- Work / 01SoloIn production
emap
Mobility platform for the Basque Country
RoleDesign, development and infrastructure — soloPublic transport across Bizkaia, Gipuzkoa and Álava with live waiting times, door-to-door routing by car, motorbike, bike, on foot and public transport, plus open-data layers. Published iOS app, public web and my own API. Trilingual ES/EU/EN with audited WCAG 2.1 AA accessibility.
Key callDepending on nobody else's routing API. I run three routing engines on my own VPS — OSRM for driving in the Basque Country, Valhalla for the rest of Spain and for motorbikes, OpenTripPlanner for transit — with blue-green deploys and rollback. When Madrid went live, the combined graph surfaced a frequencies NPE in OTP 2.7 whose upstream fix only exists in 2.8, which drops the REST API I rely on: I materialised the GTFS frequencies instead of migrating.
Results- iOS app published on the App Store (Navigation)
- CarPlay in production and native Android Auto via Car App Library
- 3D WebGL navigation with building occlusion and real heights from regional cadastres
- Live arrivals from 4 transport networks over GTFS-RT
React NativeExpoPythonFastAPIMapLibre GLOSRMOpenTripPlannerValhallaPeriod2026 — PresentRoleOwn project, soloOutputiOS shipped · web in production - Work / 02SoloPublished · Apache-2.0
emap Labs
Open benchmark for geographic retrieval in Basque and Spanish
RoleAuthor — Apache-2.0 code, CC-BY / ODbL dataThe data and AI layer behind emap, published as reproducible research with a citable DOI. A golden corpus of 139 hyperlocal search cases across 22 layers, with a strict held-out split and abstention cases: a retriever that invents an answer fails.
Key callThe finding I did not expect: the Basque gap was not about the language, it was about the model. With MiniLM the semantic stage barely contributed in Basque; switching to multilingual-e5-large raised held-out Spanish from 58% to 73% and Basque from 63% to 71%. The Basque in the corpus is written, then checked against Itzuli, the Basque Government's translator — not unreviewed machine translation.
Results- Citable DOI: 10.5281/zenodo.21282784
- 22 layers and 27,515 points of interest, versioned
- First hyperlocal mobility MCP server, with 5 tools
- Evals in CI with regression gates on every push
PythonFastAPIfastembede5-largeMCPGitHub ActionsPeriod2026RoleAuthorOutputOpen source · DOI · v0.2 - Work / 03TeamIn production
Kunoa
Health and nutrition with generative AI
RoleAI engineerAI backend for personalised nutrition plans. I built the five-step generation pipeline on AWS Lambda, working around long-running jobs that exceed API timeout limits, plus a multi-provider LLM layer and RAG over a nutrition knowledge base.
Key callA multi-provider layer with LiteLLM (OpenAI + Anthropic Claude) rather than betting on a single model: the provider becomes configuration, not architecture. On top of that, RAG over Pinecone and photo-based food recognition to estimate macros from images.
Results- 35% churn reduction from AI personalisation
- Recognition base of 18,000+ dishes
- 5-step pipeline handling jobs beyond the timeout limit
PythonAWS LambdaLiteLLMPineconeSwiftKotlinPeriodCODX Digital · 2025—RoleAI and mobileOutputiOS + Android, in production - Work / 04TeamIn production
ChutApp
Social video for youth football
RoleMobile and backend engineerPlayers, teams and families share clips and training moments in a moderated environment built for under-18s. I worked on live streaming, the native clients and the moderation system.
Key callNative on both platforms from day one instead of hybrid shortcuts. Short-form video lives on device feel — gesture timing, capture quality, playback consistency. You pay for it by shipping every feature twice.
Results- 12,000 users on the platform
- Live streaming in production with AWS IVS, operated at real events
- Content moderation system of my own design
SwiftKotlinNext.jsAWS IVSDynamoDBPeriodCODX Digital · 2025—RoleMobile and backendOutputiOS + Android, in production - Work / 05SoloBuilt · unpublished
China Survival Guide
WeChat Mini Program for foreigners in China
RoleSolo projectA guide for getting around China, shipped inside WeChat as a Mini Program. Two views, a single content store, no backend. Built and tested end to end inside WeChat's runtime.
Key callStaying inside WeChat's own primitives — WXML, WXSS, JavaScript. No bridge layer, no React shim, no backend. The point was to understand how the system actually works from the inside, not to bend it back into something familiar.
Results- Working build validated with 50+ expats
- Publication blocked only by the Chinese legal-entity requirement
WXMLWXSSJavaScriptWeixin DevtoolsPeriod2026RoleSoloOutputWorking · unpublished
All of this can be verified.
A CV is read; this is opened. Download the app, clone the repository, cite the DOI or review the evaluation results. No forms, and no need to talk to me first.
- Proof / 01App Store
emap, published
Navigation app on the Spanish App Store. Downloadable right now, without asking me for anything.
View on the App Store↗ - Proof / 02Publication
DOI 10.5281/zenodo.21282784
Benchmark for geographic retrieval in Basque and Spanish, citable and Apache-2.0 licensed.
View the publication↗ - Proof / 03Code
github.com/r3tr0eth/emap-labs
Corpus, evaluation harness and versioned results. Reproducible in three commands, with evals in CI.
Open the repository↗ - Proof / 04Production
emapapp.com
Public web and API in production, on my own routing infrastructure on a VPS.
Open the site↗
Spanish · updated 2026
I work so that whoever comes next understands it.
Three habits I bring to a team. They are not intentions: they are applied in the projects above and can be audited in the repository.
Decisions get written down, not remembered.
I keep numbered architecture decision records — emap is up to D-023 — with the context and the option that was rejected. Whoever arrives later does not have to ask me why the routing avoids third-party APIs: it is written down, and dated.
A green CI is the definition of done.
A hard rule I hold myself to: after every push the pipeline gets checked, and if it is red that gets fixed before anything else. In the data layer the evaluations also have regression gates: if a metric drops, the push does not pass.
No pretending.
What cannot be measured is left out. The benchmarks I publish reward answering “I don't know” over inventing, and the limitations are written next to the results — coverage bias included. I would rather have one small number that survives a whole interview.
- Interface changes verified with a screenshot, not with a claim
- WCAG 2.1 AA accessibility audited with axe-core
- Spanish, Basque and English at parity, without machine translation
What's on the bench.
Smaller side projects in various states. I keep them visible because they show what I work on when nobody is asking me to.
- Bench / 01Daily use
LanguageOS
My own language-learning system built around immersion and cultural context rather than gamification.
StatusInternal tool in daily use and active development.
language-os.vercel.app↗ - Bench / 02Open source
Susurro
Local voice dictation for Claude Code: transcription on your own machine, with no audio sent to any service.
StatusPublic code on GitHub, with a published build log.
github.com/r3tr0eth/susurro↗ - Bench / 03Waitlist
QuestClub
A private social game for groups of friends, built around seasonal missions and long-term competition.
StatusOnboarding systems and gameplay loops in development.
questclub.app↗
Working notes on what I build.
The build logs are the most technical: how something actually got built, dead ends and decisions included. The rest are analyses of AI, mobile and Asian tech ecosystems. Written in Spanish.
- 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.
Read → - 2026 · 08 · 17Decision log
La brecha del euskera no era del idioma, era del modelo
Monté un benchmark abierto de búsqueda geográfica en euskera y castellano para emap. Por el camino aprendí que el umbral de abstención no se hereda entre modelos, que la declinación vasca rompe el preprocesado, y que medir bien el euskera empeora tus números antes de mejorarlos.
Read → - 2026 · 08 · 17Field log
Me cansé del algoritmo de Spotify y me construí uno que descubre de verdad
Spotify me recomendaba siempre lo mismo. El problema no es el algoritmo: es su objetivo. Así que me monté crate-digger, un descubridor musical que rota ejes de exploración y tira de curación humana. Open source.
Read → - 2026 · 07 · 13Field log
Susurro: construí control por voz 100% local para Claude Code
Tenía diez sesiones de Claude Code abiertas a la vez y no daba abasto mirando pantallas. Construí un sistema de voz que dicta, avisa y cambia de sesión — transcripción y voz corriendo 100% local en el Mac, sin API keys.
Read → - 2026 · 04 · 28Field log
Mi experiencia creando una mini app en WeChat
Una guía de China para extranjeros, construida dentro de WeChat. Lo complicado no fue programar — fue entender el sistema cerrado.
Read →