User Preferences
A seção "Preferências" da conta do usuário (/user/config) permite que cada jogador escolha como quer experimentar a plataforma. As preferências são persistidas pela API, lidas do userInfo em todo login subsequente e podem alterar o comportamento da interface.
A feature inteira é opt-in por brand: quando desligada, nada muda em relação ao comportamento histórico.
Preferências disponíveis
| Preferência | Valores | Efeito |
|---|---|---|
landingPage | home, casino, casino_live, sports, sports_live | Define para onde o usuário é levado após o login |
A lista é estendida ao longo do tempo (modo escuro, idioma preferido, etc.). Cada nova preferência segue o mesmo padrão.
Quando o redirect de landing page roda
O redirect para a preferência só dispara quando as duas condições são verdadeiras:
- A brand tem a feature ligada (
featuresConfig.userPreferences = true). - O usuário está logando a partir da home (
/).
Exemplos:
| Cenário | Comportamento |
|---|---|
| Brand com a flag, usuário na home, prefere "Cassino Ao Vivo" | Após login → /games/live |
| Brand com a flag, usuário na home, sem preferência salva | Após login → permanece em / |
Brand com a flag, usuário em /games/<provider>/<game> | Permanece no jogo (não redireciona) |
Brand com a flag, usuário em /promotions | Permanece em promotions |
| Brand sem a flag | Comportamento histórico — sem redirect implícito |
A regra "só redireciona da home" é proposital: um usuário que clica no botão de login estando numa página de jogo, sportsbook ou promoção provavelmente está ali por um motivo, e mover ele pra outra página seria ruim de UX.
Como ativar
A feature é controlada pela flag userPreferences em app/config/features/features.ts (e seus overrides por brand).
// overrides/<sua-brand>/app/config/features/features.ts
export const featuresConfig: AppFeatureFlags = {
// ... outras flags ...
userPreferences: true, // ← liga a feature
};
Quando ligada:
- Bloco "Preferências" aparece em
/user/config, antes de "Contratos". - O redirect pós-login passa a respeitar a preferência salva (com a regra da home).
Quando desligada (default): nada renderiza, nenhum redirect acontece.
:::warning Propagação obrigatória nos overrides
O sistema de override de brand substitui o arquivo features.config.ts inteiro (não faz deep-merge). Adicionar userPreferences apenas no default sem propagar para os overrides existentes faz com que essas brands recebam undefined no campo, o que pode causar comportamento inconsistente. Sempre copie o valor (true ou false) para cada override.
:::
Customização
Traduções
As labels e descrições da seção vivem no namespace user do @cactus-agents/i18n, sob preferences:
{
"preferences": {
"title": "Preferências",
"landing_page": {
"label": "Tela inicial após o login",
"casino": "Cassino",
"casino_live": "Cassino Ao Vivo",
"sports": "Esportes",
"sports_live": "Esportes Ao Vivo",
"home": "Início"
}
}
}
Para sobrescrever pontualmente em uma brand, use o sistema de overrides de i18n (app/locales/overrides/).
Visual
A seção usa o componente RadioField (app/components/ui/RadioField.tsx) — radio reutilizável tema-aware. Ele respeita os tokens do tema (primary, texts, bg-secondary) automaticamente, então segue a identidade visual da brand sem ajustes adicionais.
A grid das opções é grid-cols-2 md:grid-cols-3 (2 colunas no mobile, 3 colunas no desktop). Para alterar o layout (ex: lista vertical, slider, etc.), edite app/components/user/account/PreferencesSection.tsx no fork.
Limites
- A lista de valores aceitos por preferência é fixa no SDK (
@cactus-agents/accounts). Forks não podem expandir o whitelist sem republicar o core. Isso é proposital — o BFF aceita qualquer JSON empreferencies, então o front é o único guard contra dados inconsistentes ou maliciosos chegando ao banco. - Se você precisa de uma preferência específica da sua brand, abra um pedido para o time da plataforma.