Status: Approved · v2.3 · SPEC-UX-ROUTES-001
depends_on: SPEC-UX-SHELL-001, SPEC-DOMAIN-AUTH-001
used_by: IS-ZERO-00.3, IS-MVP-02.3, IS-MVP-16.1, IS-MVP-19.29
Mapa de navegação e rotas
Shell principal
Tabs mobile e destinos equivalentes web: /, /search, /matches, /notifications, /profile. A Home preserva feed e card Minha Gestão; Notificações/Perfil exigem auth para conteúdo pessoal, mas apresentam entrada contextual ao visitante. /matches é a rota canônica única; routes.games permanece apenas como alias compatível.
Participação no shell v3
- Grupo tabs:
/,/search*,/matches(lista),/notifications*,/profile*usa shell completo. - Detalhes públicos T2–T9:
/teams/*,/players/*,/matches/:id,/championships/*,/torcidas/*,/fields/*,/services/*,/districts/*,/neighborhoods/*e/rankings*usam sidebar no web e bottom nav no mobile. - Auth:
/login,/register,/forgot-password,/reset-passworde/onboardingnão usam o shell global; preservam a composição T1. - Gestão e ações contextuais (
/management/*,/reports/*,/support-requests/*,/provider-invites,/event-links,/player-panel) não recebem bottom nav global no mobile. - A classificação é por builders/prefixos canônicos, distingue
/matchesde/matches/:ide tem fallback seguro; não depende de label, título ou substring arbitrária.
Páginas públicas
| Entidade | Rota web canônica | Deep link | Login |
|---|---|---|---|
| Team | /teams/:slug | mesmo path HTTPS | não |
| Player | /players/:slug | idem | não, conforme privacy |
| Match | /matches/:matchId | idem | não |
| Championship | /championships/:slug | idem | não |
| Torcida | /torcidas/:slug | idem | não, approved |
| Field | /fields/:slug | idem | não |
| Service | /services/:slug | idem | não |
| District | /districts/:slug | idem | não |
| Neighborhood | /neighborhoods/:slug | idem | não |
Auth
/login, /register, /onboarding, /forgot-password, /reset-password. Intent e returnUrl são parâmetros/estado validados, nunca URL externa arbitrária.
Gestão
/management lista entidades. Contexto: /management/:entityType/:entityId. Módulos: dashboard, identity, categories/squad/matches/posts quando team; editions/regulation/registrations/fixtures quando championship; members quando torcida; wallet/sponsors onde permitido; managers/audit/settings em todas gerenciáveis.
Gestão usa ID, não slug, e revalida membership. Ação “Gerenciar” em página pública leva ao contexto correto; sem permission mostra 403 contextual.
Pagamentos e compartilhamento
Checkout/support/sponsor routes carregam target público seguro e payment token quando necessário. Share preview recebe cardId/target, não dados privados em query.
Fallbacks
404 público, 403 management, suspended, merged redirect, onboarding required e intent expired possuem rotas/estados dedicados. Notification target não executa mutation automaticamente; abre tela de confirmação.
Critérios de aceite
Toda tela descrita possui rota; paths públicos são estáveis; route builders compartilhados não importam framework; deep links preservam contexto; returnUrl é allowlisted; web/mobile mantêm equivalência funcional.