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
- Header com foto/avatar, nome esportivo, posição, distrito e status público.
- Ações Compartilhar e, para gestor autorizado, Convidar.
- Stats principais com período.
- Times atuais e categorias.
- Histórico de times/ex-times conforme privacidade.
- Partidas recentes e campeonatos.
- Disponibilidade/agenda apenas opt-in.
- Bio e contatos públicos.
- Denúncia/revisão.
Componentes e comportamento
Header
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.
Team Links
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ção | Pré-condição | Resultado | Falha/alternativa |
|---|---|---|---|
| Compartilhar | Perfil público | Card/link | Bloqueado por privacidade |
| Convidar | Gestor autorizado | Cria convite pending | Já ativo/retired/private |
| Abrir time | Link público | Página do time | Merged/not found |
| Editar meu perfil | Próprio jogador | Painel | Sessão expirada |
Estados obrigatórios
| Estado | Representação | Ação disponível |
|---|---|---|
| Loading | Skeleton header/stats | — |
| Public complete | Conteúdo normal | — |
| Public partial | Seções permitidas apenas | — |
| Private | Mensagem de privacidade | Voltar/buscar |
| Incomplete owner | Checklist no painel, não no público | Completar |
| No stats | Estado inicial sem desvalorizar jogador | Ver times |
| Retired | Badge 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.