A fuel and cooking-gas marketplace for Cuba, with QR pickup

Muévete y Cocina turns the daily scramble for fuel and cooking gas in Cuba into an order-ahead flow: browse nearby service centers and live prices, reserve litres or a gas cylinder, pay, and pick up against a QR. Since the team white-labelled it, the same codebase reaches customers under two selling brands, Mercaful and Gasolero. I proposed and built its offline-first Flutter courier app end to end, shipped heavily on the customer web app alongside the company's frontend lead and a designer, and over time took my work into the backend too: delivery evidence, access control, and per-brand legal documents.

Live site · gas.mercaful.com
Client
Avangenio · Muévete y Cocina (Mercaful & Gasolero)
Role
Full Stack Developer
Year
2026
Timeline
May 2026 — present
Flutter React Router Vite TypeScript FastAPI Playwright Turborepo
A fuel and cooking-gas marketplace for Cuba, with QR pickup

Problem

In Cuba, buying fuel or cooking gas means physical queues at the service centers, uncertain stock, and prices that shift across formats and octane grades. Avangenio set out to put that whole transaction ahead of the queue: let a customer see which nearby service centers actually have stock and at what price, reserve exactly what they need, pay, and show up to collect against a verifiable code — no guessing, no standing in line to find out there’s nothing left.

The hard part isn’t the storefront. It’s that an order can’t just be an internal record: it has to be registered against the external fuel system the service centers run on, which issues the authorization that makes a pickup real. So the product is a consumer marketplace bolted onto a third-party API contract, with identity rules (national ID or passport) that have to match that system exactly, and a physical hand-off at the end that needs to be tamper-resistant.

The platform is called Muévete y Cocina in-house — the name the codebase, the modules and the courier app still carry. What reaches customers are its brands: Mercaful, selling fuel and cooking gas, and Gasolero, fuel only. The screens shown here are Mercaful’s, and predate the second brand.

Approach

This was a team product, owned by one of Avangenio’s co-founders as product owner and directed by the company’s lead frontend engineer and a product designer. I worked within that structure, and what I contributed varied a great deal depending on the surface — from executing someone else’s specification to owning a component from the database table up.

Outcome

The platform is built as a two-sided product, and both brands are in production and selling. The contribution I own outright is the courier app — a component I identified a better approach for, proposed, and delivered end to end: offline-first, in a stack I selected, with a design I authored. On the customer web app my role was that of a high-output contributor rather than the lead: I delivered a substantial share of the interface and connected it to the backend team’s external fuel-system integration, working under the lead frontend engineer and a designer who set the direction.

What began as a frontend role widened as the product did. The later slices — delivery evidence, the dispatcher-to-servicentro authorization boundary, the legal-document system — were built through the FastAPI backend and the back office as much as through the app, because a rule that only exists on the device is not a rule. The station check is the clearest case: I wrote the app half and the API half of the same signed payload, and the part that took the thinking was neither — it was deciding what an APK already in a courier’s hand may assume once the backend has moved on without it.

The strongest signal about the platform came from outside my own work: the team white-labelled it, and the same codebase now serves a second fuel brand, Gasolero, with its own domain, palette and support identity. I didn’t build that scoping layer — other engineers did. But a shared codebase only splits cleanly if every surface stops assuming one brand, and the surfaces I was responsible for — the courier app and the legal documents — were mine to take off the Mercaful name.

That distinction reflects how I operate within a team — executing at volume against a defined specification when that is the task, and taking genuine ownership when I identify something the team should approach differently. Ownership also means going back over your own code looking for what you got wrong: the way past the PIN lock was mine to write, and mine to find before anyone else did. On an app nobody else was reviewing, that habit is the only thing standing between a mistake and a shipped one.

Technologies used

Flutter React Router Vite TypeScript FastAPI Playwright Turborepo
Visuals

Screens

Keep exploring

More work