Jogo musical para celular: todos recebem uma palavra e precisam lembrar de uma música que tenha essa palavra. Dá para jogar online (cada pessoa no seu aparelho, até 10 por sala) ou local (todos em volta do mesmo aparelho).
O app é independente de Base44/Lovable e não depende de créditos de IA: a IA é uma segunda camada opcional para casos ambíguos.
Jogar agora, sem instalar nada: a versão web também roda como artefato no Claude. Lá o modo online funciona sem servidor próprio: a sala fica no banco compartilhado do artefato e cada palpite é verificado pelo Claude, na conta de quem palpitou. Os amigos abrem o mesmo link (com acesso de edição) e entram com o código da sala. Detalhes em docs/ARQUITETURA.md.
| Parte | Tecnologia |
|---|---|
| App (iOS, Android e web) | React Native + Expo SDK 57, Expo Router, Reanimated, TypeScript |
| Backend | Supabase: Postgres (regras do jogo em funções RPC), Realtime, Auth anônimo, Edge Functions |
| Música | MusicSearchService com provedor Musixmatch (substituível) e IA opcional (Claude) |
| Testes | Vitest (lógica e busca musical), Node test + Postgres (regras online), deno check |
npm install
npx expo start # abra no Expo Go (celular), no simulador ou pressione "w" para web
O modo local funciona imediatamente. Para o modo online, crie um projeto Supabase e siga
docs/CONFIGURACAO.md (migrações, função submit-guess, chave do Musixmatch e o
arquivo .env do app).
src/
app/ rotas (Expo Router) — arquivos finos que apontam para screens/
screens/ telas: início, modo local, modo online (lobby, partida, pódio)
components/ botões, cartões, cabeçalho, contador, jogador, palavra, placar, pódio, modais…
animations/ presets de animação, toque com escala, pulso
hooks/ useOnlineRoom (sincronização), useLocalGame, useCountdown, useToast
services/ API online (online/: Supabase ou Claude), armazenamento, haptics, diálogos
game/local/ máquina de estados do modo local (reducer puro + testes)
game/online/ regras online em TypeScript (mesma lógica do SQL, usadas dentro do Claude)
data/ banco de palavras (words.pt-BR.json)
theme/ cores, tipografia e espaçamentos
types/ utils/
supabase/
migrations/ tabelas, RLS e as regras do jogo (funções RPC)
functions/ Edge Function submit-guess + MusicSearchService (_shared/music)
tests/ testes de integração das regras online (Postgres)
docs/ arquitetura, configuração/publicação e testes
| Comando | O que faz |
|---|---|
npm start |
Servidor de desenvolvimento do Expo |
npm test |
Testes de lógica: modo local, ranking, normalização, busca musical |
npm run test:db |
Regras do modo online num Postgres real (ver docs/TESTES.md) |
npm run check:functions |
Checagem de tipos da Edge Function (Deno) |
npm run typecheck / npm run lint |
TypeScript e ESLint |
npm run words:sql |
Gera o SQL do banco de palavras a partir do JSON |
npm run icons |
Gera os ícones PNG a partir do desenho vetorial |