// ============================================================ // DIAGNÓSTICO INTERATIVO — qualitativo, sem R$, foco no caminho // O resultado é uma faixa estimada + o valor da gestão da Apta // ============================================================ function Toggle({ on, onChange, children }) { return ( ); } const SETUPS = [ { name: 'Setup 1', title: 'A base que te faz aparecer', range: [40, 80], desc: 'Site que converte + Google Meu Negócio + Google Ads. O essencial pra sair da invisibilidade e começar a receber lead.', items: ['Site / landing page', 'Google Meu Negócio', 'Google Ads'], tone: 'gold', }, { name: 'Setup 2', title: 'Mais canais, atendimento organizado', range: [90, 160], desc: 'Tudo do Setup 1 + Meta Ads pra ampliar alcance + Kommo CRM pra nenhum lead esfriar no caminho.', items: ['Tudo do Setup 1', 'Meta Ads', 'Kommo CRM'], tone: 'coral', }, { name: 'Setup 3', title: 'Operação inteligente, no automático', range: [180, 300], desc: 'Tudo do Setup 2 + automações n8n + IA atendendo e qualificando 24/7. Cresce sem virar caos nem depender de você.', items: ['Tudo do Setup 2', 'Automações n8n', 'IA + atendimento', 'Visão completa do negócio'], tone: 'sage', }, ]; function Diagnostic() { // O que o negócio já tem hoje (qualitativo, sem valores) const [hasSite, setHasSite] = React.useState(false); const [hasGMN, setHasGMN] = React.useState(false); const [hasAds, setHasAds] = React.useState(false); const [hasMeta, setHasMeta] = React.useState(false); const [hasCRM, setHasCRM] = React.useState(false); const [hasAuto, setHasAuto] = React.useState(false); const setup1Ok = hasSite && hasGMN && hasAds; const setup2Ok = setup1Ok && hasMeta && hasCRM; const setup3Ok = setup2Ok && hasAuto; // Qual setup recomendar: o primeiro incompleto let recIdx; if (!setup1Ok) recIdx = 0; else if (!setup2Ok) recIdx = 1; else recIdx = 2; const rec = SETUPS[recIdx]; const jaCompleto = setup3Ok; // Faixa de crescimento estimada do setup recomendado (anima o piso da faixa) const target = rec.range[0]; const [displayed, setDisplayed] = React.useState(target); React.useEffect(() => { const start = displayed, end = target, dur = 600, t0 = performance.now(); let raf; const step = (t) => { const k = Math.min(1, (t - t0) / dur); const eased = 1 - Math.pow(1 - k, 3); setDisplayed(Math.round(start + (end - start) * eased)); if (k < 1) raf = requestAnimationFrame(step); }; raf = requestAnimationFrame(step); return () => cancelAnimationFrame(raf); }, [target]); // O que ainda falta ativar (lista as peças desligadas, em ordem de setup) const pecas = [ { on: hasSite, label: 'Site / landing page', why: 'sem destino, o anúncio queima verba e não mede nada.' }, { on: hasGMN, label: 'Google Meu Negócio', why: '70% das buscas locais no celular param aqui. Sem ficha, o lead é do concorrente.' }, { on: hasAds, label: 'Google Ads', why: 'é onde quem já quer comprar te encontra na hora exata da busca.' }, { on: hasMeta, label: 'Meta Ads', why: 'amplia o alcance e aquece quem ainda não te conhece.' }, { on: hasCRM, label: 'Kommo CRM', why: 'sem acompanhamento, vendedor esquece e o lead esfria.' }, { on: hasAuto, label: 'Automação + IA', why: 'responde, qualifica e organiza 24/7 — sem depender de você.' }, ]; const faltam = pecas.filter(p => !p.on); return (
02 · diagnóstico interativo

Onde seu negócio
pode crescer mais?

Marque o que você já tem rodando hoje. A gente mostra qual o próximo passo e a faixa de crescimento que ele costuma destravar — em percentual, nunca em R$, porque cada negócio tem seu próprio ticket.

{/* CONTROLES — 3 blocos, um por setup */}
{[ { setup: SETUPS[0], ok: setup1Ok, toggles: [ { on: hasSite, set: setHasSite, label: 'Site ou landing page', small: 'que mede e qualifica o lead' }, { on: hasGMN, set: setHasGMN, label: 'Google Meu Negócio', small: 'ficha ativa, com fotos e reviews' }, { on: hasAds, set: setHasAds, label: 'Google Ads', small: 'anúncio na busca de quem quer comprar' }, ], }, { setup: SETUPS[1], ok: setup2Ok, toggles: [ { on: hasMeta, set: setHasMeta, label: 'Meta Ads', small: 'Instagram + Facebook pra ampliar alcance' }, { on: hasCRM, set: setHasCRM, label: 'CRM / atendimento organizado', small: 'cada lead acompanhado, ninguém esquecido' }, ], }, { setup: SETUPS[2], ok: setup3Ok, toggles: [ { on: hasAuto, set: setHasAuto, label: 'Automação + IA + BI Operacional', small: 'responde, qualifica e mostra os números 24/7' }, ], }, ].map((b, i) => { const isNext = !jaCompleto && i === recIdx; const status = b.ok ? 'done' : isNext ? 'next' : 'pending'; const statusLabel = b.ok ? '✓ completo' : isNext ? '← próximo passo' : 'ainda não'; return (
{b.setup.name} {statusLabel}
+{b.setup.range[0]}–{b.setup.range[1]}% faixa típica de crescimento
{b.toggles.map((t) => ( {t.label} {t.small} ))}
); })}
{`// `} as faixas são a média dos nossos clientes — não uma promessa.
{`// `} o resultado real depende do seu nicho, da sua oferta e da gestão contínua.
{/* RESULTADO */}
{jaCompleto ? (
operação completa ✓
redondo.
Você já tem os três setups. Agora é otimizar e escalar — e é exatamente aí que a gestão contínua faz diferença.
) : (
potencial estimado ativando o {rec.name}
+{displayed} a +{rec.range[1]}%
faixa de crescimento em clientes novos que esse passo costuma destravar
{`// `}varia por nicho, ticket médio e gestão. São médias reais dos nossos clientes ativos.
)} {/* Callout: o valor está na gestão, não no número */}
A Apta

O número não vem de um setup mágico — vem de alguém cuidando disso todo dia: ajustando campanha, respondendo lead, lendo o que funciona e corrigindo o que não funciona. É isso que a gente faz.

{/* O que ainda falta */} {faltam.length > 0 && (
o que ainda falta ativar {faltam.length} peça{faltam.length === 1 ? '' : 's'}
{faltam.map((p, i) => (
+
{p.label}
{p.why}
))}
)} {/* Setup track — 3 níveis com recomendação destacada */}
caminho sugerido 3 setups · ative no seu ritmo
{SETUPS.map((s, i) => { const isCurrent = !jaCompleto && i === recIdx; const isPast = i < recIdx || (jaCompleto); return (
{s.name} {isCurrent && ← seu próximo passo} {isPast && ✓ você já tem}
{s.title}
+{s.range[0]}–{s.range[1]}% faixa típica
    {s.items.map(it =>
  • {it}
  • )}
{isCurrent && ( Quero o {s.name} )}
); })}
); } Object.assign(window, { Diagnostic });