Pular para o conteúdo principal

22 publicações com a etiqueta "infra"

Ver todas as etiquetas

Changelog - 09/05/2026

Geo-SEO multi-país da rede 7k (BR / CL / NG / FI)

  • Cluster recíproco de hreflang sem x-default: cada um dos quatro domínios da família 7k declara as outras três variantes como alternates explícitas — 7k.bet.br (pt-BR, self) + cl.bet7k.com (es-CL) + ng.7k.bet (en-NG) + fi.7k.bet (fi-FI). Os três overrides novos (overrides/{cl-bet7k-com,fi-7k-bet,ng-7k-bet}/app/config/seo/hreflang.ts) e a atualização do 7k-bet-br removem o x-default que apontava pro Brasil — cada brand é geo-exclusiva (KYC, regulação e moeda locais), então não existe "world fallback" legítimo. Resultado: o Google só serve a variante quando o idioma/região do usuário matcha um alternate explícito (ex: russo ou alemão não vê nenhum domínio, em vez de cair no 7k.bet.br).
  • Schema.org/Organization enriquecida com sinais de país: buildOrganizationJsonLd() (app/utils/seo.ts) agora aceita addressCountry (ISO-3166 alpha-2) + areaServedName (nome do país em inglês) e emite address.addressCountry + areaServed.@type=Country. O _layout.tsx resolve ambos via getCountryByAlpha3 de @cactus-agents/country-config — mesmo catálogo usado pelo api-client pra derivar geo headers, evita duplicar mapping alpha-3 → alpha-2 + nome do país.
  • Novo JSON-LD WebSite com inLanguage: segundo blob de Schema.org reforçando o idioma da página de forma independente do <html lang>. Google parseia inLanguage separadamente, então emitir os dois dá ao algoritmo dois sinais redundantes de locale.
  • Header HTTP Content-Language injetado em toda response HTML pelo app/entry.server.tsx (text/html only — JSON/JS unaffected). Sourced do define __BRAND_LANGUAGE__ do Vite e mapeado pra forma BCP 47. Adiciona uma terceira camada de sinal de locale (header HTTP + JSON-LD + <html lang>).
  • Helper compartilhado app/utils/locale.ts consolida os mapas BRAND_LANGUAGE → BCP 47 (pra <html lang>, Content-Language, inLanguage, hreflang) e BRAND_LANGUAGE → og:locale (pra OpenGraph). Antes os dois mapas ficavam inline em root.tsx e _layout.tsx — havia risco de drift entre <html lang="pt-BR"> e Content-Language: pt. Cobertura: oito códigos ativos (pt-br, pt, en, es, es-mx, es-cl, en-ng, fi-fi) com fallback pra pt-BR.
  • useCasinoNomenclature agora é guiado por i18n, não mais por regex country-aware. O hook colapsa qualquer string vinda do BFF (campo casinoNomenclature) num enum de 2 valores ("casino" | "games") e resolve o substantivo traduzido via t("layout:sidebar.casino") / t("layout:sidebar.nomenclature_games"). Adicionar país novo virou uma linha em cada layout.json do core — zero mudança no front. Dependência de useBrand().features.country?.code removida.
  • Doc operacional fora-do-código: o sinal mais forte de geo-targeting pra gccTLDs (.com, .bet) continua sendo o Google Search Console → International Targeting → Country, que é manual. Walkthrough escrito em docs/superpowers/specs/2026-05-09-google-search-console-geo-targeting.md pro time de SEO/marketing.

Changelog - 07/05/2026

Segurança — remoção total de debug do bundle de produção

  • Toggle ?EnableDebug=1 removido em prod. O parâmetro de URL e a chave sessionStorage["debug_enabled"] foram completamente eliminados — não existe mais runtime gate que possa ser ligado por query param, cookie ou storage. O motivador foi um leak no /api/games/start: o endpoint passava debug:true ao ApiClient e ecoava _debug.requestInfo na response, expondo o header cf-worker-key que o Worker usa pra autenticar com o BFF — qualquer um clicando em "Play" em qualquer brand de prod conseguia ler do DevTools. Endpoint corrigido com 6 testes de regressão que travam o contrato (debug:true proibido, _debug ausente em sucesso e erro).
  • Painéis DevApiDebug/DevApiExplorer agora gated por import.meta.env.DEV. Novo wrapper DevPanel com React.lazy condicional — em prod, o dynamic import('./DevApiDebug') vira inalcançável e o Vite remove o chunk inteiro do build. Consumers (home, favorites, game detail, wallet, history) trocaram <DevApiDebug> por <DevPanel> envolto em {import.meta.env.DEV && (...)}, garantindo que loader _debug data nunca serializa no SSR stream de prod.
  • Rotas /api/dev/*, /dev/ftd-cashback, /debug e /debug/analytics só existem em dev build. O registro em app/router/routes.ts é gated por process.env.NODE_ENV !== 'production' — em prod build esses arquivos são tree-shaken por completo (server e client). Eliminados também app/utils/debug.server.ts (com isDebugRequest/?EnableDebug) e a doc docs/enable-debug/overview.md.
  • CI guard pnpm bundle:guard falha se strings proibidas vazarem para o bundle de prod. Novo script scripts/check-prod-bundle.mjs faz grep no build/ após pnpm build e detecta DevApiDebug, DevApiExplorer, activateDebugFromUrl, isDebugActive, EnableDebug, debug_enabled, validation_debug, /api/dev/, /dev/ftd-cashback, debug/analytics e cf-worker-key (no client bundle apenas). Wired via pnpm build:check (= build + bundle:guard). Adicionar nova string secret-adjacent exige atualizar FORBIDDEN_STRINGS no script.
  • Bumps no core que sustentam a remoção: @cactus-agents/api-client 0.12.0 (redação regex-based de headers *-key/*-token/*-secret/cf-*/x-api-* no requestInfo em modo debug) e @cactus-agents/utils 1.0.0 major (remove os exports activateDebugFromUrl e isDebugActive — não existe mais API pública pra ligar o toggle em runtime). Defense-in-depth: console.* em ftd-cashback.client.ts, smartico-checkin.client.ts e useOnFirstScrollIntoView.ts agora também passam por import.meta.env.DEV, então mesmo se um caller acidentalmente passar debug:true em prod o output some no build.

Changelog - 02/05/2026

Dia pesado: 30 PRs no front-web-base + 4 PRs no front-cactus-core. Destaques: revamp completo da gamificação 7k (cards de missão/torneio + modal), portabilidade massiva da personalização da vera-bet-br (paridade visual com legado), fluxo FTD completo da Vera (oferta, cashback, autoDeposit, check-in), polimentos visuais da cassino-bet-br e correções de Proteção de Conta.

Gamificação — Revamp 7k

  • Cards de missão e torneio completamente revisados nas variantes classic e stacked para 7k-bet-br/fi-7k-bet/ng-7k-bet, com novos visuais, badges de status e progresso refinado.
  • Modal de detalhe da missão (MissionDetailModal) ganhou layout novo com seção de prêmios, regras de elegibilidade e CTA de inscrição/reivindicação.
  • Tela de torneio (tournaments.$id.tsx) reescrita: novo TournamentHero, RegistrationCTA com estados expandidos, TournamentStatsCarousel e tournament-internals consolidados.
  • LevelsSection ajustada e página vip/levels.tsx reorganizada para refletir a hierarquia de níveis VIP do 7k.
  • Smartico Initializer atualizado para integrar com o novo fluxo de claim e pending_claim exposto pelo SDK.
  • Configs de brand (gamification.ts, widgets/mission-card.ts, widgets/tournament-card.ts) propagadas nos três overrides 7k para refletir o novo visual.

Changelog - 29/04/2026

Dia pesado: 25 PRs no front-web-base cobrindo um empurrão grande de performance (CSS, ícones, modal), refatoração do header secundário com gating de rota, novas features de cassino e pagamentos, e ajustes finos de SEO/mobile/auth. Plus 4 mudanças de CI/CD em front-ops pra suportar o novo modelo de cache por device/country/buildId.

Performance — empurrão grande

  • Drop important: true do Tailwind (tailwind.config.js). Removido globalmente — precedência CSS volta ao normal (inline style vence class). Resultado: CSS −23,5KB raw (−14,4%). Componentes que usavam o pattern condicional bgStyle ? "" : "bg-..." (omitir classe quando havia inline style) foram simplificados — agora basta sempre emitir a classe que o style inline sobrescreve quando presente. Atualizados: GameCardStacked, GameStats, GameWinners, MainLeaguesSquare, SidebarButtonsGradient, SidebarButtonsGrid.
  • Migração react-modal-sheetvaul (app/components/base/Modal.tsx). Modal chunk caiu de ~158KB pra ~65KB raw — −93KB (−59%). Mesma API externa, drop-in pelos consumers. (PR #405 fez ajustes finos depois pra resolver bugs de input-focus em mobile e espaço fantasma no footer.)
  • Remoção do @tailwindcss/typography. Plugin não justificava o custo — uso restrito a 4 lugares (FaqSingleContent, WpPostContent, page.$slug, vip/levels) substituído por classes utilitárias inline. package.json enxuga uma dep + 22 linhas de pnpm-lock.yaml.
  • Ícones direct-imports + lazy MainLeagues (app/widgets/home-leagues/). Drop do registry intermediário — agora cada componente faz import Icon from "~icons/<set>/<name>" direto. MainLeaguesSquare virou lazy chunk separado. 25 arquivos tocados, −564 linhas vs +454. Atualiza configs de home-leagues em 7 brands (7k-bet-br, cassino-bet-br, fi-7k-bet, ng-7k-bet, pb-bet, vera-bet-br, state77-com, x2b-bet).
  • CI Lighthouse manual (.github/workflows/lighthouse.yml). Workflow caller dispatchável via workflow_dispatch pra rodar Lighthouse on-demand contra preview/prod sem precisar de schedule fixo. Útil pra validar PRs pesados de UI antes de mergear.

Changelog - 30/03/2026

Banners Recomendados

  • Implementada nova seção de Banners Recomendados na home — componente RecommendedBannersCarousel que exibe banners em carrossel com setas de navegação
  • Dados consumidos de brand.appearance.recommendedBanners (desktop e mobile separados)
  • Breakpoint de alternância mobile/desktop ajustado para lg (1024px)
  • Largura mobile alinhada ao tamanho dos cards de jogos (w-[115px] / sm:w-[140px])
  • Largura desktop dinâmica via calc para acompanhar o container central ao redimensionar
  • Título e ícone da seção configurável por brand via home-rows.legacy.ts
  • Override betpontobet: seção "Os melhores de 2026" adicionada à home
  • Override state77: seção "Los mejores juegos de Chile hoy" adicionada à home
  • Suporte a casino-rows e casino-live-rows para exibir banners nas páginas de cassino

Changelog - 28/03/2026

Cache de Plataforma

  • Criado novo pacote platform-cache no monorepo front-cactus-core, com engine de cache governada, policies de TTL/stale, e suporte a múltiplos stores (Cache API, KV snapshot, in-memory)
  • Publicada versão 0.2.0 do pacote @cactus-agents/platform-cache com changeset automático via CI
  • Integrado @cactus-agents/platform-cache no front-web-base: novo serviço platform-cache.server.ts substitui lógica de cache dispersa nos serviços de jogos e brand
  • Refatorado games.cache.server.ts adotando a engine centralizada
  • Atualizado brand.server.ts para usar a nova camada de cache governada
  • Rota de dev api/dev/cache-clear atualizada para compatibilidade com a nova engine

Changelog - 27/03/2026

Autenticação (Login / Registro / Recuperação de senha)

  • Campo de documento (CPF) adicionado ao modal de registro com estilização nova e auto-validação ao preencher
  • Overlay de confirmação de saída no modal de registro ("tem certeza que quer sair?") — cobre o painel completo incluindo header
  • Logo responsivo da marca exibido nos modais de login, registro e recuperação de senha
  • Banner visual nos modais de login e recuperação de senha (imagem lateral)
  • Animação fade-in/fade-out no backdrop dos modais
  • Feature skipDocumentMask na recuperação de senha (para marcas que não usam máscara de documento)
  • Integração do Turnstile (captcha Cloudflare) nos fluxos de autenticação (login, registro, recuperação)

Changelog - 25/03/2026

Autenticação / Login / Registro

  • Modal de recuperação de senha implementado e integrado ao fluxo de login ("Esqueceu a senha?")
  • Tela de confirmação de saída no modal de registro — previne fechamento acidental
  • Reset dos campos de login/senha/erro ao fechar o modal de login
  • Termos pré-marcados configuráveis e links legais clicáveis no formulário de registro
  • Opção para esconder botão de fechar no RegisterModal durante estado de confirmação
  • Melhoria na interação do overlay — cursor-default e pointer-events-none no backdrop

Changelog - 24/03/2026

Casino / Jogos PG

  • Investigação e correção do fluxo de inicialização dos jogos da PG Soft — jogos estão funcionando normalmente após ajuste
  • Integração do novo endpoint de grandes vitórias por jogo (top wins do datalake) na página de detalhe do jogo
  • Refatoração da seção "Grandes Ganhos" para consumir o novo endpoint do datalake, substituindo a implementação anterior
  • Novos dados de vitórias dos usuários integrados na página do jogo com o endpoint atualizado