Medellín, Colombia — remoteSpanish (native) · English C2 Professional
I run the commercial process end to end — prospecting, qualification, and closing calls — then design and deliver the systems the client actually needs. I build working proofs of concept during the sales cycle, so prospects see the solution before they buy. Four years of client-facing sales sit on top of seven years building backend, data, and automation systems, so I can scope a problem in the room with a client and be accountable for what gets built.
$200K+ recovered in receivables Korean Autobody Parts
leads qualified
20,000+ leads qualified Kuberiq
years building / selling
7 / 4 years building / selling since 2019
process
How I work
Different projects, same four steps.
01
Understand & scope
02
Build
03
Revision
04
Deliver
5 records
Selected work
data.pricingKorean Autobody Parts
Competitive Price Intelligence
The catalog had to stay current with what suppliers and competitors were charging, so pricing decisions were made against the market instead of guesswork.
Built supplier, distributor, MSRP and competitor scrapers, then a reconciliation pipeline that merged fresh pricing into the master catalog while preserving row order.
15,000 parts kept current against four live sources.
1 One row fails, the run doesn't.The bad row is quarantined and retried; the other 14,999 finish.
2 Matched on OEM number, not part name.Names differ per supplier. The OEM number doesn't.
Python
Selenium
BeautifulSoup
pandas
openpyxl
Lead developer
net.touchpad
LAN Touchpad
Controlling a Windows machine's cursor from your phone.
Specified a validated WebSocket message protocol as a standalone package with the gesture engine isolated and independently tested, then constrained the security model deliberately: LAN only, pair before control, strict payload validation, idle and pairing timeouts, and inbound rate limits.
1 Pair before control.An unpaired client on the same LAN gets nothing — no discovery, no input.
2 The protocol can't express anything but mouse input.Not blocked at runtime — unrepresentable in the schema.
TypeScript
zod
WebSocket
ASP.NET Core
React Native
Vitest
Protocol, architecture, security model
data.leadgenKuberiq
Maps Business Scraper
Outbound needs qualified local-business leads at volume.
Built a resumable pipeline with parallel workers and checkpointing so an interrupted run picks up where it stopped, then added geographic enrichment, a qualification scoring pass, and CSV export shaped for CRM import.
Over 20,000 leads collected, enriched and qualified into one pipeline.
1 Kill a worker mid-run and nothing is lost.Every worker checkpoints; an interrupted run resumes where it stopped.
Python
Selenium
Flask
BeautifulSoup
geopy
Design and implementation
app.salesStackKuberiq
Kuberiq Sales Stack
The outreach team worked a daily lead queue across WhatsApp and the browser with no shared system behind it.
Modeled the lead schema and built the mobile-first setter app and the CRM with a companion browser extension, with fixed daily assignment limits and balanced lead distribution.
Next.js
Supabase
PostgreSQL
esbuild
web-push
Vitest
api.elearningPolygonUs
ApiAcademy
An e-learning platform spanning 28 domain modules needed one API behind all of it.
Maintained a layered component architecture separating routing, network and middleware concerns, administered both the MySQL and MongoDB stores, and set up CI/CD to AWS Elastic Beanstalk with a custom nginx configuration.
Express
MySQL
MongoDB
AWS S3
Swagger
GitHub Actions
nginx
Also built
Systems
Ulumina — game API and database · Sales Assistant (Telegram, RAG) · Real-time internal chat · speechToText (offline Whisper)
Client websites
Hospitality · Dental and medical practices · Legal practices · Education · Retail and e-commerce
Internal tools
Template generation · Lead scoring and qualification · Document automation · CRM integrations