Escolha por onde começar hoje.
Controle de usuários, permissões, apps, métricas e auditoria.
Conta só quem tem e-mail @recrutei.com.br e está ativo. Atividade = login no Superapp ou abertura de qualquer app por aqui. Dias úteis contados a partir do dia seguinte ao último acesso (sábado e domingo não contam; feriado não é tratado).
Papel define o piso. O que é marcável por cima aparece como permissão quando o papel é Admin. Acesso a app é coisa à parte: vem de "Vê todos os apps ativos" ou de tiles marcados um a um em Gerir.
Paulo e quem ele promover. Não tem o que marcar — já tem tudo.
Não herda nada sozinho: só faz o que estiver marcado na lista de permissões.
Padrão de todo mundo do time. Sem painel master, sem lista de permissões.
EBB, Incicle, Escola de RHs… Nasce sem nada e só tem o que for concedido, camada por camada.
🔐 Consoles master de outros apps (Multi Importer · Master, Whats Master) checam quem entra pelo próprio backend. Antes só aceitavam master do hub; agora aceitam admin com a permissão marcada. Tirar a permissão fecha a porta e remove o tile no mesmo movimento — tudo registrado na Auditoria.
Cria com senha temporária temporaria123 e troca obrigatória no 1º acesso.
A pessoa nasce com o molde da organização. O ajuste fino por feature fica na página dela, depois de criada.
Parceiro é gente de fora da Recrutei. A parceria é com a empresa: o molde configurado aqui vale para todas as pessoas dela, e cada pessoa pode ter ajuste fino por cima na página dela. Suspender a organização ou passar da data de validade corta todo mundo na hora.
O que existe dentro de cada app. É esta lista que aparece como matriz de permissões. Feature marcada como crítica nunca é concedível a parceiro — o servidor recusa gravar, mesmo que a caixa seja marcada.
Cria um novo box no SuperApp. Apps internos com SSO recebem código de conexão (app_id + secret) para logar via Recrutei Auth.
Toda ação crítica (criação/edição de usuário, acesso, apps, tokens) fica registrada aqui.
Última recepção de webhook Stripe processada por app (backlog #7 — Padrões Stripe). 🟢 até 3 dias · 🟡 3–14 dias · 🔴 mais de 14 dias ou nunca recebeu. Threshold fixo (evoluir p/ baseline estatístico quando houver mais histórico).
Meta vem da planilha Metas, OKR KPI, Comissões 2026. O realizado vem dos sistemas — as colunas de realizado da planilha são manuais e pararam em abril. Receita = contrato assinado no Clicksign com um closer como assinante (Amanda conta na janela dela; contrato com Matheus Vinicius é CX e não entra em venda nova). A bandeira é por ritmo: 40% no dia 10 é ótimo, 40% no dia 28 é ruim.
Número oficial degrada calado: a qualidade cai, a Meta corta o limite de envio e a campanha para de entregar sem erro do nosso lado. Verificação automática todo dia às 09:15, alerta no hub só quando muda de patamar — problema que já foi avisado não avisa de novo todo dia.
O Admin MCP é a fonte cross-conta de 6 apps (empresas, planos, assinatura, vagas, candidaturas). Quando ele fica lento ou cai, o app que depende dele mostra tela vazia sem dizer por quê. Aqui a medição é real: sonda leve a cada 30min (per_page=1) + o uso que os apps reportam em POST /mcp-usage. Nada é estimado.
Gemini avalia o HTML público de cada app contra as 10 Heurísticas de Nielsen + o Modelo Hooked (playbooks da rede OKF/BRAIN — sempre a versão mais atual). Rode sob demanda; o histórico fica salvo para acompanhar evolução (backlog #8 — Engajamento/UX).
Erros do Multi Importer + eventos críticos do Glória, agregados por app (backlog #16 — Logs/Métricas).
Ser master do Superapp não basta mais: o e-mail precisa estar liberado aqui. Só você concede e revoga. reader lê a rede · editor edita conceitos · admin também roda Upskill e aprova planos. Tokens de operação (CI, rotinas) continuam valendo — são segredos de máquina, não de pessoa.
Toda requisição ao BRAIN — liberada ou negada — fica registrada com quem, o quê e quando.
O que usuários reais encontraram. Erros iguais são agrupados por assinatura (200 pessoas no mesmo bug = 1 linha com 200 ocorrências). O time é avisado no WhatsApp na primeira vez de cada erro — e em todo fatal. Clique numa linha para o plano de correção da IA.
Uma chamada, sem dependência e sem sessão — quem reporta é o front com o usuário dentro:
window.addEventListener('error', e => {
fetch('https://hkenrrbezcokhbxgzszw.supabase.co/functions/v1/api/report-error', {
method:'POST', headers:{'Content-Type':'application/json'},
body: JSON.stringify({
app_slug:'multi-importer', feature:'importacao-linkedin', severity:'error',
message: e.message, stack: e.error?.stack, url: location.href,
// QUEM ESTAVA USANDO — sem isto o erro chega órfão e não dá pra saber se pegou cliente
user_email: MEU_USUARIO?.email, user_name: MEU_USUARIO?.nome,
company_id: MINHA_CONTA?.id, company_name: MINHA_CONTA?.nome
})
}).catch(()=>{}); // nunca quebrar o app por causa do reporte
});
Use severity:'fatal' quando o usuário fica travado — fatal notifica sempre, não só na primeira ocorrência.
Identidade: a porta de entrada aceita user_email, email, user (texto ou objeto {email,name}) e usuario — apps antigos que batizaram o campo de outro jeito não precisam de deploy pra voltar a aparecer aqui. O tipo (time Recrutei × cliente) é deduzido do domínio do e-mail; mande user_kind para forçar. Sem e-mail o erro fica não identificado — nunca é chutado como cliente.
Tudo que o ecossistema dispara no WhatsApp do time passa por aqui. Cada evento é uma linha: você define quem recebe, o texto, se está ligado, o intervalo mínimo entre disparos e o horário de silêncio. Um evento novo se registra sozinho no primeiro disparo — então esta lista é o inventário real, não uma lista que alguém precisa manter à mão.
Volume por pessoa, por evento, por app de origem e por dia — inclui o que foi suprimido (desligado, silêncio, anti-flood), que é o que revela excesso de alerta.