Sistema moderno e completo de gerenciamento de tickets construído com Next.js 15 e React 19
O Ticketfy é um sistema completo e moderno de gerenciamento de tickets desenvolvido para o mercado brasileiro. Construído com Next.js 15, React 19 e as mais recentes tecnologias do ecossistema web, oferece uma experiência de usuário excepcional com performance otimizada e segurança robusta.
O Ticketfy foi desenvolvido para resolver os desafios comuns de gerenciamento de tickets em organizações brasileiras, oferecendo:
- Interface em Português: Totalmente localizada para o mercado brasileiro
- Colaboração Eficiente: Sistema de comentários para discussão e resolução
- Gestão de Bounties: Sistema de recompensas para incentivar resolução rápida
- Organização Multi-tenant: Suporte a múltiplas organizações por usuário
- Segurança Enterprise: Autenticação robusta e proteção de dados
- Registro Seguro: Validação de email único com hash Argon2
- Login Inteligente: Autenticação com redirecionamento contextual
- Verificação de Email: Código de 6 dígitos com templates React Email
- Recuperação de Senha: Reset seguro com tokens temporários
- Sessões Seguras: Gerenciamento com Oslo.js e cookies httpOnly
- Multi-device: Controle de sessões em múltiplos dispositivos
- CRUD Completo: Criar, visualizar, editar e excluir tickets
- Status Inteligente: Aberto → Em Andamento → Concluído
- Sistema de Bounties: Valores em reais para incentivar resolução
- Prazos Visuais: Indicadores de urgência e vencimento
- Busca Avançada: Filtros por status, autor, conteúdo e data
- Paginação Otimizada: Carregamento eficiente de grandes listas
- Propriedade: Apenas autores podem editar/excluir seus tickets
- Threading Cronológico: Discussões organizadas por tempo
- Controle de Propriedade: Usuários controlam seus comentários
- Paginação Inteligente: Carregamento sob demanda
- Timestamps Localizados: Datas em formato brasileiro
- Soft Delete: Preservação de integridade referencial
- Multi-tenant: Usuários podem pertencer a múltiplas organizações
- Criação Simples: Interface intuitiva para criar organizações
- Troca Contextual: Seletor de organização ativa
- Membership Control: Controle de status ativo/inativo
- Isolamento de Dados: Dados separados por organização
- Perfil Completo: Informações pessoais e estatísticas
- Alteração de Senha: Processo seguro com validação
- Avatares Temáticos: 11 opções de avatares personalizados
- Configurações: Preferências e configurações pessoais
- Histórico: Atividades e tickets do usuário
- Design System Moderno: Baseado em Shadcn/UI e Radix UI
- Tema Dual: Suporte completo a modo claro e escuro
- Responsividade Total: Mobile-first com breakpoints otimizados
- Acessibilidade WCAG: Componentes acessíveis por padrão
- Micro-interações: Animações suaves e feedback visual
- Loading States: Estados de carregamento elegantes
- Templates React: Emails responsivos e profissionais
- Resend Integration: Entrega confiável de emails
- Background Jobs: Processamento assíncrono com Inngest
- Tracking: Logs de envio e entrega
- Localização: Templates em português brasileiro
- Busca Full-text: Pesquisa em títulos e conteúdo
- Filtros Combinados: Status + busca + autor
- URL State: Filtros persistem na URL para compartilhamento
- Debounce: Otimização de performance em buscas
- Ordenação: Múltiplos critérios de ordenação
- Vercel Speed Insights: Métricas de performance em tempo real
- React Scan: Detecção de re-renders desnecessários
- Error Tracking: Captura e logging de erros
- Performance Monitoring: Core Web Vitals tracking
- Health Checks: Endpoints de saúde da aplicação
- Next.js 15.4.5 - Framework React com App Router e Server Components
- React 19 - Biblioteca para interfaces de usuário
- TypeScript 5 - Superset tipado do JavaScript
- Tailwind CSS 4 - Framework CSS utility-first
- Shadcn/UI + Radix UI - Componentes acessíveis e customizáveis
- Lucide React - Ícones SVG otimizados
- Next Themes - Gerenciamento de temas claro/escuro
- Prisma 6.11.1 - ORM moderno para TypeScript
- PostgreSQL - Banco de dados relacional robusto
- Oslo.js - Biblioteca de autenticação segura
- Argon2 - Algoritmo de hash para senhas
- Resend - Serviço de envio de emails transacionais
- Zustand 5 - Gerenciamento de estado global leve
- Nuqs 2.4.3 - Sincronização de estado com URL
- Zod - Validação tipada no servidor
- Turbopack - Bundler rápido do Next.js
- Vitest 3.2.4 - Framework de testes unitários
- Testing Library - Utilitários para testes de componentes
- ESLint 9 + Prettier - Linting e formatação de código
- Lefthook - Git hooks para automação
- Bundle Analyzer - Análise de tamanho do bundle
- React Email 4.2.8 - Templates de email em React
- Sonner - Toasts e notificações elegantes
- Inngest - Processamento de jobs em background
- Node.js 22+ e npm/yarn/pnpm
- PostgreSQL
- Git
-
Clone o repositório
git clone https://github.com/EvandroCalado/ticketfy.git cd ticketfy -
Instale as dependências
npm install # ou yarn # ou pnpm install
-
Configure as variáveis de ambiente
cp .env.example .env
Atualize o arquivo
.envcom suas configurações de banco de dados e autenticação. -
Execute as migrações do banco de dados (Ainda em construção)
npx prisma migrate dev
-
Inicie o servidor de desenvolvimento
npm run dev # ou yarn dev # ou pnpm dev
-
Acesse a aplicação Abra http://localhost:3000 no seu navegador.
Para facilitar os testes e desenvolvimento, o Ticketfy inclui um usuário administrador padrão criado automaticamente pelo seed do banco de dados:
📧 Email: admin@email.com
🔒 Senha: 123456
-
Execute o seed do banco (se ainda não executou):
pnpm seed
-
Acesse a aplicação em http://localhost:3000
-
Faça login usando as credenciais acima
-
Explore as funcionalidades:
- ✅ Email já verificado (não precisa verificar)
- 🏢 Organização padrão já criada
- 🎫 11 tickets de exemplo com diferentes status
- 💬 Comentários de exemplo
- 👤 Perfil completo configurado
O seed cria automaticamente:
- 2 usuários (admin + usuário de exemplo)
- 1 organização com memberships ativas
- 11 tickets com status variados (OPEN, IN_PROGRESS, DONE)
- 3 comentários de exemplo
- Bounties variando de R$ 1,00 a R$ 10,00
- Este usuário é apenas para desenvolvimento e testes
- Não use em produção com essas credenciais
- Para produção, crie usuários através do sistema de registro normal
O Ticketfy segue uma arquitetura moderna e escalável baseada em Next.js 15 App Router:
ticketfy/
├── .kiro/ # Documentação e configurações Kiro
│ ├── docs/ # Documentação técnica completa
│ │ ├── architecture.md # Arquitetura do sistema
│ │ ├── features.md # Funcionalidades detalhadas
│ │ ├── technical.md # Documentação técnica
│ │ ├── api.md # Documentação da API
│ │ └── deployment.md # Guia de deploy
│ ├── settings/ # Configurações do projeto
│ └── steering/ # Regras e diretrizes
│
├── prisma/ # Banco de dados
│ ├── schema.prisma # Schema do banco
│ ├── generated/ # Cliente Prisma gerado
│ └── seed.ts # Dados iniciais
│
├── src/
│ ├── app/ # Next.js 15 App Router
│ │ ├── (auth)/ # 🔐 Grupo de autenticação
│ │ │ ├── (pages)/ # Páginas de auth
│ │ │ │ ├── sign-in/ # Login
│ │ │ │ ├── sign-up/ # Registro
│ │ │ │ ├── forgot-password/ # Recuperação
│ │ │ │ ├── reset-password/ # Reset de senha
│ │ │ │ └── verify-email/ # Verificação
│ │ │ ├── actions/ # Server Actions de auth
│ │ │ ├── components/ # Componentes de auth
│ │ │ ├── schemas/ # Validações Zod
│ │ │ ├── utils/ # Utilitários de auth
│ │ │ └── events/ # Background jobs
│ │ │
│ │ ├── (root)/ # 🏠 Aplicação principal
│ │ │ ├── (protected)/ # Rotas autenticadas
│ │ │ │ ├── tickets/ # 🎫 Sistema de tickets
│ │ │ │ │ ├── (pages)/ # Páginas de tickets
│ │ │ │ │ ├── actions/ # CRUD operations
│ │ │ │ │ ├── components/ # UI components
│ │ │ │ │ ├── schemas/ # Validações
│ │ │ │ │ └── constants/ # Constantes
│ │ │ │ ├── account/ # 👤 Gerenciamento de conta
│ │ │ │ └── organizations/ # 🏢 Organizações
│ │ │ ├── about/ # Página sobre
│ │ │ └── price/ # Página de preços
│ │ │
│ │ ├── api/ # API Routes
│ │ │ └── inngest/ # Background jobs webhook
│ │ │
│ │ ├── globals.css # Estilos globais
│ │ └── layout.tsx # Layout raiz
│ │
│ ├── components/ # Componentes reutilizáveis
│ │ ├── ui/ # 🎨 Shadcn/UI components
│ │ ├── shared/ # Componentes compartilhados
│ │ └── email/ # 📧 Templates de email
│ │
│ ├── actions/ # 🔧 Server Actions globais
│ ├── hooks/ # 🪝 Custom React Hooks
│ ├── stores/ # 🗄️ Zustand stores
│ ├── lib/ # 📚 Configurações e utilitários
│ ├── types/ # 📝 Definições TypeScript
│ ├── utils/ # 🛠️ Funções utilitárias
│ ├── constants/ # 📊 Constantes da aplicação
│ └── icons/ # 🎯 Ícones customizados
│
├── public/ # Assets estáticos
│ ├── avatars/ # Avatares dos usuários
│ └── *.webp # Imagens otimizadas
│
├── .test/ # Configurações de teste
├── coverage/ # Relatórios de cobertura
└── node_modules/ # Dependências
- Feature-Based Organization: Cada funcionalidade é auto-contida
- Server-First: Server Components e Server Actions por padrão
- Type-Safe: TypeScript strict mode em todo o projeto
- Co-location: Componentes, actions e schemas próximos às features
- Separation of Concerns: Camadas bem definidas e responsabilidades claras
O Ticketfy utiliza um esquema PostgreSQL robusto e bem estruturado:
- id: String (CUID)
- name: String
- email: String (único)
- emailVerified: Boolean
- passwordHash: String (Argon2)
- createdAt/updatedAt: DateTime- id: String (CUID)
- title: String (max 100 chars)
- content: String (max 1024 chars)
- status: Enum (OPEN, IN_PROGRESS, DONE)
- deadline: String
- bounty: Int (em centavos)
- userId: String (FK → User)
- createdAt/updatedAt: DateTime- id: String (CUID)
- content: String (max 1024 chars)
- ticketId: String (FK → Ticket)
- userId: String (FK → User, nullable)
- createdAt/updatedAt: DateTime- id: String (CUID)
- name: String
- createdAt/updatedAt: DateTime- userId: String (FK → User)
- organizationId: String (FK → Organization)
- joinedAt: DateTime
- isActive: Boolean- id: String (CUID)
- userId: String (FK → User)
- expiresAt: DateTime
- createdAt/updatedAt: DateTime- id: String (CUID)
- code: String (6 dígitos)
- email: String
- userId: String (FK → User)
- expiresAt: DateTime (24h)
- createdAt/updatedAt: DateTime- tokenHash: String (SHA-256)
- userId: String (FK → User)
- expiresAt: DateTime (1h)
- createdAt/updatedAt: DateTime- User → Ticket (1:N) - Um usuário pode ter muitos tickets
- User → Comment (1:N) - Um usuário pode ter muitos comentários
- Ticket → Comment (1:N) - Um ticket pode ter muitos comentários
- User ↔ Organization (N:N) - Usuários podem pertencer a múltiplas organizações
- User → Session (1:N) - Um usuário pode ter múltiplas sessões ativas
- Cascade Deletes: Exclusão de usuário remove tickets, comentários e sessões
- Soft Deletes: Comentários preservados mesmo se usuário for removido
- Índices Otimizados: Performance em queries frequentes
- Constraints: Validação de integridade referencial
- Timestamps: Auditoria completa de criação e modificação
pnpm dev # Servidor de desenvolvimento com Turbopack
pnpm build # Build otimizado para produção
pnpm start # Servidor de produçãopnpm lint # ESLint com máximo 0 warnings
pnpm typecheck # Verificação rigorosa de tipos TypeScriptpnpm test # Testes unitários em modo watch
pnpm test:ci # Testes para CI/CD (execução única)
pnpm test:coverage # Relatório completo de cobertura
pnpm test:ui # Interface gráfica do Vitestpnpm seed # Popular banco com dados de exemplo
npx prisma studio # Interface visual do banco
npx prisma generate # Gerar cliente Prisma
npx prisma migrate dev # Criar e aplicar migrações
npx prisma db push # Sincronizar schema (desenvolvimento)pnpm analyze # Análise detalhada do bundlepnpm email # Preview server para templates React Emailnpm run postinstall # Gerar cliente Prisma automaticamente# React Scan para detectar re-renders desnecessários
# Vercel Speed Insights para métricas de performance
# Automaticamente incluídos no buildO Ticketfy possui uma suite completa de testes para garantir qualidade e confiabilidade:
- Server Actions: Todas as operações CRUD testadas
- Utilitários: Funções de formatação, validação e helpers
- Hooks Customizados: Lógica de estado e efeitos
- Schemas Zod: Validação de dados de entrada
- Renderização: Verificação de elementos na tela
- Interações: Simulação de cliques, digitação e navegação
- Estados: Testes de loading, error e success states
- Acessibilidade: Verificação de ARIA labels e navegação por teclado
- Fluxos Completos: Autenticação, CRUD de tickets, comentários
- Database Operations: Operações Prisma com mock
- Email Sending: Verificação de envio de emails
- Session Management: Criação e validação de sessões
# Executar todos os testes com cobertura
pnpm test:coverage
# Relatório de cobertura atual:
# - Statements: 85%+
# - Branches: 80%+
# - Functions: 90%+
# - Lines: 85%+- Vitest: Test runner rápido e moderno
- Testing Library: Testes centrados no usuário
- jsdom: Ambiente DOM para testes
- MSW: Mock Service Worker para APIs
- Prisma Mock: Mock do cliente Prisma
# Interface gráfica para desenvolvimento
pnpm test:ui
# Recursos da UI:
# - Visualização de testes em tempo real
# - Debug interativo
# - Cobertura visual
# - Filtros e buscadescribe('createTicket', () => {
it('should create ticket with correct data', async () => {
const formData = new FormData();
formData.append('title', 'Test Ticket');
const result = await createTicket(null, formData);
expect(result.success).toBe(true);
expect(prismaMock.ticket.create).toHaveBeenCalled();
});
});describe('TicketCard', () => {
it('renders ticket information correctly', () => {
render(<TicketCard ticket={mockTicket} />);
expect(screen.getByText('Test Ticket')).toBeInTheDocument();
expect(screen.getByRole('button', { name: /editar/i })).toBeVisible();
});
});O Ticketfy possui documentação técnica abrangente localizada em .kiro/docs/:
- 🏗️ Architecture - Arquitetura do sistema, padrões e fluxos
- ✨ Features - Funcionalidades detalhadas e casos de uso
- 🔧 Technical - Stack tecnológica e configurações
- 🌐 API - Server Actions, schemas e endpoints
- 🚀 Deployment - Guia completo de deploy e CI/CD
- Novos Desenvolvedores: Comece com Architecture e Features
- Integração: Consulte API para Server Actions e schemas
- Deploy: Siga o Deployment Guide para produção
- Stack Técnica: Detalhes completos em Technical
Contribuições são muito bem-vindas! O Ticketfy segue padrões rigorosos de qualidade:
- Fork o repositório
- Clone seu fork localmente
- Crie uma branch para sua feature
(
git checkout -b feature/nova-funcionalidade) - Desenvolva seguindo os padrões do projeto
- Teste sua implementação (
pnpm test) - Commit suas mudanças
(
git commit -m 'feat: adiciona nova funcionalidade') - Push para sua branch (
git push origin feature/nova-funcionalidade) - Abra um Pull Request detalhado
Antes de enviar seu PR, certifique-se de que:
- Testes passam (
pnpm test) - Linting está correto (
pnpm lint) - TypeScript compila sem erros (
pnpm typecheck) - Build funciona (
pnpm build) - Documentação foi atualizada se necessário
- Commits seguem o padrão Conventional Commits
- TypeScript Strict: Tipagem rigorosa obrigatória
- ESLint: Máximo 0 warnings
- Prettier: Formatação automática
- Server Actions: Preferir sobre API routes
- Zod Schemas: Validação type-safe
- Testes: Cobertura mínima de 80%
Ao reportar bugs, inclua:
- Descrição clara do problema
- Passos para reproduzir
- Comportamento esperado vs atual
- Screenshots se aplicável
- Ambiente (OS, browser, versão)
Para novas funcionalidades:
- Descreva o problema que resolve
- Proponha uma solução
- Considere alternativas
- Avalie o impacto na arquitetura
- Progressive Web App (PWA)
- Notificações push
- Modo offline básico
- App mobile nativo (React Native)
- WebSockets para updates live
- Notificações de novos comentários
- Alertas de prazo vencendo
- Sistema de menções (@usuário)
- Upload de arquivos em tickets
- Suporte a imagens, PDFs, documentos
- Preview de arquivos
- Controle de tamanho e tipos
- Dashboard com métricas
- Gráficos de tickets por status
- Relatórios de performance
- Estatísticas de usuários
- API REST pública
- Webhooks para eventos
- Integração Slack/Discord
- Zapier/Make.com connectors
- Sistema de roles e permissões
- Atribuição de tickets
- Templates de tickets
- Workflow customizável
- Cache Redis
- CDN para assets
- Database read replicas
- Rate limiting avançado
- Drag & drop para organização
- Atalhos de teclado
- Modo de visualização compacta
- Filtros salvos
Agradecimentos especiais às tecnologias que tornam o Ticketfy possível:
- Next.js - Framework React de produção
- Vercel - Plataforma de deploy e hosting
- Prisma - ORM moderno e type-safe
- Tailwind CSS - Framework CSS utility-first
- Radix UI - Componentes acessíveis
- Shadcn/UI - Sistema de componentes
- Oslo.js - Primitivas de autenticação
- Resend - Serviço de email confiável
- Inngest - Background jobs
- Vitest - Framework de testes
- Lucide - Ícones SVG elegantes
- Unsplash - Imagens de alta qualidade
- Figma Community - Inspiração de design
- React - Biblioteca que revolucionou o frontend
- TypeScript - JavaScript com superpoderes
- MDN Web Docs - Referência web definitiva
- Stack Overflow - Comunidade de desenvolvedores
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes completos.
- ✅ Uso comercial permitido
- ✅ Modificação permitida
- ✅ Distribuição permitida
- ✅ Uso privado permitido
- ❌ Responsabilidade do autor
- ❌ Garantia fornecida
Evandro Calado
- 🐙 GitHub: @EvandroCalado
- 🐦 Twitter: @evandro_calado
- 📧 Email: evandro.calado@exemplo.com
- 💼 LinkedIn: Evandro Calado
- 📦 Repositório: https://github.com/EvandroCalado/ticketfy
- 🌐 Demo Live: https://ticketfy.vercel.app
- 📚 Documentação: /.kiro/docs/
- 🐛 Issues: GitHub Issues
- 💬 Discussões: GitHub Discussions
- Bugs: Reporte via GitHub Issues
- Funcionalidades: Sugira via GitHub Discussions
- Dúvidas: Use as Discussions ou abra uma issue
Feito com ❤️ para a comunidade brasileira de desenvolvedores
⭐ Se este projeto foi útil, considere dar uma estrela no GitHub! ⭐