Pular para o conteúdo principal

Routing

O template usa React Router v7 com SSR. A definicao de rotas usa a API @react-router/dev/routes.

Route Registry

O Route Registry e o sistema centralizado de rotas configuraveis por brand. Ele separa a definicao de URLs (paths) da arvore de rotas (route tree), permitindo que brands customizem todos os paths de pagina sem tocar em componentes ou no routes.config.ts.

Arquivos

ArquivoDescricao
app/types/routes.tsTipos: RoutePathMap, RouteParamsMap, StaticRouteKey, DynamicRouteKey
app/config/routes/paths.tsMapa padrao de paths (overridavel por brand)
app/utils/routes.tsHelpers: routeHref(), routePattern(), gameHref(), sportPath(), isRouteActive(), validateRoutePaths()
overrides/<brand-key>/app/config/routes/paths.tsOverride de paths por brand

Helpers — ~/utils/routes

FuncaoDescricaoExemplo
routePattern(key)Pattern para route config (sem / inicial)routePattern('casino.play')'games/:provider/:game'
routeHref(key)URL para rota estaticarouteHref('casino')'/games'
routeHref(key, params)URL para rota dinamicarouteHref('casino.play', { provider: 'pgsoft', game: 'tiger' })'/games/pgsoft/tiger'
gameHref(slug)URL de jogo a partir de slug provider/gamegameHref('pgsoft/fortune-tiger')'/games/pgsoft/fortune-tiger'
sportPath(subPath)Deep-link prefixado com base do sportssportPath('/live')'/sports/live'
isRouteActive(key, pathname)Verifica se pathname match uma rotaisRouteActive('casino', '/games/category/slots')true
validateRoutePaths(paths)Valida RoutePathMap (build-time)Usado no startup do server

Como app/router/routes.ts resolve o override

O app/router/routes.ts importa routePattern() de ~/utils/routes, que por sua vez importa routePaths de ~/config/routes.paths. O Vite plugin de overrides redireciona ~/config/routes.paths para o arquivo da brand (se existir) baseado em ORIGIN_DOMAIN.

ORIGIN_DOMAIN=state77.com
→ brand-key = state77-com
→ ~/config/routes.paths → overrides/state77-com/app/config/routes/paths.ts
→ routePattern('casino') → 'casino' (sem /)
→ routeHref('casino') → '/casino'

Regras

  • Nomes de parametros sao fixos: :slug, :provider, :game, :id, :type, :token — components usam useParams() com esses nomes exatos
  • Brands so customizam segmentos estaticos do path
  • Rotas de API nao entram no registro — sao endpoints internos do servidor
  • Override deve ser completo — TypeScript da erro se faltar alguma chave

routes.ts (entry point)

O arquivo app/routes.ts na raiz do app/ e o entry point do routing. Ele importa buildRoutes() do registro de rotas:

// app/routes.ts
import type { RouteConfig } from '@react-router/dev/routes';
import { buildRoutes } from './router/routes';

export default buildRoutes() satisfies RouteConfig;
cuidado

routes.ts usa import relativo ./router/routes — tilde alias (~/router/routes) nao funciona aqui por limitacao do React Router.

app/router/routes.ts (registro de rotas)

O arquivo app/router/routes.ts define toda a arvore de rotas. Usa routePattern() para obter os paths do Route Registry. Forks editam este arquivo diretamente para adicionar/remover paginas.

informação

Este arquivo foi movido de app/config/routes.config.ts para app/router/routes.ts na refatoração do sistema de layout (v0.7). O app/config/ agora contém apenas configuração brand-editável.

A arvore esta organizada em:

  1. Resource routes — fora do layout, sem DefaultLayout wrapper
  2. API routes — server-only actions, organizadas por dominio
  3. Page routes — dentro do layout(), renderizadas com DefaultLayout
  4. User area — nested layout com autenticacao obrigatoria

Resource Routes (fora do layout)

RotaArquivoDescricao
manifest.jsonroutes/manifest[.]json.tsPWA manifest
sitemap.xmlroutes/sitemap[.]xml.tsSitemap dinamico
robots.txtroutes/robots[.]txt.tsRobots.txt

Auth API Routes

RotaArquivoDescricao
api/auth/loginroutes/api.auth.login.tsLogin
api/auth/registerroutes/api.auth.register.tsRegistro
api/auth/social/:providerroutes/api.auth.social.$provider.tsInicia/fecha callback de auth social
api/auth/logoutroutes/api.auth.logout.tsLogout
api/auth/profileroutes/api.auth.profile.tsPerfil do usuario

Validation API Routes

RotaArquivoDescricao
api/validation/email/sendroutes/api.validation.email.send.tsEnvia codigo por email
api/validation/email/verifyroutes/api.validation.email.verify.tsVerifica codigo de email
api/validation/email/changeroutes/api.validation.email.change.tsAltera email
api/validation/sms/sendroutes/api.validation.sms.send.tsEnvia codigo por SMS
api/validation/sms/verifyroutes/api.validation.sms.verify.tsVerifica codigo de SMS
api/validation/sms/changeroutes/api.validation.sms.change.tsAltera telefone
api/validation/docs/submitroutes/api.validation.docs.submit.tsSubmete documentos
api/validation/address/submitroutes/api.validation.address.submit.tsSubmete endereco
api/validation/terms/acceptroutes/api.validation.terms.accept.tsAceita termos

User API Routes

RotaArquivoDescricao
api/user/update-addressroutes/api.user.update-address.tsAtualiza endereco
api/user/update-limitsroutes/api.user.update-limits.tsAtualiza limites
api/user/check-passwordroutes/api.user.check-password.tsVerifica senha atual
api/user/add-phoneroutes/api.user.add-phone.tsAdiciona telefone

Wallet API Routes

RotaArquivoDescricao
api/wallet/refreshroutes/api.wallet.refresh.tsAtualiza saldo
api/wallet/transactionsroutes/api.wallet.transactions.tsHistorico de transacoes
api/wallet/actionroutes/api.wallet.action.tsAcoes de bonus/cashback
api/wallet/receiptroutes/api.wallet.receipt.tsComprovante de saque

Payments API Routes

RotaArquivoDescricao
api/payments/providersroutes/api.payments.providers.tsLista providers de pagamento
api/payments/depositroutes/api.payments.deposit.tsDeposito
api/payments/deposit-statusroutes/api.payments.deposit-status.tsStatus do deposito
api/payments/withdrawroutes/api.payments.withdraw.tsSaque
api/payments/bank-listroutes/api.payments.bank-list.tsLista de bancos
api/payments/pix-keyroutes/api.payments.pix-key.tsChave PIX
api/payments/couponroutes/api.payments.coupon.tsValidacao de cupom

Games API Routes

RotaArquivoDescricao
api/games/searchroutes/api.games.search.tsBusca server-side contra cache
api/games/startroutes/api.games.start.tsStart-game (autenticado)
api/games/voteroutes/api.games.vote.tsLike/dislike (autenticado)
api/cache/games/purgeroutes/api.cache.games.purge.tsInvalidacao de cache via webhook

Sports API Routes

RotaArquivoDescricao
api/sports/searchroutes/api.sports.search.tsBusca no sportsbook
api/sports/launchroutes/api.sports.launch.tsLaunch autenticado
api/sports/anonymous-launchroutes/api.sports.anonymous-launch.tsLaunch anonimo
api/sports/betby-jwtroutes/api.sports.betby-jwt.tsJWT para Betby
api/sports/altenar-tokenroutes/api.sports.altenar-token.tsToken para Altenar

KYC API Routes

RotaArquivoDescricao
api/kyc/startroutes/api.kyc.start.tsInicia KYC
api/kyc/statusroutes/api.kyc.status.tsStatus do KYC

Search API

RotaArquivoDescricao
api/search/unifiedroutes/api.search.unified.tsBusca unificada (games + sports)

Dev Tools

RotaArquivoDescricao
api/dev/cache-clearroutes/api.dev.cache-clear.tsLimpa cache (dev only)

Rota Embeddable

RotaArquivoDescricao
_/footerroutes/_._footer.tsxFooter embeddable para iframe do First

Page Routes (dentro do layout)

Todas as rotas abaixo sao renderizadas dentro do layout("routes/_layout.tsx"), que carrega DefaultLayout com Header, Sidebar, Footer e providers.

:::info Route Registry Os paths mostrados abaixo sao os defaults. Brands podem customizar todos os paths via override em overrides/<brand-key>/app/config/routes/paths.ts. O routes.config.ts usa routePattern(key) para resolver o path correto. :::

Paginas Gerais

ChavePath padraoArquivoDescricao
home/routes/_index.tsxHomepage com carrosseis de jogos por categoria (SSR)
search/searchroutes/search.tsxPagina de busca
debug/debugroutes/debug.tsxPagina de debug (dev)

Games / Casino

ChavePath padraoArquivoDescricao
casino/gamesroutes/games/_index.tsxListagem geral de games
casino.live/games/liveroutes/games/live.tsxCasino ao vivo
casino.category/games/category/:slugroutes/games/category.$slug.tsxJogos de uma categoria (SSR + SEO)
casino.providers/games/providersroutes/games/providers._index.tsxListagem de providers (SSR)
casino.provider/games/providers/:slugroutes/games/providers.$slug.tsxJogos de um provider (SSR + SEO)
casino.play/games/:provider/:gameroutes/games/$provider.$game.tsxDetalhe do jogo com iframe, votos, stats (SSR + SEO + JSON-LD)

Sports

O sportsbook usa um nested layout (routes/sports/_layout.tsx) para manter o componente do sportsbook montado entre sub-rotas.

ChavePath padraoArquivoDescricao
sports/sportsroutes/sports/_index.tsxPagina principal do sportsbook
sports.catchAll/sports/*routes/sports/$.tsxCatch-all para rotas internas do sportsbook
sports.test/sports-testroutes/sports-test.tsxSportsbook de teste (opcional)

VIP / Gamificacao

ChavePath padraoArquivoDescricao
gamification/viproutes/vip/_index.tsxHub VIP (Smartico)
gamification.missions/vip/missionsroutes/vip/missions.tsxMissoes
gamification.tournaments/vip/tournamentsroutes/vip/tournaments.tsxTorneios
gamification.tournament/vip/tournaments/:idroutes/vip/tournaments.$id.tsxDetalhe de torneio
gamification.store/vip/storeroutes/vip/store.tsxLoja VIP
gamification.miniGames/vip/mini-gamesroutes/vip/mini-games.tsxMini-games
gamification.levels/vip/levelsroutes/vip/levels.tsxNiveis VIP
gamification.badges/vip/badgesroutes/vip/badges.tsxBadges
gamification.bonuses/vip/bonusesroutes/vip/bonuses.tsxBonus VIP
ChavePath padraoArquivoDescricao
legal.page/page/:slugroutes/page.$slug.tsxPaginas legais dinamicas (termos, privacidade, etc.)
helpCenter/ajudaroutes/ajuda.tsxCentral de ajuda

User (fora do user layout)

ChavePath padraoArquivoDescricao
user.notifications/user/notificationsroutes/user/notifications.tsxNotificacoes (full width)
user.validate/user/validate/:type/:tokenroutes/user/validate.$type.$token.tsxValidacao por link (email/sms)

User Area (auth-protected, navegacao em abas)

Estas rotas sao renderizadas dentro do nested layout routes/user/_layout.tsx, que implementa navegacao em abas e exige autenticacao.

:::info Novo modelo de abas A area do usuario foi refatorada para um modelo de abas. As rotas user.account, user.security, user.loginHistory, user.accountProtection e user.irpf foram removidas e substituidas pelas rotas abaixo. :::

ChavePath padraoArquivoDescricao
user.data/user/dataroutes/user/data.tsxDados pessoais e seguranca
user.wallet/user/walletroutes/user/wallet.tsxCarteira e metodos de pagamento
user.history/user/historyroutes/user/history.tsxHistorico de transacoes e logins
user.config/user/configroutes/user/config.tsxConfiguracoes e jogo responsavel
user.protection/user/protectionroutes/user/protection.tsxProtecao de conta e limites
user.refers/user/refersroutes/user/refers.tsxIndique e ganhe (referral)

_layout.tsx (loader)

O _layout.tsx e um layout route que:

  1. Carrega a configuracao de brand no server (loader)
  2. Monta clientEnv com variaveis necessarias no browser
  3. Carrega auth (user + userInfo) se existir sessao
  4. Renderiza o DefaultLayout (que usa layoutConfig do sistema de composição)
export async function loader({ context }: Route.LoaderArgs) {
const env = context.cloudflare?.env ?? process.env;
const brand = await loadBrandConfig(env);
const clientEnv = { API_BASE_URL: env.API_BASE_URL, ... };
return { brand, clientEnv };
}

Dicas

  • Edite app/router/routes.ts para adicionar/remover paginas — o app/routes.ts apenas importa buildRoutes() dali
  • Use routePattern(key) no app/router/routes.ts ao inves de strings hardcoded — assim os paths sao resolvidos pelo Route Registry
  • Use routeHref(key) ou gameHref(slug) para links em componentes — nunca paths hardcoded
  • Use layout() para nested layouts e index() para a pagina default de um grupo
  • Forks podem criar qualquer pagina nova em app/routes/ e registra-la em app/router/routes.ts
  • API routes sao server-only — nao geram bundle client-side e nao fazem parte do Route Registry
  • Resource routes (manifest.json, sitemap.xml, robots.txt) ficam fora do layout