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:
parent
0fbae80622
commit
8bd7377706
2 changed files with 19 additions and 6 deletions
|
|
@ -219,11 +219,13 @@ export const SYSTEM_SKINS: SkinConfig[] = [
|
||||||
// Copy de resposta direta para tripwire/low-ticket: o objetivo é a COMPRA
|
// Copy de resposta direta para tripwire/low-ticket: o objetivo é a COMPRA
|
||||||
// de entrada barata, com o lucro vindo do funil (order bump/upsell).
|
// de entrada barata, com o lucro vindo do funil (order bump/upsell).
|
||||||
copy_rules:
|
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. ' +
|
'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. ' +
|
||||||
'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. ' +
|
'TOM/REGRAS: É um produto de ENTRADA (tripwire) para pais/mães — objetivo é a COMPRA imediata. ' +
|
||||||
'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). ' +
|
'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. ' +
|
||||||
'Fale a língua de pai/mãe: economia de tempo, festa encantadora, criança feliz, sem dor de cabeça. ' +
|
'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. ' +
|
||||||
'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.',
|
'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:
|
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',
|
'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',
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,9 @@
|
||||||
import { getAIClient } from './client';
|
import { getAIClient } from './client';
|
||||||
import { scrapeWebsiteContext } from './scraper';
|
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 {
|
export interface AdCopyVariation {
|
||||||
headline: string;
|
headline: string;
|
||||||
|
|
@ -92,6 +94,13 @@ REGRAS OBRIGATÓRIAS:
|
||||||
- Foque em benefícios, não features
|
- Foque em benefícios, não features
|
||||||
- Use gatilhos mentais (escassez, prova social, autoridade) com honestidade
|
- Use gatilhos mentais (escassez, prova social, autoridade) com honestidade
|
||||||
- Evite clickbait ou promessas impossíveis
|
- 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}
|
${directResponseRules}
|
||||||
|
|
||||||
Gere ${count} variações de copy para um anúncio de Facebook Ads baseado no contexto abaixo:
|
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({
|
const completion = await openai.chat.completions.create({
|
||||||
model: COPY_MODEL,
|
model: COPY_MODEL,
|
||||||
|
// Temperatura mais alta = copy menos engessada/repetitiva.
|
||||||
|
temperature: 0.9,
|
||||||
messages: [{ role: 'user', content: prompt }],
|
messages: [{ role: 'user', content: prompt }],
|
||||||
response_format: { type: 'json_object' },
|
response_format: { type: 'json_object' },
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue