Skip to content

rajaba21/PlayWise

Repository files navigation

PLAYWISE
biblioteca Steam + IA + brutalismo pixel-retrô

Seu assistente pessoal de jogos para decidir o que jogar, organizar a biblioteca e redescobrir o que estava parado.

Next.js React TypeScript Tailwind CSS Claude primário Gemini fallback Supabase


O que é

PlayWise é um app pessoal para biblioteca Steam com IA, feito para resolver um problema simples: abrir a estante, olhar centenas de jogos e ainda assim não saber o que jogar.

Ele sincroniza a tua biblioteca, enriquece os jogos com metadados, organiza status e variantes, sugere partidas com IA, gera desafios mensais e monta um perfil de estilo de jogo.


Preview

Home do PlayWise com recomendação do dia e resumo da biblioteca

Biblioteca do PlayWise com filtros de status, controle, gêneros e tags Modo Sessão do PlayWise para escolher rápido o que jogar Tela Gamer DNA com perfil de estilo de jogo gerado a partir da biblioteca


Linguagem visual

O README agora acompanha a linguagem do produto:

  • Brutalist + pixel-retrô: bordas grossas, sombras duras, zero radius, grid forte
  • Paleta v2.0: cream, ink, lime, gold, blue, cyan e coral
  • Tipografia: JetBrains Mono como base e Press Start 2P para acentos
  • Mascote Wise: pixel-art com estados de humor espalhados pela experiência
  • Dark mode quente: grafite queimado com cream como tinta
  • Microinterações 8-bit: chiptune via Web Audio, opt-in

O laboratório visual vivo continua na rota /styleguide e no arquivo app/styleguide/page.tsx.


O que o produto já faz

Home

  • dashboard com saudação dinâmica
  • recomendação do dia com Claude primário e Gemini fallback
  • botão de reroll sem repetir jogo já sorteado na sessão atual
  • imagem hero melhorada usando assets da Steam quando disponíveis
  • estatísticas reais da biblioteca: total, horas, zerados, favoritos, jogando e nunca abri
  • jogos recentes e desafio ativo na mesma visão

Biblioteca Steam

  • sync da biblioteca via Steam Web API
  • 3 modos de visualização: compacto, normal e grande
  • filtros por status, controle, gêneros e tags
  • ordenação por nome, horas, último jogado, rating e Metacritic
  • classificação manual persistida em banco com status + estrelas
  • busca com relevância: título exato e prefixo sobem para o topo
  • contadores consistentes com paginação completa da biblioteca
  • agrupamento por série/franquia com toggle na Biblioteca
  • política de variantes:
    • main aparece na grade principal
    • related_only aparece como item relacionado do jogo pai
    • hidden_variant fica fora da grade principal
  • revisão incremental de capas, tipos Steam e variantes
  • ação de reprocessamento completo da biblioteca em lotes

Busca Inteligente

  • busca em linguagem natural com Claude primário
  • fallback automático para Gemini
  • usa a biblioteca inteira, não só os primeiros 1000 registros
  • separa biblioteca, wishlist e resultados externos
  • cache com fingerprint da biblioteca para reduzir respostas envelhecidas

Modo Sessão

  • recomendação rápida por tempo, pegada e controle
  • filtros opcionais de mood, gênero e social
  • chat conversacional com contexto da biblioteca
  • heurística para variar franquias nas alternativas
  • fallback local quando a cota de IA estoura

Desafios Mensais

  • 1 desafio ativo por mês
  • geração baseada em jogos pouco jogados
  • progresso manual com atualização persistida
  • estados ativo, concluído e expirado

Gamer DNA

  • leitura da biblioteca inteira com paginação completa
  • perfil gamer gerado por IA
  • resumo de gêneros, tags, estilo e padrões de sessão

Configurações

  • chave da Steam
  • chave RAWG
  • chave Claude
  • chave Gemini
  • seletor de modelo Claude
  • sync da biblioteca
  • refresh de metadados Steam:
    • Atualizar biblioteca
    • Só pendentes
    • Refazer tudo
  • enriquecimento RAWG:
    • Só os novos
    • Refazer tudo

Como a biblioteca funciona hoje

1. Sync Steam

Quando você sincroniza:

  • resolve o Steam ID
  • valida o perfil
  • busca a biblioteca completa via GetOwnedGames
  • grava horas jogadas e últimos dados base em games

2. Metadados Steam

Depois do sync, o app pode revisar a biblioteca usando dados da Steam Store:

  • steam_type
  • steam_fullgame_appid
  • variant_kind
  • library_visibility
  • card_image_url
  • hero_image_url
  • cover_image_url

Isso corrige:

  • capas quebradas
  • demos/betas/playtests perdidos na grade principal
  • distinção entre jogo base, variante relacionada e variante oculta

3. Enriquecimento RAWG

RAWG agora entra como complemento, não como fonte principal de imagem para jogo Steam:

  • prioriza jogos main
  • evita matches fracos por nome
  • persiste series_name para agrupamento de franquias
  • preenche gêneros, tags, Metacritic e controle quando fizer sentido

4. IA

A pilha de IA segue esta ordem:

  1. Claude
  2. Gemini
  3. fallback local em fluxos que precisam continuar funcionando

Stack

Camada Tecnologia
Frontend Next.js 16.2.4 + React 19 + TypeScript
Estilo Tailwind CSS 4 + tokens do design system
Tipografia JetBrains Mono + Press Start 2P
Banco Supabase PostgreSQL
IA Anthropic Claude + Google Gemini
APIs externas Steam Web API, Steam Store appdetails, RAWG API
Ícones Lucide React
Mascote Wise em SVG pixel-art

Estrutura do projeto

PlayWise/
├── app/
│   ├── page.tsx
│   ├── layout.tsx
│   ├── globals.css
│   ├── biblioteca/page.tsx
│   ├── busca/page.tsx
│   ├── sessao/page.tsx
│   ├── desafios/page.tsx
│   ├── gamer-dna/page.tsx
│   ├── configuracoes/page.tsx
│   ├── styleguide/page.tsx
│   └── api/
│       ├── games/
│       ├── search/
│       ├── session/
│       ├── challenges/
│       ├── gamer-dna/
│       ├── home/
│       ├── settings/
│       ├── steam/
│       │   ├── sync/
│       │   └── metadata/
│       └── rawg/enrich/
├── components/
│   ├── sidebar.tsx
│   ├── wise.tsx
│   ├── theme-toggle.tsx
│   ├── sound-toggle.tsx
│   ├── api-key-field.tsx
│   ├── game-card.tsx
│   ├── game-card-compact.tsx
│   ├── game-card-large.tsx
│   ├── home/
│   └── ui/
├── lib/
│   ├── ai/
│   ├── claude/
│   ├── supabase/
│   ├── steam/
│   ├── classifications.ts
│   ├── library-visibility.ts
│   ├── game-status.ts
│   └── sounds.ts
├── types/
└── .env.example

Como rodar

Pré-requisitos

1. Clone

git clone https://github.com/rajaba21/PlayWise.git
cd PlayWise

2. Instale

npm ci

3. Variáveis de ambiente

cp .env.example .env.local

Preencha o .env.local com as credenciais do seu projeto Supabase:

  • NEXT_PUBLIC_SUPABASE_URL
  • NEXT_PUBLIC_SUPABASE_ANON_KEY
  • SUPABASE_SERVICE_ROLE_KEY recomendada antes de expor o app na internet, para as rotas de servidor não dependerem só da anon key

As chaves de Steam, RAWG, Claude e Gemini não ficam no repositório nem no .env.example. Elas são configuradas na UI em Configurações e salvas no teu próprio banco.

4. Banco de dados

  1. Crie um projeto no Supabase
  2. Abra o SQL Editor
  3. Execute o conteúdo de lib/supabase/schema.sql

5. Rode localmente

npm run dev

Abra http://localhost:3000.

6. Primeira configuração no app

  1. Vá em Configurações
  2. Salve Steam, Claude, Gemini e RAWG
  3. Clique em Atualizar biblioteca
  4. Rode Só pendentes ou Refazer tudo para revisar capas, tipos Steam e variantes
  5. Rode o enriquecimento RAWG para completar gêneros, tags e Metacritic

Segurança e publicação

  • O repositório não inclui tua base do Supabase, teu .env.local ou as chaves salvas em Configurações
  • .env.local, .next, node_modules e caches locais não entram no git
  • Tornar o repositório público no GitHub não publica automaticamente teus dados locais ou do banco
  • O schema em lib/supabase/schema.sql cria policies RLS abertas (ok para uso pessoal, inseguro para multi-user). Antes de hospedar publicamente, leia SECURITY.md
  • Se fores hospedar o app publicamente, configura SUPABASE_SERVICE_ROLE_KEY no servidor e revisa autenticação/RLS antes do deploy

APIs utilizadas

API Uso
Steam Web API biblioteca, horas jogadas, últimos jogos
Steam Store appdetails tipo do app, imagem de card, hero, variantes e vínculo com jogo pai
RAWG API gêneros, tags, controle e Metacritic
Anthropic Claude recomendações, busca, desafios, Gamer DNA
Google Gemini fallback quando Claude falha ou está indisponível
Supabase banco, persistência de classificações e cache de IA

Roadmap

Planejamento detalhado da próxima expansão Steam: docs/steam-profile-and-achievements-plan.md

Feito

  • Setup do projeto + schema Supabase
  • Home dinâmica com recomendação do dia
  • Biblioteca 2.0 com 3 modos de visualização
  • Filtros avançados, rating e Metacritic
  • Classificação manual persistida em banco
  • Busca por linguagem natural com Claude + fallback Gemini
  • Modo Sessão com rápida + chat
  • Desafios mensais
  • Gamer DNA
  • Design v2.0 brutalist + pixel-retrô
  • Wise com estados e animação idle
  • Dark mode + auto/manual override
  • Microinterações 8-bit opt-in
  • Claude como provider primário
  • Sync Steam + enriquecimento RAWG
  • Reprocessamento de metadados Steam para capas, tipos e variantes
  • Política de variantes na biblioteca (main, related_only, hidden_variant)
  • Agrupamento por série/franquia via RAWG game-series API
  • Busca da biblioteca com relevância por título
  • Contagem completa da biblioteca acima de 1000 jogos

Próximo

  • Detecção e exibição de DLCs vinculadas ao jogo pai

Depois

  • Steam OpenID Auth
  • Deploy na Vercel
  • PWA instalável

Notas de produto

  • PlayWise é um app pessoal, não uma rede social
  • o foco é biblioteca, contexto e decisão de jogo
  • variantes como demo, beta, playtest e test server não devem poluir a grade principal
  • horas continuam preservadas por appid, sem somar automaticamente no jogo pai

Feito com Wise, Lucide e uma dose saudável de brutalismo.
Zero emojis. Sempre ícones.

About

PlayWise ia AI-powered Steam library manager that recommends the right game for every moment.

Resources

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors