Ir para o conteúdo

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.sql no 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:

  1. 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.
  2. Tirar dump lógico antes de mudanças estruturais: supabase db dump --linked -f backup-$(date +%Y%m%d).sql.
  3. Política de rollback: migrations são additive-only, então o rollback de uma migration ruim é uma migration nova que desabilita/contorna — nunca DROP contra objetos compartilhados.
  4. 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) via supabase db push antes 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 (MCC 872-713-5564).