A full e-commerce platform, from zero
Led the backend of the whole platform, built from scratch, including the cart, checkout and payment flows.
Senior Backend Engineer
I build backend systems that are maintainable, scalable and pragmatic, and I like owning a problem from the first requirement to production. I also shipped a whole product on my own: Hoopline GM, on the App Store.
shipping software since 2015: 11+ years
Payments, e-commerce and internal tooling, role by role. Scrub through the timeline.
Open /hooplineThe basketball manager game I built alone and shipped to the App Store. See how it is put together.
Open /aboutHow I work, what I care about, and what I do away from the keyboard.
OpenEach bar is a role, drawn like a request trace. Drag the playhead, or click a row, to see what I was building at that moment.
What I've built, and the technology behind it.
Led the backend of the whole platform, built from scratch, including the cart, checkout and payment flows.
Designed and implemented a model that unified different sales modes and simplified the company's internal flow.
Implemented payment flows, webhooks and subscriptions with PayPal inside Stripe, a feature that was in beta at the time and had no documentation to follow.
Contributed to an internal back office that lets other teams work on their own: publishing projects, setting up sales on the website, checking stock and managing shipments.
Regular work on performance and code quality, with Jest and E2E tests. I help the teams I join set up and grow complete automated suites.
Owned the technical direction, planning and delivery of the platform, coordinating several teams.
Every bid in the open.
I could not find a basketball manager game I liked, so I built one for people who love the sport and enjoy the numbers.
It is deeper than a casual player may want, and I made peace with that. I built the game I wanted to play.
A free-to-play basketball manager where the market, the rules and the ratings are all visible. You draft, bid, set your lineup and tactics, play a season, and challenge other managers.
All of it: the app (published on iOS, Android in closed testing), the backend, payments, analytics, the release pipeline and the landing page.
The app repository is private, so here is a tour of what is inside it. Pick a folder.
Pick a flow and follow a request through the real system, step by step.
Choices from building Hoopline that show how I weigh cost, risk and complexity.
Simulation, auctions, economy, seasons and playoffs run as SQL functions and scheduled jobs. Every table has row level security enabled, and the ones no client should ever read (such as the purchase log) have no policy at all: they are closed on purpose. Every security definer function revokes access explicitly.
I keep dependencies to a minimum. PostHog already covers errors, so I would only add Sentry if triaging failures became a bottleneck.
They don't answer any question I actually track, and they cost users some privacy. I would rather collect less.
It would have crossed the pay-to-win line. Coins cannot be bought with money.
A signed callback confirms every rewarded ad before the backend grants anything.
Dart analysis and tests, a numbered SQL suite run with psql, checks for drift between migrations and schema, and Edge Function tests, all behind one script. Separately, and deliberately outside that script because it queries production, another one checks who can execute what in the real project.
Six security definer functions could be called without a session in production. The test that should have caught it had been green for four sprints: the local database lacked Supabase's default privileges, and the harness itself revoked what it then checked. None of them touched coins, gems or energy. Now the test database is built with the same privileges as production, and a read-only script asks the real project who can execute what.
A performance audit of the database and the app's start-up came back with numbers, not hunches. A scheduled notifications query took 655 ms in production because its plan was built without its values; planned with them it takes 34 ms. Every foreign key now has an index, which also fixed account deletion. The purchase-email job that runs every minute only calls out when there is something to send, and the app builds the tabs behind Home once Home has finished reading.
Real screens from the iOS app (version 1.0.6), in the languages it ships in.
Hoopline GM is an independent basketball management game. It is not affiliated with, endorsed, sponsored or licensed by any professional basketball league, team, players' association or player. Real players are referenced by name together with publicly available statistics as part of the game's sports-related content and simulation mechanics. These references do not imply any endorsement, sponsorship, authorisation or affiliation. Statistics are not official league data. All teams, arenas and competitions in the game are fictional.
I'm a backend engineer with experience in payments, subscriptions, e-commerce and internal tooling. At CrowdFarming I've worked across several teams and products, designing backend services from scratch with Node.js and NestJS on PostgreSQL, MongoDB, Redis and AWS.
I enjoy taking a problem all the way: understanding the requirements, designing the solution, defining endpoints and data models, building it, writing the tests and shipping it to production. Performance, quality and testing are what I care about most.
I've also led. At SNIPPET I went from Full Stack Developer to Technical Project Lead, owning the technical direction, planning and delivery of a product. Today I stay hands-on in the code.
He has no problem working as part of a team, in both planning and development, contributing ideas and optimal solutions for each situation. He is also independent and able to carry projects through by himself, effectively and taking care of even the smallest detail.
Throughout the time we worked together, Víctor showed an impeccable sense of organization, a strong desire to learn and improve, a lot of creativity and technical knowledge, and the communication skills that are essential in teamwork.
Excerpts from LinkedIn recommendations, translated from Spanish.
The checks I run on myself before calling something done.
Away from the keyboard.
I played for a while, and now I watch a lot of NBA. Boston Celtics through and through, with Tatum as my favorite.
I love almost all of it. Lately it is rap, jazz, soul and chillhop on rotation.
Gym, running and padel. Anything that keeps me moving.
Weekends are for family. That is where most of my time away from the keyboard goes.
Email is the quickest way to reach me, whether it is a backend problem, an idea or a chat about Hoopline.