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.
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!
- 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
- 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
- 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
- Vercel Serverless Functions - API REST serverless
- Supabase - Banco de dados PostgreSQL e autenticação
- EfiPay SDK - Integração com pagamentos PIX
├── 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
git clone https://github.com/GuickerZ/RifaTurma.git
cd RifaTurmanpm install
# ou
bun installnpm run devExecute 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);- Acesse vercel.com e faça login
- Clique em "Add New Project"
- Importe o repositório do GitHub
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) |
# 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=. Para evitar problemas:
- Na Vercel: Cole o valor diretamente no campo da variável (a Vercel lida corretamente com
=) - No arquivo
.envlocal: Coloque o valor entre aspas duplas:EFIPAY_CERT_BASE64="MIIKfgIBAz...longo...==" - Verifique: O Base64 deve ter milhares de caracteres. Se estiver pequeno, houve erro na conversão.
Clique em Deploy. O Vercel irá:
- Buildar o frontend com Vite
- Configurar as serverless functions na pasta
/api - Gerar a URL de produção
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
- ✅ 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
- ✅ Dashboard com estatísticas de vendas
- ✅ Registro de vendas manuais (dinheiro/PIX presencial)
- ✅ Histórico de transações
- ✅ Desempenho por vendedor
- ✅ Sorteio automático
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.
O projeto inclui imagens placeholder na pasta public/:
placeholder-prize1.svg- Placeholder para 1º prêmioplaceholder-prize2.svg- Placeholder para 2º prêmioplaceholder-logo.svg- Placeholder para logo da turma
Substitua pelas suas imagens com os mesmos nomes ou edite os caminhos em src/pages/Index.tsx.
- 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ções são bem-vindas! Sinta-se à vontade para abrir issues ou pull requests.
Este projeto é de código aberto para fins educacionais.
Guilherme Matias
- GitHub: @GuickerZ
- Instagram: @guilhermematiasss
🌟 Se este projeto te ajudou, deixe uma estrela no repositório!


