Destaques escolhidos a dedo, ofertas da Steam, Epic, GOG e outras lojas e jogos grátis, com preços em reais.
Translation pending
CommerceJavaScript · CSSGitHub @Jo-tinhaOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Aplicação web de promoções de jogos de PC — Projeto integrador, Atividade 2. Tema escuro no estilo dos serviços de streaming, com cores de cada loja. Dados no Firebase Firestore, promoções da API pública CheapShark, jogos grátis da GamerPower, cotação do dólar da AwesomeAPI e publicação no Vercel.
| Perfil | O que acessa |
|---|---|
| Visitante (sem login) | Só a vitrine: banner com os destaques, faixa Destaques (escolhidos a dedo), uma faixa horizontal por loja (Steam, Epic, GOG, Humble…) com o bloco da loja no começo, coluna Grátis agora e busca em todas as lojas. Todas as promoções entram automaticamente. |
| Usuário (com login) | Vitrine + Recomendações do dia + página Notificar: escolhe, na lista de jogos que já estiveram em oferta no Buba Promo, quais quer acompanhar (com preço-alvo opcional) e recebe avisos quando eles entram em promoção. O número de avisos novos aparece no menu. |
| Admin | Painel: averigua as promoções que chegam da CheapShark e escolhe a dedo os destaques (com comentário); atualiza preços e tira destaques encerrados; mantém o catálogo de recomendações diárias (links para qualquer jogo, notícia ou evento gamer). |
| Requisito | Onde está |
|---|---|
CRUD — destaques | C destacar (Painel › Averiguar) · R vitrine e Painel › Destaques · U atualizar preço · D tirar dos destaques |
CRUD — recomendacoes | C publicar · R vitrine (logado) e catálogo no painel · U editar · D excluir |
CRUD — usuarios/{uid}/seguindo | C Notificar · R lista "Escolha seus jogos" · U preço-alvo · D parar de notificar |
| API externa | src/api.js — CheapShark (/deals, /deals?id=, /games?ids=, /stores), GamerPower (/giveaways, via api/gratis.js) e AwesomeAPI (USD-BRL) |
| Publicação | Vercel, https://<projeto>.vercel.app |
index.html Vitrine (pública) + recomendações do dia (logado)
loja.html Todas as promoções de uma loja em grade de tela cheia ("Ver todas")
busca.html Resultados da busca com filtros (loja, preço, desconto, grátis, ordem)
jogos.html Games: catálogo de todos os jogos que já passaram em promoção, com estrela
public/sw.js Service worker para as notificações do navegador
entrar.html Login, cadastro, Google e "esqueci minha senha"
notificar.html Jogos acompanhados e avisos (logado)
admin.html Painel do admin
src/firebase.js Configuração do Firebase (projeto joao-iam)
src/sessao.js Cabeçalho compartilhado, login e papel de admin
src/api.js CheapShark e AwesomeAPI
src/contexto.js Cotação e lojas compartilhadas entre as telas
src/destaques.js Coleção "destaques"
src/catalogo.js Coleção "jogos" (catálogo Games): salvar, listar e sincronizar
src/estrela.js Estrelar jogos (seguir) em qualquer página
src/notificacoes.js Permissão e notificações do navegador
src/cartoes.js Cartão de jogo e peças visuais compartilhadas
src/busca-global.js Barra de busca do cabeçalho: sugestões, teclado, recentes, atalho "/"
src/lojas.js Cores de cada loja, ordem das faixas, capas grandes da Steam
api/gratis.js Função do Vercel que busca os jogos grátis da GamerPower
src/recomendacoes.js Coleção "recomendacoes"
src/usuarios.js Perfis, "seguindo" e avisos
src/vitrine.js / entrar.js / notificar.js / admin*.js Lógica de cada página
privacidade.html Política de privacidade e de cookies (LGPD)
termos.html Termos de uso
404.html Página de erro (o Vercel usa automaticamente)
src/site.js Rodapé, aviso de cookies com preferências e botão "voltar ao topo"
firestore.rules Regras de segurança
destaques/{dealID} — promoções escolhidas a dedo: dealID, gameID, titulo, lojaId, precoNormal, precoPromocional (US$), desconto, imagem, avaliacao, metacritic, link, comentario, criadoEm, atualizadoEm.jogos/{gameID} — todo jogo que já foi destaque: titulo, imagem, ultimaPromocaoEm. Junto com as ofertas atuais da CheapShark, forma a lista do Notificar.recomendacoes — tipo (jogo, notícia ou evento), titulo, descricao, link, imagem, data (AAAA-MM-DD), criadoEm.usuarios/{uid} — nome, email, avisosLidosEm; subcoleção seguindo/{gameID} com titulo, imagem, precoAlvo (R$ ou null).admins/{uid} — documento que dá acesso ao painel (criado à mão no console).Na página Notificar, o usuário marca os jogos que quer acompanhar (lista = jogos em oferta agora + jogos que já foram destaque + busca por nome). Os avisos são consultados ao vivo na CheapShark (/games?ids=): toda promoção atual desses jogos, respeitando o preço-alvo. As que o usuário ainda não marcou como lidas aparecem como Novo e contam no menu.
joao-iam)firestore.rules → Publicar.[email protected] e [email protected] (lista em src/admins.js e na função admin() de firestore.rules — mude nos dois lugares). Só vale com e-mail verificado: entrar com o Google já conta; contas com senha recebem um link de verificação no cadastro (o painel tem botão para reenviar). Também dá para liberar outra conta criando no Firestore o documento admins/{UID} (o painel mostra o UID).seu-projeto.vercel.app.A configuração do app web já está em src/firebase.js; não é preciso cadastrar variáveis de ambiente. (Essa chave não é secreta: quem protege os dados são as regras do Firestore.)
npm install
npm run dev
Importe o repositório em https://vercel.com/new. O preset Vite é detectado (build npm run build, saída dist). Clique em Deploy. Cada git push na main publica uma nova versão.
/jogos.html): todo jogo que já apareceu em promoção fica salvo na coleção jogos. O catálogo cresce sozinho quando usuários logados navegam (cada jogo é gravado no máximo uma vez por dia por navegador) e o admin pode puxar ~600 de uma vez em Painel › Destaques › Sincronizar catálogo Games.usuarios/{uid}/seguindo e, na primeira vez, o navegador pede permissão para notificações.public/sw.js, necessário no Android). Avisar com o navegador fechado exigiria um servidor de push (Firebase Cloud Messaging + back-end), fora do escopo.A CheapShark informa os preços em dólar das lojas americanas. Para as ofertas da Steam, o site busca o preço oficial da Steam Brasil em reais (função api/precos-steam.js, que consulta a Steam com cc=br) — a Steam tem preço regional, quase sempre menor que "dólar × cotação". Nas outras lojas o valor é a conversão pela cotação do dia e aparece com ≈. Em jogos com várias lojas, o número grande é o menor preço; a média entre as lojas aparece só como referência.
A barra fica no cabeçalho de todas as páginas: sugestões com capa e menor preço enquanto você digita (CheapShark /games?title=), trecho buscado em destaque, setas ↑ ↓ + Enter, Esc para fechar, botão de limpar, buscas recentes (só se o usuário permitir "Preferências" nos cookies) e atalho / para focar. No celular, a lupa abre a busca em tela cheia. Enter leva para /busca.html?q=…, com filtros de loja, preço máximo em R$, desconto mínimo, só grátis e ordenação — todos guardados no endereço, para o link poder ser compartilhado — e uma lista de jogos com o mesmo nome que não estão em promoção, para estrelar.
src/rodizio.js, documento config/rodizio).api/trailer.js./busca.html funciona com ou sem nome digitado. Atalhos prontos: Mais aclamados (Metacritic), Mais bem avaliados na Steam, Lançamentos, Maiores descontos, AAA em promoção, Até R$ 20, Entraram agora e Grátis. Filtros: loja, preço máximo, desconto mínimo, nota Steam mínima, Metacritic mínimo, só AAA, só grátis e 8 ordenações.