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