Regras de negócio, limites de upload e integrações. Os valores abaixo são centralizados em lib/config.ts.
Faixas de atingimento que definem o status de cada meta.
Meta atingida
Atingimento igual ou superior a 100%.
Em andamento
Atingimento entre 70% e 100%.
Abaixo da meta
Atingimento inferior a 70%.
Como o sistema sugere cadências e a meta do ciclo seguinte.
Restrições aplicadas no formulário de metas.
As imagens são validadas por tipo MIME e tamanho antes de entrarem no formulário. URLs externas passam por sanitização e só são renderizadas quando usam http ou https.
Camada de persistência ativa e integrações previstas.
Toda leitura e escrita passa por goals.service, que fala com uma interface GoalsRepository. Trocar a persistência por API REST, Server Actions, Prisma, Supabase ou Google Sheets exige apenas uma nova implementação dessa interface — a interface gráfica não muda.
API completa do Sheets: o contrato para a integração via conta de serviço está definido em spreadsheet.service.ts, para quando houver um backend. Até lá, use o webhook ao lado — as credenciais continuam nunca chegando ao navegador.
Cada meta salva é enviada também para a planilha configurada abaixo.
Cole o link e clique em Salvar para ativar a sincronização.
Como obter o link
scripts/apps-script-doPost.gs no final do Código.gs existente — ele grava na mesma aba feedback que o painel antigo já lê.doPost a um app já publicado exige uma nova versão, não só salvar o arquivo).Autenticação do gerente, edição das regras acima pela interface e validação dos dados no servidor entram junto com o backend. Os pontos de extensão já estão definidos: o schema Zod é compartilhável entre cliente e servidor, e a camada de serviços isola a persistência.