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