Operações¶
Ambientes¶
| Ambiente | Notas |
|---|---|
| dev | Fluxo local com pnpm (pnpm dev). |
| produção | Projeto Vercel mypaidtraffic → brandvelia.com, app.brandvelia.com. |
| banco compartilhado | Projeto Supabase panoptes (São Paulo). Apenas o schema brandvelia é da Brandvelia. |
Build & gates de qualidade¶
Rodar da raiz do monorepo:
pnpm install # instalar todas as dependências dos workspaces
pnpm build # build de produção (Turborepo → app Next.js)
pnpm lint # ESLint
pnpm typecheck # tsc --noEmit em todos os pacotes
pnpm test # Vitest (money path: decrypt INS, link builder, score, rate limit)
Gate: pnpm lint && pnpm typecheck && pnpm build && pnpm test precisam passar antes
de uma mudança ser considerada completa. Para mudanças de banco:
supabase db reset && supabase test db (suítes pgTAP — 10 arquivos, incluindo o motor
de decisão).
Migrations de banco¶
Migrations são arquivos SQL versionados em supabase/migrations/ e são
additive-only no schema compartilhado brandvelia.
supabase db push --linked --dry-run # pré-visualizar o que será aplicado
supabase db push --linked # aplicar (da raiz do repo)
supabase migration list --linked # estado local vs remoto
supabase db dump --linked -f backup.sql # antes de migrations estruturais
Placeholders
*_shared_panoptes.sqlno diretório de migrations são o histórico de outros sistemas aplicados ao banco compartilhado — não editar, não remover.
Backup / disaster recovery (banco compartilhado)¶
O panoptes é compartilhado com outros sistemas de produção, então qualquer mudança
estrutural exige uma rede de segurança verificada antes de aplicar a migration:
- Confirmar que o projeto Supabase tem backups diários / PITR habilitados (Dashboard → Database → Backups). É uma ação do operador e um gate rígido para migrations estruturais.
- Tirar dump lógico antes de mudanças estruturais:
supabase db dump --linked -f backup-$(date +%Y%m%d).sql. - Política de rollback: migrations são additive-only, então o rollback de uma migration
ruim é uma migration nova que desabilita/contorna — nunca
DROPcontra objetos compartilhados. - Drill de restore: verificar trimestralmente que um backup realmente restaura (documentar o resultado aqui).
| Data | Drill | Resultado |
|---|---|---|
| — | — | aguardando primeiro drill |
Deploy¶
Push para main (via PR) → Vercel publica produção em brandvelia.com e
app.brandvelia.com. O app Next.js é o root directory do projeto Vercel.
DNS / proteção Vercel: URLs *.vercel.app exigem SSO; domínios custom são públicos
(all_except_custom_domains).
Secrets (onde cada um vive)¶
| Secret | Local | Vercel | Env var |
|---|---|---|---|
| Supabase anon key | .env.local |
encrypted, 3 estágios | NEXT_PUBLIC_SUPABASE_ANON_KEY |
| Supabase service role | .env.local |
encrypted, 3 estágios | SUPABASE_SERVICE_ROLE_KEY |
| OpenRouter key | .env.local |
sensitive, 3 estágios | OPENROUTER_API_KEY |
| ClickBank INS secret | ~/.brandvelia/clickbank-ins-secret (600) |
3 estágios | CLICKBANK_NOTIFICATION_SECRET |
| ClickBank API keys (Key 1 + 2) | ~/.brandvelia/clickbank-api.json (600) |
3 estágios | CLICKBANK_API_KEY_1 / _2 |
| Token guarda cron | .env.local + GitHub secrets |
3 estágios | CRON_SECRET (+ SITE_URL no GitHub Actions) |
| Rate-limit store (Upstash) | .env.local |
3 estágios | UPSTASH_REDIS_REST_URL / UPSTASH_REDIS_REST_TOKEN |
| Marketplace feed URL (opcional) | — | 3 estágios | MARKETPLACE_FEED_URL |
Secrets server-side nunca chegam aos bundles client. Os segredos ClickBank/INS também são vendored (com teto de vida útil) mas nunca commitados no repositório.
Automação de browser¶
Alguns fluxos ClickBank usam um browser Playwright local:
npx playwright test # sobe uma vez, coleta os browsers e sai
Validação de IA (E2E)¶
O pipeline do Copilot é validado ponta a ponta: sessão → workspace → transações →
chamada OpenRouter → resposta citando valores calculados em SQL → log em bv_ai_runs
(tokens, custo, latência). Custo por chamada derivado do registro bv_ai_models.
Motor de Decisão em produção¶
- Modo por workspace em
workspace_decision_settings:OFF → SHADOW(ADVISORY é gate futuro). - Recomendações e scores rodam apenas em SHADOW; nada executa sem decisão humana ACCEPT.
- Aplicar as migrations do motor (
2026082113*–20260821143000) viasupabase db pushantes do deploy do código que consome as novas RPCs.
Runbooks Operacionais¶
- Operação Real: Google Ads + ClickBank — Guia passo a passo de lançamento ponta a ponta com IA, validação de presell e publicação segura em PAUSED na conta
862-553-8203(MCC872-713-5564).