Estado em 16 de julho de 2026: Cloudflare Workers é o ambiente principal, com deploy automático pelo GitHub. Login, sessão, workspace e clientes do Supabase foram validados pela Larissa. A implantação anterior pode ser mantida apenas como rollback temporário enquanto o MVP é concluído.
URL paralela: voha-lab.biel-cavalcanti1.workers.dev
- Next.js 16 executado no Cloudflare Workers por
@opennextjs/cloudflare. - Supabase permanece responsável por autenticação e PostgreSQL.
- Cloudflare R2 permanece responsável pelas mídias.
- A implantação anterior não recebe novas funcionalidades e serve somente como rollback temporário.
O Worker validado possui aproximadamente 2.022 KiB gzip, abaixo do limite de 3 MiB do Workers Free.
npm run build:cloudflare
npm run preview:cloudflare
npm run deploy:cloudflareO Worker usa o Cloudflare Workers Builds, conectado ao repositório GitHub. A configuração esperada é:
- branch de produção:
main; - comando de build:
npm run build:cloudflare; - comando de deploy:
npx wrangler deploy; - comando de preview:
npx wrangler versions upload; - builds de branches não produtivas habilitados para validar pull requests.
As variáveis usadas pelo Next.js também precisam existir em Build Variables and secrets. Os segredos de runtime continuam configurados no Worker e nunca devem ser gravados no repositório.
O OpenNext recomenda Linux ou WSL. No Windows, o build pode ser validado em um contêiner Linux:
docker run --rm -v "${PWD}:/app" -v voha-cloudflare-node-modules:/app/node_modules -w /app node:22-bookworm-slim sh -lc "npm ci && npm run build:cloudflare"- Execute
npx wrangler logine autorize a conta Cloudflare no navegador. - Configure as variáveis e os segredos no Worker sem enviá-los por chat ou Git.
- Gere o build em Linux e execute o deploy.
- Abra o endereço
workers.devgerado e valide o checklist abaixo.
Variáveis públicas, necessárias no build e no runtime:
NEXT_PUBLIC_APP_URLNEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY
Segredos somente de runtime:
SUPABASE_SECRET_KEYR2_ACCOUNT_IDR2_ACCESS_KEY_IDR2_SECRET_ACCESS_KEYR2_BUCKET_NAMER2_PUBLIC_BASE_URL, quando utilizadoMETA_INSTAGRAM_APP_IDMETA_INSTAGRAM_APP_SECRETMETA_TOKEN_ENCRYPTION_KEYVOHA_CRON_SECRET, com no mínimo 32 caracteres, configurado como segredo de runtime e compartilhado somente entre o Cron Trigger e o Worker
Nunca copiar VERCEL_OIDC_TOKEN para a Cloudflare. Nunca enviar .env.local, .dev.vars ou os valores dos segredos ao Git.
A política versionada em config/r2-cors.json permite o upload direto para o
bucket privado somente a partir do domínio de produção, do endereço workers.dev
e dos endereços locais suportados. Depois de alterar domínios ou portas, atualize
o arquivo e reaplique:
npx wrangler r2 bucket cors set voha-media --file config/r2-cors.json
npx wrangler r2 bucket cors list voha-mediaNão torne o bucket público nem use * em origins.
- Login com a usuária da Larissa.
- Redirecionamento para login quando não autenticada.
- Criação ou leitura do workspace existente.
- Clientes fictícios carregados do Supabase.
- Logout removendo a sessão.
- Dashboard e calendário em tela pequena após login.
- Modo claro e escuro.
- Tela de login e identidade visual carregando em viewport mobile.
- API sem sessão retornando
401. - Upload direto de imagem para o bucket privado por URL assinada.
- Confirmação do ativo como
readye leitura por URL GET assinada. - Exclusão lógica no Supabase e remoção do objeto de teste no R2.
- Biblioteca sem overflow horizontal em viewport mobile de 390×844.
- Logs do fluxo de mídia sem segredos, chaves de objeto ou URLs assinadas.
- OAuth do Instagram com a conta testadora da Larissa.
- Token do Instagram criptografado e ausente dos logs.
- Migration
202607210001_publication_engine.sqlaplicada no Supabase. -
VOHA_CRON_SECRETconfigurado no.env.locale como segredo de runtime do Worker. - Cron de publicação executando uma vez por minuto em produção.
Se algum teste falhar, interrompa a promoção da branch e mantenha a versão estável do Worker. Alterações de domínio só devem ocorrer depois da validação do preview.