FSAKM

Como refatorei o site da FSAKM usando Next.js, Nextra e ShadCN/UI

Introdução

Este é um projeto pessoal de redesign e reimplementação do site da Federação Sul Americana de Krav Maga. O objetivo foi modernizar a estrutura do site, melhorar sua performance e torná-lo mais acessível e organizado. Aproveitei o projeto como uma oportunidade para experimentar tecnologias modernas de front-end como Next.js, Nextra e ShadCN/UI. O resultado é um site leve, rápido e fácil de navegar, pensado para escalar com novos conteúdos e idiomas.
 
Acesse o projeto online: https://fsakm.carlosbronze.com.br/pt

Motivação

Achei o site original pesado, carregamento lento e navegação com baixa legibilidade. A estrutura do conteúdo dificultava a arquitetura lógica de seções. Além disso, vi no projeto uma boa oportunidade para aprofundar meus conhecimentos em Next.js, acessibilidade e componentização com ShadCN/UI.
Navegação com pouca visibilidade e menu expandido com pouca distinção entre seções.
Navegação com pouca visibilidade e menu expandido com pouca distinção entre seções.
Card com pouca visibilidade no texto e o link só funciona na área vermelha.
Card com pouca visibilidade no texto e o link só funciona na área vermelha.
Core Web Vitals do kravmaga.com.br
Core Web Vitals do kravmaga.com.br

Escolhas técnicas

Pesquisei ferramentas que facilitassem a criação de sites estruturados com boa documentação e navegação. Avaliei Docusaurus, Fumadocs e Nextra.
Descartei o Docusaurus por não usar Next.js, e escolhi o Nextra v4 por ser baseado em Next.js, ter suporte nativo a internacionalização e busca integrada com Pagefind. A estrutura inicial é limpa e fácil de personalizar. Além disso, o uso do ShadCN/UI como base de componentes trouxe ganhos importantes em padronização e acessibilidade.

Desenvolvimento

Comecei mapeando as seções principais do site original e usando crawlers para identificar a estrutura de URLs. Descobri que havia cerca de 500 páginas organizadas de forma confusa, com instrutores em /teams/ e academias em /academias/unidade-*-estado.
Redesenhei a arquitetura da informação para algo mais semântico. Instrutores passaram a ter URLs como /federacao/instrutores/nome e academias como /academias/pais/estado/unidade. Isso facilitou a navegação e melhorou o SEO.
notion image

Implementação

Com a estrutura definida, iniciei o trabalho de conteúdo. Adicionei página por página, focando nos textos e imagens, deixando de lado funcionalidades complexas como carrosséis.
Esse processo me ajudou a entender padrões e necessidades do projeto. Padronizei o armazenamento de imagens e identifiquei componentes reutilizáveis para criar depois.

Internacionalização

O Nextra já vem com suporte ao Next I18n. A estrutura padrão adiciona o prefixo da linguagem nas rotas, como /pt/. Embora funcional, achei visualmente poluído e tentei replicar o comportamento do Fumadocs, que permite esconder o idioma padrão na URL. Ainda estou avaliando essa melhoria.

Componentes reutilizáveis

Com o conteúdo base pronto, implementei componentes mais ricos como cards, lightbox e carrosséis usando Embla. O ShadCN/UI facilitou muito esse processo, permitindo editar os componentes diretamente com consistência de estilo e comportamento.

Ajustes finais

No fim, fiz um pente-fino na interface, testando tanto no desktop quanto no mobile. Corrigi bugs, implementei um novo rodapé com sitemap e otimizei imagens.
O resultado foi um site mais leve, moderno, com navegação clara e carregamento muito mais rápido.

Resultados

Comparando com o site anterior, o ganho de performance foi notável. O novo site tem notas excelentes no PageSpeed e está preparado para expansão futura com novos conteúdos e idiomas.

Conclusão

Esse projeto foi uma ótima forma de colocar em prática conhecimentos sobre Next.js, organização de conteúdo, arquitetura de informação e design acessível. O Nextra com ShadCN se mostrou uma combinação poderosa para criar sites estruturados de forma rápida e eficiente.

Melhorias Futuras

Mesmo com o projeto entregue e funcionando bem, algumas decisões ainda me deixam com vontade de iterar. A principal delas é a estrutura de rotas. Ainda me incomoda a necessidade de incluir /pt nas URLs para o conteúdo em português, o que gera uma percepção de complexidade desnecessária para quem acessa o site no idioma principal.
Caso retome esse projeto, penso em explorar uma reimplementação mais customizada usando apenas Next.js puro ou testando o Fumadocs como base, que já lida melhor com a ocultação do idioma padrão. Ou ainda voltando pro AstoJS.
Pontos a ter em mente se retomar o projeto:
  • Criar uma estrutura de rotas onde o conteúdo em português não dependa do prefixo /pt
  • Implementar um dicionário de termos comuns usado no layout, facilitando a tradução de termos em outros idiomas
  • Modularizar ainda mais os componentes visuais e reutilizar textos e metadados entre páginas.
  • Criar automaticamente o Sitemap de acordo com as páginas e títulos.
  • Repensar a Arquitetura/Navegação. Dá pra se apoiar nas 3 seções mais importantes e enxugar a barra de navegação.
 
Se quiser ver o código ou contribuir, está tudo no GitHub.