Luccas Candido
Senior Backend & AI Engineer | Go · TypeScript · AWS | DevOps · Platform | Fintech · Open Finance
Plan: 6 years remote with EU, US and Brazil teams. English C1. Based in Brazil.
// The depth a CV has no room for. Each one: the problem, my decision, what I rejected, and what changed.
A queue that fell behind by 100 hours. Measured first, then fixed one bottleneck at a time.
Card, crypto payout, KYC and fraud. What the provider says against what it does.
Every online order becomes an invoice in the salon's accounting ERP. Even when the ERP is down.
My work runs through agents I built. Hooks, human gates, judges and a measured retrieval layer.
I take systems on end-to-end. Schema, deploys, identity, on-call. Decisions go into ADRs before the code. The alternatives we rejected. The cost we accepted.
Go and TypeScript backends. AWS and Terraform on the infrastructure side. Postgres or DynamoDB depending on the access pattern. Most recently, a regulated Open Finance data cache in fintech, from design to production.
I work on the engineering side of AI. Retrieval, evaluation, guardrails, cost. Calling the API is the easy part. Knowing whether the answer is grounded, and what it cost, isn't. My guardrails are code. A rule the model can ignore isn't a rule.
Brazilian Banking-as-a-Service fintech. I led the design of its Open Finance data cache, a multi-tenant internal product, then took the collector to production and kept it stable.
- Designed the cache so a fintech's screen never spends the bank's regulatory call quota. Only scheduled collection calls the institution, under a call budget per institution. Reads come from an Aurora PostgreSQL read model, with raw data append-only in S3.
- Chose a relational read model over query-on-S3 analytics, because a screen needs a synchronous answer. Drawn in C4, recorded in an ADR, presented to the Open Finance board.
- Designed the modular monolith that replaces two legacy backends. Strangler Fig migration with contract parity, one database per domain.
- Stabilized the collector in production by measuring first. Next-job lookup from about 6 s to 1 ms, nightly out-of-memory restarts ended, slow institutions isolated. case >
- Reviewed the team's merge requests on payment and consent paths, and set up the AI-assisted workflow the team uses.
Software consultancy based in Belgium, with European clients and US squads. Two very different engagements.
Salon-management multi-tenant SaaS. Two years as its backend and platform engineer, from an empty repository to the features the business runs on.
- Built the Go backend behind the back office and the storefront: ports and adapters, two OpenAPI APIs with a drift check in CI, event-driven workers on SQS and Lambda.
- Built online booking over staff, services and opening hours. Advisory locks prevent double booking.
- Automated invoicing into each salon's accounting ERP. Webhooks queued and processed with idempotency by destination state. case >
- Kept every salon's data isolated and erasable: shared-schema multi-tenancy, fail-closed RBAC, GDPR erasure by anonymisation.
- Ran the platform as code across three environments in two AWS regions: OpenTofu and Atlantis, ECS Fargate, OIDC-federated CI, anomaly-detection alarms and Sentry.
Licensed real-money game platform (web and Telegram Mini App), 2026. The only engineer, working directly with the client.
- Built card and crypto payment rails that credit each payment exactly once. The unsigned provider callback only triggers a server-side re-read. case >
- Implemented the player protection the gaming licence requires: rolling-window deposit limits, session limits, self-exclusion, KYC before withdrawal.
- Kept live games honest over WebSockets: default-deny authorization, revocation checked on every request and socket.
Allocated to Smiles (Gol Airlines), on its corporate travel platform. I designed and reviewed the architecture of each feature, serverless on AWS.
- Designed the trip request flow: employees request, managers approve level by level, approved trips are booked on the Sabre GDS with holds that expire.
- Modeled multi-tenant access: Auth0 per tenant, an IAM-inspired permission model each tenant configures, on a single-table DynamoDB design.
- Cut Enkel's own onboarding time by 40% with a Python Slack bot on the 1Password API.
- Software Engineer · Sambatech · Sep 2021 – Jul 2022 · multi-tenant learning platform for enterprise clients.
- Software Engineer · Claranet Brasil · Feb 2021 – Sep 2021 · customer and partner portals, in a team of two.
- Software Engineer · SharePrime · Jul 2020 – Jan 2021 · intranet features in React and TypeScript.
Retrieval, not a prompt with my CV pasted in. Same content as these pages, chunked, embedded and searched before the model answers. All on Cloudflare.
My own production SaaS for World of Warcraft market analysis. OAuth2 written from scratch, session tokens stored as hashes. A custom exporter cut scrape latency from about 14 s to about 3 s.
With my Cyrex team: a Slack bot that turns a messy thread into a ready Jira ticket, grounded in the team's own Slack history. A human approves every ticket.
backend/Go · TypeScript · Node.js · NestJS · REST · OpenAPI · GraphQL
infra/AWS · ECS Fargate · Lambda · SQS · Terraform/OpenTofu · Atlantis · Docker · Kubernetes (app side) · GitHub Actions · GitLab CI
data/PostgreSQL · Aurora · DynamoDB · MongoDB · Redis/Valkey · SQLite · pgvector
ai/structured output · RAG (BM25 + vector) · evals · LLM-as-judge · red teaming · multi-agent · MCP
auth/OAuth2/OIDC · PKCE · Auth0 · Keycloak · RBAC
practice/C4 · ADRs · event-driven · ports and adapters · modular monolith · mutation testing · observability
Ask about the Open Finance cache, the payment rails, Cortex, or how I work with agents. Type clear to reset.