players.public_card_token (UUID, único, nullable).GET /p/{token} (play-card.public, whereUuid) → PublicPlayCard (layout components.layouts.app): nome, apelido, nível, elo — sem email, sem Academy.PlayerPolicy::sharePlayCard + EnsurePlayerPublicCardShareUrlAction (cria token se faltar, devolve URL absoluta).MyCard: botão Compartilhar abre painel com URL, copiar (clipboard via Alpine), fechar.BelongsTo<User, $this> em Player::user().Fechar o fluxo «viral» do card com link opaco (não expõe user_id).
noindex em meta podem ser acrescentados depois.vendor/bin/sail artisan migratevendor/bin/sail artisan test tests/Feature/Player/PublicPlayCardRouteTest.php