Este projeto é um setup base para aplicações React com TypeScript e Vite, incluindo configuração completa de ESLint, Prettier, testes com Vitest, suporte a browser testing com Playwright e arquitetura em camadas clara e escalável.
- React 19
- Vite
- TypeScript
- Vitest + vitest-browser-react
- Playwright (modo browser dos testes)
- ESLint com regras opinativas
- Prettier com padronização obrigatória
pnpm dev # roda a aplicação em modo desenvolvimento
pnpm build # builda o projeto para produção
pnpm lint # executa o lint com ESLint
pnpm test # executa os testes em modo headless (coverage incluso)
pnpm test:dev # executa os testes em modo browser interativo
pnpm coverage # roda os testes com relatório de cobertura| Diretório | Responsabilidade |
|---|---|
ui/ |
Tudo relacionado a UI/React |
ui/app/ |
Bootstrap, iniciação do app |
ui/components/ |
Componentes reutilizáveis |
ui/hooks/ |
Hooks customizados de UI |
ui/pages/ |
Páginas completas por rota |
ui/router/ |
Configuração e renderização de rotas |
ui/styles/ |
Reset global, tokens, variáveis |
ui/theme/ |
Contexto de tema, configurações de design system |
data/ |
Lógica de acesso a dados: repositórios, services |
domain/ |
Regras de negócio e entidades de domínio |
errors/ |
Mapas, mensagens e classes de erro |
infra/ |
Integrações técnicas externas |
inversify/ |
Injeção de dependência |
shared/ |
Constantes, helpers, schemas reutilizáveis (global) |
utils/ |
Funções utilitárias de baixo nível |
tests/ |
Todos os testes e mocks organizados por domínio |
tests/__mocks__/ |
Mocks compartilhados + interfaces |
- Sempre usar
kebab-casepara arquivos e pastas.
- Sempre declarar componentes com
conste tipagemReact.FC:
import React from 'react'
const MeuComponente: React.FC = () => {
return <div />
}- Sempre importar
Reactexplicitamente. - Nunca usar
functionpara declarar componentes. - Nunca usar
any,as,!ou assertions de tipo.
- Todos os arquivos devem ter testes.
- Sempre criar uma função
makeSut()nos testes. - Todas as
interfacesdos testes devem estar eminterfaces.ts. - Se houver mocks, devem estar em
__mocks__/comindex.tspara exportações centralizadas. - Nunca usar
findBy,waitForou funções do Testing Library que não existem novitest-browser-react. - Sempre que o DOM depende de mudança externa (ex:
history.push, props, contexto), usesut.rerender(...)com o mesmo JSX utilizado norender. - Nunca repetir JSX dentro do mesmo teste. Crie uma função de reutilização.
- Sempre usar
display: flexpara layouts. - Nunca usar
marginpara espaçamento. Usegap.
- Todas as
interfacesdevem ser declaradas exclusivamente eminterfaces.ts, inclusive fora dos testes. - Enums devem estar sempre em
enums.ts. - Tipos auxiliares devem seguir o mesmo padrão: nunca declarados inline em arquivos
.tsxou.ts. - Toda declaração fora de seu contexto (tipo, enum, interface) é bloqueada por regra de ESLint.
Este projeto segue a convenção GitMoji com formatação obrigatória:
[EMOJI] [tipo](escopo): descrição em inglês no tempo presente
- ✨ feat(
router): Add support for dynamic routing - ✅ test(
core): EnsuremakeSuthandles invalid inputs - ♻️ refactor(
core/Router): Extract render logic into helper - 🔧 chore(
eslint.config.js): Improve custom lint rules for interfaces - ✏️ docs(
README.md): Add commit message guidelines
- Sempre escreva em inglês.
- Sempre use um emoji GitMoji no início.
- Sempre especifique o escopo entre parênteses.
- Use tempo verbal presente e frases objetivas.
- Não exceda 120 caracteres por linha.
- Nunca use emoji como texto (
:sparkles:❌,✨✅).
Este projeto é livre para uso interno ou como boilerplate. Adaptar conforme necessidade.