Contribuicao
Padroes de Codigo
TypeScript strict, ESLint e convencoes
TypeScript
- TypeScript 5.9 com
strict: true noUncheckedIndexedAccess: true— acesso a arrays/objetos retornaT | undefined- Path alias
@/mapeia para./src/
ESLint
- Flat config format (ESLint 9+)
- Zero warnings:
--max-warnings 0 - Configs por tipo de app:
vite— apps/appnext-js— apps/docs
bun run lint # Lint tudo
bun run lint --filter=app # Lint so o appPrettier
Formatacao automatica para .ts, .tsx e .md:
bun run formatConvencoes
Componentes
- shadcn/ui — Importe direto, sem wrappers
- Lucide — Unico provider de icones
- cn() — Para merge de classes
Estrutura de arquivos
src/
├── components/
│ ├── ui/ # shadcn (editavel)
│ ├── layout/ # AppLayout, AppSidebar, nav-*
│ └── shared/ # Componentes reusaveis nao-domain
├── features/<domain>/
│ ├── components/ # Componentes do dominio
│ └── *Page.tsx # Paginas (targets de rota)
├── hooks/ # 1 hook por tabela/concern
├── stores/ # Zustand stores
├── lib/ # Utilitarios, constantes, supabase
├── providers/ # Context providers
└── routes/ # Router configNaming
- Componentes:
PascalCase(arquivos e funcoes) - Hooks:
camelCasecom prefixouse - Stores:
camelCasecom prefixousee sufixoStore - Arquivos:
kebab-casepara hooks e utilitarios
Forms
- Use
useStatepor padrao - Adicione
react-hook-form+zodapenas quando a complexidade de validacao justificar
Prefixo App
Reservado para layout shell: AppLayout, AppSidebar, AppHeader.