Full app with AI campaign creation/copy/creative generation, dashboard, campaign automation engine, Meta OAuth login, and a redesigned landing page. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
209 lines
9.4 KiB
TypeScript
209 lines
9.4 KiB
TypeScript
'use client';
|
|
|
|
import Link from 'next/link';
|
|
import { motion } from 'framer-motion';
|
|
import { Wand2, Activity, Shield, History, ArrowRight, Sparkles } from 'lucide-react';
|
|
import { PublicHeader } from '@/components/public/PublicHeader';
|
|
import { PublicFooter } from '@/components/public/PublicFooter';
|
|
import { FloatingOrbs } from '@/components/public/FloatingOrbs';
|
|
import { LiveChartMock } from '@/components/public/LiveChartMock';
|
|
import { HowItWorks } from '@/components/public/HowItWorks';
|
|
import { StatsStrip } from '@/components/public/StatsStrip';
|
|
import { ScrollReveal } from '@/components/public/ScrollReveal';
|
|
|
|
const features = [
|
|
{
|
|
icon: Wand2,
|
|
title: 'Criação de campanhas com IA',
|
|
description: 'Cole o link do seu site (ou descreva seu produto) e a IA detecta o nicho, monta a copy, gera imagens e configura toda a campanha sozinha.',
|
|
},
|
|
{
|
|
icon: Activity,
|
|
title: 'Auditoria automática de anúncios',
|
|
description: 'A IA lê suas campanhas ativas, analisa métricas (CTR, CPC, ROAS) e sugere os próximos passos com linguagem clara, sem jargão.',
|
|
},
|
|
{
|
|
icon: Shield,
|
|
title: 'Automação por regras',
|
|
description: 'Defina regras de orçamento e performance — pausar, escalar ou ajustar lances automaticamente conforme os resultados chegam.',
|
|
},
|
|
{
|
|
icon: History,
|
|
title: 'Histórico que nunca se perde',
|
|
description: 'Toda copy, criativo e configuração gerados ficam salvos — mesmo se a publicação falhar, você retoma de onde parou.',
|
|
},
|
|
];
|
|
|
|
const fadeUp = {
|
|
hidden: { opacity: 0, y: 24 },
|
|
show: (i: number) => ({
|
|
opacity: 1,
|
|
y: 0,
|
|
transition: { duration: 0.7, delay: 0.1 + i * 0.12, ease: 'easeOut' as const },
|
|
}),
|
|
};
|
|
|
|
export default function LandingPage() {
|
|
return (
|
|
<div className="min-h-screen flex flex-col" style={{ background: 'var(--background)', color: 'var(--foreground)' }}>
|
|
<PublicHeader />
|
|
|
|
<main className="flex-1">
|
|
{/* Hero */}
|
|
<section className="relative overflow-hidden">
|
|
<div className="absolute inset-0 bg-grid-pattern opacity-30" />
|
|
<FloatingOrbs />
|
|
|
|
<div className="relative z-10 max-w-6xl mx-auto px-6 py-20 md:py-28 grid lg:grid-cols-[1.1fr_0.9fr] gap-14 items-center">
|
|
<div className="text-center lg:text-left">
|
|
<motion.div
|
|
custom={0}
|
|
initial="hidden"
|
|
animate="show"
|
|
variants={fadeUp}
|
|
className="inline-flex items-center gap-2 px-4 py-1.5 rounded-full text-xs font-medium mb-6"
|
|
style={{ background: 'var(--overlay-04)', border: '1px solid var(--overlay-08)', color: 'var(--accent-hover)' }}
|
|
>
|
|
<motion.span
|
|
animate={{ rotate: [0, 15, -10, 0] }}
|
|
transition={{ duration: 2.4, repeat: Infinity, ease: 'easeInOut' }}
|
|
className="inline-flex"
|
|
>
|
|
<Sparkles size={14} />
|
|
</motion.span>
|
|
Tráfego pago no Meta, no piloto automático
|
|
</motion.div>
|
|
|
|
<motion.h1
|
|
custom={1}
|
|
initial="hidden"
|
|
animate="show"
|
|
variants={fadeUp}
|
|
className="text-4xl md:text-6xl font-bold leading-tight mb-6"
|
|
>
|
|
Crie, publique e otimize campanhas no <span className="gradient-text">Meta Ads</span> com IA autônoma
|
|
</motion.h1>
|
|
|
|
<motion.p
|
|
custom={2}
|
|
initial="hidden"
|
|
animate="show"
|
|
variants={fadeUp}
|
|
className="text-base md:text-lg max-w-xl mx-auto lg:mx-0 mb-10"
|
|
style={{ color: 'var(--muted-fg)' }}
|
|
>
|
|
O MetaAds Pro conecta direto com sua conta do Facebook Ads, entende seu produto a partir de um link
|
|
ou descrição, e monta campanhas profissionais — copy, criativos, segmentação e configuração — sem você
|
|
precisar preencher um formulário gigante.
|
|
</motion.p>
|
|
|
|
<motion.div
|
|
custom={3}
|
|
initial="hidden"
|
|
animate="show"
|
|
variants={fadeUp}
|
|
className="flex flex-col sm:flex-row items-center justify-center lg:justify-start gap-4"
|
|
>
|
|
<Link href="/login" className="group">
|
|
<motion.span
|
|
whileHover={{ scale: 1.04 }}
|
|
whileTap={{ scale: 0.97 }}
|
|
className="flex items-center gap-2 px-6 py-3.5 rounded-xl font-semibold text-white transition-shadow duration-300"
|
|
style={{ background: 'linear-gradient(135deg, #6366f1, #8b5cf6)', boxShadow: '0 8px 32px rgba(99,102,241,0.3)' }}
|
|
>
|
|
Começar agora
|
|
<ArrowRight size={18} className="transition-transform group-hover:translate-x-1" />
|
|
</motion.span>
|
|
</Link>
|
|
<Link href="#features">
|
|
<motion.span
|
|
whileHover={{ scale: 1.04 }}
|
|
whileTap={{ scale: 0.97 }}
|
|
className="inline-flex px-6 py-3.5 rounded-xl font-medium"
|
|
style={{ background: 'var(--overlay-04)', border: '1px solid var(--overlay-08)', color: 'var(--foreground)' }}
|
|
>
|
|
Ver como funciona
|
|
</motion.span>
|
|
</Link>
|
|
</motion.div>
|
|
</div>
|
|
|
|
<div className="flex justify-center lg:justify-end">
|
|
<LiveChartMock />
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<StatsStrip />
|
|
|
|
<HowItWorks />
|
|
|
|
{/* Features */}
|
|
<section id="features" className="max-w-6xl mx-auto px-6 py-20">
|
|
<ScrollReveal className="text-center mb-14">
|
|
<h2 className="text-2xl md:text-3xl font-bold mb-3">Tudo que você precisa para escalar no Meta Ads</h2>
|
|
<p className="text-sm md:text-base max-w-xl mx-auto" style={{ color: 'var(--muted-fg)' }}>
|
|
Conectado via integração oficial da Meta — você mantém o controle total da sua conta de anúncios.
|
|
</p>
|
|
</ScrollReveal>
|
|
|
|
<div className="grid sm:grid-cols-2 gap-5">
|
|
{features.map((feature, i) => {
|
|
const Icon = feature.icon;
|
|
return (
|
|
<ScrollReveal key={feature.title} delay={i * 0.1}>
|
|
<motion.div
|
|
whileHover={{ y: -4 }}
|
|
transition={{ type: 'spring', stiffness: 300, damping: 20 }}
|
|
className="glass-card p-6 h-full"
|
|
>
|
|
<div className="w-11 h-11 rounded-xl flex items-center justify-center mb-4" style={{ background: 'rgba(99,102,241,0.12)', border: '1px solid rgba(99,102,241,0.2)' }}>
|
|
<Icon size={20} style={{ color: 'var(--accent-soft-fg)' }} />
|
|
</div>
|
|
<h3 className="text-base font-semibold mb-2" style={{ color: 'var(--foreground)' }}>{feature.title}</h3>
|
|
<p className="text-sm leading-relaxed" style={{ color: 'var(--muted-fg)' }}>{feature.description}</p>
|
|
</motion.div>
|
|
</ScrollReveal>
|
|
);
|
|
})}
|
|
</div>
|
|
</section>
|
|
|
|
{/* CTA */}
|
|
<section className="max-w-4xl mx-auto px-6 pb-24">
|
|
<ScrollReveal>
|
|
<div className="gradient-border relative overflow-hidden">
|
|
<motion.div
|
|
className="absolute inset-0 opacity-40"
|
|
style={{ background: 'radial-gradient(circle at 30% 20%, rgba(99,102,241,0.25), transparent 60%)' }}
|
|
animate={{ opacity: [0.25, 0.5, 0.25] }}
|
|
transition={{ duration: 4, repeat: Infinity, ease: 'easeInOut' }}
|
|
/>
|
|
<div className="relative p-10 text-center rounded-2xl" style={{ background: 'var(--card)', backdropFilter: 'blur(20px)' }}>
|
|
<h2 className="text-2xl font-bold mb-3">Pronto para automatizar suas campanhas?</h2>
|
|
<p className="text-sm mb-7 max-w-lg mx-auto" style={{ color: 'var(--muted-fg)' }}>
|
|
Conecte sua conta do Facebook em segundos e deixe a IA cuidar do trabalho pesado — da estratégia à publicação.
|
|
</p>
|
|
<Link href="/login">
|
|
<motion.span
|
|
whileHover={{ scale: 1.04 }}
|
|
whileTap={{ scale: 0.97 }}
|
|
className="inline-flex items-center gap-2 px-6 py-3.5 rounded-xl font-semibold text-white"
|
|
style={{ background: 'linear-gradient(135deg, #1877F2, #0C63D4)', boxShadow: '0 4px 20px rgba(24,119,242,0.3)' }}
|
|
>
|
|
<svg width="18" height="18" viewBox="0 0 24 24" fill="white">
|
|
<path d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"/>
|
|
</svg>
|
|
Entrar com Facebook
|
|
</motion.span>
|
|
</Link>
|
|
</div>
|
|
</div>
|
|
</ScrollReveal>
|
|
</section>
|
|
</main>
|
|
|
|
<PublicFooter />
|
|
</div>
|
|
);
|
|
}
|