Coovi
Shop handpicked cotton, silk and georgette sarees at Coovi. Cash on delivery anywhere in Bangladesh.
Translation pending
Compare o preço dos mercados de Gramado e descubra o que comprar em cada um.
Translation pending
CommerceHTML · JavaScriptGitHub @secklerdanielOnlineOwner 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 ↗Comparador de preços de mercado para Gramado, Canela, Igrejinha, Nova Petrópolis e São Francisco de Paula. A pessoa monta a lista de compras e o app mostra em qual mercado ela sai mais barata, e quando vale comprar um pouco em cada um (divisão em até 3 mercados). Os preços vêm de quem compra (cupom fiscal e vídeo de prateleira), do folheto dos mercados e da API que os próprios mercados podem usar.
Feito por Seckler Digital. Antigo nome de trabalho: Lista Certa (a pasta e o repositório ainda usam esse nome).
Sem build e sem framework: páginas HTML estáticas na raiz + funções serverless em api/ (Node, CommonJS),
hospedado na Vercel, banco Postgres (Neon). Só duas dependências: @neondatabase/serverless e jose.
| Arquivo | O que é |
|---|---|
index.html | Landing |
app.html | O app (/app): lista, comparação por cidade, aba Contribuir |
mercado.html | Portal do mercado (/mercado): conta, chaves da API, envio de preços |
cadastro.html, api-docs.html, openapi.json | Cadastro só-API e documentação (/cadastro, /docs) |
streaming.html | Agente de voz (/streaming), ElevenLabs |
adminklm08.html | Painel admin (/adminklm08): mercados, usuários, coletas, região, ofertas, produtos, listas |
grupo.html, termos.html, privacidade.html, 404.html | Páginas de apoio |
api/ | Funções serverless. Arquivos que começam com _ são módulos internos, não viram rota |
schema.sql | Todas as tabelas do banco |
scripts/ | Cargas e manutenção, rodados na sua máquina (ver abaixo) |
O plano Hobby da Vercel aceita no máximo 12 funções por deploy. Cada api/**/*.js sem _ conta uma.
Se passar disso, o deploy falha em segundos e a versão antiga continua no ar (só as rotas novas dão 404).
Por isso várias rotas vivem dentro de api/util/[acao].js e api/admin/usuarios.js, com rewrites em vercel.json.
Antes de criar um arquivo novo em api/, conte quantos já existem. Em plano pago o limite some.
psql "$DATABASE_URL" -f schema.sql.main) e cadastre as variáveis abaixo.api/_config.js. O client secret não é usado (fluxo de ID token).node --env-file=.env.local scripts/criar-agente.mjs cria o agente na sua conta
ElevenLabs; troque o ID AGENTE em api/util/[acao].js.Para testar localmente: npx vercel dev com um .env.local. O .gitignore já ignora .env*: nunca commite chaves.
| Variável | Obrigatória | Para quê |
|---|---|---|
DATABASE_URL | sim | Conexão Postgres. O segredo do cookie de sessão é derivado dela: trocar o banco desconecta todo mundo |
ADMIN_KEY | sim | Chave do painel admin (header x-admin-key). Use algo longo e aleatório |
CRON_SECRET | recomendada | Autentica o cron diário de limpeza (/api/util/limpeza); a Vercel envia sozinha se a env existir |
OPENAI_API_KEY | não | Padroniza nome de produto por GTIN e lê etiquetas do vídeo. Sem ela cai no casamento por nome |
GEMINI_API_KEY | não | Lê imagens de folheto na aba Ofertas do admin e em scripts/ler-ofertas.js |
ELEVENLABS_API_KEY | não | Só para scripts/criar-agente.mjs e para o link assinado do agente de voz (/api/agente) |
ELEVENLABS_VOICE_ID, ELEVENLABS_MODEL | não | Voz e modelo do agente |
Abra /adminklm08: a página entra sozinha, com o token TOKEN_PAINEL de api/_lib.js (o endereço da página é o
segredo). A ADMIN_KEY também vale. Troque o TOKEN_PAINEL por um valor seu antes de usar em produção.
O painel só consulta e apaga coletas; não há aprovação de coletas pela equipe (decisão de produto).
Rodam na sua máquina com node --env-file=.env.local scripts/<arquivo>:
| Script | Faz |
|---|---|
carregar-ofertas.js, subir-ofertas.js | Carga de ofertas de folheto (JSON) no banco |
ler-ofertas.js | Lê imagens de ofertas com Gemini e gera o JSON para revisar |
categorizar.js | Categoriza produtos |
semear-mercados-regiao.js | Cadastra o catálogo de mercados da região |
criar-agente.mjs | Cria/atualiza o agente de voz na ElevenLabs |
O app segue a LGPD (ver privacidade.html e termos.html). Usuários entram com Google; o nome público de uma
coleta é primeiro nome + inicial. Cada pessoa pode editar o nome, excluir coletas e excluir a conta. Contas de mercado
usam e-mail e senha (hash scrypt) e não têm recuperação por e-mail: o admin gera uma senha provisória.
O uso público é limitado por IP, guardando só o hash.