VendeeDocs
Contribuicao

Padrões de Código

TypeScript strict, ESLint e convenções do projeto

TypeScript

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

Type-checking

Use sempre o script do monorepo:

bun run check-types

Esse script roda tsc -b (build mode com project references) — a única forma confiável de validar tipos cross-package neste repo.

Nunca rode tsc --noEmit diretamente. Com project references, esse modo não detecta erros que cruzam fronteiras de pacote — é um gap silencioso. Você pode ver o type-check verde localmente e o build da Vercel quebrar logo depois. bun run check-types é a referência.

ESLint

  • Flat config (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 só o app

Prettier

Formatação automática para .ts, .tsx e .md:

bun run format

Convenções

Componentes

  • shadcn/ui — Importe direto, sem wrappers
  • Lucide — Único provider de ícones
  • cn() — Para merge de classes

Estrutura de arquivos

src/
├── components/
│   ├── ui/           # shadcn (editável)
│   ├── layout/       # AppLayout, AppSidebar, nav-*
│   └── shared/       # Componentes reusáveis não-domain
├── features/<domain>/
│   ├── components/   # Componentes do domínio
│   └── *Page.tsx     # Páginas (targets de rota)
├── hooks/            # 1 hook por tabela/concern
├── stores/           # Zustand stores
├── lib/              # Utilitários, constantes, supabase
├── providers/        # Context providers
└── routes/           # Router config

Naming

  • Componentes: PascalCase (arquivos e funções)
  • Hooks: camelCase com prefixo use
  • Stores: camelCase com prefixo use e sufixo Store
  • Arquivos: kebab-case para hooks e utilitários

Forms

  • Use useState por padrão
  • Adicione react-hook-form + zod apenas quando a complexidade de validação justificar (3+ regras por campo)

Prefixo App

Reservado para layout shell: AppLayout, AppSidebar, AppHeader.

On this page