Pular para o conteúdo principal

4 publicações com a etiqueta "betpontobet"

Ver todas as etiquetas

Changelog - 12/07/2026

Semana de 06/07 a 12/07, na branch main-7k do front-web-base. É a semana em que o programa de performance/streaming da plataforma sai do papel: 93 commits filtrados, a maioria concentrada num único eixo.

Semana 06–12/07 — streaming SSR e clientLoader em toda a aplicação

  • App-shell streaming SSR, começando pela home (90d1dcfb4): o entry.server passa a transmitir o stream no shell-ready via TransformStream — head processado no primeiro flush (tailwind inline, strip de modulepreload com keep-list derivada do manifest, strip de preloads de imagem não-LCP) e body em passthrough com tail-carry. Antes o stream era bufferizado até o fim pra rodar regex no HTML completo, ou seja, o primeiro byte esperava todo o conteúdo. Junto vem o piloto de deferred data na home: catalog, gameStatsCache, topWins e lastWins saem do caminho crítico e streamam via Suspense/<Await> no documento SSR e via turbo-stream nas navegações .data, com SectionSkeleton no lugar. Continuam awaited homeRows, brand, auth e a page description (meta/SEO/LCP). Cada perna deferida ganhou .catch(() => vazio), então rejeição degrada pra row vazia em vez de 500 na home inteira. streamTimeout de 10s com abort combinado.
  • Estendido pra game page, hubs e navegação (85a108c2d): o loader da página de jogo cai de 3 gates sequenciais pra 2 awaits (game e brand, o mínimo pro meta/SEO), deferindo stats, winners, related, providers, voteState e as seções showcase. O getStatsRaw, um endpoint do BFF não cacheado que só alimentava o DevPanel, foi movido pro gate de dev — produção deixa de pagar por ele. Nos hubs de cassino e ao-vivo, gameStatsCache e os wins passam a deferidos no caminho de rows. E em _layout.shouldRevalidate, troca de pathname deixa de revalidar o layout, o que remove a chamada de auth por usuário — transatlântica — do caminho crítico de toda navegação SPA logada; login e logout seguem revalidando via revalidate() explícito. Skeletons CLS-zero novos: WinsCombinedSkeleton (o fallback anterior causava ~137px de shift no desktop), WinsMarqueeRowSkeleton, PaidTodaySkeleton, ListWinsSkeleton e GameRowSkeleton derivado do gameCardConfig, com widths corretos por breakpoint e por brand.
  • clientLoader deixa a navegação game → game instantânea (1812d8b07): a navegação SPA pra /cassino/jogar/:provider/:game esperava o .data inicial, que aguarda o getDetail (round-trip de 0,5-1,5s em cache miss), travando a troca de rota inteira. O clientLoader devolve o loaderData na hora — serverLoader() disparado sem await, cada campo encadeado como promise — então a URL troca instantaneamente e o conteúdo preenche por streaming. game, frontDescription, seo e faqEntry foram combinados num único boundary de AwaitValue cujo fallback reserva a geometria exata do conteúdo real, e slug/showcase ficam síncronos porque são deriváveis de params/featuresConfig sem round-trip. 5c24a1354 acrescenta o skeleton pixel-perfect e o seed otimista do card clicado.
  • Padrão propagado pro resto das rotasb3e8c151d (hubs cassino e ao-vivo), bb0b2c012 (categorias e provedores), f241a9145 (home, incluindo seed otimista a partir do homeRows já cacheado na store e o bundle de favoritos/recentes virando um único favoritesBundle streamado), 761088aa6 (VIP e gamificação) e e6fe562f1 (conteúdo WP, legal e busca, com legalTerms deferido). cc237adfc centraliza o preview de dev-skeleton num módulo único e removível; 49ef0d808 e d8401122b corrigem imports .server que vazaram pro caminho client.
  • Dois defeitos reais achados e corrigidos no próprio programa. 885f0e92c: o encoder de single-fetch do React Router corre toda promise deferida contra o streamTimeout, e perna pendente virava frame E:["Unexpected Server Error"] dentro de um body 200, por fora do .catch do loader; pior, errorElement={null} é falsy, então o <Await> re-lançava pro ErrorBoundary da rota em vez de suprimir (a tela renderizava e depois virava erro); e o worker cacheava o .data 200 com o frame de erro embutido por 60s, servindo o mesmo erro em HITs subsequentes. Fix: errorElement truthy (fragment vazio) em AwaitValue/AwaitWins e na home. afc20a73d, resultado de revisão adversarial: o buildSpaShell bufferizava o stream inteiro pro usuário logado (TTFB = render completo, ~11s no pior caso) e devolvia um shell morto; Set-Cookie de tracking bloqueava o cache compartilhado pra todo visitante anônimo frio; o cache autenticado não tinha guard contra payload envenenado ou documento truncado; e a home resuspendia pra skeleton genérico em todo login/logout. O buildSpaShell foi removido e o autenticado em rota pública passa a receber a mesma stream real do anônimo.
  • Navegação e stats estáveis na página de jogo (dfad863b1): getStats e getVoteCount ganham timeout fail-fast de 1200ms, com a promise original registrada no waitUntil — assim o warming completa em background mesmo em cold-miss, o que o timeout sozinho mataria. As duas ondas sequenciais de Promise.all do loader foram fundidas, removendo um round-trip serial.

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 - 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