Para o colaborador
- Abertura sem login: nome, setor, categoria, prioridade e descrição
- Protocolo no formato #TI-2026-XXXX (e confete)
- Botão que avisa o TI no WhatsApp com a mensagem pronta
- Consulta do andamento com protocolo e primeiro nome
Sistema de chamados de TI para uma empresa onde eu sou o único profissional da área. O colaborador abre o chamado sem login, recebe um protocolo e acompanha o andamento. Eu atendo a fila num painel fechado.
o problema
Sou o único profissional de TI da empresa. Os pedidos chegavam pelo WhatsApp, no corredor e de boca, e muitos se perdiam. Não havia como saber o que estava aberto, o que já tinha sido resolvido nem quanto tempo cada coisa levava.
A solução precisava ser mais fácil que mandar uma mensagem. Se abrir um chamado desse trabalho, ninguém ia usar.
o que eu construí
decisões técnicas
Qualquer colaborador precisa conseguir abrir um chamado sem senha. Mas os chamados têm nome, setor e problemas de cada pessoa. A segurança fica no banco, não na tela, e a LGPD foi requisito desde o início.
Qualquer pessoa pode criar um chamado, mas ninguém de fora consegue ler a tabela. Só quem está cadastrado na equipe de TI lê e atualiza. O site usa só a chave pública do Supabase: quem decide o que cada um vê é o banco.
Em vez de liberar leitura, a consulta chama uma função que recebe protocolo e primeiro nome e devolve só o necessário: status, categoria, datas e as notas públicas. A nota interna nunca sai do banco.
Testei força bruta na consulta e ela aceitava cerca de 123 tentativas por segundo. Agora, depois de 5 erros em 15 minutos, aquele protocolo fica bloqueado. O limite é por protocolo e não por IP: dentro do banco o IP chega por cabeçalho e pode ser falsificado.
-- erros no mesmo protocolo nos últimos 15 minutos
select count(*) into v_failures
from public.ticket_lookup_attempts a
where a.protocol = v_protocol
and a.attempted_at > now() - interval '15 minutes';
if v_failures >= 5 then
return jsonb_build_object('blocked', true);
end if;
telas
O sistema em produção guarda dados reais dos colaboradores, por isso não é aberto ao público. Todas as telas abaixo usam dados fictícios.
o que eu aprendi
No portal de vagas aprendi a proteger dados pessoais. Aqui fui um passo além: em vez de só confiar nas regras, tentei quebrar o sistema. Foi assim que achei a brecha da força bruta, antes de qualquer outra pessoa.
Também aprendi a não complicar. São só quatro telas, então o próprio endereço decide qual mostrar, sem biblioteca de rotas. E toda mudança no banco fica numa migration versionada, com o porquê comentado.
Me conta o que você precisa que eu te respondo.