feat(home): deixa o login explicitamente opcional na home (#17) - #85
Conversation
O hero promete "Sem cadastro, sem firula" e o header trazia "entrar com Google"
sem nenhuma pista de que era opcional. A persona Iniciante (D#14) travou nessa
contradição: "fiquei na dúvida se eu precisava logar pra jogar". Não precisa —
entrar só pré-preenche o nick (`HomeView:76` + `useAuth:21,30`).
- Header: `title` + `aria-label` explicitando "opcional — dá para jogar sem
conta", mais um rótulo visível "opcional" ao lado do botão. O rótulo usa o
`hidden sm:inline` já convencional no header, então o mobile não ganha nenhum
elemento novo (zero risco de regressão de layout) e é `aria-hidden` para não
duplicar o que o `aria-label` do botão já anuncia.
- Card do nick: uma linha de microcopy ("é só o nick — sem conta, sem e-mail")
logo abaixo do input. Cobre justamente o mobile, onde o rótulo do header fica
escondido, e fica no ponto em que o jogador de fato age.
Botão do Google intacto e funcional; nenhuma animação nova (reduced-motion
inalterado); nenhum fluxo de auth tocado — puro esclarecimento de copy/UI.
Closes #17
|
Caution The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased. |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Parecer do PR Doctor — APROVADO (§7.3 normal)Diff lido inteiro (26+/6−, 1 arquivo). Classificação: normal — copy/markup only em Conferi ponto a ponto:
Sobre a "verificação visual" no corpo: o PR corrigiu a própria promessa em vez de entregar screenshot que não tirou (preview atrás do deployment protection da Vercel) e provou o que dava para provar no output real do build — microcopy presente no HTML pré-renderizado; rótulo/ CI verde (typecheck+test+build), |
Contexto
#17: o hero promete "Sem cadastro, sem firula" e o header exibia "entrar com Google" sem nenhuma pista de que era opcional. A persona O Iniciante (D#14) travou exatamente aí — "fiquei na dúvida se eu precisava logar pra jogar".
Confirmei no código que não precisa: o login só pré-preenche o nick (
HomeView.tsx:76→useAuth.ts:21,30). É puro ruído de comunicação, não de fluxo.O que mudou e por quê
Dois toques pequenos, um para cada viewport:
Header (
HomeView.tsx) —title+aria-labelno botão explicitando "opcional — dá para jogar sem conta", mais um rótulo visível "opcional" ao lado. O rótulo usa ohidden sm:inlinejá convencional no próprio header (mesmo padrão do nome do usuário logado), então no mobile o header não ganha nenhum elemento novo — o risco de regressão de layout é estruturalmente zero, não uma aposta. O rótulo éaria-hiddenporque oaria-labeldo botão já anuncia a informação (evita leitura duplicada).Card do nick (
HomeView.tsx) — uma linha de microcopy no tom do repo (// é só o nick — sem conta, sem e-mail) logo abaixo do input. Isso cobre o mobile, onde o rótulo do header fica escondido, e fica no ponto em que o jogador de fato age. Sem ela, o AC "fica visualmente claro" valeria só no desktop.Acceptance criteria (#17)
onClick={auth.signInWithGoogle}intacto).prefers-reduced-motionrespeitado: nenhuma animação nova (os elementos adicionados não têmmotion/transição).hidden sm:inline.pnpm typecheck+pnpm buildverdes.Validação (resultado real)
pnpm lint= N/A (sem config ESLint no repo; a CI não roda lint).Verificação visual: tentada, bloqueada — e o que fiz no lugar
Correção de uma promessa que este PR fazia: eu disse que ia anexar screenshot do preview da Vercel. O preview build passou (
SUCCESS), mas a URL está atrás do deployment protection da Vercel (cai na tela de login) e a criação de link de bypass falhou (Unable to create shareable URL). Não faço login em conta sua, então não há screenshot — e prefiro corrigir a promessa a entregar uma verificação que não fiz.No lugar, verifiquei o HTML pré-renderizado e o bundle client gerados pelo
pnpm buildneste worktree:/. É o elemento que cobre o mobile, então o AC crítico está provado no output real, não só no código-fonte.aria-label/title→ ausentes do HTML pré-renderizado, e isso está correto: o bloco inteiro de auth é gated porauth.available = hasBrowserSupabase(), que é falso em build-time. Confirmei que o próprio texto "entrar com Google" também tem 0 ocorrências no HTML — ou seja, não é efeito da minha mudança, é o gate pré-existente. Os três strings estão no bundle client (.next/static/chunks/app/page-*.js), então renderizam junto com o botão que anotam, exatamente na mesma condição.O que não está coberto: conferência de pixel (o "opcional" ao lado do botão em ~360–640px reais). Se quiser, abra o preview logado e um screenshot fecha isso em 10s — ou eu ajusto na hora se estiver apertado.
Riscos
Closes #17