Documentação completa para configurar e executar o projeto Next.js 14+ com TypeScript.
- Node.js: >= 18.17.0
- npm: >= 9.0.0 (ou yarn/pnpm)
- Git: Para controle de versão
npm installIsso instalará todas as dependências listadas em package.json:
Produção:
- Next.js 14+
- React 18
- TypeScript
- Tailwind CSS
- Lucide Icons
- csv-parse (para processar dados ANP)
Desenvolvimento:
- ESLint (linting)
- Vitest (testes)
- Testing Library (testes de componentes)
npm run type-checkIsso executa tsc --noEmit para validar tipos sem gerar código compilado.
npm run devAbrirá em http://localhost:3000
npm run build
npm startwebapp_gas_mais_barato/
├── app/
│ ├── layout.tsx # Layout raiz com metadata
│ ├── page.tsx # Página principal (Server Component)
│ └── globals.css # Estilos globais Tailwind
├── components/
│ ├── kpi-card.tsx # Card KPI reutilizável
│ ├── search-bar.tsx # Barra de busca com autocomplete
│ └── stations-list.tsx # Lista de postos (tabela/cards)
├── lib/
│ ├── analytics.ts # Funções puras de BI
│ ├── utils.ts # cn() para merge de classes
│ └── data/
│ └── csv-processor.ts # Processador CSV com cache
├── types/
│ └── gas.ts # Interfaces TypeScript
├── data/
│ └── ultimas-4-semanas-glp.csv # Dados ANP
├── package.json
├── tsconfig.json # TypeScript strict mode
├── next.config.js # Configuração Next.js
├── tailwind.config.ts # Configuração Tailwind
└── .eslintrc.json # ESLint rules
O projeto usa TypeScript com strict mode ativado:
{
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedIndexedAccess": true,
"noImplicitReturns": true,
"noImplicitOverride": true
}Regras configuradas para proibir any:
{
"@typescript-eslint/no-explicit-any": "error"
}- React Strict Mode: Detecta problemas em desenvolvimento
- SWC Minify: Minificação otimizada
- Server Actions: Habilitado para Server Components
npm testnpm run test:uinpm run test:coverageflowchart LR
CSV[CSV ANP] --> Processor[csv-processor.ts]
Processor --> Cache[In-Memory Cache 5min]
Cache --> Analytics[analytics.ts]
Analytics --> Page[app/page.tsx]
Page --> Components[KPI Cards + Lista]
- Cache Duration: 5 minutos
- Location: In-memory (variável module-level)
- Invalidação: Automática após timeout ou com
clearCache()
- Sem
anyem nenhum lugar - Interfaces explícitas para CSV → GasStation
- Type guards para validação runtime
- Todas as funções em
lib/analytics.tssão puras - Sem side effects
- Testáveis por natureza
- Validação de inputs com
TypeError - Try-catch em operações de I/O
- Fallbacks para dados inválidos
- Server Components por padrão (sem JS no client desnecessário)
- Cache de dados CSV
- Tailwind CSS (CSS otimizado automaticamente)
Headers configurados em next.config.js:
{
'X-Frame-Options': 'SAMEORIGIN',
'X-Content-Type-Options': 'nosniff',
'Referrer-Policy': 'strict-origin-when-cross-origin'
}Se ainda houver erros TypeScript após npm install:
rm -rf node_modules .next
npm install
npm run type-checkPara limpar o cache manualmente:
import { clearCache } from '@/lib/data/csv-processor';
clearCache();Verifique encoding:
file -b --mime-encoding data/ultimas-4-semanas-glp.csv
# Deve retornar: utf-8✅ TypeScript: 100% tipado (strict mode) ✅ ESLint: Zero warnings/errors ✅ Build: Zero erros de compilação ✅ Testes: Cobertura > 80% (futuro)
npm install -g vercel
vercelFROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
CMD ["npm", "start"]- Instalar dependências:
npm install - Verificar tipos:
npm run type-check - Executar dev:
npm run dev - Testar build:
npm run build - Criar testes: Implementar testes unitários
- Deploy: Configurar CI/CD
Última Atualização: 2025-12-26 Versão: 1.0.0 Status: ✅ Pronto para desenvolvimento