Case studies
Products and experience that show how I work.
Ask me about any of these in an interview. Each one started with ambiguity, missing context, or pressure — the conditions real work actually happens under.
Senderos | Independent Android app
Built an offline hiking atlas for Cuenca and Cajas.
Senderos brings topographic maps, route profiles, lakes, peaks, and interactive 3D terrain onto an Android phone. The map is included in the installation, and hikers can import GPX tracks, save places and notes, and export backup map images. I built the native interface and local data pipeline around use without reliable connectivity, while keeping source information and route-access warnings visible. Explore Senderos.
Kotlin | Android Views | MapLibre Native | PMTiles | OpenGL ES | GPX
Bundled topographic maps and terrain work offline, with Spanish and English interfaces.
GPX imports preserve track segments and waypoints; saved places and notes stay on the device.
Location uncertainty and fix age remain visible, and following pauses when the fix becomes unreliable.
Buses Cuenca | Independent Android app
Made Cuenca's transit network searchable and usable offline.
Buses Cuenca combines a native map with searchable lines, stops, route directions, and rider information. Selecting a line reveals its directions and ordered stops; selecting a stop shows the services associated with it. The goal is simple: looking up a bus should not depend on a data plan or reliable reception. The app packages maps and catalogues together, checks their integrity, and keeps the interface available in Spanish and English without a connection. Explore Buses Cuenca.
Kotlin | Android Views | MapLibre Native | PMTiles | Offline data packaging
Map browsing, directory searches, and route details work without a network connection.
Precomputed route tiles and cached search data keep work bounded on the phone.
Source dates and data limitations stay visible; the app makes no live-arrival or journey-planning claim.
incuencaecuador.com | Independent website
Connected a city guide, transit maps, and the data work behind them.
Cuenca's transit information comes from PDFs, municipal datasets, shapefiles, and GTFS exports that do not always agree. I built a Node pipeline to parse, normalize, and match those sources while retaining provenance, then connected the reviewed data to a public bus map and map-led city guide. A separate review workspace makes unresolved questions visible before publication. Read the case study or explore the website.
React | TypeScript | Vite | MapLibre | PMTiles | Node | Data pipelines
Public maps and guides turn local geographic data into tools for exploring Cuenca.
Source provenance, warnings, and human review preserve uncertainty through the publishing process.
Generated, checked-in data payloads give the public frontend a reproducible build input.
Thoughtworks | 2022 - Present
Inherited a legacy Kafka reporting platform with a two-day handover.
The previous team left days after handing over a streams platform moving hundreds of thousands of messages a week. Nobody fully understood the data flow, and silent correctness issues were eroding trust in downstream reporting. I mapped the system, found and repaired the missing data, and added DataDog distributed tracing so the next engineer would inherit a map instead of a mystery. Later, I helped drive a six-month cross-team effort to launch a greenfield Task API and Kafka Streams processor for the mobile app's end users.
Kafka | Kotlin | Spring Boot | Kubernetes | Helm | AWS | DataDog | PostgreSQL
Repaired and validated 200,000+ rows of reporting data that had been quietly degrading downstream trust.
Launched a new API and event processor across multiple teams in six months.
Left behind tracing, docs, and runbooks — the handover I never got.
60Hertz Energy | 2019 - 2021
Built a cross-platform mobile product solo, from zero to launch — then kept it alive.
A startup serving remote energy operations needed a field app that worked offline, on any device, in places where connectivity is an assumption you can't make. I developed the Flutter application by myself from nothing to launch. When my boss announced the app was ready and then quit, I handled the cleanup, support, and every release after. My direct manager later said the company couldn't have continued without the app shipping — they were running short on runway.
Flutter | Dart | TypeScript | Vue | Node.js | Docker | Elasticsearch | Sentry | MongoDB
Sole developer from zero to launched product on iOS and Android.
Offline-first workflows and form building for field crews in remote environments.
Kept the product supported through diagnostics across Sentry, Kibana, and cloud logs.
Freelance | 2015 - 2021
Turned messy client workflows into software that ran their businesses.
Six years of client work means six years of scoping, proposals, estimates, and delivery with no one to escalate to. The representative project: a WordPress order and invoicing plugin that automated billing for over 100 client accounts, collapsing a multi-day monthly manual process into a short workflow. Other projects spanned SaaS MVPs with auth, payments, and deployment; geospatial tools; and dashboards — for clients in both English and Spanish.
JavaScript | PHP | WordPress | APIs | Elasticsearch | Deployment | DNS | SSL
Billing automation for 100+ client accounts — days of manual work eliminated monthly.
End-to-end ownership: proposal, build, deploy, document, hand off.
Client work delivered across two languages and multiple business domains.