Victor LaperutaLead full-stack engineer · AI agents in production
Contact

Victor Laperuta

Lead full-stack engineer · São Paulo, Brazil

Open to lead and senior full-stack roles, remote.

victorlaperutademoura@gmail.com

Victor Laperuta

Lead full-stack engineer · São Paulo, Brazil

I build products from the first commit, keep them running in production, and took a team to LLM agents in production.

Six years at Dolado, from first engineering hire to Head of Technology, through four pivots.

Open to lead and senior full-stack roles, remote.

What I build with

TypeScript and Node, NestJS on the back, React and React Native in front, PostgreSQL and MySQL, AWS with Terraform, LangGraph and MCP when there is an agent in it.

Education: B.S. Computer Engineering, Insper, São Paulo, 2016 to 2021. Honours for the capstone: a mobile app for visualising an investment portfolio.

Courses: Tech Ethics: Critical Thinking in the Age of Apps, Algorithms, and AI (HarvardX, completed 2026); Digital Wellbeing (University of York, in progress).

Languages: Portuguese, native; English, fluent.

Tools
TypeScriptNode.jsNestJSReactReact NativePostgreSQLAWSTerraformLangGraphModel Context Protocol
09:1211 de outubroWhatsApp

The games on the desk

LittleBigPlanet (Media Molecule, 2008, PlayStation 3). Sackboy, a world of cloth, cardboard and stitches, and a level editor that let anyone build. The look of this site comes from it.

LittleBigPlanet 2 (Media Molecule, 2011, PlayStation 3). The sequel: the same craft world, with a creator kit deep enough to build whole games inside it.

Uncharted: Drake’s Fortune (Naughty Dog, 2007, PlayStation 3). Nathan Drake’s first hunt, a lost island and a playable adventure film.

Uncharted 2: Among Thieves (Naughty Dog, 2009, PlayStation 3). The train, the Himalayas, Shambhala: the one everyone remembers.

Need for Speed: Underground 2 (EA Black Box, 2004, PlayStation 2). Night-time street racing in a city you could drive around, and the tuning that made each car yours.

The app, and what was under it

Screens: home, regions, location, search, shop, product, checkout, payment method, card, login, signup.

React Native, Redux, OneSignal for push, geolocation for the shops near you.

Backend: Express on MySQL. Search with Algolia. Payments with Asaas, card and bank slip. SMS with Twilio. Photos on S3. Delivery through a courier API.

The link a shop shared on WhatsApp opened the same catalogue on the web.

Tools
React NativeExpressMySQLAlgoliaAsaasTwilioOneSignalAmazon S3WhatsApp

Three things I would tell another CTO

Start flexible for discovery, add structure for reliability. The monolithic agent found the real needs; the specialised nodes made them dependable.

Adoption is an organisational problem. What won it: the agent ran in parallel with the spreadsheets for weeks, so the analysts compared its results with their own and trusted it on their own terms. The reframing that held: the intelligence team stays the owner of the process and its quality; their role moves from manual execution to insight and the client; the agent is their tool.

Track usage to discover value.

Tools
LangGraphClaudeOpenAI

The app and the architecture

Human-in-the-loop pauses and visible tool calls while an episode is built.

The player shows the transcript as it is read.

Four repositories: the API, the app, the site, the LLM and speech service. About a thousand commits in about two months.

API: NestJS, hexagonal (interfaces, domain, infrastructure), PostgreSQL, TypeORM, Redis, BullMQ, SSE, JWT, an MCP server.

Speech and models: LiteLLM in front of Anthropic, OpenAI, DeepSeek and Gemini, with Groq and a local Ollama as fallbacks; Kokoro and XTTS for speech; Whisper for the voice-set weekly goals; Docker Compose for all of it.

App: Expo, React Native, Tamagui, Zustand, Reanimated. Site: Next.js 15, React 19, Chakra UI v3, Playwright.

Quality: promptfoo evals gate every prompt change.

Every repository blocks a commit that fails the architecture read, the tests, or lint.

Tools
ExpoReact NativeTamaguiNestJSPostgreSQLBullMQRedisLiteLLMOllamaKokoro TTSWhisperXDockerNext.jsChakra UIPlaywrightpromptfooLangfuse

The app and the architecture

Human-in-the-loop pauses and visible tool calls while an episode is built.

The player shows the transcript as it is read.

Four repositories: the API, the app, the site, the LLM and speech service. About a thousand commits in about two months.

API: NestJS, hexagonal (interfaces, domain, infrastructure), PostgreSQL, TypeORM, Redis, BullMQ, SSE, JWT, an MCP server.

Speech and models: LiteLLM in front of Anthropic, OpenAI, DeepSeek and Gemini, with Groq and a local Ollama as fallbacks; Kokoro and XTTS for speech; Whisper for the voice-set weekly goals; Docker Compose for all of it.

App: Expo, React Native, Tamagui, Zustand, Reanimated. Site: Next.js 15, React 19, Chakra UI v3, Playwright.

Quality: promptfoo evals gate every prompt change.

Every repository blocks a commit that fails the architecture read, the tests, or lint.

Tools
ExpoReact NativeTamaguiNestJSPostgreSQLBullMQRedisLiteLLMOllamaKokoro TTSWhisperXDockerNext.jsChakra UIPlaywrightpromptfooLangfuse