Academic System
Gestão acadêmica com controle de acesso por papel, persistência trocável em TXT/XML/JSON, CLI e JavaFX dividindo a mesma regra de negócio.
ciência da computação · unifal-mg
Meu primeiro projeto foi mexer no registro do Windows pra deixar o meu notebook com mais fps. Corrompi o Windows e formatei o PC várias vezes nessa história — e sinceramente gostei mais de consertar do que do resultado final. Até hoje é difícil eu ficar muito tempo no mesmo sistema.
Depois de corromper e formatar o notebook algumas vezes, ficou claro que eu curtia mais abrir a máquina do que usar ela pra alguma coisa útil. Isso virou curso: Ciência da Computação na UNIFAL-MG.
Sempre quero saber o que tem por baixo das coisas, e isso acabou me puxando pros dois lados. Pra baixo, C e C++, gerenciando memória na mão e entendendo o que o computador tá fazendo de verdade. Pra cima, Java com testes, padrões de projeto e CI/CD, além de web e PWA.
No meio disso tem um servidor Linux embaixo da minha mesa rodando meus próprios
serviços em Docker — senhas, fotos, mídia e Git. O acesso é por
Tailscale. É ali que eu testo as coisas primeiro, antes de mexer em
qualquer outro lugar.
Sou meio cético com ferramenta nova: antes de sair usando só porque tá na moda, quero ver que ela resolve algum problema meu de verdade. Prefiro entender o porquê a decorar o como.
Ferramentas que eu já usei de verdade — em disciplina, projeto pessoal ou no servidor de casa. Nada aqui é só "já ouvi falar".
Universidade Federal de Alfenas — UNIFAL-MG
Programação Orientada a Objetos, Estruturas de Dados, Programação Lógica e Matemática Discreta. Deixo tudo organizado por período, com código e anotações, no repositório faculdade-bcc ↗.
O que a grade não cobre, eu construo
Um sistema em Java com 13 classes de teste e quatro pipelines de CI/CD, um PWA de treino com backend em Supabase e um homelab em Linux que roda de verdade, todo dia. É onde eu aprendo o que só aparece quando o projeto precisa funcionar mesmo, fora da faculdade.
Procurando
Quero trabalhar com gente melhor que eu e ver como software é feito quando tem usuário de verdade do outro lado. Back-end, sistemas ou infraestrutura me interessam mais.
Clique em um para ler os detalhes técnicos — o que decidi, por que decidi e o que quebrou no caminho.
Gestão acadêmica com controle de acesso por papel, persistência trocável em TXT/XML/JSON, CLI e JavaFX dividindo a mesma regra de negócio.
Servidor Debian embaixo da mesa com serviços em Docker. Furei o CGNAT do provedor com Tailscale, sem expor nada à internet pública.
PWA instalável para registrar treino e acompanhar progressão por fases. Backend em Supabase, deploy na Netlify.
Controle e estatísticas de uma base de dados: inserção, remoção, busca e manipulação de arquivos, com estruturas dinâmicas na mão.
Ordenar listas de listas de forma declarativa, com decorate–sort–undecorate e o cuidado com estabilidade que quase ninguém percebe.
projeto · java · poo
Sistema de gestão acadêmica em Java pra administrar turmas e avaliações, com dois papéis de acesso: administrador e professor. Roda em linha de comando e em interface gráfica JavaFX, usando exatamente a mesma lógica de negócio nos dois.
O escopo é enxuto de propósito — não quis fazer um monte de tela, quis fazer engenharia de verdade em cima de um domínio pequeno.
Camadas separadas: View → Controller → Service → Repository → Model.
A interface nunca fala direto com o domínio, sempre passa pelo controller, que autoriza e delega.
Segurança e validação ficam transversais. Deu certo: consegui colocar a GUI inteira
sem mexer em uma linha sequer de regra de negócio.
RBAC com uma matriz de permissões como fonte única de verdade — o menu esconde, a autorização bloqueia — e ainda tem uma trilha de auditoria dedicada.
Repository + Strategy pra deixar a persistência trocável entre TXT, XML e JSON sem o domínio nem saber o formato. Trocar o formato não toca no domínio. Também usei Singleton, hierarquia polimórfica de avaliações e Bean Validation.
13 classes de teste em JUnit 5 e Mockito, com testes de interação usando
verify(), e cobertura medida com JaCoCo.
4 workflows de CI/CD: build e testes, validação de pull request, imagem Docker publicada no GHCR e release por tag. Docker multi-stage e branch protection ligados também.
infraestrutura · linux
Um servidor Debian montado em casa pra hospedar meus próprios serviços em vez de depender da nuvem dos outros: gerenciador de senhas, backup de fotos, sincronização de arquivos, streaming de mídia, Git próprio e monitoramento.
Meu provedor usa CGNAT — não tenho IP público, então redirecionar porta nem é uma opção. A saída foi montar uma rede privada com Tailscale: acesso de qualquer lugar, criptografado, sem abrir uma porta sequer e sem expor nada pra internet pública. A superfície de ataque já nasce quase zero, não é algo que eu fiquei configurando com cuidado depois.
Cada serviço isolado no seu contêiner Docker, tudo gerenciado por um painel no navegador. É Linux, redes e administração de sistemas na prática — com a vantagem de que, quando eu derrubo alguma coisa, o único usuário prejudicado sou eu mesmo.
projeto · web · pwa
Aplicativo web progressivo pra registrar treinos e acompanhar progressão por fases. Instala como app no celular e foi pensado pra usar mesmo no meio da série, não pra parecer bonito em print.
Backend em Supabase cuidando de banco e autenticação, deploy contínuo na Netlify. Escolhi uma stack enxuta de propósito: queria sair do papel rápido e usar o app de verdade, não montar infraestrutura pra dois usuários.
disciplina · aeds 1 · unifal-mg
Sistema de controle e estatísticas de uma base de dados: cadastro, inserção, remoção, busca e geração de estatísticas sobre os dados guardados, tudo persistido em arquivo.
Foi onde estrutura de dados parou de ser matéria de prova e virou decisão de verdade: escolher a estrutura errada aparecia na hora, em tempo de execução. Também foi meu primeiro contato sério com manipulação de arquivos e com a responsabilidade de gerenciar memória sem rede de segurança.
disciplina · programação lógica
Dois predicados que ordenam listas de listas: um pelo comprimento das sublistas e outro pela frequência desses comprimentos.
Implementação recursiva com a estratégia decorate–sort–undecorate, mantendo a
estabilidade da ordenação. E isso depende de um detalhe bem pequeno: usar
=< em vez de < preserva a ordem original entre elementos
iguais. Testei no SWI-Prolog contra os resultados esperados pra confirmar.
Foi o exercício que mais mexeu com minha cabeça — descrever o que é uma lista ordenada, em vez de dizer pro computador como ordenar, é um jeito completamente diferente de pensar.