Skip to content

Implementa sugestões do parecer do Conselho do Mirante - #11

Open
DRoqueProgrammer wants to merge 2 commits into
mainfrom
claude/parecer-sugestoes-7c2szz
Open

Implementa sugestões do parecer do Conselho do Mirante#11
DRoqueProgrammer wants to merge 2 commits into
mainfrom
claude/parecer-sugestoes-7c2szz

Conversation

@DRoqueProgrammer

Copy link
Copy Markdown
Owner

Responde ao parecer do Conselho do Mirante (sobre o commit 96aeda3) implementando as sugestões de código dos conselheiros.

Engenharia e observabilidade (§1)

  • CI (.github/workflows/ci.yml): typecheck + lint + testes em cada push/PR. Inclui o .eslintrc.json que faltava (sem ele o next lint era interativo e travaria o CI).
  • GET /api/health: liveness + readiness com leitura barata no Supabase (503 se o banco não responde).
  • Rate limiting em memória (lib/rate-limit.ts) nas server actions de escrita (candidatar / publicar / avaliar).
  • Logging estruturado (lib/log.ts): uma linha JSON por evento crítico, sem PII.
  • ADRs (docs/adr/): 11 decisões registradas (5 estruturais + 6 deste parecer).

Métricas e dados (§2)

  • EWMA na nota_media (migration 0020, meia-vida 90 dias) — a recência pesa mais que a inércia, de forma determinística.
  • Lembrete de avaliação 24h após a diária (migration 0021 + GET /api/cron/lembretes-avaliacao, protegido por CRON_SECRET, agendado em vercel.json).
  • Painel /admin/metricas: taxa de preenchimento, tempo até o match e cancelamento, no total e por cidade/categoria (funções puras, com teste unitário).

Design e melhores práticas (§3, §5)

  • Contraste das estrelas passa AA (amarelo escuro carrega a nota; #FFC107 fica só decorativo).
  • Filtros de tipo de serviço, faixa de valor e data no mapa de vagas.
  • Valor mínimo R$1 no schema (fim do fallback silencioso que publicava a R$0).
  • arredCoord() extraída para lib/format.ts (estava duplicada inline).
  • Dark mode completo via CSS variables com papéis de cor separados (ADR 0011): tinta sobre superfície vira no escuro, preenchimento com texto branco fica fixo. Tema claro inalterado; contraste conferido nos dois temas.

Banco de dados

Migrations 0020 e 0021 já aplicadas ao projeto Supabase e verificadas: coluna vagas.finalizada_em, trigger, funções, EWMA ativa e a função do cron restrita a service_role. As notas existentes foram recalculadas para a base EWMA.

Fora de escopo

As sugestões do conselheiro de Administração (§4) são de estratégia e monetização, não de código — ficam como decisão de produto.

Pendência de ambiente (não de código)

Definir CRON_SECRET no ambiente de deploy para o cron do lembrete disparar (sem ele o endpoint recusa — falha segura).

Verificação

npm run typecheck ✓ · npm run lint (exit 0) ✓ · npm test → 57 testes passando.

🤖 Generated with Claude Code


Generated by Claude Code

claude added 2 commits August 26, 2026 20:57
Responde ao parecer (sobre o commit 96aeda3) com as mudanças de código,
dados e infraestrutura pedidas pelos conselheiros.

Engenharia e observabilidade (§1)
- CI: typecheck + lint + testes em cada push/PR (.github/workflows/ci.yml)
  e .eslintrc.json, que faltava (sem ele o `next lint` era interativo).
- Health check GET /api/health com leitura barata no Supabase.
- Rate limiting em memória (lib/rate-limit.ts) nas actions de escrita
  (candidatar, publicar, avaliar) — primeira barreira contra abuso.
- Logging estruturado (lib/log.ts): uma linha JSON por evento, sem PII.
- ADRs em docs/adr/: 5 decisões estruturais + 5 das mudanças deste parecer.

Métricas e dados (§2)
- nota_media ponderada por recência (EWMA, meia-vida 90 dias) via trigger
  (migration 0020).
- Lembrete de avaliação 24h após a diária (migration 0021 + GET
  /api/cron/lembretes-avaliacao, protegido por CRON_SECRET).
- Painel /admin/metricas: preenchimento, tempo até o match e cancelamento,
  no total e por cidade/categoria (funções puras testadas).

Design e melhores práticas (§3, §5)
- Contraste das estrelas: a nota passa a usar amarelo escuro (#B8860B,
  ~3,4:1); o #FFC107 fica só decorativo — passa AA.
- Filtros de tipo de serviço, faixa de valor e data no mapa de vagas.
- Valor mínimo de diária R$1 no schema (fim do fallback silencioso a R$0).
- arredCoord() extraída para lib/format.ts (estava duplicada inline).

Testes: 57 unitários verdes; typecheck e lint limpos.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014BA1FaD357grNvz6C9VzWW
Implementa o dark mode via `prefers-color-scheme`. Ao contrário do que o
parecer sugeriu ("só a media query"), os tokens eram hex fixos e cores de
tinta (text-brand, text-danger) sumiriam no escuro — então o tema virou
CSS variables com papéis de cor separados:

- TINTA sobre superfície (marca, erro, sucesso, estrela, tints de status)
  VIRA no escuro para manter contraste; PREENCHIMENTO com texto branco
  (botão da marca, badge, verde) fica FIXO nos dois temas.
- Só o lado menor (preenchimentos) foi renomeado (bg-brand-fill,
  danger-fill); os ~100 usos de tinta seguem apontando para a variável que
  vira, sem tocar no call site.
- Pastéis de status viram 5 tokens de tint (info/ok/warn/neutral/danger).
- Marcas de dado (barras de gráfico, ponto de não-lida) usam a tinta que
  vira, não o preenchimento fixo, para não sumirem no escuro.

Claro fica idêntico ao anterior (mesmos hex no ramo claro). Contraste
conferido nos dois temas. Decisão em docs/adr/0011.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014BA1FaD357grNvz6C9VzWW
@vercel

vercel Bot commented Aug 27, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
meajudaai Ready Ready Preview Aug 27, 2026 4:58am

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants