Pular para o conteúdo principal

Status: Approved · v2 · SPEC-UX-PUBLIC-TEAM-001

depends_on: SPEC-DOMAIN-TEAM-001, SPEC-DOMAIN-RANKING-001, SPEC-DOMAIN-FEED-001

used_by: IS-MVP-01.1

Página pública do time

Página mais importante da primeira capability: deve comunicar identidade, atividade, confiança e caminhos claros para torcer, seguir, apoiar e explorar o time.

Objetivo​

Página mais importante da primeira capability: deve comunicar identidade, atividade, confiança e caminhos claros para torcer, seguir, apoiar e explorar o time.

Pontos de entrada​

  • Busca universal.
  • Feed e cards compartilháveis.
  • Link direto raizfc.com.br/teams/:slug.
  • Página de partida, ranking, torcida, campeonato ou território.
  • Deep link mobile.

Hierarquia da tela​

  1. Hero de identidade com banner/cores, escudo, nome, categoria/território e status.
  2. Ações primárias Torcer, Seguir, Apoiar e Compartilhar.
  3. Último resultado e próximo jogo em destaque equivalente, sem carrossel infantil.
  4. Resumo de ranking e estatísticas com período.
  5. Categorias e seletor de recorte.
  6. Elenco público por categoria.
  7. Torcidas aprovadas.
  8. Feed oficial do time.
  9. Apoiadores recentes e patrocinadores.
  10. Informações, contato, galeria e denúncia.

Componentes e comportamento​

Hero​

Usa identidade do time dentro de moldura RaizFC. Status inactive/abandoned/closed/under_review/suspended altera banner e ações. Escudo preserva suas cores; placeholder neutro quando ausente.

Action Cluster​

Torcer é apoio público e gera follow. Seguir recebe novidades. Apoiar abre valores. Compartilhar abre card/permalink. Estados autenticado/anônimo precisam ser explícitos.

Match Spotlight​

Dois cards ou layout responsivo para último resultado e próximo jogo. Exibe competição, categoria, data, campo e status de validação.

Ranking & Stats​

Posição, badge Provisório, jogos, vitórias, empates, derrotas, gols e forma recente. Sempre indica período e território.

Categories​

Tabs/chips filtram conteúdo sem criar páginas de times separados. Categoria “Todas” preserva visão agregada.

Squad​

Lista/grid profissional com foto/avatar, apelido, posição e status. Invited/rejected nunca públicos. Guest só quando permitido no contexto.

Torcidas​

Mostra várias torcidas approved, número público de membros e CTA de abrir/entrar.

Official Feed​

Posts oficiais e cards canônicos. Sem comentários/curtidas.

Supporters​

Até dez apoiadores identificados, sem valor. Apoios anônimos entram apenas em total agregado quando houver.

Sponsors​

Grade de até três ativos, sem ordenar por valor e sem aparência de aposta.

Entity Status Banner​

Explica abandoned, inactive, closed, suspended ou merged e oferece reivindicação/redirect quando aplicável.

Ações do usuário​

AçãoPré-condiçãoResultadoFalha/alternativa
TorcerAutenticado ou AuthIntentCheer + follow; botão vira “Torcendo”Conta suspensa/time indisponível
SeguirAutenticado ou AuthIntentFollow e atualização localJá seguindo é idempotente
ApoiarTime active; login só se identificadoAbre checkout de valoresWallet/entidade restrita ou pagamento indisponível
CompartilharConteúdo públicoAbre formatos/card e linkFallback texto+link
Abrir gestãoPermission management.viewPainel do time403 contextual
DenunciarAutenticadoFluxo de reportLogin contextual

Estados obrigatórios​

EstadoRepresentaçãoAção disponível
LoadingSkeleton que preserva hero, jogos e seçõesCancelar/voltar
SuccessDados completos e hierarquia estávelAções normais
PartialUma seção falha sem derrubar a páginaRecarregar seção
Empty sectionMensagem contextual: sem jogos/elenco/torcida/postsCTA somente quando permitido
Abandoned/inactive/closedBanner e CTAs reduzidosReivindicar/seguir histórico
SuspendedConteúdo limitado conforme políticaVoltar/ suporte
MergedRedirect para time canônicoAbrir destino
Not foundEstado dedicadoBuscar times

Autenticação e permissões​

  • Leitura pública.
  • Editar/gerir não aparece como ação principal para visitante; gestor recebe entrada discreta.
  • Dados financeiros, memberships e audit logs nunca entram.
  • Contatos obedecem visibilidade.

Responsividade​

  • Mobile empilha hero, ações em duas linhas e jogos; sticky action bar opcional para Torcer/Apoiar.
  • Desktop usa hero amplo com coluna lateral de ações/status e conteúdo em grid 8/4.
  • Elenco vira grid adaptativo; tabelas viram cards no mobile.
  • Patrocinadores nunca dominam a primeira dobra.

Acessibilidade​

  • Escudo tem alt com nome.
  • Status não depende só de cor.
  • Tabs de categorias têm semântica e teclado.
  • Placares lidos em ordem correta.
  • Botões Torcer/Seguir possuem estado pressionado.

Eventos de produto e observabilidade​

  • public_team_viewed
  • team_cheer_clicked
  • team_follow_clicked
  • support_started
  • share_started
  • category_changed
  • sponsor_opened
  • claim_started

Dados e endpoints​

  • GET /teams/:slug.
  • GET /teams/:id/stats.
  • GET /teams/:id/matches?kind=recent|upcoming.
  • GET /teams/:id/players.
  • GET /teams/:id/torcidas.
  • GET /entities/team/:id/sponsors.
  • GET /entities/team/:id/supporters.
  • GET /feed/posts?entityType=team&entityId=.

Critérios de aceite​

  • Parece produto esportivo profissional, não tela infantil.
  • Todas as seções discutidas estão previstas.
  • Leitura sem login.
  • Ações contextuais funcionam com AuthIntent.
  • Estados de entidade e falha estão completos.
  • Mobile e desktop têm composição definida.

Pós-MVP​

  • Loja.
  • Agenda de amistosos.
  • Personalização avançada de layout.
  • Métricas para gestores.

Decisões registradas​

  • Primeira capability vertical do produto.
  • Time é protagonista; RaizFC assina discretamente.
  • Categoria filtra o mesmo time.

Machine summary​

spec: SPEC-UX-PUBLIC-TEAM-001
screen_or_flow: Página pública do time
required_states:
- loading
- success
- empty
- error
must_use:
- contracts
- service
- hook
- design_tokens
must_not:
- direct_fetch
- direct_fixture_import
- hardcoded_brand_colors