Point
Mercado LibreThe checkout for Mercado Pago's card reader, from picking the device to the payment, in five countries.
Software engineer specialised in frontend. I take products from idea to production in very different industries, like banking, payments, real estate and sports, with modern, AI-powered technologies.
Complex problems, clear interfaces.
Banking, sports predictions, real-estate investment, innovation, EU funding and payments. Six real products: open any card to read the case.
I care about the details people feel but rarely name:
The checkout for Mercado Pago's card reader, from picking the device to the payment, in five countries.
Uses AI to find, among thousands of EU funding calls, the ones a European company can win, and explains why each one fits.
A self-assessment that shows innovators in any sector how ready their solution is for market, ending in a downloadable report.
Real-estate investment platform embedded in Salesforce: load a property and see whether it works as a fix-and-flip or a rental.
White-label sports prediction and trivia games for betting operators: 10+ apps on one codebase, in 8 languages.
MásBanCo, a provincial bank's mobile app with biometric onboarding and payments, built in React Native side by side with design. 500,000+ downloads.
The ones I use every day. And if your project needs another, I’ll learn it.
Every tool lands with the agent that uses it. I set the task, they build, I review.
An AI coding agent runs as an orchestrator and hands work to specialised agents for UX, development and QA. Any provider works: Claude, GPT, Gemini, whatever fits the project. They share memory files, so context survives between sessions. I set the direction, review every diff and own what ships.
Any model works: Claude, GPT, Gemini. The process stays the same.
What someone using FindFund sees.
What makes it work: data, session, URL state and the AI agent that scores each call.
↔ Scroll or drag the curtain// Sidebar.tsx const t = useTranslations('nav'); return NAV_ITEMS.map((item) => ( <NavLink {...item} key={item.href} label={t(item.key)} /> ));
// middleware.ts · Clerk export default authMiddleware({ publicRoutes: PUBLIC_ROUTES, });
// hooks/useCredits.ts export const useCredits = (orgId: string) => useQuery({ queryKey: creditKeys.byOrg(orgId), queryFn: () => creditsApi.get(orgId), });
// optimistic: the UI updates before the server confirms onMutate: () => credits.increment(1), onError: (_err, _vars, snapshot) => credits.restore(snapshot),
// types/organisation.ts export interface Organisation { id: string; name: string; size: 'STARTUP' | 'SME' | 'LARGE'; plan: Plan; }
// tabs live in the URL: shareable, back-button safe const [tab, setTab] = useSearchParam('programme');
// services/matching.ts const candidates = prefilter(calls, profile); const ranked = await agent.rank(profile, candidates); return ranked.filter((m) => m.score >= MIN_SCORE);
// domain/call.ts · derived, never stored export const isClosed = (call: Call, now = Date.now()) => call.deadline.getTime() < now;
// poll while the analysis runs, stop when it's done useQuery({ ...analysisQuery(id), refetchInterval: (q) => isRunning(q.state.data) && 4_000, });
A bank, a product studio, the consultancy I co-founded and now Mercado Libre. Each one shaped how I build.
I'm on the Point checkout team: the server-rendered flow where businesses buy Mercado Pago's card reader, from picking the device to confirming the payment, in five Latin American countries, working closely with the backend team.
Technology consultancy for European clients, with products of our own. I lead architecture, estimates and delivery: FindFund, our AI search for EU funding, and Maturoscope, whose GitOps delivery to Kubernetes I built.
Product studio, building for international clients. First Splash, a white-label sports prediction and trivia platform for betting operators, in React and React Native. Then Yield305, a real-estate investment platform embedded in Salesforce, in Next.js 14 and NestJS, that turns a property's details into its projected ROI, as a fix-and-flip or a rental.
MásBanCo, the bank's mobile app, in React Native and side by side with design in Adobe XD. I integrated biometric onboarding, identity checks and payments with the banking core. More than 500,000 downloads.
↘ grab one and throw it.
The checkout where businesses buy their Point card reader, from picking the device to confirming the payment, in five Latin American countries.
For many sellers, buying a Point is the first step to running their business on Mercado Pago. The checkout has to get them from picking a device, a kit or accessories to a confirmed payment without hesitation, on any phone and any connection.
Behind a few simple screens there's a lot: cart and cross-selling, home delivery or pickup, the address, the mobile data chip, payment methods and instalments, invoicing and the payment itself. And in each of the five countries, those steps follow their own rules.
I'm a software engineer on the Point checkout team. I build and maintain the server-rendered screens of the purchase flow: cart and cross-selling, shipping and pickup, address search with Google Maps, the data chip, payment methods and instalments, invoicing, and card payments through Checkout Bricks. I work closely with the backend team that develops the APIs behind each step.
I follow real usage with Datadog RUM: which screens users go through, at which step they stop and how each change behaves in production.
Every step arrives ready from the server, so the flow loads fast even on modest phones and slow connections, which are common among Point buyers.
Trade-off: every visit costs server work; to avoid repeating it, data that rarely changes, like configuration and the catalog, is cached in Redis.The same steps adapt to each site: shipping options, documents, instalments and invoicing change from country to country, without five separate checkouts.
Trade-off: a matrix of countries and options that every change has to be tested against.Product, discount, shipping and the total sit next to every step, so nobody reaches the payment with a surprise.
Trade-off: the summary recalculates with every change in the order.The checkout is the way in for every seller who buys a Point in Argentina, Brazil, Mexico, Chile and Uruguay. My job is to keep that path fast, clear and reliable, and to make each improvement reach all five countries at once.
Uses AI to find, among thousands of EU funding calls, the ones a European company can actually win, with a 0–100 score and the reasons behind every match.
The EU publishes thousands of funding calls across programmes like Horizon Europe, Erasmus+ or Interreg, written in dense programme language. Companies either miss the ones that fit them or spend weeks reading the wrong ones.
With FindFund a company describes itself once (a PDF, a pitch deck or its website) and gets back the open calls that fit, ranked, each with its eligibility, its deadline and a plain-language explanation. From a match it can draft its expression of interest.
It's our own product at Synopp, so I do all of it: architecture, the AI matching pipeline, the dashboard, billing and the infrastructure. The pipeline reads the organisation's profile, scans the open calls, matches sectors and technologies, scores each candidate and ranks the best ones, explaining every score.

I learned as much about AI as about Europe: how Horizon Europe and Interreg calls work, what a TRL is, what an expression of interest is and what an evaluator looks for. Without that, the model's answers can't be judged.
A fast rule-based pass narrows thousands of calls to a shortlist, and a language model scores only that. Cost and waiting time stay predictable.
Trade-off: the prefilter can drop an edge case, so its rules are tuned against real profiles.A full analysis takes minutes, so it runs in a queue and the interface follows its status. People can leave and come back.
Trade-off: more moving parts, with job states, retries and notifications.Each match explains why it fits, which gaps to close and how reliable the score is when the profile is thin. A number alone doesn't help anyone apply.
Trade-off: longer outputs, so results are paginated and cached.What used to take weeks of reading now takes 5 to 10 minutes: a company gets the open calls that fit it, ranked and explained, and can go straight to drafting its expression of interest. The product is in active development, and every analysis teaches us something about how to score better.
A free self-assessment that shows innovators in any sector how ready their solution is for market, what's holding it back and which steps to take to get there successfully.
Taking an innovation from idea to market takes maturity on three fronts: technology (TRL), market (MkRL) and manufacturing (MfRL). Assessing them is usually slow, expensive and subjective, and innovators don't always know where to start.
A European research centre needed a free, guided assessment: no sign-up, no data stored, a downloadable report in a few minutes, and a direct path to the service providers who can help close each gap.
The product has three parts: a landing page that hosts the platforms, a dashboard where admins manage each assessment platform, and the responsive app where people take the assessment.

I was the full-stack developer, tech lead and DevOps: the monorepo's architecture, the assessment app, the admin dashboard and the delivery pipeline. Every merge is built, scanned and deployed to Kubernetes without anyone touching a server.

I worked with a designer, a PM and a business lead, between Buenos Aires and Europe: turning design into components, estimating each stage and keeping releases small and frequent.
Progressive steps, visible progress and answers saved in the browser as you go, so nothing personal leaves it.
Trade-off: more state to manage between steps.A restrained palette and plain-language labels instead of raw scores.
Trade-off: fewer chart types, chosen on purpose.The landing, the admin dashboard and the assessment share components in one Turborepo monorepo.
Trade-off: shared components need versioning discipline.CI builds and scans the images, Git holds the desired state and a GitOps controller rolls it out to the cluster with health checks. Rolling back is reverting one commit.
Trade-off: an infra repo and a cluster to own, worth it from the second environment on.Innovators from any sector can now complete the assessment in under 12 minutes, download a report with their three readiness levels and the actions to improve them, and reach the recommended service providers. Admins run their platforms on their own from the dashboard, and every release ships with a merge.
I'd manage the time difference with Europe better from the start: decisions in writing, a fixed overlap window for what needs a conversation, and recorded demos, so nobody waits on the other side to move forward.
The platform a Miami real-estate firm uses to budget each property and decide whether it's worth buying, as a fix-and-flip or as a rental. It lives inside Salesforce.
Yield305 buys properties in Florida and other US states to renovate and resell them (fix-and-flip) or to rent them out. Before making an offer, every house went through a huge Excel spreadsheet: the property's hard data, a renovation calculator with dozens of line items, purchase, holding and selling costs, and at the bottom the ROI and the net profit.
It worked, but it was very hard to handle: a web of chained formulas, one spreadsheet per property and a slow process right when the decision has to be fast.
A team of four: a designer, a PM and two developers. I was the project's tech lead and full-stack developer; the other developer worked on the frontend. The designer turned the spreadsheet into a product and I built it end to end: the interface in Next.js, the APIs in NestJS, the data in PostgreSQL and the calculations that used to live in the cells.
The trickiest part: the app had to live embedded inside Salesforce, where the team already worked. So nobody had to sign in twice, I built the whole communication between Salesforce and the iframe our app ran in: Salesforce tells the app who the user is and the app starts with their session.
The app runs in an iframe inside Salesforce and receives the user's identity through messages between the two windows. Nobody signs in twice.
Trade-off: every message between windows is validated (where it comes from and what it carries), and the iframe brings its own limits on cookies and navigation.Each block of the Excel became a screen and each formula a calculation in the system: hard data, renovation, purchase, holding and sale, all the way to the ROI.
Trade-off: changing a business rule is no longer editing a cell; it goes through code.The same property data shows whether it pays off as a fix-and-flip or as a rental.
Trade-off: two calculation models to keep aligned.Budgeting a property went from wrestling with a spreadsheet to a guided flow inside the tool the team already used. That sped up the analysis of every property and the call on whether to invest, and with which strategy. Purchase, holding, renovation and sale now live in one place, with a summary that updates as you type.
I'd write tests from day one that check every calculation against the original spreadsheet, using real properties. It's the fastest way for the business to trust the new numbers. And I'd put the message contract between Salesforce and the iframe in writing before building it.
White-label sports prediction and trivia games for betting operators: more than 10 apps, 8 languages and a single codebase.
Splash is a white-label platform: the same games run in more than 10 apps, each with its operator's brand, language and currency. During my time on the project, the focus was sports predictions and trivia, with prizes and jackpots.
The challenge was technical and legal at once. Each country it runs in, mostly in Europe, regulates gaming its own way: which prizes you can offer, in which currency, to whom, and what has to be on screen. One codebase had to meet all those rules without turning into ten different products.
I worked on every stage of the product. First on the native app in React Native, then on the move to web, and finally on the game lobbies and the prize management dashboard, where contests, prize tables and regions are set up.

Along the way I built REST APIs and MongoDB models, image uploads to S3 and deploys on Amplify, and kept quality up with Jest and React Testing Library. With the PM, I turned each new requirement, often a country's rule, into clear stories for the team.
Brand, language, currency and allowed prizes came from each operator's configuration, so a new app was a setup, not a fork.
Trade-off: every change had to be tested against many configurations.On the web, operators embed the games in their own site and app, and a fix reaches every brand the same day, with no store review.
Trade-off: rebuilding screens and giving up some native features.Contests, prize tables and regions are set from the dashboard, so the operations team could adapt each contest to local rules without a deploy.
Trade-off: a more complex dashboard, with validations so an invalid combination can't go live.The platform grew to more than 10 white-label apps on a single codebase. Adding an operator became configuration (brand, language, currency and regions) instead of a project, and the move to web took releases out of the stores: a change reached every operator on the same day.
I'd pull each country's rules out of the game code earlier, into a module with its own tests, and automate the translation review: with 8 languages, a missing string often showed up only in production.
MásBanCo, the mobile app of Corrientes' provincial bank: open an account, verify your identity and pay from your phone, simply and securely.
Banco de Corrientes is the provincial bank: almost everyone with a bank account in Corrientes has one there. Yet many of them distrust the local financial system and would rather queue at a branch or keep cash.
The app had to do the opposite: make opening an account, proving your identity and paying from your phone feel simple and, above all, safe. For people who had never banked on their phone, and some who didn't want to.
We were five: a tech lead, three developers (I was one of them) and a designer. I worked hand in hand with design, iterating screens in Adobe XD before writing code, and built them in React Native.
I integrated biometric onboarding with Facephi, identity checks with VU Security and payments with Prisma, connected to the bank's core through Genexus. It was the first app I took to production, and where I learned how much of a product happens outside the code.
Reviewing every screen with the designer in Adobe XD before building it, so details, states and errors were settled early.
Trade-off: more back and forth at the start, much less rework later.Sign-in with Face ID, and balances stay hidden until the user chooses to show them, so opening the app on a bus or in a queue feels safe.
Trade-off: seeing a balance takes an extra step.Identity, biometrics and payments each sit behind their own module, so a provider can change without touching the screens.
Trade-off: more in-house code to integrate each provider.The app reached more than 500,000 downloads on Android and iOS, and signing up through it grew about 35% in the year after digital onboarding launched: people who used to need a branch visit could become customers from home.
It was the first app I took to production, and where I learned that in banking, trust is designed screen by screen.
I'd measure from day one at which onboarding step users give up, and explain on screen why we ask for each piece of data. In banking, being transparent is part of the UX.