~/henry-cabello
CVEspañol

I built the app, ran the server, bought the ads.

Luxura went from an empty repo to Google Play in eleven weeks, 5,000+ downloads across Bogotá and Medellín, and it still runs on a box I operate. Three more products below, each with a full teardown, plus five unbroken years inside corporate Microsoft estates.

Bogotá, Colombia · Remote-first · US clients · UTC−5

$ ls -la ./work

Five of these have a full teardown. If you read one, read Luxura. If you read two, add monia.

Luxura: Read the teardown

drwxr-xr-xLive in productionGoogle Play production, through closed testing

Luxura

Invitation-based dating app, Bogotá and Medellín

Evidence of Shipping, operating, and unit economics

Eleven weeks from an empty repo to Google Play, and 5,000+ downloads across Bogotá and Medellín. I paused the ads for one day to find out which half of the funnel was real, then rebuilt onboarding around the answer.

  • Next.js
  • TypeScript
  • Capacitor
  • PostgreSQL
  • Prisma
  • Hetzner
  • Coolify
  • Docker
  • Socket.IO
  • RevenueCat
  • AppsFlyer
  • Twilio
  • Infobip
  • Firebase FCM
  • AWS Rekognition
  • Azure Content Safety
  • Cloudflare R2

Read the teardown →Full write-up: how it was built, what it cost, what I got wrong

See it on Google Play ↗

monia: Read the teardown

drwxr-xr-xLive in productionLive, with a public demo account

monia

Personal finance ledger built from bank email

Evidence of Correctness discipline under an agentic workflow

No aggregator reaches all five of my accounts, so this one reads their email instead: transaction alerts and statement PDFs parsed into ledger rows across five institutions and five currencies. Live, with a public demo account anyone can open.

  • Next.js
  • TypeScript
  • React
  • PostgreSQL
  • Drizzle
  • Neon
  • Gmail API
  • pdfjs-dist
  • Binance API
  • Better Auth
  • Tailwind
  • Vitest
  • Playwright
  • Vercel

Read the teardown →Full write-up: how it was built, what it cost, what I got wrong

Open the demo ↗

Storía: Read the teardown

drwxr-xr-xIn development

Storía

AI customer service for LATAM small business

Evidence of Agent architecture, built fast

An AI sales agent that reads a real catalogue, sends the photos and books the visit, across WhatsApp, Messenger, Instagram and the phone line. Multi-tenant from the schema up, Spanish first.

  • Next.js
  • TypeScript
  • React
  • Prisma
  • PostgreSQL
  • pgvector
  • Redis
  • BullMQ
  • WhatsApp Cloud API
  • Meta Graph API
  • Voice agents
  • Capacitor
  • Tailwind

Read the teardown →Full write-up: how it was built, what it cost, what I got wrong

Mate: Read the teardown

drwxr-xr-xIn developmentBuilt and running, not launched

Mate

AI matchmaker, no swiping

Evidence of Research honesty, including against myself

An AI matchmaker with no swiping: a scheduled job scores candidates on the dimensions the research says predict compatibility, and writes you the reason. Seven months, one production incident that turned out to be 75% test fixtures, and a validation pass that killed the framing the product was named after.

  • Next.js
  • TypeScript
  • LangGraph
  • PostgreSQL
  • Prisma
  • Vector DB
  • Redis
  • Tailwind
  • shadcn/ui

Read the teardown →Full write-up: how it was built, what it cost, what I got wrong

Femi: Read the teardown

drwxr-xr-xIn developmentSubstantially built, not released

Femi

Women's safety platform

Evidence of Cutting a codebase to a ninth, then auditing my own done

One tap raises an alert, the neighbours who opted in get told, and the emergency contacts get an SMS. A rewrite cut it from 77,044 lines to 9,030. Then an audit found four of its core components built, tested, and mounted nowhere.

  • Next.js 16
  • React 19
  • TypeScript
  • Capacitor 8
  • PostgreSQL
  • pg
  • Better Auth
  • Leaflet
  • Firebase FCM
  • Tailwind 4
  • Vitest

Read the teardown →Full write-up: how it was built, what it cost, what I got wrong

-rw-r--r--Level60 ConsultingOngoingMicrosoft enterprise integration

Corporate Microsoft estates where identity, Teams, and reporting have to hold together across tenants, and keep holding the day Microsoft retires an endpoint underneath you.

> Treated the Teams API deprecation as a research problem before a code problem

A retired Microsoft endpoint almost never maps one to one onto its replacement. I worked out exactly what the new surface could and could not do before touching the integration, which turned the migration into a known quantity instead of a discovery exercise with clients on it.

  • Microsoft Graph
  • Teams API
  • Azure Functions
  • Azure SQL
  • Entra ID
  • ADFS
  • TypeScript
-rw-r--r--Clinic matching platformDeliveredGrowth engineering for a medical marketplace

A platform matching patients to hair restoration clinics, where the cost of acquiring a patient decides whether the model works at all.

> Specified the measurement setup before the spend

Paid acquisition without attribution is a guess with an invoice attached. Getting the tracking right first meant every campaign decision after it rested on a number instead of an impression.

  • Meta Ads
  • Google Ads
  • Attribution
  • Creative production
-rw-r--r--Infrastructure operationsOngoingRunning what I ship

Self-hosting has a tail. The day you leave managed platforms, disk pressure, container sprawl, and cache failures become yours at two in the morning.

> Automated the cleanup instead of remembering to do it

Every outage I have had on my own hardware traced back to something that piled up quietly. A scheduled cleanup turns a judgment call I have to remember into a property of the system.

  • Hetzner
  • Docker
  • Coolify
  • Redis
  • Linux

$ git log

  1. Jul 2021 to PresentFull-Stack Engineer Level60 ConsultingPrincipal engineer on a room-health platform for corporate clients: it monitors Microsoft Teams Rooms, Cisco and Zoom hardware across customer tenants, runs pre-meeting checks, raises alerts, and syncs to an ERP, ServiceNow and Power BI.
    • Principal engineer on the platform for five years. I joined it two years in and became the constant across it, owning the integration and alerting layers: multi-tenant Exchange calendar sync, Teams Panel discovery and tracking, peripheral fault detection, and global alerting with daily caps and summary digests.
    • Replaced a Logic Apps pipeline with app-only Microsoft Graph ingestion for ServiceNow incidents, removing a hop that had to be maintained separately from the application.
    • Owned a separate Python service on Azure that integrates the platform with the client ERP, 58 endpoints, as its principal author.
    • Ran the Azure platform the product sits on: Entra app registrations and multi-tenant consent, Blob Storage and the SAS credentials that reach it, Logic Apps, Azure SQL, Analysis Services, and Monitor data collection rules with KQL for room telemetry.
    • Wrote the impact assessment when Microsoft retired the TeamworkDevice API. It was the only interface the product had for Teams Rooms device health, Microsoft confirmed no replacement was planned, and the assessment set what every customer tenant could still be told before any code changed.
    • Traced a reporting pipeline that had shown no incident data for six months to an expired storage credential and a row-terminator mismatch in a bulk load, across Logic Apps, Azure SQL, Blob Storage and Analysis Services.
    • Implemented single sign-on through Entra ID and ADFS across client tenants.
    • Diagnosed and remediated Azure SQL quota exhaustion on large archive tables.
    • Set and announced branch-protection policy for the team: required review before merge, PR-only on main and develop.
  2. 2021 to PresentIndependent engineer, own products Own products and direct contractsFour products of my own, each taken end to end, alongside the Level60 work.
    • Shipped Luxura to Google Play production as the only engineer: build, infrastructure, payments, moderation, store release, and the ad campaigns. Victor designed it.
    • Moved off managed platforms onto a single VPS I operate, taking back the database, the workers, and the hosting bill.
    • Ran paid acquisition personally across Meta, TikTok, and Google: campaign structure, creative, attribution, and the cost per acquired user.
    • Delivered growth and measurement strategy as a contract engagement for a medical marketplace.
  3. Jul 2020 to Feb 2021Full-Stack Developer Gara Group Inc.Remote from Cúcuta for a Florida software firm.
    • Built web applications for a firm specializing in direct-sales and network-marketing platforms, distributor back-office, replicated customer-facing sites, and corporate operations.
    • Worked in Laravel with Vue on the front end.
  4. 2018 to 2020Freelance Full-Stack Developer PukaraConsulting for Pukara, plus direct work for clients in Spain and the US.
    • Built hospital management software for a client in Spain.
    • Consulting work for Pukara across many client projects.
  5. 2016 to 2017Full Stack certification freeCodeCamp
  6. 2014 to 2016Ingeniería Informática, two years, not completed UNET, Universidad Nacional Experimental del Táchira

$ cat approach.md

The stack is not the skill.

The method is always the same. Find the number that is falling. Work out whether it belongs to the code or to the vendor underneath it. Change the piece that actually controls it, then stay and run what you changed.

That is how a domain I have never touched turns into something in production. Microsoft enterprise systems, a multi-agent AI platform, a dating app on Google Play, a safety product with real-time alerts. Four domains, no shared ground, one way in.

It is also why I keep the work most engineers pass on: payments, attribution, release pipelines, ad campaigns, and the infrastructure holding it all up. On a team, that turns into technical direction: the review gates and the specs other people build against.

$ cat stack.ts

{

"How I build with AI": [

"Agentic coding loops", "Multi-model adversarial review", "Claude Code", "OpenAI Codex CLI", "Spec-driven development", "Context engineering", "Subagent orchestration"

],

// I work in agentic loops, and nothing merges until two frontier models have reviewed it independently, neither told what the other said nor what I concluded. That has caught a wrong platform fact, a field-mapping bug hiding behind a zero, and a permissions toggle that was silently breaking attribution. The monia teardown carries the measurement behind the rule.

"Core": [

"TypeScript", "Next.js", "React", "React Native", "Capacitor", "Laravel", "PostgreSQL", "Prisma", "Docker"

],

"AI and agents": [

"LangGraph", "Multi-agent orchestration", "Vector databases", "RAG", "Voice agents", "WhatsApp Cloud API", "MCP", "Claude Code", "OpenAI Codex CLI"

],

// I run MCP servers daily against AppsFlyer, Meta Ads, and TikTok Ads. One of them did not fit how I work, so I extended it.

"Microsoft and enterprise": [

"Microsoft Graph API", "Teams API", "Azure Functions", "Azure SQL", "Entra ID", "ADFS", "SSO", "Azure Content Safety"

],

"Cloud and infrastructure": [

"AWS", "Azure", "Hetzner", "Coolify", "Vercel", "Supabase", "Redis", "Firebase", "Linux"

],

// I have run production on Vercel and on Supabase, and moved off both. The skill is knowing the month a managed platform stops earning its place.

"Mobile and monetization": [

"Expo", "Google Play release pipeline", "RevenueCat", "AppsFlyer", "Meta Pixel", "Conversions API", "AdMob", "Meta Audience Network", "Firebase Phone Auth", "FCM"

],

"Growth and paid media": [

"Meta Ads", "Google Ads", "TikTok Ads", "Attribution modeling", "Geo-targeting", "Creative production"

],

// I pay for the ads on my own products. It means I find out what an architecture decision costs per signup the same week I make it.

"Also": [

"WebSockets", "Filament", "Face recognition", "Identity verification"

],

}

What people say

Sample content for design review. These are not real quotes and do not ship.

Henry set the branch rules our team still works to. Before that we merged straight to main and found out later. He did not ask permission, he wrote it up, explained why, and made it easy to follow.
DanielEngineering Manager
Most engineers I have worked with own their part. Henry owns the outcome. When the numbers were not right he went and found out why instead of waiting to be told. You do not have to project-manage him.
CamilaProduct Lead
He uses AI more heavily than anyone I work with and trusts it less than anyone I work with. He has corrected confident, wrong answers more than once, including ones that were in his favour.
AndrésBackend Engineer
He built it, deployed it, and kept it running. The part I did not expect was that he also ran the campaigns and could tell me what each decision cost per user.
ValentinaFounder

$ contact --open

Henry Cabello

Tell me what you are building.

Grab a slot.

Thirty minutes, straight into my calendar.

Book 30 minutes →