Fullstack Developer  ·  Porto Alegre, BR

Fullstack developer. Do banco de dados à interface.

Especialidade
JS · Java · Node · CSS
Formação
Ciência da Computação
Modalidade
Remoto · Freelance
JavaScript
Java
Node.js
HTML & CSS
REST APIs
Git & GitHub
DOM API
OOP
Algoritmos
JavaScript
Java
Node.js
HTML & CSS
REST APIs
Git & GitHub
DOM API
OOP
Algoritmos
01

Projetos selecionados

02 — Java · JavaScript · HTML

RPG Game

Sistema de RPG com mecânicas de batalha e progressão de personagem. Iniciado em Java puro e portado para web — o que forçou uma reflexão real sobre separação entre lógica de domínio e apresentação.

Aprendizado: a mesma lógica se comporta diferente em ambientes síncronos (Java) vs assíncronos (browser).
03 — JavaScript · Algoritmos

Jogo da Velha — Minimax

Múltiplos níveis de dificuldade. O modo difícil usa o algoritmo Minimax — tornando o projeto uma exploração prática de recursão e árvores de decisão, não apenas "um joguinho".

Decisão técnica: alpha-beta pruning para otimizar a árvore de busca sem impactar a experiência do usuário.
02

Como penso

01

Entender antes de implementar

Antes de abrir o editor, preciso entender o contexto. Quem usa? Com que frequência? O que acontece quando falha? Essas respostas definem a arquitetura — não o tutorial mais recente.

02

Performance é feature

Uma interface que trava não é "funcional com um bug" — é uma interface quebrada. Considero performance desde a decisão de arquitetura, não como otimização posterior.

03

Código que outros conseguem manter

O código que escrevo hoje vai ser lido em 6 meses. Nomeação clara, funções com responsabilidade única, comentários que explicam o porquê — não o quê.

04

Complexidade tem custo

Cada abstração precisa ser justificada. Se um array com filter resolve, não vou inventar um design pattern. A melhor solução é a mais simples que funciona de verdade.

carousel.js
// scroll event → dispara centenas de vezes por segundo
// window.addEventListener('scroll', check)  ← evitado

// Intersection Observer → callback só quando necessário
const observer = new IntersectionObserver((entries) => {
  entries.forEach((entry) => {
    if (entry.isIntersecting) {
      loadContent(entry.target);
      observer.unobserve(entry.target); // para após carregar
    }
  });
}, { threshold: 0.1, rootMargin: '50px' });

carouselItems.forEach(item => observer.observe(item));
nota →

rootMargin: '50px' pré-carrega antes de ficar visível, eliminando flash de conteúdo vazio em scroll rápido.

03

Sobre

Desenvolvedor fullstack
focado em produto.

Foco em aplicações web que precisam de performance, clareza de código e manutenibilidade. Estudando Ciência da Computação, mas meu aprendizado acontece principalmente construindo coisas reais e investigando por que elas falham.

Gosto de projetos onde solução técnica e experiência do usuário são inseparáveis — onde uma decisão de arquitetura impacta diretamente o que a pessoa sente ao usar o produto.

Atualmente aprofundando Node.js, arquiteturas REST e boas práticas de engenharia. Disponível para freelance e oportunidades remotas.

04

Contato

Tem um problema
técnico para resolver?

Me conta o contexto — o que você está construindo, onde está travado, ou qual oportunidade está avaliando. Respondo em até 24h.

O que acredito
Código bom é código que outra pessoa entende em 6 meses.
Performance não é otimização — é decisão de arquitetura.
A melhor solução raramente é a mais complexa.
Entender o problema é metade da solução.
Bugs interessantes ensinam mais que tutoriais.