Um minigame interativo e cooperativo em tempo real para duas pessoas, desenvolvido com React, Vite, Tailwind CSS e Supabase Realtime. Atualmente está para duas pessoas (Luca e Mimi)
Este projeto é uma experiência digital cooperativa onde dois jogadores devem se conectar em uma mesma sessão e resolver uma série de desafios assimétricos. A comunicação entre os clientes ocorre via WebSockets (Supabase Realtime), garantindo que as ações de um jogador reflitam imediatamente na tela do outro.
- React 18 (com Vite)
- TypeScript
- Tailwind CSS para estilização
- Framer Motion para animações
- Supabase Realtime para sincronização de estado e eventos via WebSockets
- React Router DOM para navegação
A arquitetura do projeto foca na separação entre os componentes visuais dos puzzles e a lógica de sincronização:
src/context/: Contém o Provider (RealtimeContext.tsx) que gerencia a conexão com o Supabase e o estado global da partida, propagando eventos para os dois clientes de forma síncrona.src/components/puzzles/: Contém os componentes de cada desafio. A lógica interna depende frequentemente da flagisHostpara renderizar a interface de quem "Cria a Sala" (Luca) ou de quem "Entra na Sala" (Mimi).src/lib/puzzleRandom.ts: Módulo focado na geração determinística (através de um seed único da sessão) de elementos aleatórios para os puzzles, garantindo que ambos os jogadores tenham as mesmas variáveis durante a partida, sem precisarem trafegar todos os dados pelo WebSocket.
- Clone o repositório.
- Instale as dependências:
npm install
- Configure as variáveis de ambiente baseadas no serviço do Supabase:
- Crie um arquivo
.envna raiz do projeto com as chaves:VITE_SUPABASE_URLVITE_SUPABASE_ANON_KEY
- Crie um arquivo
- Inicie o servidor de desenvolvimento:
npm run dev
Para fazer o deploy para o GitHub Pages:
- Certifique-se de que a configuração
basenovite.config.tsaponta para o nome do repositório (ex:/sync-ym/). - Execute o comando de deploy (configurado via pacote
gh-pages):npm run deploy