I turn design and logic into seamless web experiences.
I'm a fullstack developer who loves crafting beautiful and scalable software. I specialize in transforming ideas into smooth, reliable web applications with a keen eye for both user experience and implementation quality.
Experienced in TypeScript, React, Vue, Svelte, Styled Components, CSS... I build web experiences with a focus on performance, maintainability, and thoughtful architecture — writing code that's not just functional, but also clean, intuitive, and ready for the future.
The Canais Globo (formerly Globosat Play) project was built inside Globo.com with the ambitious goal of serving multiple TV channels — such as SporTV, Multishow, GNT, and others — through a single, whitelabel platform. Depending on the URL path (e.g. /sportv, /multishow), the site would dynamically render a fully branded experience for each channel, including live content, program pages, and on-demand videos.
📦 From monolith to modern stack
When I joined the team, the legacy application was a monolithic Ruby on Rails backend with some scattered jQuery components. We decided to rebuild the entire platform using React for the frontend and MobX for state management, which provided great reactivity with minimal boilerplate.
Since this was before tools like Next.js or Create React App existed, we architected our own setup using Webpack and a custom Node.js server to deliver server-side rendered (SSR) HTML — essential for SEO and for providing fast time-to-content for users, especially over slower connections.
We followed atomic design principles, building a system of composable components (atoms, molecules, organisms), which allowed us to scale the UI effortlessly across different brands.
⚙️ Backend powered by Elixir
All core APIs were developed using Elixir, chosen for its exceptional performance under high concurrency — a perfect fit for a media platform with millions of simultaneous users. Elixir’s lightweight processes and fault-tolerant design helped us support spikes in access during live events, like football matches or reality show episodes.
Endpoints provided everything from authentication via TV providers (TV Everywhere model) to fetching live stream metadata, VOD catalogs, EPG data, and personalized content for each user.
🧠 Frontend architecture
Routing was handled client-side, but initial page rendering was server-side for better SEO.
The app pulled JSON payloads via Elixir APIs and hydrated the React tree after load.
Theming was isolated in configuration files, allowing each channel to apply its own brand without duplicating logic or markup.
The content structure was always the same:
A full-screen live player (when active).
Below, the VOD content of the channel.
And a floating player minimized on scroll for uninterrupted viewing.
🧩 Scalability through atomic components
One of the strongest pillars of this platform was its design system. All components were structured with reusability in mind, forming the foundation for future projects at Globo.com.
This project was an important milestone in the transition from legacy stacks to modern SPAs and microservices at Globo, combining performance, scalability, and great user experience — and serving as a reference for many future products.
The Canais Globo (formerly Globosat Play) project was built inside Globo.com with the ambitious goal of serving multiple TV channels — such as SporTV, Multishow, GNT, and others — through a single, whitelabel platform. Depending on the URL path (e.g. /sportv, /multishow), the site would dynamically render a fully branded experience for each channel, including live content, program pages, and on-demand videos.
📦 From monolith to modern stack
When I joined the team, the legacy application was a monolithic Ruby on Rails backend with some scattered jQuery components. We decided to rebuild the entire platform using React for the frontend and MobX for state management, which provided great reactivity with minimal boilerplate.
Since this was before tools like Next.js or Create React App existed, we architected our own setup using Webpack and a custom Node.js server to deliver server-side rendered (SSR) HTML — essential for SEO and for providing fast time-to-content for users, especially over slower connections.
We followed atomic design principles, building a system of composable components (atoms, molecules, organisms), which allowed us to scale the UI effortlessly across different brands.
⚙️ Backend powered by Elixir
All core APIs were developed using Elixir, chosen for its exceptional performance under high concurrency — a perfect fit for a media platform with millions of simultaneous users. Elixir’s lightweight processes and fault-tolerant design helped us support spikes in access during live events, like football matches or reality show episodes.
Endpoints provided everything from authentication via TV providers (TV Everywhere model) to fetching live stream metadata, VOD catalogs, EPG data, and personalized content for each user.
🧠 Frontend architecture
Routing was handled client-side, but initial page rendering was server-side for better SEO.
The app pulled JSON payloads via Elixir APIs and hydrated the React tree after load.
Theming was isolated in configuration files, allowing each channel to apply its own brand without duplicating logic or markup.
The content structure was always the same:
A full-screen live player (when active).
Below, the VOD content of the channel.
And a floating player minimized on scroll for uninterrupted viewing.
🧩 Scalability through atomic components
One of the strongest pillars of this platform was its design system. All components were structured with reusability in mind, forming the foundation for future projects at Globo.com.
This project was an important milestone in the transition from legacy stacks to modern SPAs and microservices at Globo, combining performance, scalability, and great user experience — and serving as a reference for many future products.
High-performance homepage redesign with extreme frontend optimization and near-instant loading
TypescriptScssVanilla JSCSS NanoDjango
While working as a developer at Globo, I led the planning and development of a new version of the globo.com homepage, focusing on code modernization, visual clarity, and most importantly, frontend performance.
🧠 The challenge
The backend performance was already outstanding, with pages served via NGINX cache at blazing speeds. That meant the real challenge was improving browser-side performance, especially under poor network conditions like 3G connections.
🧱 Technical foundation
We started the project from scratch, building a new CSS architecture using the BEM (Block Element Modifier) methodology. We created an internal UI library called home-ui (hui) to consolidate reusable interface components.
From day one, we focused on:
Maximum style reuse (with SCSS)
Smallest bundle size possible
Clean, semantic, and maintainable code
📉 Bundle size reduction
By rewriting everything with performance in mind, we managed to reduce the total size of CSS and JavaScript bundles by approximately 82% compared to the previous implementation.
⚡ RAIL model + optimized first paint
We followed the RAIL performance model (Response, Animation, Idle, Loading) to optimize each stage of the page lifecycle.
A major performance goal was to fully render the first scroll within the first HTTP response, enabling a nearly instant first paint.
🛠️ Techniques we used:
Critical CSS inlined directly in the HTML
Lazy-loading for non-critical images
First bundle size kept minimal (~14–30KB)
Subsequent assets loaded asynchronously
Prioritized first paint and interactivity
🔬 Real-world testing and results
We deployed a dedicated WebPageTest instance to run continuous performance tests, simulating a 3G slow connection — mimicking real user scenarios.
The results were outstanding:
Homepage Version
Avg. Load Time (3G Slow)
Old version
~9.1 seconds
New version
~3.9 seconds
🎥 We also recorded a side-by-side video comparing the two versions in real time.
PS: This simulation is in 3g slow!
🌍 Global benchmarks
We benchmarked our new homepage against major international news sites like The New York Times, CNN, and The Guardian. In all scenarios, our new version consistently outperformed these competitors in load time and perceived speed.
⚠️ Note: With the advent of HTTP/2 and HTTP/3, these micro-optimization strategies are less impactful today, but at the time they were a major differentiator and benchmark for internal engineering excellence.
🚀 Impact
The new homepage:
Delivered a massive performance improvement
Reduced bundle size significantly
Improved user experience for millions of daily visitors
Established new internal standards for frontend performance at Globo
🎉 Little Extra
As a fun and interactive touch during the Olympic Games, I also implemented a small animation tied to the Globo.com logo. When users hovered over the logo, the iconic Olympic rings would animate into view with a smooth transition, adding a festive and dynamic layer to the homepage experience. It was a subtle detail, but one that brought delight and aligned perfectly with the global event.
Globo.com
High-performance homepage redesign with extreme frontend optimization and near-instant loading
Typescript Scss Vanilla JS CSS Nano Django
While working as a developer at Globo, I led the planning and development of a new version of the globo.com homepage, focusing on code modernization, visual clarity, and most importantly, frontend performance.
🧠 The challenge
The backend performance was already outstanding, with pages served via NGINX cache at blazing speeds. That meant the real challenge was improving browser-side performance, especially under poor network conditions like 3G connections.
🧱 Technical foundation
We started the project from scratch, building a new CSS architecture using the BEM (Block Element Modifier) methodology. We created an internal UI library called home-ui (hui) to consolidate reusable interface components.
From day one, we focused on:
Maximum style reuse (with SCSS)
Smallest bundle size possible
Clean, semantic, and maintainable code
📉 Bundle size reduction
By rewriting everything with performance in mind, we managed to reduce the total size of CSS and JavaScript bundles by approximately 82% compared to the previous implementation.
⚡ RAIL model + optimized first paint
We followed the RAIL performance model (Response, Animation, Idle, Loading) to optimize each stage of the page lifecycle.
A major performance goal was to fully render the first scroll within the first HTTP response, enabling a nearly instant first paint.
🛠️ Techniques we used:
Critical CSS inlined directly in the HTML
Lazy-loading for non-critical images
First bundle size kept minimal (~14–30KB)
Subsequent assets loaded asynchronously
Prioritized first paint and interactivity
🔬 Real-world testing and results
We deployed a dedicated WebPageTest instance to run continuous performance tests, simulating a 3G slow connection — mimicking real user scenarios.
The results were outstanding:
Homepage Version
Avg. Load Time (3G Slow)
Old version
~9.1 seconds
New version
~3.9 seconds
🎥 We also recorded a side-by-side video comparing the two versions in real time.
PS: This simulation is in 3g slow!
🌍 Global benchmarks
We benchmarked our new homepage against major international news sites like The New York Times, CNN, and The Guardian. In all scenarios, our new version consistently outperformed these competitors in load time and perceived speed.
⚠️ Note: With the advent of HTTP/2 and HTTP/3, these micro-optimization strategies are less impactful today, but at the time they were a major differentiator and benchmark for internal engineering excellence.
🚀 Impact
The new homepage:
Delivered a massive performance improvement
Reduced bundle size significantly
Improved user experience for millions of daily visitors
Established new internal standards for frontend performance at Globo
🎉 Little Extra
As a fun and interactive touch during the Olympic Games, I also implemented a small animation tied to the Globo.com logo. When users hovered over the logo, the iconic Olympic rings would animate into view with a smooth transition, adding a festive and dynamic layer to the homepage experience. It was a subtle detail, but one that brought delight and aligned perfectly with the global event.
Frontend rebuild of the Help Center with SEO-focused architecture and CMS-powered content
ReactStyled ComponentsStrapiSEOMarkdown
OLX – Help Center Redesign and SEO-Driven Frontend Optimization
When I rejoined OLX, the Help Center was still powered by Salesforce. While functional, the platform made it difficult to run A/B tests or rapidly iterate on improvements. Additionally, the high cost of support operations motivated us to rethink the entire experience and move toward a fully custom solution.
💡 Rethinking the tech stack
We decided to rebuild the Help Center from scratch using React and styled-components for a more flexible and maintainable architecture.
To decouple content management from the frontend, we introduced a headless CMS (Strapi). Since Strapi stores content in a Postgres database, we developed a custom crawler to extract and structure legacy help content into markdown, which was later transformed into HTML on the frontend.
🧭 Structuring the experience
We redesigned the Help Center with:
A hierarchical category structure
Dynamically generated help articles from CMS content
A feedback widget under each article:
“Was this helpful?” (Yes/No)
Optional text feedback field
These user insights were regularly reviewed by the Data team, generating actionable feedback loops that directly informed improvements to both self-service content and support workflows.
⚙️ SEO and discoverability
To maximize organic visibility, we implemented a series of SEO optimizations:
Articles rendered with semantic HTML
Rich metadata using <script type="application/ld+json"> annotations
Clean URLs and route structures
Fast loading, markdown-based content rendered server-side
These enhancements ensured that articles were easier to index and more relevant in search engine results.
📉 Measurable results
Significant reduction in chat-based support requests
Decreased complaint volume on platforms like ReclameAqui
Improved help article discoverability via search engines
Empowered the team to run continuous A/B tests and UX iterations
OLX Help Center BR
Frontend rebuild of the Help Center with SEO-focused architecture and CMS-powered content
React Styled Components Strapi SEO Markdown
OLX – Help Center Redesign and SEO-Driven Frontend Optimization
When I rejoined OLX, the Help Center was still powered by Salesforce. While functional, the platform made it difficult to run A/B tests or rapidly iterate on improvements. Additionally, the high cost of support operations motivated us to rethink the entire experience and move toward a fully custom solution.
💡 Rethinking the tech stack
We decided to rebuild the Help Center from scratch using React and styled-components for a more flexible and maintainable architecture.
To decouple content management from the frontend, we introduced a headless CMS (Strapi). Since Strapi stores content in a Postgres database, we developed a custom crawler to extract and structure legacy help content into markdown, which was later transformed into HTML on the frontend.
🧭 Structuring the experience
We redesigned the Help Center with:
A hierarchical category structure
Dynamically generated help articles from CMS content
A feedback widget under each article:
“Was this helpful?” (Yes/No)
Optional text feedback field
These user insights were regularly reviewed by the Data team, generating actionable feedback loops that directly informed improvements to both self-service content and support workflows.
⚙️ SEO and discoverability
To maximize organic visibility, we implemented a series of SEO optimizations:
Articles rendered with semantic HTML
Rich metadata using <script type="application/ld+json"> annotations
Clean URLs and route structures
Fast loading, markdown-based content rendered server-side
These enhancements ensured that articles were easier to index and more relevant in search engine results.
📉 Measurable results
Significant reduction in chat-based support requests
Decreased complaint volume on platforms like ReclameAqui
Improved help article discoverability via search engines
Empowered the team to run continuous A/B tests and UX iterations
Real estate search rebuilt from scratch with blazing performance, live filtering, and map integration
Next.jsReactReact QueryMaterial-UIElasticsearch
🔍 Full-text search powered by Elasticsearch
💰 Replaced Algolia to cut external API costs
📈 A/B tested version increased conversions by 20%
⚡ Smooth UX with live filtering and map integration
During my year at Loft, I led the complete redesign of the property search page. The original version suffered from frontend performance bottlenecks, excessive re-renders during scroll and resize, and a reliance on Algolia, a paid third-party search provider.
I began the project with a minimal MVP. We migrated from Redux to React Query to simplify data fetching, and replaced Algolia with a custom Elasticsearch setup — improving flexibility and significantly cutting costs.
The initial version included just a few core filters, but even with reduced features, an A/B test showed better performance and more conversions than the legacy version. That result validated our new foundation and justified further investment.
We then added dynamic filters that updated the results grid in real time as users selected options. We introduced product carousels that didn’t exist before, and ultimately implemented a map-based search interface. The map experience proved highly successful, offering smooth interactions with real-time updates.
Beyond infrastructure, the frontend saw massive improvements: the new implementation eliminated unnecessary re-renders, ensuring a seamless experience even during scroll and window resizing. This project became a reference point internally for scalable architecture, optimized UX, and measurable business impact.
Loft – Search Page Redesign
Real estate search rebuilt from scratch with blazing performance, live filtering, and map integration
⚡ Smooth UX with live filtering and map integration
During my year at Loft, I led the complete redesign of the property search page. The original version suffered from frontend performance bottlenecks, excessive re-renders during scroll and resize, and a reliance on Algolia, a paid third-party search provider.
I began the project with a minimal MVP. We migrated from Redux to React Query to simplify data fetching, and replaced Algolia with a custom Elasticsearch setup — improving flexibility and significantly cutting costs.
The initial version included just a few core filters, but even with reduced features, an A/B test showed better performance and more conversions than the legacy version. That result validated our new foundation and justified further investment.
We then added dynamic filters that updated the results grid in real time as users selected options. We introduced product carousels that didn’t exist before, and ultimately implemented a map-based search interface. The map experience proved highly successful, offering smooth interactions with real-time updates.
Beyond infrastructure, the frontend saw massive improvements: the new implementation eliminated unnecessary re-renders, ensuring a seamless experience even during scroll and window resizing. This project became a reference point internally for scalable architecture, optimized UX, and measurable business impact.
Open Source
Personal libraries and experiments
A growing collection of tools I build to improve developer experience, unblock game workflows, and explore ideas in public.
phaser-hooks
phaser-hooks
React-like state management for Phaser 3 games.
A library I created to make Phaser state simpler, more type-safe, and much easier to reuse across scenes and game objects. It wraps verbose registry and data APIs with a familiar hook-based mental model.
Phaser 3 TypeScript State Management Open Source
React-like API with persistent state instances based on shared keys.
Type-safe local and global state helpers with simple subscriptions.
Includes debug tooling, documentation, and a visual inspector extension workflow.
DevTools-style state inspection for Phaser games in Chrome and Firefox.
A browser extension I built to inspect Phaser Registry, Scene Data, and state transitions in real time. It brings a Redux DevTools-like workflow to Phaser debugging and adds richer diff visualization when paired with phaser-hooks.
A small utility library I built to make Font Awesome icons straightforward to use inside Phaser games. It helps load the font correctly, exposes helpers for icon characters, and includes a ready-to-use IconText component.
Phaser 3 Font Awesome TypeScript UI Open Source
Loads Font Awesome into Phaser projects with a simple setup flow.
Provides helpers to access icon characters and render them as Phaser text objects.
Includes an IconText component for faster UI composition inside games.
A customizable virtual joystick for Phaser mobile games.
A virtual joystick component I built for Phaser with smooth touch controls inspired by Brawl Stars. It is strongly typed, highly customizable, and designed to work well for movement, aiming, and other mobile-first gameplay interactions.
Phaser 3 Mobile Touch Controls TypeScript Game UI
Inspired by Brawl Stars with smooth following behavior and intuitive touch interaction.
Supports visual customization for dead zone, base area, stick, bounds, and stick icons.
Emits press, move, and release events for movement, aiming, and other gameplay controls.
A terminal debugger for PHP, inspired by tools like byebug and ipdb.
An open source debugger I built for PHP that runs directly in the terminal without requiring a full IDE setup. It helps debug both web applications and CLI scripts with interactive breakpoints, stepping commands, and runtime inspection.
PHP Debugger CLI Xdebug Developer Tooling
Debugs PHP applications directly in the terminal without depending on an IDE workflow.
Supports both web apps and command-line scripts with stepping, continue, variable inspection, and evaluation.
Uses Xdebug and a simple command-based workflow to bring familiar debugger ergonomics to PHP.