Aura Farm Royale Versão 67
Inspiration
Todo mundo fala que tem aura — mas é puro achismo: sem placar, sem juiz, sem rematch. Queríamos transformar isso em algo mensurável: um duelo onde a webcam e o servidor decidem quem realmente farma mais. O meme 67 virou ponto de partida; de lá nasceu um 1v1 com cinco challenges de brainrot, onde aura deixa de ser opinião e vira score.
What it does
Aura Farm Royale Versão 67 é um jogo 1v1 em tempo real pela webcam. Dois jogadores entram na mesma room, confirmam prontidão no lobby e disputam um match de 5 rounds — um meme por round:
| Challenge | O que fazer |
|---|---|
| 67 | Balançar as mãos em antifase |
| scooba | Mão perto do rosto + flick |
| dab | Entrar na pose do dab |
| mogar | Postura dominante (queixo alto, ombros para trás) |
| farmar-aura | Ficar parado — quanto menos se mexe, mais aura ganha |
O backend lê landmarks (MediaPipe) e conta a aura de forma autoritativa. Maior total aura vence. Sem conta: entra com nome opcional, room_id e joga.
How we built it
Stack
- Frontend: Next.js / React + bun
- Backend: FastAPI + Python 3.11
- Deploy: Railway
- Wire: WebSocket em
/ws/room(protocol 2)
Arquitetura
Player A (webcam) ── frame ~30/s ──► FastAPI (detectores) ◄── frame ~30/s ── Player B (webcam)
▲ │ ▲
└──────── score / aura_event ──────────┴──────── score / aura_event ─────────┘
- Frontend captura Hand Landmarker (67) e Pose Landmarker (demais challenges).
- Backend roda detectores por challenge →
aura_event(imediato) +score(~5×/s). - Aura = server-truth · Glow = local-truth (espetáculo no cliente).
- Core em reducer puro (sem clock, sem I/O) → scoring determinístico e testável.
- Match state machine: lobby → 5 rounds (relógio do servidor) → round_result → match_result.
- Reconexão via player_token preserva aura; match não pausa se um player cair.
- Leaderboard fail-soft em Postgres (opcional).
Processo
Contrato primeiro (CONTRACT.md) · TDD nos detectores · mock backend no front para iterar UI sem depender do servidor.
Challenges we ran into
- Pivot de produto — sair do contador single-player 67 para 1v1 exigiu protocol 2, nova máquina de estados e aura comparável entre players.
- Dois tipos de detector — motion (por rep) vs pose (por tempo segurado), com abstração única sem forçar “rep” onde não existe.
- Auto-calibração do 67 — swing grande de perto e pequeno de longe precisam contar igual, sem threshold manual.
- Latência vs espetáculo — pulse zero-latency no front só no 67; todo o resto segue eventos do servidor.
- Pose Landmarker — sensível a iluminação e jitter; calibração com pessoas reais ainda em andamento.
- Demo ao vivo — Wi‑Fi,
wss://, permissão de câmera e fallback se a rede falhar.
Accomplishments that we're proud of
- Produto 1v1 completo: room, lobby, match de 5 rounds, placar dual ao vivo, tela de vencedor.
- Cinco detectores reais (67 + scooba + dab + mogar + farmar-aura), não stubs.
- 80+ testes backend (pytest, ruff, mypy strict) + testes de copy, wire e detecção no front.
- Contrato locked (protocol 2) + ADRs (1v1 é o produto, aura server-truth, framework de detectores).
- Reducer determinístico — replay prova
s2 == s; um só lugar lê o relógio (rooms.py). - Rebrand + microcopy pt-BR com tom brainrot sem quebrar o glossário do domínio.
- Leaderboard com persistência opcional em Postgres, fail-soft.
What we learned
- Contrato antes de código evita retrabalho quando dois devs integram front e back em paralelo.
- Server-truth é o caminho certo para 1v1: cliente bonito, servidor árbitro.
- Separar score (aura) de espetáculo (glow) evita confusão de produto e de implementação.
- Pure core + adapter fino facilita testar gestos difíceis sem mockar WebSocket.
- Memes precisam de acceptance bar com gente real — geometria pura no teste não garante diversão ao vivo.
- Hackathon de 2 dias: integrar cedo (tracer bullet com dois browsers) vale mais que polish isolado.
What's next for AURA FARM ROYALE
Vamos melhorar os desafios, ter rankings, contas, etc
Tagline: Todo mundo fala que tem aura. A gente construiu o juiz: duelo 1v1 na webcam, 5 memes, placar no servidor. Quem farma mais, vence.
Built With
- next
- node.js
- postgresql
- python
- railway
- react
- typescript

Log in or sign up for Devpost to join the conversation.