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