Este arquivo funciona como um arquivo de direcionamento ("steering file", semelhante ao .cursorrules do Cursor) para o Codex.
As instruções contidas nos arquivos CODEX.md são mandatos fundamentais e têm precedência absoluta sobre os meus fluxos de trabalho e padrões gerais.
- Nome: IDR Web
- Stack Tecnológica: React 18, TypeScript, Vite, Tailwind CSS.
- Gerenciador de Pacotes:
pnpm(versão ~10.x). - Ambiente: Node >= 20.
- Principais Bibliotecas:
- Estado/Dados:
@tanstack/react-query(v5),axios. - Formulários:
react-hook-form,zod,@hookform/resolvers. - UI/Componentes:
radix-ui,tailwind-merge,class-variance-authority(CVA),lucide-react(ícones),@tanstack/react-table(tabelas). - Feedback/Navegação:
react-hot-toast,react-router-dom(v6). - Testes/Mock:
msw(Mock Service Worker),@faker-js/faker.
- Estado/Dados:
O projeto segue uma estrutura baseada em camadas para garantir desacoplamento:
src/core/domain: Contém as regras de negócio puras.models: Definições de tipos das entidades (ex:UserModel).use-cases: Interfaces que definem as ações do sistema (ex:GetMeUseCase). Utilizam o contratoRequestInterface<TParams, TResponse>.errors: Classes de erro customizadas (ex:UnexpectedError).
src/core/data: Implementações das interfaces do domínio.use-cases: Implementações concretas (ex:RemoteGetMeUseCase).protocols: Definições de contratos para infraestrutura (ex:HttpClient).
src/core/infra: Implementações de infraestrutura (ex: adaptadores de Cache ou Http).src/core/main: Ponto de entrada e composição da aplicação.factories: Funções que instanciam casos de uso com suas dependências (ex:makeRemoteGetMeUseCase).routes: Configurações de rotas do sistema.
src/core/presentation: Camada de interface com o usuário.components: Componentes de UI reutilizáveis e atômicos.hooks: Hooks customizados, incluindo os hooks de query (queries) que consomem as factories.
src/app: Contém os módulos específicos de negócio (ex:animals,auth,properties) e as páginas da aplicação.src/core/mocks: Handlers e utilitários do MSW para desenvolvimento local e testes.
- Linguagem: Responda sempre em Português do Brasil (pt-BR).
- Componentes: Utilize componentes funcionais e hooks. Mantenha a lógica de dados em hooks customizados (ex:
useMyQuery). - Tipagem:
- Prefira
typeem vez deinterfacepara modelos e contratos. - Se precisar usar
interface, utilize o prefixoIpara atender ao ESLint (ex:IAnimal). - Use TypeScript estrito.
- Prefira
- Uso de Ícones: Utilize exclusivamente
lucide-react. - Feedback ao Usuário: Utilize
react-hot-toastpara mensagens de sucesso ou erro. - Importações:
- Utilize absolute imports com os aliases
@/*e@database/*(ex:@/core/...,@/app/...). - Ordem de importação: React (topo), bibliotecas externas, módulos internos, estilos.
- Utilize absolute imports com os aliases
- Padrão de UseCase: Sempre defina a interface no
domainusandoRequestInterfacee implemente nodata. Use factories nomainpara prover instâncias prontas para os hooks.
- Instalação:
pnpm install - Desenvolvimento:
pnpm dev - Lint/Format:
pnpm format:fixepnpm lint:fix(execute sempre antes de finalizar uma tarefa). - Type Check:
pnpm type:check - Mocks: Ao adicionar ou alterar uma rota de API, atualize os handlers em
src/core/mocks/handlers. - Sementes de Dados: O comando
pnpm seed:mockpode ser usado para popular dados de mock. - Storybook: Utilize
pnpm storybook:devpara desenvolver componentes de UI isoladamente.
- Prettier:
semi: false,singleQuote: true. - Proibido o uso de
console.log. Useconsole.info,console.warnouconsole.error. - Siga as regras de acessibilidade JSX (
jsx-a11y).
Em caso de dúvidas sobre onde adicionar um novo arquivo, analise a estrutura de diretórios existente para manter a consistência.