Skip to content

About

Web ticketing system for opening, tracking, and managing support requests. Includes an admin panel, authentication, status tracking, urgency levels, and organization, built with Supabase.

Resources

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

ChamadaFácil

Sistema web de chamados para pequenos negócios no Brasil, com abertura pública sem conta, consulta por código/e-mail e painel admin protegido para operar a fila de atendimento.

Status: MVP funcional de portfólio. O projeto demonstra um fluxo realista de help desk single-company, sem prometer multiempresa, RBAC completo, anexos, e-mail automático ou SaaS enterprise.

Caminho Rápido para Avaliar

  1. Abra a demo: chamadafacil.vercel.app.
  2. Veja o fluxo público em /tickets/new: crie um chamado e copie o código gerado.
  3. Consulte o chamado em /tickets/lookup usando código e e-mail.
  4. Revise o painel admin no README/estudo de caso e, localmente, acesse /admin/login com o seed de desenvolvimento.
  5. Confira os pontos técnicos: Server Actions, Supabase Auth, PostgreSQL/RLS, validação server-side, rate limit básico e testes unitários.

Links úteis:

Recurso Link
Demo chamadafacil.vercel.app
Repositório github.com/bps2414/chamadafacil
Estudo de caso docs/CASE_STUDY.md
Notas de segurança docs/SECURITY.md
Deploy docs/DEPLOYMENT.md
Textos de portfólio docs/PORTFOLIO_COPY.md
README em inglês README.en.md

O Que É o Projeto

O ChamadaFácil foi criado para resolver um problema comum em pequenos negócios: pedidos de suporte espalhados entre WhatsApp, e-mail, ligações e planilhas. O produto organiza o essencial:

  • O solicitante abre um chamado sem criar conta.
  • O sistema gera um código único para o chamado.
  • O solicitante consulta o andamento com código e e-mail.
  • O operador autenticado gerencia fila, status, urgência e respostas.

O escopo atual é single-company/single-tenant: uma empresa usa a ferramenta internamente. Essa decisão mantém o MVP pequeno, avaliável e coerente para portfólio.

Screenshots

Os prints usam dados fictícios e não devem expor variáveis de ambiente, tokens, cookies ou credenciais reais.

Tela Preview
Landing page Landing page do ChamadaFácil
Abertura de chamado Formulário de abertura de chamado
Consulta de chamado Tela de consulta de chamado
Login admin Login administrativo
Dashboard admin Dashboard administrativo
Detalhe admin Detalhe administrativo do chamado

Checklist completo em docs/SCREENSHOTS_CHECKLIST.md.

Funcionalidades Implementadas

Fluxo Público

  • Landing page em português brasileiro.
  • Abertura de chamado sem cadastro.
  • Validação server-side de nome, e-mail, telefone, assunto e descrição.
  • Geração automática de número no formato CF-YYYY-00000.
  • Estado de sucesso com código destacado, botão de copiar e CTA para consulta.
  • Consulta por número do chamado e e-mail.
  • Resultado com status, urgência, descrição original e respostas públicas.
  • Mensagem neutra quando a combinação código/e-mail não encontra chamado.

Painel Admin

  • Login administrativo com Supabase Auth.
  • Rotas /admin protegidas por Proxy e checagens server-side.
  • Dashboard com estatísticas resumidas.
  • Lista responsiva: tabela no desktop e cards no mobile.
  • Filtros por status, urgência e resposta.
  • Busca por número, assunto e solicitante.
  • Ordenação por atualização, criação e urgência.
  • Destaque para chamados urgentes e sem resposta.
  • Detalhe do chamado com dados do solicitante e timeline.
  • Atualização de status, urgência e resposta pública ao solicitante.

Qualidade e Segurança

  • PostgreSQL com migrations e constraints.
  • Row Level Security nas tabelas do app.
  • Server Actions para criação, consulta e mutações admin.
  • Validação server-side para formulários públicos e administrativos.
  • Same-origin guard nos fluxos públicos.
  • Rate limit básico por IP/e-mail com identificadores em hash.
  • SUPABASE_SERVICE_ROLE_KEY usada apenas em código server-side.
  • Headers de segurança em next.config.ts.
  • Testes unitários com Vitest para validações, filtros e regras puras.

Stack

Camada Tecnologia
Framework Next.js App Router
UI React, TypeScript e Tailwind CSS
Auth Supabase Auth
Banco Supabase PostgreSQL
Segurança de dados Supabase RLS
Mutações Server Actions
Testes Vitest
Deploy alvo Vercel

As versões principais estão em package.json.

Decisões Técnicas

  • O App Router separa a área pública da área admin.
  • As Server Actions concentram validação, autorização e mutações.
  • O RLS evita acesso direto indevido às tabelas.
  • A consulta pública exige código e e-mail para reduzir a exposição de chamados.
  • O admin é tratado como ferramenta interna: usuários são criados manualmente no Supabase.
  • Os filtros do admin ficam na URL para permitir recarregar e compartilhar o estado.
  • Regras puras e validações foram isoladas para testes sem depender do banco.

Como Rodar Localmente

Requisitos:

  • Node.js 20.9.0 ou superior.
  • npm.
  • Supabase CLI.
  • Docker Desktop, se for rodar o Supabase local.

Instale as dependências:

npm install

Crie o arquivo local de ambiente:

cp .env.example .env.local

No Windows PowerShell:

Copy-Item .env.example .env.local

Preencha as variáveis em .env.local.

Suba o Supabase local e aplique migrations/seed:

npm run supabase:start
npm run supabase:db:reset

Rode a aplicação:

npm run dev

Acesse http://localhost:3000.

Admin local criado pelo seed:

E-mail: [email protected]
Senha: admin123

Esse usuário é apenas para desenvolvimento local. Não publique essa credencial como login de demo em produção.

Chamado local para consulta após o seed:

Ticket: CF-2026-00001
E-mail: [email protected]

Os dados do seed são fictícios.

Variáveis de Ambiente

NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=
SITE_URL=https://chamadafacil.vercel.app
Variável Exposição Uso
NEXT_PUBLIC_SUPABASE_URL Pública/browser-safe URL do projeto Supabase.
NEXT_PUBLIC_SUPABASE_ANON_KEY Pública/browser-safe Chave anon pública usada com RLS.
SUPABASE_SERVICE_ROLE_KEY Somente servidor Fluxos públicos controlados e rate limit.
SITE_URL Pública/canônica Canonical, Open Graph, robots e sitemap.

Nunca use NEXT_PUBLIC_ na service role key e nunca coloque segredos reais em README, screenshots, logs ou issues.

Comandos

npm run dev
npm test
npm run lint
npm run typecheck
npm run build
npm run supabase:start
npm run supabase:stop
npm run supabase:status
npm run supabase:db:reset
npm run supabase:link

Comandos finais recomendados antes de publicar:

npm test
npm run lint
npm run typecheck
npm run build

Deploy

O alvo documentado é a Vercel com Supabase hospedado.

Checklist de produção:

  1. Configurar NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY e SITE_URL no provedor.
  2. Aplicar as migrations no Supabase remoto.
  3. Desativar public signups no Supabase Auth.
  4. Criar operadores manualmente em Authentication > Users.
  5. Não aplicar o seed local em produção.
  6. Rodar smoke test das rotas públicas e privadas.

Guia completo: docs/DEPLOYMENT.md.

Limitações Conscientes

  • Não há RBAC; todo usuário autenticado no Supabase é operador/admin.
  • Não há multiempresa/multi-tenant.
  • Não há contas públicas para solicitantes.
  • Não há anexos/upload.
  • Não há e-mail transacional.
  • Não há SLA, vencimentos ou indicadores de atraso.
  • Não há base de conhecimento.
  • Não há notas internas para operadores.
  • Não há auditoria avançada de mudanças.

Esses pontos são possibilidades futuras, não funcionalidades prontas.

Roadmap Possível

  • RBAC com papéis de admin, operador e visualizador.
  • Isolamento por empresa/tenant.
  • Notificações por e-mail.
  • Anexos.
  • SLA e indicadores de atraso.
  • Exportação CSV.
  • Auditoria mais detalhada.
  • Base de conhecimento.
  • Notas internas.

Resumo para Portfólio

ChamadaFácil é um help desk full-stack para pequenos negócios, com abertura pública de chamados, consulta por código/e-mail, painel admin autenticado, fila operacional com busca/filtros/ordenação, respostas públicas e documentação pronta para avaliação técnica. O projeto demonstra Next.js, TypeScript, Supabase Auth, PostgreSQL/RLS, Server Actions, validação server-side, rate limit básico e testes em um escopo MVP honesto.

About

Web ticketing system for opening, tracking, and managing support requests. Includes an admin panel, authentication, status tracking, urgency levels, and organization, built with Supabase.

Resources

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages