Pular para o conteúdo principal

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

depends_on: SPEC-DOMAIN-PLAYER-001

used_by: IS-MVP-01.2

Página pública do jogador

Vitrine esportiva baseada em participação validada e privacidade, sem estética de perfil infantil ou influencer genérico.

Objetivo

Vitrine esportiva baseada em participação validada e privacidade, sem estética de perfil infantil ou influencer genérico.

Pontos de entrada

  • Busca.
  • Elenco de time.
  • Súmula/partida.
  • Ranking de artilharia.
  • Card compartilhável.

Hierarquia da tela

  1. Header com foto/avatar, nome esportivo, posição, distrito e status público.
  2. Ações Compartilhar e, para gestor autorizado, Convidar.
  3. Stats principais com período.
  4. Times atuais e categorias.
  5. Histórico de times/ex-times conforme privacidade.
  6. Partidas recentes e campeonatos.
  7. Disponibilidade/agenda apenas opt-in.
  8. Bio e contatos públicos.
  9. Denúncia/revisão.

Componentes e comportamento

Evita excesso de badges. Perfil incompleto mostra aviso somente ao dono; público recebe apenas dados disponíveis.

Stats

Jogos, gols, assistências, amarelos e vermelhos; filtros por time, categoria, campeonato e período.

Diferencia atual e histórico; não exibe invited/rejected.

Availability

“Livre” e agenda são controlados pelo jogador. Nunca inferir disponibilidade.

Invite Action

Só para gestor com team.manageSquad, abre seleção do time/categorias e não expõe contatos privados.

Privacy Fallback

Se perfil privado, retorna estado intencional e não skeleton vazio.

Ações do usuário

AçãoPré-condiçãoResultadoFalha/alternativa
CompartilharPerfil públicoCard/linkBloqueado por privacidade
ConvidarGestor autorizadoCria convite pendingJá ativo/retired/private
Abrir timeLink públicoPágina do timeMerged/not found
Editar meu perfilPróprio jogadorPainelSessão expirada

Estados obrigatórios

EstadoRepresentaçãoAção disponível
LoadingSkeleton header/stats
Public completeConteúdo normal
Public partialSeções permitidas apenas
PrivateMensagem de privacidadeVoltar/buscar
Incomplete ownerChecklist no painel, não no públicoCompletar
No statsEstado inicial sem desvalorizar jogadorVer times
RetiredBadge textual e histórico

Autenticação e permissões

  • Público conforme toggles.
  • Somente próprio jogador edita.
  • Gestor vê apenas dados públicos ao convidar.
  • Cards seguem a mesma política.

Responsividade

  • Mobile prioriza header, stats e times.
  • Desktop usa coluna de identidade e conteúdo detalhado.
  • Stats cards têm densidade adulta, sem ícones decorativos excessivos.

Acessibilidade

  • Foto com alt.
  • Stats têm labels completas.
  • Filtros acessíveis.
  • Status livre/aposentado textual.

Eventos de produto e observabilidade

  • public_player_viewed
  • player_share_started
  • player_invite_started
  • player_stats_filter_changed

Dados e endpoints

  • GET /players/:slug.
  • GET /players/:id/stats.
  • GET /players/:id/history.
  • POST /teams/:id/player-invites.

Critérios de aceite

  • Privacidade aplicada.
  • Stats somente validated.
  • Convite contextual.
  • Sem dados privados.
  • Visual de vitrine esportiva profissional.

Pós-MVP

  • Vídeos, scouting, avaliações e portfolio premium.

Decisões registradas

  • Um perfil principal.
  • Status livre é opt-in.
  • Guest não confirmado não aparece como histórico.

Machine summary

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