Pular para o conteúdo
Waldo Eller | Cloud/DevOps: início
Estudo de Caso

Rifa Online

Rifas organizadas manualmente planilha, papel, grupo de WhatsApp têm um conjunto previsível de falhas

Publicado em

8 min de leitura
Capa do projeto Rifa Online

Projeto de portfólio — construído para um caso de uso real (rifa de certificação Linux da UPlinux).

Demo: https://rifa.uplinux.com.br


Rifa Online - Documento de Projeto

produto: o problema, o contexto, a estratégia e os resultados esperados.

Tela Inicial

1. Qual o problema que o projeto resolve?

Rifas organizadas manualmente — planilha, papel, grupo de WhatsApp — têm um conjunto previsível de falhas:

  • Venda duplicada do mesmo número, quando duas pessoas reservam ao mesmo tempo e o organizador só percebe depois.
  • Confirmação de pagamento manual, checando extrato bancário ou comprovante um a um, com atraso e risco de erro humano.
  • Nenhuma trilha de auditoria: quando um participante contesta ("eu paguei o número 47"), não há registro confiável de quem reservou o quê e quando.
  • Números "presos" indefinidamente por quem reservou e nunca pagou, reduzindo o estoque disponível sem necessidade.
  • Sorteio sem prova de lisura — um sorteio feito "na mão" não convence ninguém de que foi justo.

O projeto nasceu de um caso real: a rifa de uma certificação Linux da UPlinux, que precisava de um jeito profissional de vender números e cobrar via Pix sem depender de controle manual.

2. Contexto da solução

A solução parte de uma constatação simples: Pix é o método de pagamento padrão no Brasil, e qualquer rifa que não oferece Pix instantâneo perde conversão. Ao mesmo tempo, plataformas SaaS de rifa cobram taxa por venda ou mensalidade fixa, o que corrói a margem de quem está arrecadando para uma causa ou um sorteio pontual.

A resposta é um sistema open source, auto-hospedado, que qualquer organizador com um mínimo de familiaridade técnica (ou ajuda de terceiros) pode colocar no ar sem pagar taxa por transação — só a infraestrutura (Supabase, Netlify), que tem camada gratuita suficiente para volumes pequenos e médios.

3. Em qual contexto se aplica?

  • Organizações e criadores individuais no Brasil vendendo números para arrecadação, divulgação ou brinde — o caso de uso original é uma certificação profissional, mas o modelo serve para qualquer prêmio numerado.
  • Rifas de porte pequeno a médio (a UI foi desenhada em torno de uma grade de 100 números por rifa, mas o sistema suporta várias rifas simultâneas).
  • Quem valoriza transparência: a grade pública mostra em tempo real quais números estão disponíveis, reservados ou pagos, e o sorteio final é verificável (hash + seed registrados).
  • Quem quer/precisa personalizar: por ser código aberto, pode ser adaptado (marca, regras, integrações) em vez de depender de uma plataforma fechada.
  • Não se aplica a operações que exigem licença de jogo/aposta regulamentada — é uma ferramenta de rifa/sorteio promocional, não uma plataforma de apostas. Tela Inicial

4. A solução

Uma aplicação web full-stack com os seguintes módulos:

Módulo O que resolve
Grade pública em tempo real Elimina venda duplicada: cada número mostra seu estado real (disponível/reservado/pago), sincronizado via Realtime entre todos os visitantes.
Reserva atômica Uma função de banco com trava de linha garante que dois pedidos simultâneos pelo mesmo número nunca sejam ambos aceitos.
Pagamento Pix (AbacatePay) QR Code e copia-e-cola gerados pela integração; confirmação automática por webhook, com verificação por polling como reforço.
Expiração automática (1h) Reserva sem pagamento libera o número sozinha — ninguém trava estoque indefinidamente.
Notificação por e-mail (opcional) Envia o Pix e a confirmação de pagamento por e-mail via Resend, sem exigir isso do participante.
Painel administrativo Confirmação manual, busca, filtros, exportação, log de auditoria completo de toda ação sensível.
Sorteio verificável Animação de sorteio entre os números pagos, com hash de integridade e seed registrados — qualquer pessoa pode conferir que o resultado não foi manipulado.
Painel de configuração Diagnostica quais chaves/segredos essenciais estão configurados no ambiente de produção, com instruções — pensado para quem faz fork do projeto conseguir colocá-lo no ar sozinho.
Marca personalizável Nome e logo trocáveis pelo admin, sem precisar mexer em código.

Tela Inicial

5. Qual a estratégia em utilizar o projeto

  1. Fork do repositório — o código é público e pensado para reuso, não só para a UPlinux.
  2. Provisionar a infraestrutura própria: criar um projeto no Supabase e rodar os scripts em docs/*.sql (schema, RLS, expiração automática, integração de pagamento).
  3. Configurar o pagamento: criar conta na AbacatePay, obter a chave de API.
  4. Publicar (Netlify, ou qualquer host compatível com Node/Nitro) e configurar as variáveis de ambiente — o painel /admin/configuracao, já no ar, confere o que falta e orienta onde obter cada valor.
  5. Personalizar a marca pelo próprio painel admin, sem precisar de deploy novo.
  6. Criar a rifa, divulgar o link público, e acompanhar reservas/pagamentos pelo painel — a confirmação de pagamento é automática na maior parte dos casos.
  7. Rodar o sorteio quando a rifa encerrar, com o resultado já verificável e pronto para exportar (PDF/JSON) e compartilhar.

A estratégia central é reduzir a fricção operacional de quem organiza (nada de planilha, nada de conferir comprovante um a um) e aumentar a confiança de quem participa (grade em tempo real, sorteio auditável).

6. Quais os resultados que o projeto pode trazer?

  • Zero venda duplicada — a trava atômica no banco torna esse erro estruturalmente impossível, não apenas improvável.
  • Confirmação de pagamento quase instantânea, contra o atraso de horas/dias de uma checagem manual.
  • Menos tempo administrativo por rifa: o organizador não precisa mais reconciliar planilha com extrato bancário.
  • Maior taxa de conclusão de compra, por oferecer Pix nativo em vez de redirecionar para fora do fluxo.
  • Confiança do participante, por ver o status em tempo real e poder auditar o sorteio.
  • Menor custo por venda, por não depender de uma plataforma que cobra taxa por transação.
  • Rastreabilidade completa para resolver qualquer disputa ("quem reservou o número X e quando"), via log de auditoria.
  • Portfólio técnico: o projeto demonstra, de ponta a ponta, controle de concorrência, integração de pagamento real, segurança de dados (RLS, segredos isolados do banco) e atenção a acessibilidade — não é um CRUD de vitrine.

Tela Inicial

7. Quais os próximos passos para melhorar o sistema?

  • Suporte a outros meios de pagamento além de Pix, para mercados fora do Brasil ou participantes sem conta bancária brasileira.
  • Notificação automática por WhatsApp, hoje só manual (link wa.me pré-preenchido).
  • Internacionalização do texto da interface, hoje fixo em português.
  • Os itens de acessibilidade/UX identificados na última auditoria (contraste, foco, prefers-reduced-motion) já foram todos corrigidos — o próximo ciclo de revisão de UI deve olhar para o fluxo administrativo (rifas, sorteio) com o mesmo rigor aplicado à grade pública.

8. Quais as tecnologias e conceitos aplicados

Frontend — React 19, TanStack Start/Router, TanStack Query, TypeScript, Tailwind CSS v4 (tokens semânticos), shadcn/ui sobre Radix, tema claro/escuro.

Backend — Postgres via Supabase (PostgREST, Realtime, Storage, Auth), pg_cron para tarefas agendadas, funções SECURITY DEFINER para lógica de negócio sensível.

Pagamento — AbacatePay (Pix QR Code, API Checkout Transparente v2), com reconciliação por webhook e por polling.

E-mail — Resend (API transacional), envio opcional e não-bloqueante.

Infraestrutura — Netlify (build Nitro/Vite), gerenciamento de dependências com Bun.

Conceitos de engenharia aplicados:

  • Controle de concorrência via trava de linha (SELECT ... FOR UPDATE) para reservas atômicas.
  • Row Level Security (RLS) como camada de autorização no próprio banco, independente do código da aplicação.
  • Separação estrita entre segredos de servidor e dados de cliente — nenhuma chave sensível chega ao bundle enviado ao navegador, reforçada por um scanner de segredos automático no build.
  • Idempotência em operações críticas (confirmação de pagamento pode ser chamada mais de uma vez sem duplicar efeito).
  • Degradação graciosa: funcionalidades opcionais (e-mail, teste de chave) nunca quebram o fluxo principal se falharem.
  • Verificabilidade criptográfica do sorteio (hash + seed).
  • Acessibilidade como requisito, não afterthought: contraste WCAG AA calculado (não estimado), suporte a prefers-reduced-motion, navegação por teclado.
  • Diagnóstico auto-guiado: o painel de configuração transforma "erro de variável de ambiente faltando" em orientação acionável, em vez de mensagem de erro genérica.

9. Qual a conclusão

O projeto resolve um problema concreto e validado — a rifa da UPlinux — com uma solução que vai além do suficiente para aquele caso específico: é auditável, segura por padrão, performática em tempo real e pensada desde o início para ser reaproveitada por qualquer pessoa que precise da mesma coisa. A escolha por código aberto e auto-hospedagem troca a comodidade de um SaaS fechado por custo menor, controle total dos dados e liberdade de personalização — um trade-off deliberado, não uma limitação.


Desenvolvido por Waldo Eller para a UPlinux — www.uplinux.com.br

Projetos relacionados

Outros trabalhos com tecnologias e arquiteturas semelhantes.

Ver todos os projetos
Freelance

Freelance

O Freelance nasceu para ser o "Painel Central" (Hub) definitivo do profissional moderno.

  • Business Intelligence
  • Gestão de Projetos
  • IA
  • SaaS
  • Supabase
Canal digital Delivery

Canal digital Delivery

Canal digital próprio para receber pedidos de delivery e retirada.

  • IA
  • SaaS
  • Supabase
Planejador de Viagem

Planejador de Viagem

A solução ataca a precificação incorreta e a gestão financeira ineficiente de excursões e viagens em grupo.

  • Cloud Computing
  • IA
  • SaaS

Gostou deste case study?

Vamos conversar sobre como aplicar soluções como esta na sua empresa.

Entrar em contato