Projeto

Amigo Secreto serverless — o sorteio que viaja no link

Gerador de amigo secreto sem backend e sem banco: o sorteio roda no navegador do organizador e o par de cada participante viaja codificado dentro do próprio link. Custo de infraestrutura: zero.

Criador e desenvolvedor

Ficha Técnica

Papel

Criador e desenvolvedor

Stack

nextjstypescriptserverlessindexeddbgithub pages

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

  1. O organizador cadastra os nomes (mínimo 3).
  2. 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.
  3. Para cada par, o app gera um link individual com o resultado codificado no path.
  4. O organizador manda cada link pra pessoa certa (WhatsApp, e-mail, pombo-correio).
  5. 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
Racoelho

Conteúdo sobre desenvolvimento, tecnologia e desafios de programação para impulsionar sua carreira em tech.

Conecte-se

© 2024- 2026 Racoelho. Todos os direitos reservados.

v3.0.19 • Build: 2026-04-17