🧠 cs-karpathy-reviewer — Karpathy-Style Code Reviewer
Auditoria técnica e estratégica pela ótica cs-karpathy-reviewer — Karpathy-Style Code Reviewer. Achados classificados por severidade, plano de ação e matriz de decisão.
Veredito: O shim mockFirestore.ts é over-engineering acidental — 409 linhas reimplementando a API do Firestore quando bastaria um wrapper de 30 linhas.
Na linha do 'Don't be a hero' do Karpathy: o mockFirestore.ts recria Timestamp, QuerySnapshot, DocumentReference, CollectionReference — 409 linhas de complexidade acidental. Bastaria uma camada simples de fetch com auth. O alias Vite para 'firebase/firestore' é inteligente, mas o que está atrás é desnecessariamente complexo. O App.tsx tem good parts (Suspense, lazy, motion) mas o onSnapshot simulation (long-polling provável) merece atenção.
Dimensões Analisadas
Pontuação por área de análise.
mockFirestore.ts
409 linhas reimplementando Timestamp, QuerySnapshot, DocumentReference. Complexidade desnecessária.
App.tsx
Bem estruturado com lazy+Suspense. SidebarItem com subItems complexo mas justificável.
Padrões Gerais
TypeScript bem usado. Imports bem organizados. Constantes uppercase no server.ts.
🔎 Achados (4)
0 crítico(s) · 1 alto(s) · 0 bloqueante(s). Clique para expandir.
mockFirestore.ts — 409 linhas reimplementando API Firestore desnecessariamenteAltaEsforço altoKarpathy — Simplicity First / No Heroics
O que é: src/lib/mockFirestore.ts:32-409 reimplementa: classe Timestamp (L32-57), mapToSnapshot (L59+), QuerySnapshot, DocumentReference, CollectionReference, WriteBatch. A única função real é traduzir chamadas Firestore para fetch('/api/...). Poderia ser 30 linhas.
Onde: src/lib/mockFirestore.ts:1-409
Impacto: 409 linhas de código a manter. Qualquer mudança de API quebra o shim inteiro. Novos devs precisam entender 2 APIs (Firestore + a falsa).
uuidv4() custom quando crypto.randomUUID() já existe no targetBaixaEsforço baixoKarpathy — Use Platform APIs
O que é: mockFirestore.ts:22-30 define uuidv4() com fallback manual para Math.random(). A linha L23-24 já verifica crypto.randomUUID — mas a função inteira é desnecessária se o target environment é sempre moderno (Vite + React 19 = Chrome/Safari modernos).
Onde: src/lib/mockFirestore.ts:22-30
Impacto: Dead code mantido por precaução. Complexidade zero mas sinal de código acumulado sem limpeza.
e2eAuthToken import em mockFirestore — acoplamento de teste com produçãoMédiaEsforço medioKarpathy — Separation of Concerns
O que é: mockFirestore.ts:2: 'import { e2eAuthToken } from ./e2e-auth'. O código de produção importa um artefato de teste. e2e-auth.ts provavelmente exporta um token para testes E2E — mas esse import polui o bundle de produção.
Onde: src/lib/mockFirestore.ts:2
Impacto: Bundle de produção inclui código de teste. Possível vazamento de token de teste se e2eAuthToken não for null em produção.
PRODUCT_EVENTS e MARKETING_ATTRIBUTION_KEYS como Set no escopo global do móduloBaixaEsforço baixoKarpathy — Readable Code
O que é: server.ts:78-104 define PRODUCT_EVENTS e MARKETING_ATTRIBUTION_KEYS como const Set no escopo de módulo. São constantes de configuração — deveriam estar em src/lib/config.ts ou similar para serem testáveis e reutilizáveis.
Onde: server.ts:78-104
Impacto: Impossível testar o whitelist de events sem importar server.ts inteiro (com todos os efeitos colaterais).
📋 Plano de Ação
Cronograma de implementação recomendado.
Remover e2eAuthToken do bundle prod (1h)
1h · CRÍTICO
Simplificar mockFirestore progressivamente
3 semanas
Extrair constantes para config.ts
2h
Matriz de Decisão
| Critério | Fonte | Status | Bloqueante |
|---|---|---|---|
| Simplicidade do shim | cs-karpathy-reviewer | 409L vs 30L necessário | não |
| e2e token no bundle prod | cs-karpathy-reviewer | Acoplamento teste/prod | não |
| Dead code (uuidv4) | cs-karpathy-reviewer | Platform API ignorada | não |
| Lazy + Suspense | cs-karpathy-reviewer | Code splitting correto | não |
| TypeScript usage | cs-karpathy-reviewer | Bem tipado em geral | não |