尚未偵測到更新。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.