尚未偵測到更新。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.