Desenvolvi um sistema completo de rifas, focado em escalabilidade, desacoplamento e boa experiência do usuário, utilizando uma arquitetura moderna baseada em Clean Architecture e DDD.
No backend, utilizei Laravel como core da aplicação, aplicando o Repository Pattern para desacoplar regras de negócio da camada de persistência, garantindo maior manutenibilidade e facilidade de evolução do sistema. Além disso, foi desenvolvido um serviço em NestJS responsável pela integração com WhatsApp, onde implementei toda a lógica de:
Vinculação da conta do WhatsApp
Exposição e leitura de QR Code
Verificação de status da conexão
Envio automatizado de mensagens (notificações e confirmações)
No frontend, a solução foi dividida em duas aplicações:
Dashboard administrativo em React, voltado para a gestão de rifas, tickets, usuários e acompanhamento de vendas
Frontend público em Next.js, voltado para os clientes, contendo:
Página principal para visualização das rifas e compra de tickets
Área de consulta, onde o usuário pode verificar seus dados e tickets adquiridos
Ambas as aplicações frontend foram desenvolvidas seguindo arquitetura limpa, separação clara de responsabilidades e padrões de componentes, facilitando manutenção, reutilização e escalabilidade do código.
Para infraestrutura e entrega contínua, o projeto foi containerizado com Docker e implantado em um VPS utilizando Dokploy, permitindo um fluxo de CI/CD automatizado, com deploy seguro, versionamento e facilidade de rollback.
Esse projeto demonstra minha experiência no desenvolvimento de aplicações full stack escaláveis, integração de serviços externos (WhatsApp), arquitetura bem definida e boas práticas de engenharia de software.
Proceso y características

No frontpage (Next.js), desenvolvemos o fluxo principal da aplicação para o cliente: um formulário avançado multi-etapas para compra de tickets, validação de dados e envio de comprovante de pagamento. Esse fluxo foi pensado como o “core” do produto, com foco em clareza, segurança e uma experiência simples para o usuário.
O formulário foi construído com React Hook Form e Zod, utilizando schemas para validações consistentes por etapa (campos obrigatórios, formatos, regras e mensagens). A navegação é feita por um wizard (stepper), onde o usuário avança somente após a validação correta da etapa atual. ** Estrutura do fluxo (3 etapas)**
Seleção de compra (tickets / números) Seleção do preço (ex.: VES / USD) Definição da quantidade de números Cálculo automático do total a pagar Opção de atribuição automática de números Dados do comprador Nome e identificação Preferência de confirmação (WhatsApp ou Email) Campo de telefone com DDI (formatação e validação) Pagamento e comprovante
Seleção do método de pagamento (ex.: Pago Móvil)
Exibição de dados do recebedor com opção de copiar para a área de transferência Upload do comprovante de pagamento (PNG/JPG/PDF) Campo de referência (ex.: últimos 6 dígitos)
**Destaques técnicos **
Validação robusta com React Hook Form + Zod por etapa (schemas isolados) Componentização e organização seguindo arquitetura limpa / DDD Experiência orientada a conversão: stepper, resumo da compra e total sempre visível Fluxo preparado para manutenção e evolução, com regras desacopladas e fácil extensão

Após a finalização de uma compra, o sistema executa um processo em segundo plano responsável por gerar notificações automáticas no painel administrativo.
Foi desenvolvida uma seção dedicada de notificações, onde o administrador pode visualizar rapidamente:
Nome do comprador
Quantidade de tickets adquiridos
Valor total da compra
Status da notificação (lida / não lida)
Esse fluxo permite maior controle e rastreabilidade das compras, facilitando o acompanhamento das transações e o registro administrativo de todas as operações realizadas no sistema.
A partir de uma notificação, o administrador pode acessar o detalhe completo da compra, onde é possível validar, ajustar e aprovar a solicitação.
Nesse detalhe, o administrador pode:
Visualizar todas as informações da compra
Conferir o comprovante de pagamento enviado pelo cliente
Aprovar ou rejeitar a ordem de compra
Ajustar a quantidade de tickets, caso o valor pago esteja incorreto (pagamento a mais ou a menos)
Após a aprovação, o sistema realiza a atribuição automática dos números, garantindo previamente que os números não estejam associados a nenhum outro cliente, mantendo a integridade e consistência dos dados.
Após a aprovação ou rejeição da compra, o cliente é notificado automaticamente de acordo com o canal selecionado no momento da compra (WhatsApp ou Email).
Para o envio via WhatsApp, o sistema necessita que um número telefônico esteja conectado à plataforma. No painel administrativo, existe no header um indicador visual que informa o status da conexão (conectado ou desconectado).
Quando a conexão está desativada, o administrador pode vinculá-la facilmente por meio da leitura de um QR Code, conectando o número ao WhatsApp. Uma vez estabelecida a conexão, o sistema passa a enviar automaticamente as notificações relacionadas ao status da compra.
Esse fluxo permite uma comunicação direta, automatizada e controlada entre o sistema e o cliente.
Para validar o fluxo completo, foi realizada uma simulação de compra, permitindo visualizar o template de notificação recebido diretamente no telefone do cliente.
Após a ação no painel administrativo (aprovação ou rejeição), o backend dispara automaticamente a notificação, utilizando o sistema de mensageria via WhatsApp previamente conectado. O cliente recebe a mensagem com as informações da compra e seu respectivo status, confirmando o funcionamento correto do fluxo de comunicação.
Essa simulação garante:
Validação do template de mensagem
Confirmação do disparo automático pelo backend
Confiabilidade da integração com WhatsApp
O painel administrativo permite o registro massivo de números para completar os números restantes de uma rifa de forma controlada.
Esse processo é executado em segundo plano, evitando bloqueios no sistema, já que envolve a verificação dos números já atribuídos, garantindo que não ocorram duplicidades.
Os números gerados por esse fluxo não impactam o valor total arrecadado, pois representam uma ação administrativa interna e não uma compra realizada por um cliente.
Esse mecanismo garante:
Preenchimento eficiente e seguro das rifas
Execução assíncrona sem afetar a performance da aplicação
Integridade dos dados e separação clara entre ações administrativas e compras reais

O sistema conta com um filtro avançado para listagem e gerenciamento das compras de tickets, permitindo localizar registros de forma rápida e eficiente durante um evento.
Os registros incluem informações como:
Número da rifa
Nome do comprador
Quantidade e números de tickets
Referência de pagamento
Status da compra
Além da busca avançada, o painel oferece:
Ranking de compras, exibindo os clientes que adquiriram mais tickets
Lista de bloqueios, utilizada para identificar e gerenciar usuários bloqueados pelo sistema, geralmente por tentativas de fraude ou comportamento suspeito
Essas funcionalidades garantem maior controle operacional, segurança e agilidade na gestão das rifas.