Pular para o conteúdo principal
← Voltar ao changelog

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.

Cache, SSR e Worker — modelo per-device/country/buildId

PR #390 (umbrella performance → stage, 25 arquivos, +840/−172) reescreveu o middleware do Worker pra fazer cache mais inteligente:

  • workers/middleware.ts ganhou +306 linhas implementando cache de SSR particionado por (device, country, bot, brand, buildId). Antes a chave de cache era global por path — agora bot crawler vê uma versão, mobile-pt-BR-7k vê outra, desktop-es-state77 vê outra. Bot detection isolado em app/utils/bot.server.ts (+24 linhas) e device detection em app/utils/device-detect.ts.
  • Service Worker (public/sw.js) atualizado (+92 linhas) pra propagar a nova chave de cache no client e respeitar invalidações por buildId.
  • Nova rota /api/clear-cache (app/routes/api/clear-cache.ts) pra purge manual da edge cache de uma rota específica.
  • app/root.tsx ajustado com viewport correto pra acessibilidade + headers SSR alinhados ao novo modelo.

Layout — header secundário refatorado

  • Refresh do HeaderSecondaryNavButtons (PR #425) com ícones e items ricos por seção. Adicionado app/config/layout/header-secondary-nav.ts (config base) + app/utils/sports-icons.ts (registry de ícones por modalidade esportiva). useSidebarSections ajustado pra reutilizar a mesma estrutura. Tests do resolve reescritos pra cobrir os novos shapes. Brands com override próprio: state77-com, vera-bet-br.
  • Route gating do headerSecondary (PR #426). O slot agora só renderiza nas rotas home, casino e sports — antes aparecia em todas as páginas, poluindo views de gamification, user, payments, etc. Resolução em app/layouts/variants/header-secondary/resolve.ts (+6 linhas) com 31 linhas de testes novos.

UI e Componentes

  • Mouse drag em tempo real + setas no hover no BannerSlide multi-scroll (PR #407). app/components/ui/Carousel.tsx ganhou +184 linhas: drag responde durante o gesto (não só no release), setas aparecem em hover do desktop, e snap continua respeitado. Brand cl-bet7k-com já liga a feature.
  • Fix carousel group-hover collision (PR #410). O group do carousel disparava hover em cards filhos que também usavam group-hover — escopado pra named group (group/carousel), evitando que mover o mouse pelo carrossel ative o overlay de cards.
  • Card de favoritos / recentemente jogados com call-to-action quando vazio (PR #420). EmptyRowPlaceholder ganhou variant clicável; FavoritesRow e RecentlyPlayedRow agora mostram um placeholder que leva o usuário pra adicionar jogos. Config em app/config/widgets/favorites-row.ts.
  • Variants configuráveis pra TournamentCard e MissionCard (PR #406, +1059/−381). Cada card ganhou 2 variants (classic e stacked) seguindo o pattern de domain primitives (mesmo de GameCard/ProviderCard). Internals compartilhados em tournament-internals.tsx. Brand controla via app/config/widgets/tournament-card.ts + app/config/widgets/mission-card.ts. Brands 7k-bet-br e cassino-bet-br ganharam overrides próprios.
  • Setas de overflow no MethodSelector de depósito/saque (PR #414). Quando há mais métodos do que cabe na faixa visível, aparecem setas pra navegar lateralmente — substitui o scroll horizontal puro.
  • Título do torneio movido pra baixo do banner (PR #423) em vip/tournaments/$id — antes overlapava o banner em mobile.

Cassino / Jogos

  • Esconder search trigger do header em listings (PR #412). Em /games/category/:slug e /games/providers/:slug o ícone de search do header some, e em vez disso aparece um pill de search dentro da página (SearchPill.tsx). Mesmo comportamento em /sports/*. Centralizou a regra em app/utils/routes.ts (+24 linhas).
  • Roleta do Craque Neto (PR #411, brand 7k-bet-br). Sidebar buttons ganharam suporte mais robusto a custom items — variants Colored, Gradient e Grid agora aceitam shapes ricos com mais campos opcionais. Brand 7k-bet-br adicionou item custom apontando pra /lp/craque-neto-roulette e nova strategy.ts de 21 linhas.

Pagamentos

  • Pré-seleção de shortcut default no depósito (PR #415). Ao abrir o DepositModal, o shortcut marcado como default na config da brand já vem selecionado (e o input já vem preenchido com o valor). app/types/deposit.ts ganha o flag default?: boolean. Brand 7k-bet-br configurou em overrides/7k-bet-br/app/config/payments/deposit.ts.
  • Mensagem de cupom inválido limpa (PR #418). app/routes/api/payments/coupon.ts parou de propagar a mensagem raw do BFF (que vinha em inglês ou com detalhes técnicos) pro UI — agora cai num fallback i18n controlado pelo front.

SEO

  • Redirect 301 de URL com letra maiúscula → minúscula (PR #419). workers/middleware.ts (+8 linhas) detecta paths com upper-case (ex: /Casino/Slots) e responde 301 pra versão lowercase. Evita conteúdo duplicado pro Google e bate com canonical.
  • og:image agora usa o ícone PWA da brand como fallback (PR #422), em vez do logo do BFF (que era visualmente fraco em previews de WhatsApp/Twitter). Mudança de 1 linha em app/routes/_layout.tsx.
  • Footer: URLs do YouTube normalizadas pra www. (PR #417). Evita o 301 que o YouTube faz em links sem www, melhorando crawl e performance percebida no clique.

Auth e Recovery

  • Recovery options com botão de live support (PR #427, fix cant-recover-password). Quando o usuário não consegue receber o e-mail/SMS de recovery, o RecoverOptionsStep agora mostra um botão direto pro chat ao vivo — antes ficava num beco sem saída.

Mobile — fixes

  • Espaço fantasma no footer + revert temporário do vaul (PR #405). Modal.tsx ajustado pra não criar padding-bottom parasita no body em iOS quando aberto. app/entry.server.tsx e app/root.tsx (+76 linhas) com fixes de viewport. PR também isola bot detection em app/utils/bot.server.ts.

Brand Overrides

  • 7k-bet-br: nova landing /lp/download-app (PR #384). Página dedicada de download do APK Android com 3 backgrounds responsivos (bg-banner-desktop.png, bg-banner-mobile.png, bg-experience.png) e redirect configurado em routes/lp-redirects.ts + routes/lps.ts. 337 linhas no template da LP em routes/lps/download-app.tsx.
  • release-gobbo (PR #404, +6425/−58, brand mega-bundle): integra estratégia de autenticação configurável + enhances do campaign-widget em várias brands ao mesmo tempo.
    • 7k-bet-br: novo config/strategy/strategy.ts (402 linhas), novo config/ftd-checkin/ftd-checkin.ts (14 linhas), atualiza gamification.ts e campaign-widget.ts.
    • cassino-bet-br: novo config/strategy/strategy.ts (402 linhas), gamification.ts atualizado, campaign-widget.ts (+11 linhas), novo asset mini-games-gift-icon.png.
    • vera-bet-br: novo config/strategy/strategy.ts (218 linhas), novo ftd-checkin/ftd-checkin.ts (12 linhas), campaign-widget.ts (+8 linhas), troca asset (payday.png removido, mini-games-gift-icon.png adicionado).
    • fi-7k-bet, ng-7k-bet: ajustes pequenos em campaign-widget.ts.
    • Docs internos da feature: docs/features/ftd-checkin/overview.md (366 linhas) + docs/features/strategy/overview.md (797 linhas).
  • 7k-bet-br: deposit shortcut default marcado em overrides/7k-bet-br/app/config/payments/deposit.ts (PR #415, +22 linhas).
  • 7k-bet-br: sidebar-buttons custom item Craque Neto + nova strategy.ts (PR #411, +40 linhas combinadas).
  • state77-com, vera-bet-br: header-secondary-nav config própria (PR #425) — ambas brands declaram overrides/<brand>/app/config/layout/header-secondary-nav.ts.
  • 7k-bet-br, cassino-bet-br: tournament-card e mission-card variants declaradas (PR #406).
  • cl-bet7k-com: home-banner ativa o multi-scroll variant (PR #407).

Infra / CI (front-ops)

  • feat(deploy): send files to r2 — workflow de deploy ganhou step pra subir assets pro R2 da Cloudflare (+13 linhas em deploy.yml).
  • feat(repos): cl-bet7k-com environment — nova entrada em repos.yml pro deploy da brand cl.bet7k.com. Cache config legada em environments/stage-cl-bet7k-com/cache.yml removida (a config nova vai inline em repos.yml).
  • fix(deploy): resolve CF zone via explicit cf_zone field — o step de SSR cache purge usava origin_domain pra query GET /zones?name=, que é strict-match. Pra subdomain deploys (cl.bet7k.com, fi.7k.bet, pt.state77.com) o apex zone nunca resolvia e o purge era silenciosamente skipado. Agora cada environment declara cf_zone explícito (com fallback compound-TLD-aware: bet.br, com.br, co.uk, etc) e o workflow usa esse campo direto.
  • refactor(deploy): wrangler.toml patching com BUILD_ID + runtime vars — o patch agora injeta BUILD_ID derivado do deploy ref (garante cache key invalidada a cada deploy, alinhado com o novo modelo de cache por buildId do middleware) e consolida runtime vars num único bloco [vars]. Cache policy e KV binding são apendados condicionalmente conforme disponibilidade.