Skip to content

Cron semanal e fila de publicação

O atpares trabalha por lote semanal. Uma cron inicia a geração em um horário configurado, cria todas as publicações de cada projeto para a semana seguinte e grava cada item em uma fila persistente. A tela principal mostra a fila inteira dos quatro projetos, sem divisão por marca.

Calendário do lote

Para cada um dos quatro projetos:

  • Segunda, quarta e sexta: uma pauta social por dia.
  • Terça e quinta: um artigo de blog por dia.

A cron cria a pauta, conteúdo, dependências de mídia e destinos. O horário de publicação é calculado por projeto, rede e fuso. O sorteio escolhe assunto e formato entre opções elegíveis. Ele não escolhe quais projetos entram no lote.

A cron deve ser idempotente. Uma nova execução para a mesma semana encontra o lote existente por projectId, semana ISO e versão de calendário. Itens já publicados não são recriados. Itens em erro podem ser reprocessados de forma explícita.

O cabeçalho de cada dia também permite Gerar conteúdo. Essa execução manual usa os mesmos prompts dos agentes, percorre os quatro projetos e pula itens que já têm conteúdo persistido. Ela serve para visualizar o lote sem alterar a regra da cron semanal.

A fila é global. Os cartões da semana representam os dias, não os projetos, e trazem o canal do dia, a quantidade de publicações e a origem do lote. Ao escolher um dia, a tela lista todas as publicações geradas pela cron para aquele dia, com Contrasync, Prompteira, Drawgg e Guentaí na mesma lista, cada uma com projeto, canal, horário e estado.

A tela abre sempre com o primeiro dia da semana selecionado, então a lista de publicações aparece sem precisar de clique. Trocar o dia troca a lista e fecha o drawer aberto.

O drawer pertence à publicação, não ao dia nem ao projeto selecionado na navegação lateral. Ele mostra a versão gerada, permite edição opcional e exibe uma pré-visualização por rede em abas. A navegação lateral continua servindo para consultar o perfil de cada marca, sem filtrar a fila.

Estados da fila

planned aguarda produção; writing está com Claude; media_pending aguarda Gemini; review aguarda revisão; approved pode ser agendado; scheduled tem horário; publishing está no provedor; published recebeu confirmação; failed precisa de ação; cancelled foi retirado.

O painel reúne itens futuros e históricos na mesma fila. Os cartões principais são os dias da semana. Ao clicar em um dia, aparecem todas as publicações geradas pela cron para os quatro projetos, com projeto, canal, data, hora, formato, assunto, status, fonte, funcionalidade, CTA, mídia e erro. A publicação de blog e as adaptações sociais são itens relacionados, não um único texto duplicado.

Responsabilidade das inteligências

Claude

Claude recebe somente contexto autorizado: perfil do projeto, documentação verificada, catálogo de funcionalidades, artigos existentes, pauta, canal e regras editoriais. A chave fica em ANTHROPIC_API_KEY, o modelo em ANTHROPIC_MODEL, com claude-opus-5 como padrão, e o endereço da API em ANTHROPIC_BASE_URL, com https://api.anthropic.com como padrão. Sem a chave, a geração responde indisponibilidade e não simula texto. Deve devolver JSON validado com título, corpo, legenda, roteiro, CTA, funcionalidade, fontes e especificação de mídia. A instrução principal é: use apenas fatos presentes no contexto, sinalize lacunas e bloqueie a peça quando a funcionalidade ou o link não puder ser comprovado.

Claude não deve gerar imagem, vídeo ou publicação. Ele define se a peça precisa de imagem, carrossel, gravação real ou vídeo curto e descreve a direção visual para Gemini.

Gemini

Gemini recebe somente a direção visual aprovada por Claude, referências permitidas, formato de destino e a identidade visual fixa do projeto. Produz imagens e vídeos curtos. Não altera copy, CTA, funcionalidade ou destino. A paleta, o contraste e o tom visual são definidos por projeto: Contrasync usa azul e âmbar sóbrios; Prompteira usa amarelo e azul em linguagem editorial; Drawgg usa escuro, roxo e rosa com energia de live; Guentaí usa roxo, verde-água e azul-marinho em cenas acolhedoras e urbanas. O ativo passa por validação de formato, tamanho, legibilidade, segurança e coerência com a marca antes de voltar à fila.

Toda mídia deve ser compreendida sem texto. O prompt instrui o provedor a não renderizar letras, números, palavras, legendas, logos, URLs, nomes de aplicativos, placas ou interfaces com texto. Também proíbe colagem, mosaico, múltiplos quadros e telas inventadas. Quando a funcionalidade exigir uma tela, ela aparece apenas como formas abstratas, sem caracteres. A direção usa uma composição única, um foco visual e objetos completos para reduzir gerações inúteis e imagens ilegíveis.

Mídia é opcional. Se Gemini falhar, exceder o limite ou retornar um arquivo inválido, o item não fica preso. A fila oferece fallback para imagem já aprovada, captura real do produto, composição simples ou texto sem mídia, conforme o canal. O item mantém o erro de mídia no histórico e segue para revisão, agendamento e publicação quando o texto estiver aprovado.

Nenhum provedor decide sozinho publicar. A fila e suas regras determinísticas controlam aprovação, orçamento, dependências e envio.

Jobs

weekly-batch cria o lote; agent-research pesquisa; agent-copywriter escreve; agent-social adapta; agent-design especifica mídia; media-generator chama Gemini quando houver mídia; media-fallback escolhe um caminho sem Gemini; validator verifica fatos, links, duplicação e formato; publisher envia ao Git ou à API social; reconciler confirma estados após timeout; metrics-sync atualiza resultados. Cada job recebe queueItemId, versão, correlationId e chave idempotente.

Falhas

Falha de Claude deixa o item em failed sem avançar para publicação. Falha de Gemini registra o erro, seleciona fallback e mantém o item editável. Falha de publicação não volta para planned. Timeout vira unknown internamente e exige reconciliação antes de novo envio.

Operação automática

Não existe gerador manual na tela. O proprietário não preenche briefing, título ou instrução para cada publicação. Prompts, regras de voz, calendário, fontes e critérios de validação ficam salvos na configuração dos projetos. A cron usa esse contexto para criar a semana inteira.

Pré-visualização por rede

Ao abrir uma publicação, o drawer mostra abas para cada destino daquela peça, como Instagram, LinkedIn, X ou Blog. Cada aba renderiza a mesma versão de texto, tags, mídia, perfil, data e hora que será enviada à API daquele destino. O formato visual varia conforme o canal, mas os dados vêm da versão imutável que está na fila.

Não existe uma prévia genérica separada do conteúdo de publicação. Se o proprietário editar texto ou título, a versão exibida no drawer é atualizada e a aprovação da versão anterior é invalidada para nova validação antes do envio.

Título e prompt da imagem ocupam linhas próprias. Texto e tags também são campos livres de edição no próprio drawer. A ação Regenerar IA persiste a direção editada, chama novamente o fluxo de copywriter e salva a nova versão, preservando a trilha da decisão automática que originou o conteúdo.

A fila mostra o resultado da automação por dia e por projeto. Uma alteração manual é uma exceção de revisão sobre uma versão específica, registrada como evento e devolvida ao Claude. Sem intervenção, a versão aprovada segue para a data e hora programadas.

Modelo mínimo

weekly_batches, queue_items, content_versions, media_assets, publication_attempts e queue_events. queue_items tem project_id, scheduled_for, channel, status, content_version_id, depends_on_item_id, published_at e last_error. Eventos são append-only para mostrar o histórico sem sobrescrever decisões.