尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 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.