feat: melhorar qualidade da copy (modelo full + regras anti-genérico)

- 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 <noreply@anthropic.com>
This commit is contained in:
Marcio Bevervanso 2026-06-16 10:32:21 -03:00
parent 0fbae80622
commit 8bd7377706
2 changed files with 19 additions and 6 deletions

View file

@ -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',
},

View file

@ -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' },
});