Sou o Ming. Além de cuidar do design de produto na vm0, gerenciar nosso conteúdo também faz parte do que eu faço, e acabou tendo muito mais coisa envolvida do que eu esperava: design de fluxo de trabalho, ilustrações, produção de imagens, trabalho no CMS, traduções. É assim que venho conseguindo dar conta disso aos poucos.
Conteúdo é uma das coisas que faço por aqui
A maior parte do meu dia na vm0 se divide entre design de produto e nossa base de código em Next.js. Mas gerenciar nosso conteúdo também é responsabilidade minha, e assim que comecei, percebi o quanto realmente está envolvido em um blog que tem bons resultados. Você precisa de produção consistente, pesquisa de palavras-chave de verdade, visuais coerentes com a marca, meta descriptions decentes e traduções para os quatro idiomas que oferecemos.
Quando comecei a levar isso a sério, cada post tomava boa parte de um dia. A escrita acabou sendo só uma pequena fatia disso. A maior parte do tempo ia para o trabalho de produção em torno da escrita: encontrar as palavras-chave certas, criar as artes de capa, acertar os campos no CMS, refazer tudo para cada idioma.
Então fui movendo o máximo possível desse fluxo para o Lucas, um agente de marketing de IA que construí no Zero em torno da minha própria rotina. Ele está configurado como "Gerente de marketing", e o escopo dele é qualquer coisa relacionada a marketing: a produção de blog é a parte mais desenvolvida hoje, e ele continua crescendo à medida que adiciono skills e conectores ao longo do tempo.
Neste momento, o Lucas tem acesso ao nosso CMS headless Strapi, à nossa conta da Ahrefs, ao Slack do nosso time, ao nosso web chat, a uma skill interna chamada draw para ilustrações coerentes com a marca, além da skill padrão copywriting para a mecânica da escrita.
Abaixo vou mostrar como essa automação de blog com IA funciona na prática: como o Lucas pega um prompt vago, decompõe em tema e palavras-chave, escreve um post, desenha uma capa, passa o texto por uma tradução naturalística e entrega quatro rascunhos de idioma no nosso CMS headless. Depois vou falar sobre como cheguei até aqui, e o que deliberadamente deixo para os humanos (ainda na maior parte, eu).
Como uso o Lucas: web app e Slack

Eu trabalho com o Lucas principalmente pelo web chat da vm0. É a interface de trabalho profundo, onde fico com ele ao longo da estruturação, da redação, das iterações de capa e das edições. Threads longas, contexto longo, aquele tipo de vai e volta que ficaria estranho em um canal de chat.
O Lucas também está conectado ao Slack do nosso time, como ponto de entrada compartilhado. Eu mando prompts rápidos por lá pelo celular, e o resto do time também pode chamá-lo. Quem estiver na escala do blog inicia um post da mesma forma. Mesmo agente, mesmo contexto nas duas interfaces.
Como costuma ser um prompt típico
Meus prompts para o Lucas costumam ser curtos. Três frases no máximo. Um exemplo representativo:
Lucas, escreva um tutorial sobre como conduzir reuniões semanais eficazes: aborde a estrutura da reunião, as armadilhas comuns e como manter times remotos engajados. Estilo tutorial, otimizado para SEO, termine com um CTA para usar o Zero. Só o link do rascunho, não publique.
É esse o briefing inteiro. Uma mensagem. Sem outline, sem lista de palavras-chave, sem briefing de design, sem meta de tamanho. O Lucas assume a partir daí.
Levei um tempo para chegar nesse formato. No começo, eu escrevia briefings bem mais longos porque presumia que o agente precisava de tudo detalhado, e então percebi que a maior parte do contexto pertence às instruções permanentes e às skills dele, não a cada prompt. O prompt é um gatilho; o resto da configuração carrega o peso.
Como o Lucas analisa o tema e as palavras-chave

O primeiro movimento do Lucas é extrair estrutura de um prompt vago. Para um pedido como o de cima, as anotações de trabalho dele ficam mais ou menos assim:
- Tema: conduzir reuniões semanais eficazes
- Formato: tutorial → passos numerados, exemplos concretos, linguagem do tipo "faça isso"
- Público implícito: líderes de time, gestores remotos, fundadores
- Seções obrigatórias: estrutura da reunião, armadilhas comuns, engajamento remoto
- CTA: levar os leitores até o Zero
- Restrição: só a URL do rascunho, não publicado
Depois ele escolhe a palavra-chave. Essa é a parte do marketing de conteúdo para a qual eu tinha menos intuição quando comecei, então dei ao Lucas uma rotina para percorrer sempre que eu peço trabalho de palavra-chave. Não é uma skill que ele roda de forma autônoma, é só uma sequência na qual confio a ele:
- Buscar candidatas na Ahrefs. Ele chama a API da Ahrefs com a frase do tema, retornando variações de cauda longa com volume de busca mensal, dificuldade da palavra-chave (KD), tema-pai e intenção da SERP.
- Filtrar por dificuldade. Dei a ele uma regra rígida: KD < 30. A vm0 é um domínio relativamente novo, com autoridade limitada, então perseguir palavras-chave de KD alto ainda não faz sentido para nós. A cauda longa vence no início.
- Cruzar com nosso índice do Strapi. Ele puxa todos os slugs publicados do nosso CMS via API REST do Strapi e remove qualquer palavra-chave que já cobrimos. Sem canibalização.
- Combinar intenção com o fit do produto. A intenção de uma palavra-chave precisa ser compatível com nossa biblioteca de casos de uso. "Como conduzir reuniões semanais eficazes" → operações / gestão de times → encaixa. "Melhor ramen em Tóquio" → não encaixa, não importa o volume.
- Escolher uma. Da lista filtrada, ele escolhe a opção de maior volume e a usa como espinha dorsal do post. Por exemplo, boas práticas de reuniões semanais remotas.
Para SEO on-page ele aplica uma heurística simples: palavra-chave alvo no título, em pelo menos um H2 e nas primeiras 100 palavras. Sinônimos e frases relacionadas tecidos naturalmente ao longo do texto. Links internos para dois ou três posts relacionados onde fizer sentido. Depois disso: escrever de forma natural, sem encher de palavra-chave.
A estrutura do post (seis ou sete H2s, um destaque "Dica:" sob cada passo, um CTA no fechamento) vem de um template de tutorial que fui montando por exemplo ao longo de vários posts.
Como a capa é desenhada
A capa é a parte da produção de blog com a qual mais me importo, em parte porque sou designer e em parte porque é o que os leitores veem antes de ler uma palavra. Ela também é a imagem do Open Graph quando os posts são compartilhados no X ou no LinkedIn, e é o que faz nosso índice de blog parecer uma publicação em vez de uma parede de fotos de banco de imagens.
Fotos de banco de imagens não eram uma opção para o visual que eu queria, e fazer briefing de ilustrações uma a uma teria tornado o custo de produção por post inviável. Então construí uma skill no Zero chamada draw. É um script Python de 200 linhas que faz cinco coisas:
- Recebe duas entradas: uma metáfora (o que esboçar) e uma cor (um nome amigável mais uma âncora em hex).
- Coloca-as em um template de prompt fixo que trava o resto da composição: fundo cinza quente
#eeeeee, mancha aquarelada centralizada na tela na cor escolhida, esboço de tinta desenhado à mão por cima, logo da vm0 em (25, 25) no canto superior esquerdo. - Envia o prompt composto para o modelo
nano-banana-proda fal.ai em 16:9. - Baixa o PNG. Normaliza qualquer pixel quase branco de volta para exatamente
#eeeeee, para que o fundo nunca se desvie. Faz upscale para 1600×900. Faz composição alpha do logo transparente da vm0 por cima. - Faz upload do resultado para o CDN da vm0 e imprime a URL.
Uma invocação típica fica assim:
python draw.py \
--metaphor "a tilted hourglass with sand draining into a small open notebook, a sparkle near the rim" \
--color-name "dusty rose" \
--color-hex "#e08b96" \
--upload
Duas entradas e o resto da marca permanece consistente. Eu costumo escolher uma cor que combine com o tema do post. Coral ou verde-sálvia para peças mais calorosas em estilo tutorial, azul ou lavanda para as mais técnicas, amarelo-mostarda para anúncios. Algumas cores recorrentes vão aos poucos transformando o índice do blog em uma paleta reconhecível.
A coisa que descobri do jeito difícil é que a alavancagem não está no modelo. Está no template. Deixar o modelo escolher composição, paleta e layout livremente fazia cada capa parecer uma marca diferente. Travar tudo isso e deixar que ele escolha apenas a metáfora mantém o visual coerente de um post para o outro.
Existe uma skill irmã chamada illustration para arte pontual dentro do artigo (os desenhos menores que você vê entre as seções deste post). A mesma ideia: estilo fixo, só a metáfora e a cor variam. Apenas ajustada para arte quadrada de 1024×1024 em vez de capas 16:9.
Uma pequena nota sobre SEO de imagem: a mesma imagem de capa é configurada como ativo do Open Graph e do Twitter Card do post, então os compartilhamentos em redes sociais a capturam direitinho. O Strapi gera automaticamente quatro variantes pré-redimensionadas no upload (thumbnail, small, medium, large), embora eu ainda não tenha conectado o corpo do artigo para carregá-las via srcset. É um pequeno TODO de front-end. As ilustrações inline recebem um alt text descritivo escrito no markdown quando o Lucas as incorpora; o alternativeText da própria capa no Strapi é algo que ainda quero preencher depois.
Como o post é escrito

Uma vez que tema, palavra-chave e capa estão definidos, a redação é em boa parte mecânica. O Lucas:
- Estrutura primeiro. Seis ou sete H2s, cada um com uma função clara: enquadramento do problema, instruções passo a passo, destaques "Dica:", recapitulação, CTA.
- Expande cada H2 em prosa usando a skill
copywriting. A voz (frases curtas, exemplos concretos, segunda pessoa quando funciona, um humor seco aqui e ali) vem de regras que mantenho nas instruções permanentes do Lucas, não da skill em si. - Adiciona destaques práticos "Dica:" sob cada passo. Útil para tutoriais porque a maioria dos leitores passa o olho, e os destaques dão a eles um caminho ao longo de um conteúdo longo.
- Escreve o campo
descriptiondo post. O Strapi limita a 80 caracteres, então ele fica curto e soa como se um humano tivesse escrito. É usado como subtítulo do artigo e como descrição do card de OG/Twitter. - Fecha com um CTA que nomeia o produto e leva a um workspace gratuito.
Um primeiro rascunho costuma voltar dois ou três minutos depois do prompt. Eu leio, peço ajustes de tom onde a voz está fora, e o Lucas itera até acertar. O primeiro rascunho raramente está pronto para publicar. Geralmente está quase lá, mas um pouco fora, e é aí que gasto a maior parte do meu tempo de revisão.
Como o rascunho chega ao Strapi

Usamos o Strapi como nosso CMS headless. O content type articles tem um cover (mídia), author e category (relações), locale (string) e uma dynamic zone blocks onde o corpo fica.
O fluxo de sincronização com o CMS do Lucas:
- POST do PNG da capa para
/api/upload. Salva odocumentIdretornado. - POST para
/api/articles?status=draftcom título, description (≤80 caracteres; o Strapi impõe isso), slug, locale, as relações de cover/author/category como IDs numéricos, e um único blocoshared.rich-textcontendo o corpo em markdown. - O crucial: omitir
publishedAt. O Strapi trata null como estado de rascunho. - Retorna uma URL de preview usando o padrão de rascunho da vm0:
https://www.vm0.ai/{locale}/blog/posts/{slug}?status=draft.
Um aviso sobre o Strapi v5: a API REST pública pode sobrescrever o publishedAt em certos content types, o que significa que um "rascunho" criado pela API pode ir ao ar silenciosamente. A correção é uma pequena migração de banco que remove o campo nas gravações de rascunho.
A estratégia de slug também importa para o SEO. Usamos um slug canônico em todos os quatro idiomas, em vez de traduzi-lo. Um leitor em /de/blog/posts/remote-weekly-meeting-best-practices vê a mesma estrutura de URL que um leitor em /en, e nosso perfil de backlinks não se fragmenta em URLs traduzidas. Emitir as tags de link hreflang a partir dessas relações de locale é um pequeno TODO de front-end. Ainda não as entregamos.
Como funciona a tradução i18n

A vm0 opera em quatro idiomas: inglês, alemão, japonês, espanhol. Não passamos os posts pelo Google Translate. O caminho barato destrói a voz; o caminho certo adapta as expressões.
O Lucas cria o rascunho em EN primeiro, captura o documentId retornado e então faz três chamadas de acompanhamento PUT /api/articles/{documentId}?locale=de (e ?locale=ja, ?locale=es) com payloads traduzidos de forma naturalística. O Strapi trata essas chamadas como variantes de idioma do mesmo documento canônico, o que mantém as quatro versões vinculadas no admin e no seletor de idioma do front-end.
Regras de tradução que dei a ele, em boa parte por ter esbarrado em saídas erradas e corrigido:
- Não traduzir termos técnicos que já são empréstimos do inglês no idioma de destino. "API", "CMS", "agent" e "prompt" permanecem em inglês em JA e DE. Traduzi-los soa estranho em ambos os idiomas.
- Adaptar expressões de forma naturalística. Uma tradução literal de "kills your Friday" para o alemão vira algo sem sentido; uma versão nativa da mesma metáfora funciona.
- Reajustar os CTAs por idioma. Imperativos soam mais insistentes em DE, então eu os suavizo; a versão em JA costuma se amenizar em um convite educado.
- Reajustar os títulos pelo comprimento. Títulos em alemão tendem a ficar ~30% mais longos que os equivalentes em inglês. Títulos em japonês tendem a ser mais curtos. O Lucas mantém os títulos abaixo do limite de truncamento de 60 caracteres da SERP em cada idioma.
A publicação de conteúdo multilíngue era a parte do fluxo que costumava consumir mais tempo. Agora é só o último passo na mesma execução do agente.
O que não é automatizado
Uma seção curta, mas importante. Nem tudo nesse fluxo é automatizado, de propósito:
- Seleção de tema no nível estratégico. O Lucas escolhe palavras-chave dentro de um tema, mas o tema em si vem de mim, geralmente de lançamentos de produto, conversas com clientes ou mudanças de roadmap.
- Passada editorial final. Eu leio todo rascunho antes de publicar. Principalmente a versão EN. Tom, precisão das afirmações técnicas, referências ao contexto interno de produto, tudo isso precisa de um olhar humano.
- Revisão nativa para idiomas que não falo com fluência. Não leio alemão com fluência. O rascunho em DE vai para um revisor nativo dar uma passada final antes de publicar.
- Promoção. Postar no X, enviar aos assinantes, compartilhar em comunidades ainda é manual por enquanto.
A ideia não é me tirar do loop. É me tirar das partes do loop que realmente não precisam de mim.
Como cheguei a esse fluxo
Eu não sentei num fim de semana e projetei isso. Foi se acumulando, post a post, a partir de perceber quais passos estavam consumindo meu tempo.
O que percebi: as partes que valiam a pena automatizar não eram as partes criativas. Eram as partes de conexão: as buscas de palavra-chave, as renderizações de capa, as chamadas de upload, o fan-out de idiomas, a formatação da URL de preview. Quando registrei isso com honestidade, eu estava gastando mais tempo com logística do que com a escrita em si.
Então fui movendo a logística para o agente. O modelo escreve; o agente cuida de mover as coisas de um lado para o outro. Eu ainda sou quem toma as decisões sobre o que escrever e como deve soar, só não sou mais quem costura as peças.
Para mim, a automação de conteúdo na prática não acabou sendo "a IA escreve o blog". Acabou sendo "a IA faz tudo ao redor da escrita, para que eu tenha tempo de realmente olhar para a escrita".
Se você quiser tentar algo parecido
Se você está numa situação parecida, vestindo mais chapéus do que gostaria, com conteúdo sendo um deles, boa parte disso é reproduzível:
- Uma plataforma de agentes que permita dar ao agente um papel e skills persistentes (nós usamos o Zero, onde o Lucas vive).
- Conectores para suas ferramentas atuais: seu CMS, sua ferramenta de pesquisa de palavras-chave, seu gerador de imagens, seu Slack.
- Um pequeno conjunto de skills adaptado à sua marca (no nosso caso,
drawpara capas ecopywritingpara o tom). - Instruções permanentes que carregam o contexto, para que os prompts possam ficar curtos.
Comece um workspace gratuito no Zero →
Ou, se você preferir ver mais fluxos de trabalho de agentes antes de se cadastrar, nossa biblioteca de casos de uso tem 19 automações prontas para copiar em engenharia, produto, marketing e operações.
Se você quiser clonar o Lucas especificamente: crie um agente, dê a ele o papel de Gerente de marketing, conecte o Strapi (ou seu CMS) + Ahrefs + uma ferramenta de geração de imagens, adicione uma skill draw modelada na sua, e uma skill copywriting que capture a voz da sua marca. Ele vai descobrir o resto a partir do seu primeiro prompt.


