DocumentationπŸ—οΈ Architecture

πŸ—οΈ Architecture

O Wave Γ© um monorepo Turborepo + pnpm com 5 apps e 4 packages compartilhados. Todos os serviΓ§os se comunicam via REST sobre o apps/api.

Apps

apps/api β€” Backend (port 7000)

Backend principal em Express + TypeScript + SQLite (sql.js). ResponsΓ‘vel por toda a lΓ³gica de negΓ³cio:

Grupo de rotasDescriΓ§Γ£o
/casino/*Rotas do jogador: auth, balance, deposit, withdraw, play, history, seed
/casino/admin/*AdministraΓ§Γ£o: games, agents, transactions, RTP, GGR, balances
/casino/legacy/*Proxy Pragmatic Play β€” modo Seamless
/casino/vgames/*12 jogos HTML5 (Construct 3 / Spine 2D)
/embed/*White-label iframe β€” CRUD de operadores externos
/public/*Endpoints pΓΊblicos: whitelabel config, recent bets, leaderboard

apps/platform β€” Player UI (port 4001)

Casino Poseidoon β€” interface do jogador em React + Vite.

Stack: @solana/web3.js, wallet adapter, Zustand, styled-components, Framer Motion, Three.js.

apps/admin β€” Backoffice (port 7003)

Dashboard do operador em React + Vite + Radix UI + Recharts.

Funcionalidades: gestΓ£o de jogos, agentes, jogadores, relatΓ³rios de GGR, RTP, finanΓ§as, KYC.

apps/embed β€” White-label iframe

SPA React para embedding em qualquer site externo via <iframe>. CORS aberto (any origin). Operadores provisionados via /embed/operators com admin key.

apps/website β€” Docs & Marketing (port 7003 dev)

Este site β€” Next.js 13 + Nextra, static export.


Diagrama de sistema

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚    apps/platform     β”‚  β”‚     apps/embed        β”‚
β”‚    (port 4001)       β”‚  β”‚    (iframe SPA)       β”‚
β”‚    Player casino UI  β”‚  β”‚    Operator embed     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           β”‚  REST + SIWS            β”‚  REST
           β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
      β”‚          apps/api  (port 7000)          β”‚
      β”‚  /casino/*        player routes         β”‚
      β”‚  /casino/admin/*  admin routes          β”‚
      β”‚  /casino/legacy/* Pragmatic Play proxy  β”‚
      β”‚  /casino/vgames/* HTML5 games           β”‚
      β”‚  /embed/*         operator CRUD         β”‚
      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                      β”‚
      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
      β”‚       apps/admin  (port 7003)           β”‚
      β”‚       Operator backoffice               β”‚
      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Packages

PackageFunΓ§Γ£o
@wave/coreTipos TypeScript, constantes Solana, utilitΓ‘rios de token
@wave/reactWaveProvider, hooks (useAccount, useWalletAddress)
@wave/uiComponentes de jogo, Canvas, hooks (useGame, useFees, useTokenBalance, useWagerInput)
@wave/design-systemTokens CSS (cores, tipografia, espaΓ§amento), temas dark/light

Modelo de receita β€” GGR Waterfall

Cada aposta gera uma divisΓ£o de receita configurΓ‘vel por operador:

Aposta do jogador
   └─ House Edge (%) β†’ capturado do resultado do jogo
         β”œβ”€ Wave Fee  (1%)  β†’ plataforma Wave
         β”œβ”€ Pool Fee  (%)   β†’ provedores de liquidez
         β”œβ”€ Jackpot   (%)   β†’ pool de jackpot compartilhado
         β”œβ”€ Bonus     (%)   β†’ pool de bΓ΄nus/afiliados
         └─ Casino Net      β†’ receita lΓ­quida do operador

Pricing: sem setup fee, sem taxa de licenΓ§a. VocΓͺ paga 1% por aposta processada.


Tech stack

CamadaTecnologia
RuntimeNode.js 18 + TypeScript
APIExpress.js + Zod (validaΓ§Γ£o)
Banco de dadosSQLite (sql.js in-memory/file) + MySQL legacy opcional
BlockchainSolana β€” @solana/web3.js, Anchor framework
FrontendReact 18 + Vite (platform/admin)
AuthSIWS β€” Sign-In-With-Solana (assinatura de wallet, sem senha)
StateZustand, @preact/signals-react
MonorepoTurborepo + pnpm workspaces
Jobsnode-cron para reconciliaΓ§Γ£o periΓ³dica

AutenticaΓ§Γ£o

O Wave usa Sign-In-With-Solana (SIWS): o cliente assina uma mensagem com a private key da wallet, o backend valida a assinatura e retorna um Bearer token com validade de 30 minutos. Sem senha, sem OAuth, sem chave de API por usuΓ‘rio.

Ver Authentication para detalhes.


CatΓ‘logo de jogos

TipoJogos
Wave Originals (provably-fair)Crash, Mines, Slots, Roulette, Flip, BlackJack, HiLo, Plinko, Wheel
Pragmatic PlaySeamless mode β€” acesso ao catΓ‘logo completo do provedor
PGSoftIntegraΓ§Γ£o via API do provedor
vGames (HTML5)12 jogos Construct 3: Fortune Tiger, Fortune Ox, Fortune Mouse, e outros