VendeeDocs
Contribuicao

Padroes de Codigo

TypeScript strict, ESLint e convencoes

TypeScript

  • TypeScript 5.9 com strict: true
  • noUncheckedIndexedAccess: true — acesso a arrays/objetos retorna T | undefined
  • Path alias @/ mapeia para ./src/

ESLint

  • Flat config format (ESLint 9+)
  • Zero warnings: --max-warnings 0
  • Configs por tipo de app:
    • vite — apps/app
    • next-js — apps/docs
bun run lint                    # Lint tudo
bun run lint --filter=app       # Lint so o app

Prettier

Formatacao automatica para .ts, .tsx e .md:

bun run format

Convencoes

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 config

Naming

  • Componentes: PascalCase (arquivos e funcoes)
  • Hooks: camelCase com prefixo use
  • Stores: camelCase com prefixo use e sufixo Store
  • Arquivos: kebab-case para hooks e utilitarios

Forms

  • Use useState por padrao
  • Adicione react-hook-form + zod apenas quando a complexidade de validacao justificar

Prefixo App

Reservado para layout shell: AppLayout, AppSidebar, AppHeader.

On this page