
Recovered an inherited project and shipped to a high-volume customer base
A regional supermarket chain in Venezuela had an e-commerce initiative in flight when I joined: there was a Node.js backend, an Angular frontend, and a customer base waiting for it. What was missing was the path from "code in a repo" to "an app customers actually use."
The shape of the work is one any engineer who has joined a pre-launch greenfield will recognise:
The brief was simple in one sentence and hard in practice: finish it and ship it.
| Constraint | Reality |
|---|---|
| Team size | 2 engineers total, including me, embedded with the business |
| Calendar | Months, not quarters — the chain had already waited too long |
| Stack inherited | Node.js backend, Angular frontend, no deploy story |
| Customer surface | Needed to reach customers on phones, fast, without an app-store gauntlet |
| Adjacent work | Customer segmentation and exchange-rate ingestion were also on the table |
The non-negotiable: ship something customers could use, then build the platform underneath that made the next thing easy.
Based on the original delivery architecture (simplified from the internal diagram), this is the flow we shipped:
flowchart LR
classDef ext fill:#e5e7eb,stroke:#6b7280,color:#282a30
classDef svc fill:#dbeafe,stroke:#0f4c5c,color:#282a30
classDef data fill:#d1fae5,stroke:#0f766e,color:#282a30
classDef client fill:#fef3c7,stroke:#f59e0b,color:#282a30
ERP[(ERP / iDempiere)]
M2[(Magento 2)]
subgraph Integration[Integration Layer]
INT[Integrator]
MS[Catalog Sync Microservice]
end
class INT,MS svc
DB[(MongoDB)]
subgraph APIs[Platform APIs]
PROC[Process API\nCatalog, prices, tags, stock]
APP[App API\nOrders, profile, addresses]
end
class PROC,APP svc
subgraph Clients[Customer Surface]
PWA[PWA Storefront]
MOB[Mobile App]
end
class PWA,MOB client
class ERP,M2 ext
class DB data
ERP --> INT
M2 --> INT
INT --> MS
MS --> DB
DB --> PROC
PROC --> PWA
PROC --> MOB
PWA --> APP
MOB --> APP
APP --> M2
The fastest path to a phone screen wasn't an iOS/Android binary — it was a Progressive Web App that customers could install from a link.
| Option | Trade-off | Chose |
|---|---|---|
| Build native iOS + Android apps from day one | Months of platform-specific work; app-store review on every change | |
| Ship a PWA from the existing Angular code, wrap as mobile apps later | Web-first surface available in days, not months; one codebase to maintain |
The mobile apps came after, on the foundation the PWA had already proven.
Tempting as it was to chase the feature backlog, the bottleneck wasn't features — it was that nothing could be deployed reliably.
| Option | Trade-off | Chose |
|---|---|---|
| Hand-deploy until launch, automate later | Faster on day one; every deploy after that costs the same hour | |
| Stand up a private Docker registry + a thin CI/CD pipeline first | Two weeks of platform work before any new feature shipped; every deploy after that was free |
Same principle as similar rescue work: stabilize the runtime before chasing the roadmap. The pipeline outlived the project — the team after me kept using it for the Node.js and Angular services that came next.
Marketing wanted to know which customers to talk to and when. I ran an RFM analysis (Recency, Frequency, Monetary) on the order data the new platform was already collecting.
| Option | Trade-off | Chose |
|---|---|---|
| Wait until a dedicated data team exists | Months of waiting on insight the business needed now | |
| Run RFM on the existing data, hand the segments to marketing | Lightweight, immediately useful, and proved the new platform's data was worth something |
It wasn't a "data platform." It was a one-engineer analysis that paid for itself the first week marketing used it.
Pricing in Venezuela depends on the official exchange rate, which someone on the team was copy-pasting daily. Manual rate entry was both error-prone and beneath the pay grade of every person doing it.
| Option | Trade-off | Chose |
|---|---|---|
| Keep doing it manually | Free until it isn't — a single typo moves prices on a whole catalog | |
| Scrape the official rate on a schedule and push it into the platform | A small ingestion job; removes a daily chore and a class of pricing bugs |
This is the seed of the BCV-scraper work I later wrote about publicly. Small automations like this one tend to pay back quickly, mostly because they remove a recurring human failure mode rather than because they save time directly.
By the end of the engagement:
In hindsight, the sequencing mattered more than the headcount: getting the deploy path in place before chasing the feature backlog is what made the rest of it shippable by a small team.
Same brief today, same team size, same constraints. The instincts wouldn't change; the targets would.
The shape of the work stays the same — deploy path first, customer surface next, the smaller automations after that. GCP just removes a lot of the platform plumbing that used to be the job.
If you're working through something similar and want a second pair of eyes, I'm happy to talk it through — reach out here.
The Intern is downloading movies again
What happens when you give tech-savvy people eight hours of internet access a day? Welcome to the The Intern is downloading movies again problem.
Jhey Pi: an official landing site for an aspiring musician
Official landing site for Jhey Pi, built with Nuxt 4 and Nuxt UI to combine Spotify releases and YouTube videos into a single feed.