Open to new projects

Paulo Carvalho.
Java backend engineer.

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.

EricssonTELECOM · VIA ICC
ItaúBANKING · VIA ZUP
PolicyMedicalCANADA · HEALTHCARE
18 yearsSINCE 2008
PostgraduateINATEL · ENG.
Selected work

Things I built and still run.

Banking platform for Itaú

Via Zup · 2023—present

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.

JavaSpring BootKafkaAWS SQSLambdaDockerCI/CD

PolicyMedical & Acuma Health

Canada · healthcare · 2018—2023

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.

Java 11Spring BootKotlinElasticsearchMongoDBKafkaVueAngularJenkins

Telecom systems for Ericsson

Via ICC — Inatel Competence Center · 2011—2018

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.

JavaJSFPrimeFacesCFreeRTOSEmbedded LinuxAngularNodeJS

Arena

Own product · live on Google Play

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 →
Recurring billingPIXPayment gatewayAndroidFirebaseMulti-tenant

SôPede

Own product · in production

An ordering platform for restaurants: a digital menu customers order from, and a kitchen-side order manager that runs on a screen in the kitchen and moves each order through preparation.

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.

Visit the site →
Realtime ordersKitchen displayFirebaseMulti-tenantWeb + mobile

Cidade Cidadã

Own product · civic tech · Google Play

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 →
AndroidGeolocationImage privacyModerationFirebase

Rafael IA

Own product · LLM assistant · Google Play

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 →
LLMPrompt designIn-app purchasesAndroid
Full history
2023

Zup — Java Backend Developer

Banking microservices for Itaú. Java, Spring Boot, Kafka, AWS, Docker, TDD/BDD, Scrum.

2018

PolicyMedical (Canada) — Backend & Full Stack Developer

Healthcare document platforms; company later acquired by RL Datix. Java 11, Spring Boot, MySQL, MongoDB, Elasticsearch, Vue, Angular, Kafka, SQS, Jenkins, AWS.

2011

ICC — Inatel Competence Center — Embedded & Full Stack Developer

Telecom projects for Ericsson, including three months on site in Sweden. Java, JSF and PrimeFaces; plus C, FreeRTOS and Embedded Linux.

2010

Imagem — Java Backend Developer

Geoprocessing systems with Java, ArcGIS and MongoDB.

2008

Kiq Software — where it started

First Java projects, as an intern.

2014

Pronatec — volunteer programming instructor

Taught logic and programming to teenagers in a social project.

Education
2014 — 2016

Postgraduate, Electronic Systems Engineering, Automation & Industrial Control

INATEL

2007 — 2010

Bachelor’s Degree, Information Systems

UNIVAS

AI in production

Anyone can call the API. The hard part comes after.

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.

LLM products, shipped

Rafael IA is on Google Play: an assistant that answers construction-site questions and runs the material calculations behind them. I also built a nutrition assistant on Gemini that reads a photo of a meal and returns its nutritional breakdown, and transcribes a spoken description when the user would rather talk than type.

Guardrails where the answer must be right

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.

Measured, not vibed

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.

Vision, and knowing when not to store something

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.

Claude in the daily loop

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.

Providers

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.

Also shipped

Smaller things, and one I helped build.

My products are published under Flowlyx, my own software studio.

Gato X Telhado

A reflex arcade game on Google Play, wired into Play Games global leaderboards. Built mostly to keep the mobile release pipeline sharp.

Visit the site →

Kuak

A platform where influencers and brands find each other, with social metrics pulled in and refreshed automatically. I contributed to this one rather than owning it.

Visit the site →
About

How I got here.

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.

Core stack
JavaSpring BootKafkaAWS SQSMicroservicesRESTDockerAWSPostgreSQLMongoDBElasticsearchPythonKotlinAngularVueTDD / BDDCI/CDJenkinsClaudeGeminiOpenAILLM integrationEvalsStructured output
Also worked with
CC++FreeRTOSEmbedded LinuxJSFPrimeFacesGrailsGroovyFlutterFirebaseGemini
Languages

Portuguese — native
English — advanced, daily use with international teams

Available for contract work

Need something built, upgraded or unstuck?

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.

See services & pricing