SóPede
sopede.com.brA restaurant’s own delivery: digital menu, orders on the kitchen screen, tables and delivery in one place — and no commission on the sale. The menu is built from a photograph of the printed one.
Visit the site →Eighteen years building and repairing production backends. Telecom systems for Ericsson, banking microservices for Itaú, five years on healthcare platforms for a Canadian software company, and seven years that also covered firmware on devices nobody could restart remotely.
These days I work in Java and Spring Boot with Kafka and AWS, and I build and run products of my own on the side.
Microservices in Java and Spring Boot for Itaú, one of the largest banks in Brazil, delivered through Zup — event-driven communication over Kafka and AWS SQS, with Python Lambdas handling asynchronous work at the edges.
Unit, integration and synthetic tests under TDD and BDD, running through CI/CD on every change. In a bank, “we’ll fix it in the next deploy” is not an available answer, and the test suite is what makes that survivable.
Five years with a Canadian healthcare software company — later acquired by RL Datix — on clinical document and policy management for hospitals. Java 11 and Spring Boot on the backend, with MySQL, MongoDB and Elasticsearch/OpenSearch behind search that had to return the right document, not a plausible one.
This is where the architecture moved decisively toward microservices, and where I also built the front ends in Vue and Angular — which is why I can usually tell whether a problem is really in the backend before anyone opens a ticket.
Seven years at the Inatel Competence Center in Santa Rita do Sapucaí, much of it on telecom projects delivered for Ericsson — Java with JSF and PrimeFaces, in the era when the stack was far more tightly coupled than it is today. It included three months on site in Sweden with the client team.
The same years covered embedded work: C on FreeRTOS and Embedded Linux. That teaches a habit that never leaves you — there is no restarting the process on a device already installed in the field, so you get the resource handling and the failure paths right the first time. It is why I write the error branch before the happy path.
Management software for martial arts and sports academies, built around the two things that quietly drain a small academy: unpaid monthly fees and students who stop showing up without anyone noticing.
Recurring billing over PIX and card through a licensed payment institution, QR-code attendance, belt and grade progression with configurable rules, and a churn alert that fires before the student is gone for good. Revenue is a percentage of what actually gets collected, which makes the payment pipeline the part that must never quietly fail.
Visit the site →A management system for estate agencies, built for the neighbourhood agency that runs a few dozen rentals rather than for a chain. Properties, owners and tenants, contracts with automatic IGP-M, IPCA or INPC adjustment, gov.br electronic signature, room-by-room inspections, owner payouts, a public shopfront site, and a funnel that starts at an Instagram comment.
The money is the part that has to be boring. Slips are issued through Sicoob or Asaas into the agency’s own bank account rather than into a platform wallet, go out over WhatsApp with their reminders, and are reconciled and written off without anyone reading a statement. An agency with fifty rentals issues six hundred slips a year, and every one of them is a chance to charge the wrong tenant twice — so the schedule is idempotent and each agency’s data is isolated from every other one.
Visit the site →An ordering platform for restaurants: a digital menu customers order from, a kitchen-side order manager that runs on a screen in the kitchen, and table service and delivery in the same place. The restaurant owner puts it online alone, from a phone, and keeps the whole sale — there is no commission on the order.
The hard part was never the menu. It was keeping the kitchen screen, the customer’s phone and the storefront agreeing about the same order at the same moment, on restaurant wifi that drops.
Onboarding was the real wall: nobody types a hundred menu items in by hand, so most sign-ups die on the empty catalogue. The menu is built from a photograph of the printed one instead — the text is read, the products are assembled with name, description and price, and the owner only corrects what came out wrong. Fifteen minutes from sign-up to the first order.
Visit the site →A channel between a citizen and their city hall. Residents report a pothole, a dead streetlight or an illegal dump with a photo and a GPS pin, get a protocol number, and follow it until somebody closes it with photographic evidence.
Two constraints shaped the build. Faces and licence plates are blurred automatically before a photo is ever stored, because a public complaint feed is not allowed to become surveillance. And near-duplicate reports are detected at the same location, or the same pothole arrives fifty times and the queue becomes useless to the people who have to work it.
Visit the site →An assistant for the building site, aimed at bricklayers, foremen and site engineers rather than at office staff. It answers the questions that actually come up with a bag of cement in hand: how many blocks per square metre, what concrete mix, how much rebar, what a slab will cost.
The engineering problem is not the chat window. It is keeping the numbers right: a language model that improvises a concrete mix is worse than no app at all, so the calculations are constrained rather than generated freely.
Visit the site →An app for tracking what actually changes in a body. Photograph the plate and a vision model estimates calories and macros; describe the meal out loud and it transcribes instead. Around that sit guided workouts, weight and measurements on a body map, progress photos held to the same framing by a pose guide, and habit reminders.
Two decisions carry an app like this past the first week. Logging has to take seconds, or nobody logs anything — which is why the camera and the microphone are the primary input and the form is the fallback. And progress has to be shown fairly: comparing yourself with a partner runs on each person’s percentage of change, not on who started lighter.
Visit the site →The storefront for a studio that 3D-prints and hand-paints collectible figures. The catalogue is browsable by universe, by material and by scale, each piece is quoted over WhatsApp, and an adults-only room sits behind an age confirmation.
A catalogue like this is a taxonomy problem wearing a design. The same figure has to be findable by the character it is, by the material it is printed in and by the shelf space the buyer has, without the catalogue splitting into three separate sites. And since the whole thing sells on photographs, the images are the page weight, so they are the first thing that has to behave.
Visit the site →Banking microservices for Itaú. Java, Spring Boot, Kafka, AWS, Docker, TDD/BDD, Scrum.
Healthcare document platforms; company later acquired by RL Datix. Java 11, Spring Boot, MySQL, MongoDB, Elasticsearch, Vue, Angular, Kafka, SQS, Jenkins, AWS.
Telecom projects for Ericsson, including three months on site in Sweden. Java, JSF and PrimeFaces; plus C, FreeRTOS and Embedded Linux.
Geoprocessing systems with Java, ArcGIS and MongoDB.
First Java projects, as an intern.
Taught logic and programming to teenagers in a social project.
INATEL
UNIVAS
A demo takes an afternoon. Keeping a language model useful once real users are hitting it — with costs that do not spiral, answers you can trust, and a way to know when a change made things worse — is a different job, and it is the one I do.
Rafael IA is on Google Play: an assistant that answers construction-site questions and runs the material calculations behind them. EvolYou runs on Gemini: it reads a photo of a meal and returns its nutritional breakdown, and transcribes a spoken description when the user would rather talk than type. SóPede uses the same idea to build a restaurant’s entire menu from a photograph of the printed one.
A model that improvises a concrete mix is worse than no app at all. So in Rafael IA the arithmetic is constrained rather than generated: the model handles the conversation, deterministic code handles the numbers. Knowing which half is which is most of the design work.
Prompts under version control, structured output the application can actually rely on, cost tracked per request, and an eval set that tells me when a prompt change made accuracy worse instead of better. Without that last one you are not improving a system, you are redecorating it.
In Cidade Cidadã, every photo of a street problem passes through automatic blurring of faces and licence plates before it is ever written to storage. A public complaint feed that quietly becomes a surveillance archive is a failure of engineering, not of policy.
I work with Claude Code every day, and it is the reason I can quote a fixed price and mean it. This site — three languages, a quote configurator, a build pipeline — was built that way. It does not replace knowing what the code should do; it removes the hours between deciding and having it.
Claude, Gemini and OpenAI. I build the provider behind an interface so swapping one out is a configuration change, not a rewrite — the pricing and the leaderboard both move too fast to marry any of them.
Two projects that sit outside the pattern of the rest: one is a game engine rather than a backend, and the other is the one product on this page that is not mine. My own products are published under Flowlyx, my software studio.
A reflex arcade game built in Godot with GDScript, published on Google Play and wired into the Play Games global leaderboards.
A game is a different discipline from a backend, which is most of the reason I built one. A frame budget forgives less than a request budget does: input, physics and drawing have to agree sixty times a second, on phones that are nothing alike, and there is no retry. It also keeps the mobile release pipeline sharp — signing, store listing, staged rollout — which is the part every other product of mine depends on.
Visit the site →A platform for the creator economy, built around a media kit that stays alive on its own: audience, engagement and demographics pulled straight from each social network, officially validated rather than typed in by the creator, and tracked links for the brands they work with.
This is the one on this page I do not own — I am part of the team building it. The engineering that matters here is on the integration side: several social platforms, each with its own authorisation, its own limits and its own reporting delay, refreshed on a schedule and reconciled into a number a brand is willing to pay against. A media kit is only worth anything if nobody can edit it in their own favour.
Visit the site →I started in 2008 as an intern writing Java, and the path since then has been unusually wide: geoprocessing first, then seven years at the Inatel Competence Center on telecom work for Ericsson alongside embedded firmware in C, then five years on healthcare software for a Canadian company, and now banking microservices.
That range is the point. Having written code for a device you cannot reach once it ships changes how you write a web service — you stop assuming the happy path and start writing the failure branch first.
I have worked in English daily since the Ericsson years, including three months on site with the client team in Sweden.
Portuguese — native
English — advanced, daily use with international teams
I take on fixed-scope projects — API integrations, legacy Java upgrades, and the bug your team has been circling for weeks. Price agreed before I start.