Pular para o conteúdo principal

3 publicações com a etiqueta "sitemap"

Ver todas as etiquetas

Changelog - 24/05/2026

Semana 18–24/05 — Álbum v2 portado e endurecido

  • Substituição integral do módulo pela v2a079bcfab troca app/components/album/** pela versão v2 do drop-in: subdiretório share/ novo (15 arquivos) com pipeline de compartilhamento social por figurinha, URL canônica, card de OG safe pra Satori e helpers de UTM; três componentes novos (CheckinSuccessModal, MissionTypeChoiceModal, PackSummaryPhase); StickerCard e StickerRevealStack extraídos como reusáveis; check-in consolidado em CheckInState com dois tipos de claim (diário e de conclusão); e a novidade estrutural — trilhas duplas (casinoMissions / sportbookMissions mais missionType, um gate bloqueante de escolha no primeiro acesso). O hook público passa a ser useAlbumProgress; useProgressSync, CheckInTier e AlbumBootstrap.checkInDays saem do contrato.
  • Handshake de auth próprio, server-side7644499ec. O BFF do álbum exige fluxo de auth distinto do JWT do cookie HttpOnly do host: POST {STICKER_API_URL}/auth/token com { encryptedUserId, brandId, campaign } devolvendo { accessToken, tokenType, expiresAtUtc }, e Authorization: Bearer em todas as demais chamadas. A versão anterior passava o JWT do cookie direto, o que não funcionava contra o BFF real. loadAlbumBootstrap agora faz o handshake antes do Promise.all de endpoints e retorna null quando ele falha — feature degradada em silêncio em vez de rota quebrada. 459b1b0d5 adiciona cache de token cross-request e fd8690a9b projeta o apiCampaign no servidor antes de mandar pro client.
  • Auditoria de porte com 53 achados3a2a0eab6 compara a v2 portada contra o harness do sticker-book, o Swagger oficial do BFF e os contratos consumidos pelo módulo: 19 críticos, 31 médios, 3 baixos. Os commits seguintes endereçam os 19 críticos — entre eles ff17d4230 (sincronizar state.checkIn a partir de data.checkIn após refetch), d78a718a9 (blindar loadAlbumPageData contra throws inesperados), def9b3f41 (gatear o polling de 60s em document.visibilityState), 9066c2284 (alinhar os handlers de rota ao Swagger) e 819b5dd03 (adapters de mutação, retry de 401, tipos de API compartilhados).
  • Kill-switch por marca e gating de acesso93b3d1312 cria albumConfig.enabled fail-closed: o código fica disponível pra todas as marcas mas só executa pra quem declara enabled: true explicitamente, com guard no loader de /vip/album que redireciona pra home antes de qualquer chamada ao BFF. Só o 7k liga. 72bf89007 adiciona modo preview, splash, gating de feature flag, entrada de sidebar e endurecimento de cache; b7157c1e6 esconde a entrada pra usuário deslogado; a13218eae faz o deslogado fechar pelo X e pelo backdrop em vez de abrir login.
  • Missões vindas do Smartico e do BFF, mescladas por iddc868194f passa a carregar "Suas Missões" da seção ALBUM_FIGURINHAS do Smartico, 07672c7ae cai em todas as missões quando a seção não existe, 0d0fed93e mescla Smartico e BFF por id e 8dca06afd remove /users/me/missions (deprecado — o Smartico é autoritativo).
  • Renderização de flip-book e polimento visualb64d23165 (capa centralizada, tag de faixa de páginas, backgroundImageUrl), 7b84ca712 (continuidade do flip: fatia da lombada, imagem de curl, lombada antecipando o BACK), 746803a4c (tap-to-flip nas bordas), bac022447 (thresholds assimétricos de commit FORWARD/BACK), 253ed4f2e (watermark central nos cards travados), b0a8d3c51 / bc9f28802 (dimensões, centralização e escalas proporcionais no mobile). d392f4072 fecha a semana com a LP de compartilhamento, download de composição e preview anônimo. Testes em c26c5af85, ad332e995 e 9340a8888 cobrem handshake, orquestração, os seis endpoints /api/album/* e os gates de degradação do loader.
  • Chaves album.* de i18n foram adicionadas como overrides do host em vez de irem pro core (e251c0d09), e 8d78a79d7 troca nomes de placeholder por versões neutras na config base.

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 - 05/05/2026

Analytics — Mixpanel Deposit + AppsFlyer S2S

  • Novo evento Mixpanel Deposit Requested (useAnalytics.trackDepositRequested) disparado quando /wallet/add-credit retorna 200 OK. Espelha o legado DefaultLayout.vue das brands 7k/cassino/vera (props Amount em unidades inteiras + DepositMethod). Continua complementar ao evento de funil já existente (pix_generated no GTM e PixGenerated no Facebook).
  • Bugfix crítico nos eventos S2S do AppsFlyer (sendRegister, sendFTD, sendRebill). Os três estavam dentro do guard if (!shouldLoadTrackers) return do useAnalytics, mas o gate é o inverso do gate do AppsFlyer (shouldLoadTrackers = !isAppMode && !isBot, useAppsFlyer.ready = enabled && isAppMode) — resultado: nenhuma das chamadas server-to-server disparava nem na web (gate externo bloqueia) nem dentro do APK (early return do gate externo cortava o caminho). Agora as três chamadas são disparadas antes do guard e o S2S funciona em produção. Coberto por useAppsFlyer.test.ts (202 linhas) e useAppMode.test.ts (72 linhas).
  • useAppMode agora reconhece ?is_twa=true além de ?app=true. Os APKs em produção da família 7k/cassino/vera (publicados antes do rename do query param) continuam injetando o legado em cada landing — sem isso isAppMode ficava false pra users do app e desativava todo o pipeline de tracking S2S silenciosamente.
  • Valor do deposit GTM corrigido pra unidades inteiras (amountCents / 100) ao invés de cents puros — paridade com o legado e com a expectativa dos dashboards de BI.