O problema
Jogadores de PlayStation não têm uma forma bonita e pública de mostrar a própria coleção de troféus — o perfil nativo da Sony é fechado e feio de compartilhar. A API da PSN, por sua vez, não é pública: exige o cookie de uma conta autenticada, que jamais pode vazar para o navegador.
As decisões
- 01
Um app só, backend nas Route Handlers
Sem serviço separado: as Route Handlers do App Router fazem o papel de backend. O token da conta de serviço vive apenas no servidor e nunca é enviado ao cliente — o browser só conversa com a minha API, nunca com a Sony.
- 02
Cache antes de escalar
Cada perfil é cacheado por 60 minutos no Redis, e o botão de forçar atualização tem rate limit de 1 chamada a cada 15 minutos por IP. Isso mantém o consumo da API de origem previsível mesmo se um perfil viralizar.
- 03
Assinatura de verdade, não um botão falso
Stripe para planos e cobrança recorrente, Auth.js com adapter Drizzle para sessão, Postgres para estado e Resend com React Email para os transacionais. É o ciclo completo de um SaaS, não um protótipo.
- 04
Falhar de forma legível
Perfil inexistente, perfil privado e API fora do ar são três problemas diferentes e recebem três telas diferentes (404, 403, 503). O usuário sempre sabe se o erro é dele ou meu.
O resultado
- Produto no ar em domínio próprio, com assinatura ativa.
- Galeria responsiva de 1 a 5 colunas com destaque visual para platinas e 100%.
- Dark mode com paleta PlayStation e skeleton screens durante o carregamento.
- Nenhuma credencial de terceiro exposta ao cliente.