Virada de aulão
Operação mais frequente do sistema: trocar o aulão ativo nas URLs públicas.
Conceito
Cada aulão é uma config identificada por um codigo (ex: 2606_A1,
2607_A1). Em public.landing_configs cada linha tem estado:
ativa(uma só por vez): é o que está servindo nas URLs públicasstandby: preparado com antecedência, só admin acessa via/preview/[codigo]arquivada: já foi ativa, agora histórico
A "virada" é a transição standby → ativa de uma config, e automaticamente ativa → arquivada da config anterior.
O que acontece tecnicamente numa virada
- Endpoint
/api/admin/virar/[codigo]é chamado UPDATEno banco: estado da antiga vai praarquivada, nova viraativa- Arquivo
src/config/active.tsé editado via GitHub API → aponta prasrc/config/launches/[codigo].ts - Arquivo
src/config/runtime.tsé regerado com as configs operacionais (tag AC, link grupo WhatsApp, URLs de webhooks) lidas do banco - Os 2 commits no GitHub disparam deploy automático no Vercel (~30-60s)
- URLs públicas passam a servir a versão nova
3 modos de virar
Modo 1: Manual (você dispara quando quiser)
https://aulao.brunolucarelli.com.br/api/admin/virar/[codigo]?token=arrematador-01
Substitua [codigo] pelo código do aulão futuro (ex: 2607_A1).
Acessa no navegador, recebe um JSON. Em ~60 segundos o Vercel completa o deploy e as URLs públicas refletem o novo aulão.
Modo 2: Agendado (Vercel Cron)
Edita o arquivo vercel.json na raiz do projeto:
{
"crons": [
{
"path": "/api/admin/virar/2607_A1",
"schedule": "55 21 03 6 *"
}
]
}
A schedule segue cron syntax minuto hora dia mes dia-da-semana em UTC.
Brasília é UTC-3. Para virar às 18:55 BRT, use
55 21em UTC.
Commit + push. O Vercel detecta o cron novo e agenda automaticamente.
Boa prática: agendar para 5 min antes do horário-alvo do aulão, pra dar margem ao deploy de ~30-60s.
Modo 3: Reverter (rollback)
Se algo deu errado após uma virada, basta chamar o endpoint apontando para a config antiga:
https://aulao.brunolucarelli.com.br/api/admin/virar/{codigo_antigo}?token=arrematador-01
A configuração arquivada volta a ser ativa em ~60s.
Checklist pré-virada
Antes de virar para um aulão novo, garanta que:
- Linha em
public.landing_configscomcodigodo novo aulão existe e está emestado='standby'com TODAS as colunas preenchidas:lancamento_idetapa_lancamento_idtag_activecampaignlink_grupo_whatsappurl_webhook_unnichatunnichat_series_idurl_webhook_make_etapa1url_webhook_make_etapa2
- Arquivo
src/config/launches/[codigo].tsexiste no código com o conteúdo da nova LP (headline, bullets, imagens, variantes) - Arquivo
src/config/launches/index.tslista o novo código no objetoconfigs - Acesse
/preview/[codigo]no modo admin e confirme visualmente que tudo está correto (todas as variantes: lp1, lp2, lp3) - Lançamento e etapa de lançamento (
public.lancamentosepublic.etapas_lancamento) criados no banco central com os IDs referenciados
Checklist pós-virada
Após o deploy completar (~60s):
- Acesse
/cadastroe confirme o conteúdo novo - Confira o commit "virada automatica" no GitHub
- Faça um cadastro de teste end-to-end (aba anônima)
- Confirme que aparece no Supabase em
captacoesepesquisas - Confirme que o contato apareceu no ActiveCampaign com a tag nova
- Confirme que o cenário Make.com da Etapa 1 e da Etapa 2 receberam
- Confirme que o Unnichat enviou o WhatsApp
- Confirme que o redirect no
/concluir-cadastrovai para o grupo correto
Sincronização sem virar
Caso queira atualizar apenas alguma config operacional (ex: trocar URL de webhook, mudar tag AC) sem fazer uma virada de aulão:
- Edite a coluna desejada na linha do código atualmente
ativaemlanding_configs(via SQL Editor do Supabase) - Chame o endpoint normal:
/api/admin/virar/{codigo_atual}?token=... - O endpoint detecta que o código já está ativo (modo
sync), pula a parte de troca de estado e apenas regenera oruntime.tscom os novos valores
Logs e debugging
- Logs do endpoint: Vercel Dashboard → Project → Functions →
/api/admin/virar/[codigo]→ ver execução recente - Commits gerados: https://github.com/felipe-lucarelli/lp-captacao-aulao/commits/main Procure mensagens "virada automatica:" ou "sync:"
- Estado atual no banco:
select codigo, estado, ativada_em, arquivada_em from public.landing_configs order by criada_em desc;