Pular para o conteúdo principal
← Voltar ao changelog

Changelog - 10/05/2026

Remarketing first-party (rmkvera)

  • Sistema de remarketing first-party com UUID v4 estável + audience tags do funil, brand-aware via feature flag (app/config/features/remarketing.ts). Vera ativa com cookie rmkvera (365 dias sliding TTL, Domain=.vera.bet.br, SameSite=None, Secure); demais brands fazem opt-in declarando seu próprio cookieName no override.
  • Cookie rmkvera_aud armazena tags do funil em JSON (90 dias sliding TTL, cap de 40 tags com eviction de oldest, set-once semantics) — pra ser usado como external_id em Meta CAPI, Google Enhanced Conversions e TikTok Events API. Funciona mesmo sem cookies de terceiros (iOS 14+, ITP, Brave).
  • Tags emitidas automaticamente em três eixos: path-based via useLocation brand-aware no Route Registry (viewed_casino, viewed_live_casino, viewed_game_detail, viewed_sports, viewed_promotions), modal-based via Zustand (clicked_register, registered, abandoned_register, viewed_deposit_modal, abandoned_deposit) e FTD-based em useAnalytics.trackDepositConfirmed (ftd_completed, multi_deposit).
  • Captura server-side no root loader (captureRemarketingIdFromRequest) — sobrevive a redirects via Set-Cookie na própria response do 302 (mesmo padrão do tracking de UTMs). Client-side RemarketingCapture faz refresh de TTL, publica em window.__rmk e dispara rmk_ready + rmk_audience_tag no dataLayer.
  • Regras duras: nome do cookie rejeita termos internos da plataforma (cactus, bluetec) em runtime, bot traffic é skipado no server, validador strict UUID v4 RFC 4122 contra cookies adulterados. 39 unit tests + 16 server-side tests cobrindo capture, Set-Cookie, regenerate em tamper, eviction.

Cache & Deploy

  • Purge proxy worker em paralelo com platform-cache (/api/cache/purge). O endpoint agora forwarda um purge per-brand pro front-service-api via service binding API_SERVICE, em paralelo com o purge local do platform-cache. Antes, o post-deploy purge limpava só os caches do brand worker e o proxy worker (KV API_CACHE_KV + CF Cache API) continuava servindo BFF stale por até 1h — root cause do widget "Pagou Muito" ficando vazio após deploy em vera e 7k. Os dois purges rodam via Promise.allSettled e o originDomain é inferido do hostname pra escopar a limpeza por brand.
  • front-ops deploy.yml propaga postDeployPurge segments pro /api/cache/purge. O step "Resolve segments" já computava a lista de recursos (topGames, homeRows, casinoRows, etc.) mas o curl ignorava o output e batia no endpoint nu, caindo em engine.purgeAll() que deixa snapshots de KV intactos. Agora os segments viajam como ?segments=<csv> e engine.purge(segment) roda por recurso — o caminho que deleta tanto o primary tier quanto o snapshot KV.

404 Redirects (CF Analytics)

  • /reward, /rewards, /game-error, /games/category/:slug/popular e prefixos /{locale}/* cobertos no legacy-redirects.ts a partir do relatório de 404 do Cloudflare. Smartico push e ad creatives usam a forma singular de reward; integrações de jogo (Endorphina e família) navegam o iframe pra /game-error quando o launch falha — agora a página existe fora do _layout (full-bleed bg-error, alert + reload em window.top, noindex,nofollow, listada em robots.txt). O catch-all /{locale}/* aceita /en, /es, /pt-br, /hi, /de, /fr, /it, /es-mx (legado Nuxt pré-listava todos esses buckets mesmo com no_prefix em produção).
  • /pagina/kyc-policy, /apostas-ao-vivo, /pending adicionados a partir do CF analytics da cassino-bet-br. /pagina/kyc-policy resolve pra legal.page com slug: "kyc" (a string kyc-policy é o apiSlug do BFF, não o slug da URL). /apostas-ao-vivo é alias PT-BR pro sports root brand-aware (/esportes, /deportes, /sports). /pending 301 pra /redirect (a Vue mountava verification iframe ali; o novo stack já trata verification em-app).
  • Fix de ordering no legacy-redirect.ts: o handler agora ordena legacyRedirects por contagem de segmentos literais descendente antes de iterar, espelhando a precedência que o React Router usa pra registro de rotas. Sem isso, a entrada genérica /pagina/:slug matchava antes da literal /pagina/kyc-policy e gerava /pagina/undefined. Comportamento idempotente pras entradas que não compartilham prefixo.
  • Tail-handling fix em legacy-redirect.ts: ${baseDest}/${tail} produzia barra dupla quando baseDest era exatamente / (destino home dos catch-alls de locale). Strip do trailing slash antes do append.

Landing Pages

  • /download-app portado do legado Vue pra cassino-bet-br (overrides/cassino-bet-br/.../lps/download-app.tsx). Espelha o LP do 7k-bet-br (banner + benefícios + instruções Android/iOS + FAQ accordion) com branding "Cassino.bet", filename cassinopixbetbr.apk, e Android download apontando pro Play Store (id=cassino.bet.br.twa, package confirmado pelo assetlinks.json da brand). Diferente do LP do 7k, todas as cores resolvem via theme tokens (bg-bg-primary, text-titles, border-texts/20, etc.) — o palette navy/cyan do theme/colors.ts é pego automaticamente. Wiring em lps.ts + lp-redirects.ts (visitantes em /download-app 301 pra /lp/download-app).

Brand Overrides

  • Vera (vera-bet-br): opt-in completo no remarketing first-party com cookie rmkvera (overrides/vera-bet-br/app/config/features/remarketing.ts); decoração V do legacy-grid (variant exclusivo da vera) agora visível sem hover — opacity default subiu de 0.07 pra 0.18 no rest state e o boost de hover foi pra 0.28 pra preservar feedback de focused-tile.
  • Cassino.bet (cassino-bet-br): ganhou o LP /download-app com assets brand-specific copiados byte-for-byte do legado (md5 verificado: bg-banner-mobile.png, bg-banner-desktop.png, bg-experience.png).

Documentação

  • Marketing Docs publicado — nova surface dedicada pra operadores de marketing/tráfego/CRM/BI, paralela à Internal Docs (dev) e Client Docs. Acessível pelo 4º card na home + navbar "Marketing Docs" + sidebar de 10 categorias. 30 arquivos cobrindo: intro + glossário operacional, atribuição (last-touch + 3 camadas, UTMs canonical/wildcard, 10 clicked-IDs com dual-format payload, affiliate nativo + Clever lastclick), storage (cookies completos da plataforma + headers X-ORIGIN-* e X-LOG-INFO), 13 plataformas (GTM, Facebook Pixel+CAPI roadmap, Google Ads, Kwai, Taboola, TikTok, Clarity, Webtrends com alerta de impacto LCP, Mixpanel, Hotjar, Pendo, AppsFlyer S2S TWA-only, Smartico), eventos GTM/GA4 mapeados por canal, remarketing first-party + audience tags, privacidade (LGPD + GCM v2 com diagrama Mermaid de mapping 4 categorias → 7 sinais), App Mode TWA, config map por brand (4 tabelas focadas com valores reais auditados em vera/7k/cassino/pb/betpontobet/state77), e 3 docs operacionais (testar-campanha passo-a-passo, debug com DevTools/wrangler tail, 30 anti-patterns numerados).
  • docs-internal/architecture/marketing-tracking.md (224 linhas desatualizadas — dizia "NÃO captura gclid/fbclid" e "TTL 30 dias" e mencionava ?EnableDebug=1 que foi removido) substituído por stub apontando pra Marketing Docs + reference de código pra dev.
  • CSS custom: tabelas com mais de ~5 colunas agora ganham scroll horizontal automático (display:block + overflow-x:auto) — evita overflow visual em config-map e equivalentes.
  • ci-deploy.yml (front-cactus-docs): run-name customizado em manual dispatches (<usuario>: Manual deploy → cactus), espelhando o mesmo ajuste já aplicado no front-web-base pra títulos consistentes na lista do GitHub Actions.