Ficha Técnica
Papel
Criador e desenvolvedor
Stack
Todo fim de ano é a mesma cena: alguém precisa organizar o amigo secreto, e as opções são papelzinho dobrado ou um app que pede cadastro de todo mundo. Este projeto ataca o problema com uma pergunta de engenharia: dá pra fazer um amigo secreto digital sem servidor nenhum?
Dá. O truque: o resultado do sorteio de cada participante viaja dentro do próprio link.
Como funciona
- O organizador cadastra os nomes (mínimo 3).
- O sorteio roda no navegador do organizador: a lista é embaralhada e fechada em um único ciclo — cada pessoa tira a próxima, o último tira o primeiro. Ciclo fechado = ninguém tira a si mesmo, por construção.
- Para cada par, o app gera um link individual com o resultado codificado no path.
- O organizador manda cada link pra pessoa certa (WhatsApp, e-mail, pombo-correio).
- A pessoa abre o link e o próprio navegador decodifica: "Você tirou Fulano."
Nenhum servidor guardou nada. Não existe banco pra vazar, conta pra criar, backend pra pagar.
Arquitetura
Visão de componentes — repare no que não existe:
Fluxo do sorteio:
O trade-off honesto
O "hash" é Base64 — codificação, não criptografia. Quem decodificar o próprio link vê os dois nomes. A privacidade aqui é por conveniência: o objetivo do design era eliminar o backend, não resistir a criptoanálise do primo curioso. Para a ameaça real do domínio (spoiler acidental), basta — e o custo de infraestrutura é zero pra sempre.
É o tipo de decisão que eu gosto de discutir em projeto: segurança dimensionada ao problema. Um amigo secreto não é um cofre de senhas; tratar como se fosse custaria um backend, contas de usuário e manutenção eterna.
Detalhes que fazem diferença
- Ciclo único em vez de sorteio com rejeição: fechar todos numa roda garante matematicamente que ninguém tira a si mesmo — sem loop de "sorteia de novo".
- IndexedDB para o organizador: a lista de sorteios criados fica salva localmente para reabrir depois — e mesmo que o navegador seja limpo, os links já enviados continuam funcionando, porque são autocontidos.
- i18n pt-BR/en-US com detecção por
accept-language, e deploy contínuo no GitHub Pages via Actions.
Stack
Next.js + TypeScript · Tailwind CSS · IndexedDB · GitHub Actions → GitHub Pages (100% estático).
Status
Completo e no ar em secret-santa.racoelho.com.br — cumpre o ciclo inteiro: criar, sortear, compartilhar, revelar. Tem também um post no blog detalhando a ideia.
Curtiu o projeto?
Se quiser conversar sobre esse projeto, arquitetura ou uma oportunidade de trabalho, é só me chamar. 🚀
contato@racoelho.com.br