FloCafe
FloCafe는 구독 없이 무료로 주문·테이블·주방 디스플레이·로컬 데이터를 관리하는 로컬 퍼스트 레스토랑 POS입니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 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.