尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
App que garimpa discos de vinil em leilões (leiloesbr.com.br), com busca, acompanhamento de lotes e lances. Stack: TanStack Start (React 19 + SSR) · Postgres próprio (postgres.js) · deploy em VPS via Docker Compose + Caddy · atualização periódica via GitHub Actions. Requer Bun (ou Node 18+). Lista completa e comentada em .env.example.查看完整 README ↗
App que garimpa discos de vinil em leilões (leiloesbr.com.br), com busca, acompanhamento de lotes e lances.
Stack: TanStack Start (React 19 + SSR) · Postgres próprio (postgres.js) ·
deploy em VPS via Docker Compose + Caddy · atualização periódica via
GitHub Actions.
Requer Bun (ou Node 18+).
bun install
cp .env.example .env # preencha os valores
bun run dev
App em http://localhost:3000
Veja .env.example. Resumo:
| Variável | Onde | Para quê |
|---|---|---|
DATABASE_URL | servidor | conexão com o Postgres — segredo |
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET | servidor | login Google OAuth (authorization code + PKCE) |
SESSION_SECRET | servidor | assina o cookie de sessão — segredo |
LEILOESBR_EMAIL | servidor | único e-mail Google autorizado |
LEILOESBR_SENHA | servidor | login no site de leilões (scraper) |
CRON_TOKEN | servidor + GitHub Actions | protege o endpoint /api/cron |
ANTHROPIC_API_KEY / GEMINI_API_KEY / GROQ_API_KEY | servidor | IA (avaliação/identificação) — Claude, Gemini e/ou Groq (free tier), opcional |
DISCOGS_TOKEN | servidor | âncora de preço/mercado, opcional |
COLLECTION_DIR / PUBLIC_BASE_URL | servidor | fotos da Coleção em disco (ver .env.example) |
NTFY_TOPIC / NTFY_SERVER | servidor | aviso push do "De olho" (ntfy.sh), opcional |
VAPID_PUBLIC_KEY / VAPID_PRIVATE_KEY | servidor | Web Push do PWA (De olho + lance superado), opcional |
Lista completa e comentada em .env.example.
Arquitetura: Caddy (TLS automático + reverse proxy + /collection/* do volume) →
app (imagem Node, build multi-stage no Dockerfile) → postgres:17. Detalhes,
riscos e o roteiro completo das 6 fases da migração (Supabase/Vercel → VPS único) em
docs/arquivo/economia-fase-2-vps-unico.md.
docker network create proxy (rede externa compartilhada, permite outros
apps no mesmo host) e uma pasta com docker-compose.yml + Caddyfile (copiados
pelo workflow de deploy) + um .env (a partir de .env.example, permissão 600)..github/workflows/deploy.yml builda a imagem no Actions, publica no GHCR e faz
docker compose pull && docker compose up -d no VPS via SSH, a cada push nas
branches main (produção) ou vps (ainda usada pela Fase 7/preview deployments).
Secrets necessários no repositório: VPS_HOST, VPS_USER,
VPS_SSH_KEY, VPS_DEPLOY_PATH; VPS_SSH_PORT (opcional — só se o SSH não estiver
na porta 22 padrão).Serviço backup no compose (imagem própria em docker/backup/, também publicada pelo
deploy.yml): pg_dump a cada 24h para o Cloudflare R2 (S3-compatible, free 10 GB) — ver
R2_* em .env.example. A retenção (14 dias) é configurada como regra de lifecycle no
bucket do R2, não no script. Backup não testado não é backup: restaurar o dump baixado
num Postgres descartável de vez em quando.
Monitoramento: HEALTHCHECKS_PING_URL (opcional, .github/workflows/refresh.yml) — ping
de sucesso no fim da execução, /fail se qualquer chamada do cron falhar. Sem esse secret,
os pings viram no-op.
Serviço portainer no compose, exposto pelo Caddy num subdomínio próprio e separado
do app (PORTAINER_DOMAIN, ver .env.example) — lista visual dos containers/imagens,
logs e status de cada deploy. ⚠️ Tem acesso ao socket do Docker do host inteiro: em
um VPS com mais de um app, ele enxerga e controla todos, não só o Garimpo. Definir a
senha do admin imediatamente no primeiro acesso (o Portainer expira o cadastro
inicial em alguns minutos) e considerar restringir o acesso ao subdomínio (Cloudflare
Access, allowlist de IP, ou VPN) — ver o checklist manual em
docs/arquivo/economia-fase-2-vps-unico.md.
Postgres próprio (sem serviço gerenciado). Schema consolidado em
supabase/setup.sql (nome histórico, mantido — schema puro, sem nada específico
do Supabase); histórico incremental em supabase/migrations/.
.github/workflows/refresh.yml chama /api/cron 3×/dia. Configure os secrets
APP_URL (domínio do app no VPS) e CRON_TOKEN no repositório.