umapalavraumamusica

Uma Palavra, Uma Música

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).

Tela inicial Partida online Música confirmada Pódio

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.

Tecnologia

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

Começando

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).

Estrutura

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

Scripts

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

Documentação