Skip to content

🎓 Sistema completo de rifas online para turmas de formatura. Arrecade fundos com pagamento PIX automático!

Notifications You must be signed in to change notification settings

GuickerZ/RifaTurma

Repository files navigation

� RifaTurma

Sistema completo de rifas online para turmas de formatura. Arrecade fundos de forma organizada com pagamento PIX automático!

Sistema web moderno para gerenciamento de rifas escolares com pagamento PIX automatizado via EfiPay. Desenvolvido para ajudar turmas a arrecadarem fundos para formaturas, viagens e eventos.

📱 Demonstração

Tela Inicial Formulário de Dados Pagamento PIX

React TypeScript Vite TailwindCSS Supabase Vercel

📖 A História do Projeto

Este projeto nasceu de uma necessidade real: ajudar minha turma do 4º ano de Informática a arrecadar fundos para a formatura.

O que começou como uma solução para nosso problema se tornou um sucesso! Conseguimos vender todas as rifas de forma organizada, com pagamentos automatizados via PIX e controle total das vendas.

Agora, estou disponibilizando o código para que outras escolas e turmas possam usar e adaptar para suas próprias rifas e arrecadações. Sinta-se à vontade para usar, modificar e contribuir!

🎯 Para Quem é Este Projeto?

  • Turmas de formatura - Arrecade fundos para festa, álbum, viagem
  • Escolas e faculdades - Organize rifas de forma profissional
  • Grêmios estudantis - Gerencie vendas com transparência
  • Qualquer grupo - Que precise arrecadar fundos com rifas

📝 Funcionalidades Principais

  • Compra de números online com pagamento via PIX automatizado
  • Geração automática de QR Code para pagamento
  • Verificação automática de pagamentos via API EfiPay (Gerencianet)
  • Painel administrativo para gestão de vendas
  • Interface responsiva otimizada para dispositivos móveis

🚀 Tecnologias Utilizadas

Frontend

  • React 18 - Biblioteca para construção de interfaces
  • TypeScript - Tipagem estática para JavaScript
  • Vite - Build tool e dev server
  • TailwindCSS - Framework CSS utilitário
  • shadcn/ui - Componentes de UI acessíveis
  • React Query - Gerenciamento de estado do servidor
  • React Router - Roteamento SPA
  • Lucide React - Biblioteca de ícones

Backend

  • Vercel Serverless Functions - API REST serverless
  • Supabase - Banco de dados PostgreSQL e autenticação
  • EfiPay SDK - Integração com pagamentos PIX

📁 Estrutura do Projeto

├── api/                    # API Serverless (Vercel Functions)
│   └── index.js            # Router unificado com todos os endpoints
├── public/                 # Assets estáticos
├── src/
│   ├── components/         # Componentes React
│   │   ├── admin/          # Componentes do painel admin
│   │   └── ui/             # Componentes base (shadcn/ui)
│   ├── contexts/           # Contextos React
│   ├── hooks/              # Hooks customizados
│   ├── integrations/       # Integrações (Supabase)
│   ├── lib/                # Utilitários e API client
│   ├── pages/              # Páginas da aplicação
│   └── types/              # Definições TypeScript
├── vercel.json             # Configuração de deploy
└── .env.example            # Template de variáveis de ambiente

⚙️ Configuração

1. Clonar o repositório

git clone https://github.com/GuickerZ/RifaTurma.git
cd RifaTurma

2. Instalar dependências

npm install
# ou
bun install

3. Desenvolvimento local

npm run dev

4. Configurar banco de dados

Execute o seguinte SQL no Supabase Dashboard > SQL Editor:

-- Tabela de bilhetes
CREATE TABLE tickets (
  id INTEGER PRIMARY KEY,
  status VARCHAR(20) DEFAULT 'available',
  ownername VARCHAR(255),
  ownerphone VARCHAR(20),
  purchasedate TIMESTAMP,
  paymentmethod VARCHAR(20),
  created_at TIMESTAMP DEFAULT NOW()
);

-- Tabela de transações
CREATE TABLE transactions (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  txid VARCHAR(255),
  tickets INTEGER[],
  customername VARCHAR(255),
  customerphone VARCHAR(20),
  totalamount DECIMAL(10,2),
  status VARCHAR(20) DEFAULT 'pending',
  paymentmethod VARCHAR(20),
  adminuser VARCHAR(255),
  expirationtime TIMESTAMP,
  created_at TIMESTAMP DEFAULT NOW()
);

-- Gerar bilhetes (ajuste o número conforme necessário)
INSERT INTO tickets (id, status)
SELECT generate_series(1, 3000), 'available';

-- Índices para performance
CREATE INDEX idx_tickets_status ON tickets(status);
CREATE INDEX idx_tickets_phone ON tickets(ownerphone);
CREATE INDEX idx_transactions_status ON transactions(status);
CREATE INDEX idx_transactions_txid ON transactions(txid);

🚀 Deploy na Vercel

1. Importar projeto

  1. Acesse vercel.com e faça login
  2. Clique em "Add New Project"
  3. Importe o repositório do GitHub

2. Configurar variáveis de ambiente

Na aba Settings > Environment Variables, adicione:

Variável Descrição
VITE_SUPABASE_URL URL do projeto Supabase
VITE_SUPABASE_ANON_KEY Chave pública (anon) do Supabase
SUPABASE_URL URL do projeto Supabase (backend)
SUPABASE_KEY Chave de serviço (service_role) do Supabase
EFIPAY_CLIENT_ID Client ID do EfiPay
EFIPAY_CLIENT_SECRET Client Secret do EfiPay
EFIPAY_CERT_BASE64 Certificado .p12 convertido para Base64
CHAVE_PIX Chave PIX para recebimento (CNPJ ou telefone)
TICKET_PRICE Preço do bilhete (ex: 1)
TOTAL_TICKETS Total de bilhetes (ex: 3000)

3. Converter certificado para Base64

# Linux/Mac
base64 -i seu-certificado.p12 | tr -d '\n' > cert-base64.txt

# Windows (PowerShell)
[Convert]::ToBase64String([IO.File]::ReadAllBytes("seu-certificado.p12")) | Out-File -FilePath cert-base64.txt -NoNewline

⚠️ IMPORTANTE: O Base64 do certificado é muito grande e termina com =. Para evitar problemas:

  1. Na Vercel: Cole o valor diretamente no campo da variável (a Vercel lida corretamente com =)
  2. No arquivo .env local: Coloque o valor entre aspas duplas:
    EFIPAY_CERT_BASE64="MIIKfgIBAz...longo...=="
    
  3. Verifique: O Base64 deve ter milhares de caracteres. Se estiver pequeno, houve erro na conversão.

4. Deploy

Clique em Deploy. O Vercel irá:

  • Buildar o frontend com Vite
  • Configurar as serverless functions na pasta /api
  • Gerar a URL de produção

🎨 Interface

O sistema possui uma interface moderna e responsiva:

  • Grid interativo de números disponíveis/vendidos
  • Modal de compra com geração de QR Code PIX
  • Painel administrativo completo
  • Design limpo e profissional

📱 Funcionalidades

Usuário

  • ✅ Visualização de números disponíveis
  • ✅ Seleção de múltiplos números
  • ✅ Seleção aleatória de números
  • ✅ Pagamento via PIX com QR Code
  • ✅ Verificação automática de pagamento
  • ✅ Consulta de números comprados por telefone

Administrador

  • ✅ Dashboard com estatísticas de vendas
  • ✅ Registro de vendas manuais (dinheiro/PIX presencial)
  • ✅ Histórico de transações
  • ✅ Desempenho por vendedor
  • ✅ Sorteio automático

�️ Scripts de Banco de Dados

Na pasta scripts/database.sql você encontra scripts prontos para:

Script Descrição
Criar tabelas Estrutura inicial do banco
Gerar bilhetes Criar bilhetes de 1 a N
Limpar tudo Resetar todos os bilhetes para disponível
Adicionar mais Gerar bilhetes adicionais
Apagar bilhetes Remover bilhetes específicos
Editar bilhete Marcar como vendido ou liberar
Cancelar expirados Liberar bilhetes pendentes antigos
Consultas úteis Estatísticas e buscas

Execute os scripts no Supabase Dashboard > SQL Editor.

🖼️ Imagens de Exemplo

O projeto inclui imagens placeholder na pasta public/:

  • placeholder-prize1.svg - Placeholder para 1º prêmio
  • placeholder-prize2.svg - Placeholder para 2º prêmio
  • placeholder-logo.svg - Placeholder para logo da turma

Substitua pelas suas imagens com os mesmos nomes ou edite os caminhos em src/pages/Index.tsx.

�🔒 Segurança

  • Autenticação via Supabase Auth
  • Chaves sensíveis em variáveis de ambiente
  • Certificados PIX não versionados
  • Validação de dados no frontend e backend

🤝 Contribuição

Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou pull requests.

📄 Licença

Este projeto é de código aberto para fins educacionais.

👨‍💻 Autor

Guilherme Matias


🌟 Se este projeto te ajudou, deixe uma estrela no repositório!

About

🎓 Sistema completo de rifas online para turmas de formatura. Arrecade fundos com pagamento PIX automático!

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published