Case studies
Five situations that tell you how I'll perform on your team.
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.
InCuencaEcuador.com | Independent product | Live
Designed and built a data-driven transit platform — pipeline, public maps, and QA tooling — solo.
Cuenca's transit data lives in disagreeing PDFs, municipal datasets, shapefiles, and GTFS exports. I built a Node pipeline that parses, normalizes, and matches those sources while preserving provenance, plus three product surfaces: a public bus map, a map-led city Atlas, and a private review workspace that makes data uncertainty visible instead of hiding it. The current dataset spans 38 bus lines, 428 canonical stops, and 1,237 tracked aliases. This is the best sample of my unsupervised judgment — read the full case study.
React | TypeScript | Vite | MapLibre | PMTiles | Node | Data pipelines
38 bus lines, 76 directions, and 3,501 rendered stop records generated from inconsistent sources.
Explicit uncertainty model: provenance, warnings, and a 412-item human review queue instead of false confidence.
Deterministic, checked-in data payloads — the frontend builds from a clean checkout.
TrailKit — Trail Running Ecuador | Independent product | Active
Built a geospatial publishing platform where the hard part was trust, not maps.
TrailKit transforms GPX tracks, race records, and field media into reviewed, privacy-safe public content. A Python processing pipeline feeds six FastAPI admin services with React map workbenches, PostgreSQL/PostGIS authoring, and a static Astro site — with a strict boundary between source evidence, internal review state, public-safe projections, and site output. Publication isn't a boolean here: access, safety, attribution, media privacy, and geometry visibility are separate gated decisions. The system spans 119 Python modules and 68 test files — read the full case study.
Python | FastAPI | PostGIS | Astro | React | TypeScript | MapLibre | PMTiles
Four-tier data boundary keeps GPS metadata, private notes, and unpublished geometry out of public builds.
74 races, 179 courses, and 1,859 scanned media files under governed review workflows.
Deterministic rebuilds with artifact manifests, checksums, and public-boundary QA scans in CI.
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.