From 8bd7377706fb55a71009908e62ede667b2265a70 Mon Sep 17 00:00:00 2001 From: Marcio Bevervanso Date: Tue, 16 Jun 2026 10:32:21 -0300 Subject: [PATCH] =?UTF-8?q?feat:=20melhorar=20qualidade=20da=20copy=20(mod?= =?UTF-8?q?elo=20full=20+=20regras=20anti-gen=C3=A9rico)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - copy passa de gpt-5.4-mini para gpt-5.4 (full), sobrescrevível por OPENAI_COPY_MODEL; temperatura 0.9 para texto menos engessado - prompt ganha bloco "proibido ser genérico": exige detalhe concreto por frase, pattern interrupt na 1a linha, variações realmente distintas - skin festa_infantil: copy_rules descrevem o fluxo self-service real (foto -> avatar 3D grátis -> escolher e gerar entre 33 artes; R$9,99 = 10 créditos) e proíbem "receba/kit pronto", forçando verbos de criação Co-Authored-By: Claude Opus 4.8 --- src/config/skins/index.ts | 12 +++++++----- src/lib/ai/copywriter.ts | 13 ++++++++++++- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/config/skins/index.ts b/src/config/skins/index.ts index 1fcd587..bfa5273 100644 --- a/src/config/skins/index.ts +++ b/src/config/skins/index.ts @@ -219,11 +219,13 @@ export const SYSTEM_SKINS: SkinConfig[] = [ // Copy de resposta direta para tripwire/low-ticket: o objetivo é a COMPRA // de entrada barata, com o lucro vindo do funil (order bump/upsell). copy_rules: - 'Você escreve para um PRODUTO DE ENTRADA de ticket baixo (tripwire) voltado a pais e mães organizando festas infantis. Objetivo: gerar a COMPRA imediata, não cliques curiosos. ' + - 'Lidere pelo preço-âncora e pela facilidade ("R$X no Pix e recebe na hora"). Destaque Pix = acesso imediato e cartão parcelado quando houver. ' + - 'Use o contraste de valor (o que receberia vs. quanto custa), prova de praticidade ("pronto em minutos"), e uma urgência honesta (oferta de lançamento/bônus). ' + - 'Fale a língua de pai/mãe: economia de tempo, festa encantadora, criança feliz, sem dor de cabeça. ' + - 'Evite promessas impossíveis e clickbait. CTA de compra (SHOP_NOW ou GET_OFFER). Primary text curto, escaneável e específico — sem encher linguiça.', + 'PRODUTO: um ESTÚDIO self-service de IA para festas infantis (NÃO é kit pronto entregue por e-mail). Funciona em 3 passos: 1) a pessoa envia uma foto do filho; 2) a IA cria o avatar da criança em personagem 3D (grátis); 3) ela escolhe entre 33 tipos de artes (convites, topo de bolo, lembrancinhas, tags e mais) e GERA as que quiser, baixa na hora e imprime. Modelo: R$9,99 = 10 créditos, 1 crédito por arte, pagamento único, recarrega se quiser mais. ' + + 'TOM/REGRAS: É um produto de ENTRADA (tripwire) para pais/mães — objetivo é a COMPRA imediata. ' + + 'SEMPRE use verbos de criação ("você cria", "você gera", "monte", "personalize") — NUNCA "receba", "compre o kit", "entregamos", "kit pronto". A pessoa faz ela mesma. ' + + 'Use a mecânica única como gancho: foto → avatar 3D do filho (grátis) → escolher e gerar as artes. Isso é o diferencial, não "praticidade" genérica. ' + + 'Lidere pelo preço-âncora (R$9,99 = 10 artes) e pelo instantâneo ("gera e baixa na hora"). Mencione Pix/cartão quando houver. ' + + 'Urgência honesta (oferta de lançamento/avatar grátis), nunca falsa escassez. ' + + 'CTA de compra (SHOP_NOW ou GET_OFFER). Texto específico e escaneável — sem clichê, sem encher linguiça.', image_style: 'Festa infantil mágica e encantadora, cores vibrantes e alegres, elementos lúdicos (balões, estrelas, brilho), tema de aniversário, visual limpo com destaque para o produto/oferta, alto contraste para parar o feed', }, diff --git a/src/lib/ai/copywriter.ts b/src/lib/ai/copywriter.ts index 7a79922..7d85ec0 100644 --- a/src/lib/ai/copywriter.ts +++ b/src/lib/ai/copywriter.ts @@ -5,7 +5,9 @@ import { getAIClient } from './client'; import { scrapeWebsiteContext } from './scraper'; -const COPY_MODEL = 'gpt-5.4-mini'; +// Copy é o que mais sofre com modelo fraco — o "mini" gera texto genérico. +// Default no modelo full; pode sobrescrever por env sem mexer no código. +const COPY_MODEL = process.env.OPENAI_COPY_MODEL || 'gpt-5.4'; export interface AdCopyVariation { headline: string; @@ -92,6 +94,13 @@ REGRAS OBRIGATÓRIAS: - Foque em benefícios, não features - Use gatilhos mentais (escassez, prova social, autoridade) com honestidade - Evite clickbait ou promessas impossíveis + +PROIBIDO SER GENÉRICO (regra mais importante): +- Nada de clichê vazio: "a melhor escolha", "qualidade incrível", "não perca essa oportunidade", "transforme sua vida", "praticidade e economia". Se a frase serve pra qualquer produto, está errada. +- CADA frase precisa de um detalhe CONCRETO e específico do produto (número, mecânica, preço, o que a pessoa faz/recebe exatamente). Use os dados reais do contexto/oferta — não invente nem generalize. +- A primeira linha do Texto Principal tem que ser um "pattern interrupt": uma frase específica que faz a pessoa parar de rolar o feed (uma pergunta afiada, um número, uma cena concreta). Nunca comece com saudação ou frase morna. +- Escreva como gente fala, não como folheto. Concreto > adjetivo. Verbo de ação > descrição. +- As ${count} variações devem ser GENUINAMENTE diferentes entre si (ângulo, abertura e estrutura) — não a mesma ideia reescrita. ${directResponseRules} Gere ${count} variações de copy para um anúncio de Facebook Ads baseado no contexto abaixo: @@ -112,6 +121,8 @@ Retorne um JSON com a seguinte estrutura: const completion = await openai.chat.completions.create({ model: COPY_MODEL, + // Temperatura mais alta = copy menos engessada/repetitiva. + temperature: 0.9, messages: [{ role: 'user', content: prompt }], response_format: { type: 'json_object' }, });