ANA Gaming Platform Docs
Documentação central da plataforma de iGaming mais robusta do Brasil. Casino + Sportsbook + CRM + 12 Backoffices, tudo serverless na Cloudflare.
igaming-docs.pages.dev estão ativos na conta Cactus V10.🧠 Project Context — Bíblia do Projeto
Este documento centraliza TUDO sobre o projeto. Atualizado a cada sessão para evitar perda de contexto.
🎯 Missão
Construir a melhor plataforma de iGaming do mundo — casino + sportsbook — serverless na Cloudflare, multi-tenant, com capacidade para 400M+ eventos/dia, CRM próprio, 12 backoffices, sistema de afiliados completo, app mobile Flutter, e infraestrutura 100% automatizada.
🏢 Contas e Domínios
- Cloudflare Account: Cactus V10 | Account ID: b4c299d68fe566dd2192234d220e474e
- Domínio do sistema: cactus-v10.com (todos os subdomínios de infra aqui)
- Primeira marca/bet: evian.bet (Status: pending — confirmar nameservers)
- Docs Hub: docs-new-stack.cactus-v10.com → igaming-docs.pages.dev
- Email operacional: nickolas.ribeiro@anagaming.com.br
🏗️ Stack Técnico Definido
- Edge compute: Cloudflare Workers (todos os serviços)
- Consistência forte: Durable Objects (Wallet, Session, Bonus, Tournament, Market, Chat)
- Banco por usuário: D1 SQLite (append-only ledger de transações por player)
- Analytics: Cloudflare Analytics Engine (400M+ rows/day, SQL queryable)
- Config/Cache: Cloudflare KV (zero-deploy config changes)
- Event bus: Cloudflare Queues (fan-out para CRM, fraud, pixel, bonus, BI)
- Object storage: R2 (bronze layer, KYC docs, CSVs, backups)
- Agregador casino: Cactus (jogos + pagamentos)
- KYC: Serpro + Sumsub + Unico
- Data bureau: Serasa + BigData Corp
- Frontend: React/Next.js + 3 temas (Betano, Stake, 1win) + SDK @anagaming/sdk
- Mobile: Flutter (iOS + Android) + PWA
- Push notifications: FCM (Android/PWA) + APNs (iOS)
- WebSocket: Durable Objects hibernation API (wallet, session, bonus, tournament, market)
🏪 Tenants Ativos / Previstos
- evian.bet — Primeira marca, em setup. Domínio: evian.bet
- bet7k — Segunda marca prevista
- cassinopix — Terceira marca prevista
⚙️ 12 Backoffices Planejados
- 1. operation.backoffice — Gestão operacional, configurações, aprovação de saques
- 2. crm.backoffice — CRM, segmentação, campanhas, comunicações (substitui Smartico)
- 3. betreport.backoffice — BI, relatórios, Analytics Engine dashboards
- 4. affiliate.backoffice — Afiliados, RevShare, CPA, subafiliados
- 5. risk.backoffice — Anti-fraude, AML, gestão de risco
- 6. content.backoffice — CMS, banners, promoções, SEO
- 7. payment.backoffice — Métodos de pagamento, providers, limites
- 8. kyc.backoffice — KYC, verificações, documentos
- 9. bonus.backoffice — Bônus engine, campanhas de bônus
- 10. vip.backoffice — VIP, loyalty, fidelização
- 11. tech.backoffice — Configurações técnicas, feature flags, monitoring
- 12. support.backoffice — Suporte, tickets, chat ao vivo
📋 Decisões Arquiteturais Chave
- Sem banco central de transações — cada player tem seu D1 SQLite (append-only ledger). Auto-create novo D1 quando próximo do limite.
- Durable Object por wallet — single-writer consistency, sem locks de banco, sem double-spend.
- Analytics Engine para eventos — 400M+ rows/day, não usar D1 para analytics.
- KV para toda config de negócio — zero deploys para mudar regras de negócio.
- Server-side pixel obrigatório — Conversion API Meta/Google/TikTok/Kwai/X para todos eventos P0-P2.
- trace_id em todas as camadas — correlação total de request → DO → D1 → Queue → Consumer.
- ms_elapsed pré-computado — evita JOINs custosos no Analytics Engine.
- 62 clusters de players — atualizados em real-time (DO), hourly (KV), daily (Analytics Engine), weekly (R2 CSV).
- WebSocket via DO hibernation — zero CPU idle, escala para milhões de conexões.
- 3 layouts de frontend — Betano (classic), Stake (dark crypto), 1win (vibrant). Troca por KV sem deploy.
🚨 Pendências Críticas
- 🔴 R2: Habilitar R2 em dash.cloudflare.com → R2 Object Storage
- 🔴 DNS: Adicionar registros CNAME para todos os subdomínios (ver aba DNS)
- 🔴 evian.bet: Confirmar nameservers no registrar — status "pending" na Cloudflare
- 🟡 API Token: Revogar token atual e criar tokens específicos por serviço
- 🟡 Workers: Fazer deploy dos Workers de API (scaffold gerado, pendente deploy)
- 🟡 D1 Schema: Executar migrações SQL no igaming-platform-main
- 🟡 KV Seed: Popular KV config com valores base por tenant (evian.bet)
- 🟢 Wrangler: wrangler.toml gerado com todos os bindings na aba Wrangler Config
☁️ Cloudflare Infrastructure
Todos os recursos criados na conta Cactus V10. Account ID: b4c299d68fe566dd2192234d220e474e
| Name | ID | Env | Purpose |
|---|---|---|---|
| igaming-config | 69ad61bcdf404536bee6236086fcb9fd | prod | Business config, feature flags, tenant settings |
| igaming-sessions | 7763551443c3453eaffaea0e91331f60 | prod | Player JWT sessions, rate limiting |
| igaming-cache | 777a7977ae9648bd81bb3be46d8012f0 | prod | Edge cache (game catalog, odds, CMS content) |
| igaming-rate-limiter | 8d8f13f5f0db418c84d7d54515d29924 | prod | Rate limiting counters per IP/player |
| igaming-push-tokens | db537da837fd4459bfd6e2622b13b1e9 | prod | FCM/APNs tokens per player (multi-device array) |
| igaming-player-clusters | 93eee5dd3b8c4440bb124ba5ff69c6b4 | prod | 62 cluster families per player (CRM segmentation) |
| igaming-i18n | c90a8b1c08c7450290a5e8846a2b44f5 | prod | i18n strings per tenant/language |
| igaming-game-catalog | 7fe720d47cea42e787adc783216698ba | prod | Game metadata from Cactus aggregator |
| igaming-crm-campaigns | 8e1032388c834a6e9f23c62aa6006dc7 | prod | 59 pre-built CRM campaigns config |
| igaming-feature-flags | 2a813dce33194105855b856d70e6d768 | prod | Feature flags per tenant |
| + 10 preview namespaces (suffix -preview) | |||
| Name | UUID | Purpose |
|---|---|---|
| igaming-platform-main | 17752182-7e11-41c8-9bdf-829cff32ce6f | Players, accounts, KYC, tenant config tables |
| igaming-player-ledger-template | ff57d8a4-0355-4baf-ad35-4f8dc9ad4c98 | Template for per-player D1 (cloned on register) |
| igaming-backoffice-audit | 5f9a0af4-390b-4650-a086-43455926102c | Audit log for all backoffice operator actions |
| igaming-affiliate-main | 744abee1-ad50-4545-b18c-7abfb6c082a9 | Affiliates, deals, conversions, commissions |
| Queue Name | Queue ID | Consumer |
|---|---|---|
| igaming-events-main | 68aca5b6436a49eda3e2efee2849d7f0 | Fan-out router → all downstream queues |
| igaming-events-crm | f52745dff1df4be8b249ade3c1b1cf80 | CRM engine → campaigns, segmentation |
| igaming-events-fraud | 23dda99da1cd433595b63c6538cb2e6e | Anti-fraud engine → alerts, account flags |
| igaming-events-pixel | 324ac9f4650a41179c5a88210c6c161f | Pixel Consumer → Meta/Google/TikTok/Kwai/X |
| igaming-events-bonus | f6ad22c37d744aa4a973b442e4d9b611 | Bonus Engine → auto-apply, wagering |
| igaming-events-bi | 19482400e64d455884d8253bfacf5308 | BI pipeline → Analytics Engine + R2 |
| igaming-events-errors | 9461b13cff3a409ba6ca0c9c5ccf7664 | Error logger → R2 audit + alerts |
| igaming-events-dead-letter | 2ce7bfa88a0e445fb8d3090d3a34ea7d | Dead letter → retry + manual review |
| igaming-notifications-push | 29c3d976af794991975daec5ed862f10 | Push Worker → FCM/APNs |
| igaming-notifications-email | 5d33f4223889458db4c7ed8c845e48d2 | Email Worker → SendGrid/Mailgun |
| igaming-notifications-sms | cb71f86814474d97886e12d237584cc3 | SMS Worker → Twilio/Infobip |
| igaming-notifications-whatsapp | 58c93d2180ff4bc1a7c4e0de5366e6c1 | WhatsApp Worker → Meta BSP API |
| igaming-withdrawals | d4fb483ced9c4749bc04e262aa88655b | Withdrawal processor → compliance + payment |
| igaming-kyc-jobs | 318ff665964042f397f40c5d7c0980ec | KYC Worker → Serpro/Sumsub/Unico |
| Bucket | Status | Purpose |
|---|---|---|
| igaming-bronze-events | Pending R2 Enable | Raw event JSON (Bronze data layer), 90-day retention |
| igaming-kyc-documents | Pending R2 Enable | KYC documents (AES-256 encrypted), LGPD compliant |
| igaming-audit-archive | Pending R2 Enable | Backoffice audit logs, immutable, 7-year retention |
| igaming-csv-exports | Pending R2 Enable | Daily player cluster CSVs, BI exports |
| igaming-media-assets | Pending R2 Enable | Game images, banners, CMS media (public CDN) |
| igaming-backups | Pending R2 Enable | D1 backups, KV snapshots, disaster recovery |
| Project | Domain | Purpose |
|---|---|---|
| igaming-docs | igaming-docs.pages.dev | This documentation portal (docs-new-stack.cactus-v10.com) |
🌐 DNS Records
Adicione manualmente estes registros no Cloudflare Dashboard → DNS para cada zona.
📌 cactus-v10.com (Zone ID: 40b0a2774b29f5567ab118921620a81f)
🎲 evian.bet (Zone ID: ca467ba3e8c79ea279dfc54e7040ddb2) ⚠️ Pending — confirm nameservers
📚 Architecture Documents
Todos os documentos da plataforma. Gerados automaticamente e sincronizados neste portal.
🗺️ Roadmap de Implementação
6 fases de implementação. Fase 1 em execução.
- ✅ Fase 0 — Planejamento (Concluído)Arquitetura completa definida, 4 documentos gerados, infra Cloudflare provisionada (KV, D1, Queues, Pages)
- ⚡ Fase 1 — Fundação (Em Execução)Multi-tenancy, Wallet DO, D1 per user, Event Bus Workers, Cactus casino integration, PIX deposit/withdrawal, Auth Worker, KV config seed para evian.bet
- Fase 2 — Monetização (3 meses)Bonus Engine completo, Cashback cron, VIP básico, KYC Nível 0 e 1, Operation Backoffice v1
- Fase 3 — Engajamento (2 meses)CRM.backoffice, Loyalty completo, Gamificação, Torneios, Communications Hub (email + SMS + WhatsApp)
- Fase 4 — Analytics (2 meses)Bronze/Silver/Gold layers, betreport.backoffice, CSVs diários, Analytics Engine dashboards
- Fase 5 — Expansão (2 meses)Multi-wallet crypto, KYC Nível 2 e 3, Mobile App Flutter, SEO avançado, MCP servers
- Fase 6 — Escala (Contínuo)Performance tuning, novos tenants, novos países, ML/AI anti-fraude
🔧 Wrangler Configuration
Configuração completa do wrangler.toml com todos os bindings. Salve em cada Worker repo.
# wrangler.toml — iGaming Platform API Worker name = "igaming-api" main = "src/index.ts" compatibility_date = "2025-01-01" account_id = "b4c299d68fe566dd2192234d220e474e" [vars] ENVIRONMENT = "production" TENANT_DEFAULT = "evian.bet" [[kv_namespaces]] binding = "CONFIG" id = "69ad61bcdf404536bee6236086fcb9fd" preview_id = "a7d8b7079ecc4c21978e5827d5b8bfaf" [[kv_namespaces]] binding = "SESSIONS" id = "7763551443c3453eaffaea0e91331f60" preview_id = "99eead41426b435b83e88a9ee6b1cbe1" [[kv_namespaces]] binding = "CACHE" id = "777a7977ae9648bd81bb3be46d8012f0" preview_id = "4195673486634c06b169e2cfe249b44e" [[kv_namespaces]] binding = "RATE_LIMITER" id = "8d8f13f5f0db418c84d7d54515d29924" preview_id = "b03cfda91a5f4641add7af32d5767990" [[kv_namespaces]] binding = "PUSH_TOKENS" id = "db537da837fd4459bfd6e2622b13b1e9" preview_id = "57cd931fdbc34b21be77ead996b66c74" [[kv_namespaces]] binding = "PLAYER_CLUSTERS" id = "93eee5dd3b8c4440bb124ba5ff69c6b4" preview_id = "832c464c0fca438eb1b2f5bdbebbf670" [[kv_namespaces]] binding = "I18N" id = "c90a8b1c08c7450290a5e8846a2b44f5" preview_id = "1df38e032e9e4e6497d7cf497bdb14a8" [[kv_namespaces]] binding = "GAME_CATALOG" id = "7fe720d47cea42e787adc783216698ba" preview_id = "7ee2933ea39f42198b1405c1d0577b54" [[kv_namespaces]] binding = "CRM_CAMPAIGNS" id = "8e1032388c834a6e9f23c62aa6006dc7" preview_id = "f206d8154b26486abb099ab14937c475" [[kv_namespaces]] binding = "FEATURE_FLAGS" id = "2a813dce33194105855b856d70e6d768" preview_id = "44305f983ee9473983f11e4690fbc1a4" [[d1_databases]] binding = "DB_MAIN" database_name = "igaming-platform-main" database_id = "17752182-7e11-41c8-9bdf-829cff32ce6f" [[d1_databases]] binding = "DB_AUDIT" database_name = "igaming-backoffice-audit" database_id = "5f9a0af4-390b-4650-a086-43455926102c" [[d1_databases]] binding = "DB_AFFILIATE" database_name = "igaming-affiliate-main" database_id = "744abee1-ad50-4545-b18c-7abfb6c082a9" [[queues.producers]] binding = "QUEUE_EVENTS" queue = "igaming-events-main" [[queues.producers]] binding = "QUEUE_PUSH" queue = "igaming-notifications-push" [[queues.producers]] binding = "QUEUE_EMAIL" queue = "igaming-notifications-email" [[queues.producers]] binding = "QUEUE_SMS" queue = "igaming-notifications-sms" [[queues.producers]] binding = "QUEUE_WHATSAPP" queue = "igaming-notifications-whatsapp" [[queues.producers]] binding = "QUEUE_WITHDRAWALS" queue = "igaming-withdrawals" [[queues.producers]] binding = "QUEUE_KYC" queue = "igaming-kyc-jobs" [[queues.consumers]] queue = "igaming-events-main" max_batch_size = 100 max_batch_timeout = 1 max_retries = 3 dead_letter_queue = "igaming-events-dead-letter" [[durable_objects.bindings]] name = "WALLET_DO" class_name = "WalletDO" [[durable_objects.bindings]] name = "SESSION_DO" class_name = "SessionDO" [[durable_objects.bindings]] name = "BONUS_DO" class_name = "BonusDO" [[durable_objects.bindings]] name = "TOURNAMENT_DO" class_name = "TournamentDO" [[durable_objects.bindings]] name = "MARKET_DO" class_name = "MarketDO" [[durable_objects.bindings]] name = "CHAT_DO" class_name = "ChatDO" [[migrations]] tag = "v1" new_classes = ["WalletDO", "SessionDO", "BonusDO", "TournamentDO", "MarketDO", "ChatDO"] [observability] enabled = true head_sampling_rate = 1
🔒 Security
Recommended Token Structure (one per service)
- igaming-workers-deploy — Workers:Edit + Workers KV Storage:Edit + D1:Edit + Queues:Edit (for CI/CD)
- igaming-dns-edit — Zone:DNS:Edit for cactus-v10.com + evian.bet (for DNS automation)
- igaming-pages-deploy — Pages:Edit (for Pages deployments)
- igaming-readonly — All:Read (for monitoring dashboards)
Platform Security Architecture
- JWT access tokens: 15min expiry; refresh tokens: 30 days (HttpOnly cookie)
- All KYC documents: AES-256 encrypted in R2, LGPD compliant
- Player IP hashed SHA-256 before storage (LGPD)
- Rate limiting: per-IP + per-player_id + per-tenant via KV
- CORS: configured per tenant domain in KV (no hardcoded origins)
- CSP headers: enforced at Worker edge
- All admin endpoints require operator JWT + RBAC scope check
- MCP servers inherit operator's RBAC scopes
💾 Backup & Disaster Recovery
Backup Strategy
- D1 databases: Workers Cron exports daily SQLite snapshots to R2 igaming-backups/d1/{date}/
- KV namespaces: Critical KV keys (config, campaigns) snapshotted daily to R2
- Analytics Engine: Data is retained per Cloudflare's retention policy; raw events backed up to R2 bronze layer in real-time
- R2 buckets: Cloudflare R2 has built-in 11-nines durability; cross-region replication configurable
- Durable Objects: Built-in durability via Cloudflare's distributed storage (no action needed)
Disaster Recovery
- RTO (Recovery Time Objective): <5 minutes — Workers are globally distributed, instant failover
- RPO (Recovery Point Objective): <1 minute — R2 bronze events are near-real-time; D1 backup daily
- Zero-downtime deploys: Workers support gradual rollout (10% → 50% → 100%) via Cloudflare dashboard
- Rollback: Previous Worker version re-deployable in <30 seconds via wrangler rollback
- Multi-region: Cloudflare's global network provides automatic geo-distribution with no configuration
⚙️ 12 Backoffices
Ver documento: backoffices-architecture.docx — 14 capítulos, 44KB.
⚡ Events, Clusters & Categories
Ver documento: events-clusters-categories.docx — 197 eventos, 62 clusters, 14 capítulos, 53KB.
📣 CRM Campaigns & Push
Ver documento: crm-campaigns-pushnotifications.docx — 59 campanhas, 33 eventos sazonais, 14 capítulos, 45KB.
🔌 API Reference
Ver seção 27 do Main Architecture doc — Frontend API Headless com 15 módulos REST + GraphQL + SDK.
👷 Workers & Durable Objects
Worker scaffolds sendo gerados. Ver wrangler.toml para bindings completos.