Skip to content

Orbit Site 🌐 ​

O site do Orbit hospeda a landing page institucional (React) e os jogos integrados ao aplicativo Flutter via WebView. Os jogos são feitos no Godot 4 e publicados aqui como exportação Web.

Deploy: Cloudflare Pages (automático em push para stable)


🚀 Stack Tecnológica ​

TecnologiaUso
React 19 + TypeScriptFramework da landing page
Godot 4 (GDScript)Engine dos jogos (exportados para Web)
ViteBuild tool e dev server
Tailwind CSS v4Estilização (CSS-first configuration)
Framer MotionAnimações
Cloudflare PagesDeploy e hospedagem

📂 Estrutura ​

site/
├── src/
│   ├── components/     # Componentes de UI reutilizáveis
│   ├── pages/          # Páginas da landing page
│   └── assets/         # Recursos visuais
│
├── games/              # Saída dos jogos Godot (um index.html + .js/.wasm/.pck por pasta, servidos via WebView no app)
│   ├── sudoku/         # Puzzle de números
│   ├── minesweeper/    # Campo Minado
│   ├── memory/         # Jogo da Memória
│   ├── tictactoe/      # Jogo da Velha
│   ├── space/          # Jogo espacial
│   ├── runner/         # Endless Runner
│   ├── combat/         # Combate entre personagens
│   └── master/         # Mini-game master
│
├── public/             # Arquivos estáticos (favicon, robots.txt)
├── package.json
├── vite.config.js
└── tailwind.config.js

🎮 Jogos (Godot → Web) ​

Os jogos não são escritos em Flutter nem em React. São projetos Godot 4 (pasta /games na raiz do monorepo), exportados para Web e rodando dentro do app via flutter_inappwebview. Isso permite:

  • ✅ Atualizar jogos em produção sem nova versão nas lojas
  • ✅ Corrigir bugs sem ciclo de revisão da Apple/Google
  • ✅ Engine de jogos de verdade (física, partículas, áudio)

Publicar um jogo ​

  1. No Godot: Projeto → Exportar → Web (Orbit WebView) → Exportar Projeto (saída: games/<Nome>/build/web/ — a pasta precisa existir, o Godot não a cria)
  2. Apague o conteúdo React antigo de site/games/<nome>/ (inclusive package.json — se sobrar, o CI tenta npm run build e o deploy quebra)
  3. Copie todos os arquivos de build/web/ (index.html, index.js, index.wasm, index.pck) para site/games/<nome>/
  4. Push na branch stable → o build:games copia a pasta crua para dist/games/<nome> e o Cloudflare Pages publica em redeorbit.com/games/<nome>

Atenção: Os jogos exigem suporte a SharedArrayBuffer para rodar na web. Por conta disso, a landing page serve os arquivos estáticos com os headers Cross-Origin-Opener-Policy e Cross-Origin-Embedder-Policy (COOP/COEP) habilitados no Cloudflare Pages através do arquivo site/public/_headers.

Comunicação Flutter ↔ Jogo ​

gdscript
# Jogo → Flutter (enviar pontuação p/ o ranking)
JavaScriptBridge.eval("window.flutter_inappwebview.callHandler('onScoreSubmit', %d)" % score)
javascript
// Flutter → Jogo (via URL params)
// https://redeorbit.com/games/sudoku?lang=pt&minimal=true

Internacionalização dos Jogos ​

O idioma chega via parâmetro de URL ?lang=pt|en|es — cada jogo Godot lê e aplica suas próprias traduções. (O engine.ts com traduções/áudio padronizados é legado da época React.)


🛠️ Desenvolvimento ​

bash
npm install

# Dev server da landing page
npm run dev        # → http://localhost:5173

# Build dos jogos
npm run build:games

🚀 Deploy ​

O deploy é contínuo via Cloudflare Pages. Cada push na branch stable dispara um build automático.


NOTE

Este projeto usa as novas funcionalidades do Tailwind v4 (configuração CSS-first). Evite usar a API JS do tailwind.config.js para configurações — prefira as variáveis CSS nativas do v4.