Dashboard web em Next.js para o JurisSync API: jurimetria interativa (mapa por UF, filtros cruzados), listagem de processos, detalhe com timeline e sincronização por número CNJ.
Este projeto e a API irmã existem exclusivamente para apresentação no portfólio técnico. Não são serviços SaaS em produção: sem autenticação, sem SLA e sem hardening de ambiente público.
- Hub do portfólio: maria-portfolio · site live
- Como avaliar: clone API + dashboard, rode local. Mock sem chave CNJ ou DataJud real com chave própria.
- Guia: docs/guia-do-testador.md
A API FastAPI permanece em repositório separado; este projeto consome apenas HTTP/REST.
- Mapa do Brasil (choropleth) com totais por UF, zoom/pan e ranking lateral
- Filtros cruzados - clique em UF ou assunto e os demais gráficos atualizam; clique fora para limpar
- Header fixo com navegação Visão Geral | Processos
- Instruções na tela explicando como usar os filtros
- Dados sempre vindos da API (sem gráficos estáticos no frontend)
O dashboard sempre exibe o que está no banco local da API.
| Modo | Configuração | O que acontece |
|---|---|---|
| Mock (demo) | DATAJUD_API_KEY vazio no .env da API |
Dados plausíveis gerados a partir do CNJ; badge Mock (demo) |
| Real (DataJud) | DATAJUD_API_KEY preenchida |
Consulta a API Pública do CNJ; badge Configurada |
Para popular jurimetria no modo mock:
cd juris-sync
python scripts/seed_demo.py --freshSincroniza 116 processos em todos os tribunais estaduais, com totais diferentes por UF (SP 15, RJ 12, ... até 1 em estados menores). Use --fresh para limpar a base antes de popular.
| Camada | Tecnologia |
|---|---|
| Framework | Next.js 15 (App Router) |
| UI | React 19 + TypeScript |
| Estilo | Tailwind CSS |
| Dados | TanStack Query |
| Formulários | React Hook Form + Zod |
| Gráficos | Recharts + d3-geo (mapa) |
| Ícones | lucide-react |
- Node.js 20+
- npm
- API juris-sync rodando em
http://localhost:8000
git clone https://github.com/MariaHilmar/juris-sync.git
git clone https://github.com/MariaHilmar/juris-sync-web.gitcd juris-sync
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements-dev.txt
copy .env.example .env
python -m alembic upgrade head
python -m uvicorn app.main:app --host 0.0.0.0 --port 8000 --reloadNo CMD, use activate.bat em vez de Activate.ps1. Se o venv não ativar:
.venv\Scripts\python.exe -m uvicorn app.main:app --host 0.0.0.0 --port 8000 --reloadConfirme: http://localhost:8000/health
cd juris-sync-web
copy .env.example .env.local
npm install
npm run devcd juris-sync
python scripts/seed_demo.py --freshRecarregue http://localhost:3000 e teste os filtros cruzados na Visão Geral.
Modo real: adicione DATAJUD_API_KEY no juris-sync/.env, reinicie a API e sincronize CNJs reais em Processos.
| Rota | Descrição |
|---|---|
/ |
Visão Geral: KPIs, mapa por UF, gráficos, filtros cruzados |
/processos |
Sync por CNJ, filtros, lista paginada |
/processos/[id] |
Detalhe do processo + timeline de movimentações |
| Variável | Descrição | Padrão |
|---|---|---|
NEXT_PUBLIC_JURISSYNC_API_URL |
URL base da API (sem barra final) | http://localhost:8000 |
npm run dev # desenvolvimento
npm run build # build de produção
npm run start # servidor de produção
npm run lint # ESLint
npm run format:check # verifica formatação (Prettier)
npm run typecheck # TypeScript
npm run test # Vitest| Documento | Conteúdo |
|---|---|
| Guia do testador | Clone, mock vs real, checklist de validação |
| Requisitos | Histórias de usuário, regras de UI, BDD, rastreabilidade |
| Arquitetura | Camadas, cross-filter, mapa, hooks |
| Requisitos (resumo) | Índice para o doc completo |
| ADR 0001 - Cliente separado | Decisão de repositório separado |
GitHub Actions em cada push/PR: lint → format:check → typecheck → test → build.
- Revisão humana em pull requests (template em
.github/pull_request_template.md) - Cursor Bugbot em PRs com regras de UI/API em
.cursor/BUGBOT.md(filtros cruzados, contrato HTTP, validação CNJ) - Ative o Bugbot no dashboard do Cursor para o repositório
MariaHilmar/juris-sync-web
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.