Analisando as 6 imagens fornecidas:
Vou substituir as imagens do site mapeando cada uma para seus respectivos locais, sem repetições:
Perfeito. Analisando o site, vejo que preciso substituir 5 imagens Monday usadas em 3 seções. Vou mapear a distribuição sem repetições:
Vou reorganizar para usar as 6 novas imagens sem repetir:
Pronto! Substitui todas as 6 imagens do Monday na landing page, cada uma em seu local específico, sem repetições:
Distribuição das imagens:
As imagens antigas foram completamente substituídas pelos novos dashboards do Monday.com que ilustram casos de uso reais: planejamento de projetos, gestão de tarefas e visões executivas com KPIs.
Vou compilar todo o código da página em um único bloco. Deixe-me ler todos os arquivos:
Aqui está o código completo da página em um bloco único. Copie e cole para usar em outra conversa:
=== PROJETO ALMA NEGÓCIOS - CÓDIGO COMPLETO ===
URLs DAS IMAGENS (substitua conforme necessário):
- Logo ALMA: https://hebbkx1anhila5yf.public.blob.vercel-storage.com/Branco-OSTSwGipHVsPLUCpO5mMizBNBjHZT1.png
- Selo Monday Partner: https://hebbkx1anhila5yf.public.blob.vercel-storage.com/%5BALMA%5D%20Publica%C3%A7%C3%B5es%202026%20%2840%29-Dihw5TRhkjhveVSScbF9JOpjzdUEMZ.png
- Panorama Project: https://hebbkx1anhila5yf.public.blob.vercel-storage.com/image-AIqWVMbA785nG07Q0VGmAPplHQGZci.png
- Planejamento Mensal: https://hebbkx1anhila5yf.public.blob.vercel-storage.com/image-bGTo9BwAcVoF0lWdm5L6q4ITcQjM9i.png
- Tarefas Equipe: https://hebbkx1anhila5yf.public.blob.vercel-storage.com/image-2RGy178cP8UibRE0THcHYEj31eZwW6.png
- Visão Geral Trimestre: https://hebbkx1anhila5yf.public.blob.vercel-storage.com/image-n9dJ74fpi1wh32QFcIJ07c0qA3leZJ.png
- Panorama Projetos: https://hebbkx1anhila5yf.public.blob.vercel-storage.com/image-0WDRzmWm8wdRqHRDt2mlIRudzxjTCr.png
- Panorama Projeto Trim: https://hebbkx1anhila5yf.public.blob.vercel-storage.com/image-l4TvtrLe6IXBhVKGEai2uwCkiSCUhn.png
- Team 1: https://hebbkx1anhila5yf.public.blob.vercel-storage.com/image-PWew5M9Skx8NfO4zXdDW58Uo2nd8CM.png
- Team 3: https://hebbkx1anhila5yf.public.blob.vercel-storage.com/image-JjeciBSU88HirnwdTFEk4TIHEr8nvx.png
=== ESTRUTURA DE DIRETÓRIOS ===
app/
page.tsx
layout.tsx
globals.css
lib/
images.ts
components/
hero-section.tsx
companies-section.tsx
process-section.tsx
before-after-section.tsx
visual-examples-section.tsx
faq-section.tsx
cta-section.tsx
site-footer.tsx
whatsapp-button.tsx
sticky-whatsapp.tsx
ui/ (shadcn components - accordion, badge, card)
next.config.mjs
package.json
tsconfig.json
=== ARQUIVO: app/page.tsx ===
import { HeroSection } from "@/components/hero-section"
import { CompaniesSection } from "@/components/companies-section"
import { ProcessSection } from "@/components/process-section"
import { BeforeAfterSection } from "@/components/before-after-section"
import { VisualExamplesSection } from "@/components/visual-examples-section"
import { FaqSection } from "@/components/faq-section"
import { CtaSection } from "@/components/cta-section"
import { SiteFooter } from "@/components/site-footer"
import { StickyWhatsApp } from "@/components/sticky-whatsapp"
export default function Page() {
return (
<main className="min-h-screen">
<HeroSection />
<CompaniesSection />
<ProcessSection />
<BeforeAfterSection />
<VisualExamplesSection />
<FaqSection />
<CtaSection />
<SiteFooter />
<StickyWhatsApp />
</main>
)
}
=== ARQUIVO: app/layout.tsx ===
import type { Metadata, Viewport } from 'next'
import { Inter, Space_Grotesk } from 'next/font/google'
import { Analytics } from '@vercel/analytics/next'
import './globals.css'
const inter = Inter({ subsets: ['latin'], variable: '--font-inter' })
const spaceGrotesk = Space_Grotesk({ subsets: ['latin'], variable: '--font-space-grotesk' })
export const metadata: Metadata = {
title: 'ALMA Negócios | Implantação do monday.com para PMEs',
description:
'A ALMA configura, organiza e coloca seu time em rotina de gestão no monday.com. Processos claros, donos definidos, prazos sob controle e visibilidade total.',
generator: 'v0.app',
icons: {
icon: [
{
url: '/icon-light-32x32.png',
media: '(prefers-color-scheme: light)',
},
{
url: '/icon-dark-32x32.png',
media: '(prefers-color-scheme: dark)',
},
{
url: '/icon.svg',
type: 'image/svg+xml',
},
],
apple: '/apple-icon.png',
},
}
export const viewport: Viewport = {
themeColor: '#0B0B14',
width: 'device-width',
initialScale: 1,
}
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode
}>) {
return (
<html lang="pt-BR" className="dark">
<body className={`${inter.variable} ${spaceGrotesk.variable} font-sans antialiased`}>
{children}
<Analytics />
</body>
</html>
)
}
=== ARQUIVO: app/globals.css ===
@import 'tailwindcss';
@import 'tw-animate-css';
@custom-variant dark (&:is(.dark *));
:root {
/* Palette: Indigo #3D3D7E | Burgundy #6B2A52 | Crimson #C52960 | Black | White */
--background: #0B0B14;
--foreground: #F5F5F7;
--card: #111120;
--card-foreground: #F5F5F7;
--popover: #111120;
--popover-foreground: #F5F5F7;
--primary: #C52960;
--primary-foreground: #F5F5F7;
--secondary: #3D3D7E;
--secondary-foreground: #F5F5F7;
--muted: #1A1A2E;
--muted-foreground: #9A9AB0;
--accent: #6B2A52;
--accent-foreground: #F5F5F7;
--destructive: #C52960;
--destructive-foreground: #F5F5F7;
--border: #2A2A45;
--input: #2A2A45;
--ring: #C52960;
--chart-1: #C52960;
--chart-2: #3D3D7E;
--chart-3: #6B2A52;
--chart-4: #C52960;
--chart-5: #3D3D7E;
--radius: 0.625rem;
--sidebar: #111120;
--sidebar-foreground: #F5F5F7;
--sidebar-primary: #C52960;
--sidebar-primary-foreground: #F5F5F7;
--sidebar-accent: #1A1A2E;
--sidebar-accent-foreground: #F5F5F7;
--sidebar-border: #2A2A45;
--sidebar-ring: #C52960;
}
.dark {
--background: #0B0B14;
--foreground: #F5F5F7;
--card: #111120;
--card-foreground: #F5F5F7;
--popover: #111120;
--popover-foreground: #F5F5F7;
--primary: #C52960;
--primary-foreground: #F5F5F7;
--secondary: #3D3D7E;
--secondary-foreground: #F5F5F7;
--muted: #1A1A2E;
--muted-foreground: #9A9AB0;
--accent: #6B2A52;
--accent-foreground: #F5F5F7;
--destructive: #C52960;
--destructive-foreground: #F5F5F7;
--border: #2A2A45;
--input: #2A2A45;
--ring: #C52960;
}
@theme inline {
--font-sans: var(--font-inter), 'Inter', system-ui, sans-serif;
--font-mono: var(--font-space-grotesk), 'Space Grotesk', monospace;
--color-background: var(--background);
--color-foreground: var(--foreground);
--color-card: var(--card);
--color-card-foreground: var(--card-foreground);
--color-popover: var(--popover);
--color-popover-foreground: var(--popover-foreground);
--color-primary: var(--primary);
--color-primary-foreground: var(--primary-foreground);
--color-secondary: var(--secondary);
--color-secondary-foreground: var(--secondary-foreground);
--color-muted: var(--muted);
--color-muted-foreground: var(--muted-foreground);
--color-accent: var(--accent);
--color-accent-foreground: var(--accent-foreground);
--color-destructive: var(--destructive);
--color-destructive-foreground: var(--destructive-foreground);
--color-border: var(--border);
--color-input: var(--input);
--color-ring: var(--ring);
--color-chart-1: var(--chart-1);
--color-chart-2: var(--chart-2);
--color-chart-3: var(--chart-3);
--color-chart-4: var(--chart-4);
--color-chart-5: var(--chart-5);
--radius-sm: calc(var(--radius) - 4px);
--radius-md: calc(var(--radius) - 2px);
--radius-lg: var(--radius);
--radius-xl: calc(var(--radius) + 4px);
--color-sidebar: var(--sidebar);
--color-sidebar-foreground: var(--sidebar-foreground);
--color-sidebar-primary: var(--sidebar-primary);
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
--color-sidebar-accent: var(--sidebar-accent);
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
--color-sidebar-border: var(--sidebar-border);
--color-sidebar-ring: var(--sidebar-ring);
}
@layer base {
* {
@apply border-border outline-ring/50;
}
body {
@apply bg-background text-foreground;
}
}
@keyframes float {
0%, 100% { transform: translateY(0px); }
50% { transform: translateY(-8px); }
}
@keyframes float-slow {
0%, 100% { transform: translateY(0px) rotate(-1deg); }
50% { transform: translateY(-12px) rotate(1deg); }
}
.animate-float {
animation: float 4s ease-in-out infinite;
}
.animate-float-slow {
animation: float-slow 6s ease-in-out infinite;
}
=== ARQUIVO: lib/images.ts ===
export const IMAGES = {
almaLogo: "https://hebbkx1anhila5yf.public.blob.vercel-storage.com/Branco-OSTSwGipHVsPLUCpO5mMizBNBjHZT1.png",
mondayPartner: "https://hebbkx1anhila5yf.public.blob.vercel-storage.com/%5BALMA%5D%20Publica%C3%A7%C3%B5es%202026%20%2840%29-Dihw5TRhkjhveVSScbF9JOpjzdUEMZ.png",
team1: "https://hebbkx1anhila5yf.public.blob.vercel-storage.com/image-PWew5M9Skx8NfO4zXdDW58Uo2nd8CM.png",
team2: "https://hebbkx1anhila5yf.public.blob.vercel-storage.com/image-XREng5CXdKwqmWBJa24zmpgDsOoEvy.png",
team3: "https://hebbkx1anhila5yf.public.blob.vercel-storage.com/image-JjeciBSU88HirnwdTFEk4TIHEr8nvx.png",
panoramaProject: "https://hebbkx1anhila5yf.public.blob.vercel-storage.com/image-AIqWVMbA785nG07Q0VGmAPplHQGZci.png",
planejamentoMensal: "https://hebbkx1anhila5yf.public.blob.vercel-storage.com/image-bGTo9BwAcVoF0lWdm5L6q4ITcQjM9i.png",
tarefasEquipe: "https://hebbkx1anhila5yf.public.blob.vercel-storage.com/image-2RGy178cP8UibRE0THcHYEj31eZwW6.png",
visaoGeralTrimestre: "https://hebbkx1anhila5yf.public.blob.vercel-storage.com/image-n9dJ74fpi1wh32QFcIJ07c0qA3leZJ.png",
panoramaProjetos: "https://hebbkx1anhila5yf.public.blob.vercel-storage.com/image-0WDRzmWm8wdRqHRDt2mlIRudzxjTCr.png",
panoramaProjetoTrim: "https://hebbkx1anhila5yf.public.blob.vercel-storage.com/image-l4TvtrLe6IXBhVKGEai2uwCkiSCUhn.png",
mondayBoardClean: "https://hebbkx1anhila5yf.public.blob.vercel-storage.com/image-xXRvC1BOpDLWZPZGRZ27SsGPqMfgZF.png",
mondayMeeting: "https://hebbkx1anhila5yf.public.blob.vercel-storage.com/image-iW6dTX7kcdSXxmtQY3Yil96qdXGzSY.png",
} as const
=== ARQUIVO: components/hero-section.tsx ===
import { Badge } from "@/components/ui/badge"
import { WhatsAppButton } from "@/components/whatsapp-button"
import { IMAGES } from "@/lib/images"
import { Award, TrendingUp, Globe, DollarSign } from "lucide-react"
const bullets = [
"Processos críticos viram fluxo dentro do monday (com dono, prazo e prioridade).",
"Automations reduzem follow-up manual e evitam gargalos invisíveis.",
"Dashboards para liderança acompanhar execução sem depender de reunião.",
]
const stats = [
{ icon: TrendingUp, value: "+50%", label: "crescimento médio" },
{ icon: Award, value: "50+", label: "PMEs aceleradas" },
{ icon: Globe, value: "3", label: "continentes atendidos" },
{ icon: DollarSign, value: "R$5M+", label: "em receita gerada" },
]
export function HeroSection() {
return (
<section className="relative min-h-screen overflow-hidden bg-[#0B0B14]">
<div className="relative z-10 mx-auto max-w-7xl px-6 pb-20 pt-12 md:px-12 lg:pb-28 lg:pt-16">
<div className="mb-12 flex flex-wrap items-center gap-3">
<img
src={IMAGES.almaLogo}
alt="ALMA Negócios"
width={44}
height={44}
className="brightness-0 invert"
/>
<span className="font-mono text-xl font-bold tracking-tight text-foreground">
ALMA
<span className="ml-1.5 text-sm font-medium text-muted-foreground">
Negócios
</span>
</span>
<span className="mx-1 hidden h-5 w-px bg-[#2A2A45] sm:block" />
<Badge variant="outline" className="border-[#3D3D7E] bg-[#3D3D7E]/20 text-xs text-foreground">
Parceiros certificados do monday.com
</Badge>
</div>
<div className="grid items-center gap-16 lg:grid-cols-[1.1fr_1fr]">
<div>
<p className="mb-4 text-xs text-muted-foreground">
Inovar não é legal, é necessário!
</p>
<h1 className="mb-6 text-pretty text-3xl font-bold leading-[1.1] tracking-tight text-foreground md:text-4xl lg:text-5xl">
<div className="mb-6 flex flex-wrap items-center gap-4 lg:mb-8">
<div>
<span className="text-[#C52960]">
Implantação do monday.com sob medida:
</span>
<br />
<span className="text-xl font-semibold leading-snug text-[#c8c8d8] md:text-2xl lg:text-3xl">
processos mapeados, quadros configurados e
<span className="text-[#3D3D7E]">time treinado para executar.</span>
</span>
</div>
<div className="hidden lg:block shrink-0">
<img
src={IMAGES.mondayPartner}
alt="monday.com Partner Certified"
width={140}
height={140}
className="w-32 h-32 object-contain"
/>
</div>
</div>
</h1>
<p className="mb-8 max-w-xl text-base leading-relaxed text-[#c8c8d8]">
A ALMA transforma o monday.com em um sistema de trabalho da sua empresa — com áreas de trabalho, boards, automações e dashboards desenhados a partir dos seus processos principais.
</p>
<ul className="mb-8 flex flex-col gap-3">
{bullets.map((bullet) => (
<li key={bullet} className="flex items-start gap-3 text-sm text-foreground">
<span className="mt-1 flex size-5 shrink-0 items-center justify-center rounded-full bg-[#C52960]/20 text-[#C52960]">
<svg width="10" height="10" viewBox="0 0 12 12" fill="none">
<path d="M2 6L5 9L10 3" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
</svg>
</span>
{bullet}
</li>
))}
</ul>
<div className="mb-10 grid grid-cols-2 gap-3 sm:grid-cols-4">
{stats.map((stat) => {
const Icon = stat.icon
return (
<div key={stat.label} className="flex flex-col items-center gap-1 rounded-xl border border-[#2A2A45] bg-[#111120]/60 px-3 py-3.5 text-center backdrop-blur-sm">
<Icon className="mb-1 size-4 text-[#C52960]" />
<span className="text-lg font-bold text-foreground">{stat.value}</span>
<span className="text-[10px] leading-tight text-muted-foreground">{stat.label}</span>
</div>
)
})}
</div>
<WhatsAppButton />
<p className="mt-8 text-sm font-bold tracking-wider text-[#C52960]">
INOVAR NÃO É LEGAL, É NECESSÁRIO!
</p>
</div>
<div className="relative hidden lg:block">
<div className="relative mx-auto h-[540px] w-full max-w-[480px]">
<div className="animate-float-slow absolute -left-4 top-0 w-[380px] -rotate-3 overflow-hidden rounded-2xl border border-white/10 shadow-2xl shadow-[#3D3D7E]/20 transition-transform duration-500 hover:rotate-0 hover:scale-[1.02]">
<img src={IMAGES.panoramaProject} alt="" className="w-full" />
</div>
<div className="animate-float absolute right-0 top-24 w-[360px] rotate-2 overflow-hidden rounded-2xl border border-white/10 shadow-2xl shadow-[#C52960]/15 transition-transform duration-500 hover:rotate-0 hover:scale-[1.02]">
<img src={IMAGES.panoramaProjetoTrim} alt="" className="w-full" />
</div>
<div className="animate-float absolute -left-6 bottom-0 w-[260px] -rotate-2 overflow-hidden rounded-2xl border border-white/10 shadow-2xl shadow-[#6B2A52]/20 transition-transform duration-500 hover:rotate-0 hover:scale-[1.03]">
<img src={IMAGES.visaoGeralTrimestre} alt="" className="w-full" />
</div>
<div className="absolute -right-2 top-0 z-20 flex items-center gap-2 rounded-lg border border-[#3D3D7E]/40 bg-[#111120]/95 px-3 py-2 shadow-xl backdrop-blur-md">
<Award className="size-4 text-[#3D3D7E]" />
<span className="text-xs font-semibold text-foreground">monday.com Partner</span>
</div>
</div>
</div>
</div>
</div>
</section>
)
}
=== ARQUIVO: components/companies-section.tsx ===
import { IMAGES } from "@/lib/images"
export function CompaniesSection() {
const companies = [
{ name: "BTG Pactual", placeholder: "btg" },
{ name: "Petlove", placeholder: "petlove" },
{ name: "QuintoAndar", placeholder: "quintoAndar" },
{ name: "CBF Brasil", placeholder: "cbf" },
]
return (
<section className="py-8 md:py-10 bg-[#0B0B14]">
<div className="mx-auto max-w-7xl px-6 md:px-12">
<div className="mb-8 text-center">
<p className="text-sm md:text-base text-foreground leading-relaxed">
<span className="font-semibold">monday.com é a solução escolhida</span> para gestão de projetos e atividades das seguintes empresas parceiras:
</p>
</div>
<div className="flex flex-wrap items-center justify-center gap-8 md:gap-12">
{companies.map((company) => (
<div
key={company.name}
className="flex h-16 w-32 items-center justify-center rounded-lg border border-[#2A2A45] bg-[#111120]/40 opacity-60 transition-all duration-300 hover:opacity-100 hover:border-[#3D3D7E]"
>
<span className="text-xs font-semibold text-muted-foreground text-center px-2">
{company.name}
</span>
</div>
))}
</div>
<div className="mt-8 text-center">
<p className="text-xs text-muted-foreground flex items-center justify-center gap-2">
<svg className="size-4 text-[#3D3D7E]" viewBox="0 0 24 24" fill="currentColor">
<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z" />
</svg>
ALMA é parceira da ABS — Associação Brasileira de Startups
</p>
</div>
</div>
</section>
)
}
=== ARQUIVO: components/process-section.tsx ===
import { Card, CardContent } from "@/components/ui/card"
import { IMAGES } from "@/lib/images"
import { Search, Wallet, Settings2, LayoutGrid, GraduationCap, Headphones } from "lucide-react"
const steps = [
{
icon: Search,
title: "Mapeamento dos processos principais",
description: "Entendemos o que precisa virar fluxo dentro da plataforma.",
color: "#3D3D7E",
},
{
icon: Wallet,
title: "Apoio na escolha do melhor plano",
description: "Avaliamos necessidades e ajudamos a decidir o plano ideal.",
color: "#6B2A52",
},
{
icon: Settings2,
title: "Configuração personalizada",
description: "Estrutura, permissões, padrões e nomenclaturas para sua operação.",
color: "#C52960",
},
{
icon: LayoutGrid,
title: "Workspaces, boards e automações",
description: "Quadros por área, templates e automations para reduzir atrito.",
color: "#3D3D7E",
},
{
icon: GraduationCap,
title: "Treinamento da equipe",
description: "Capacitação por área + rotina de uso no dia a dia.",
color: "#6B2A52",
},
{
icon: Headphones,
title: "Acompanhamento e suporte na implantação",
description: "Go-live assistido + ajustes finos e estabilização.",
color: "#C52960",
},
]
export function ProcessSection() {
return (
<section className="relative overflow-hidden py-8 md:py-12">
<div className="pointer-events-none absolute -right-20 top-1/2 hidden w-[520px] -translate-y-1/2 rotate-6 opacity-[0.06] xl:block">
<img src={IMAGES.mondayBoardClean} alt="" className="w-full rounded-2xl" />
</div>
<div className="pointer-events-none absolute -left-32 bottom-12 hidden w-[340px] -rotate-6 opacity-[0.04] xl:block">
<img src={IMAGES.mondayMeeting} alt="" className="w-full rounded-2xl" />
</div>
<div className="relative mx-auto max-w-6xl px-6">
<div className="mb-12 text-center">
<p className="mb-3 text-xs font-semibold uppercase tracking-[0.2em] text-[#C52960]">
Implantação completa
</p>
<h2 className="text-pretty text-3xl font-bold text-foreground md:text-4xl">
O que a ALMA entrega na implantação do
<span className="text-[#3D3D7E]">monday.com.</span>
</h2>
</div>
<div className="grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
{steps.map((step, i) => {
const Icon = step.icon
return (
<Card
key={step.title}
className="group border-[#2A2A45] bg-[#111120] transition-all duration-300 hover:-translate-y-1 hover:border-[#3D3D7E]/40"
>
<CardContent className="flex flex-col gap-4 p-6">
<div className="flex items-center justify-between">
<div
className="flex size-11 items-center justify-center rounded-xl"
style={{ backgroundColor: step.color }}
>
<Icon className="size-5 text-white" />
</div>
<span className="font-mono text-3xl font-bold text-[#2A2A45]">
{String(i + 1).padStart(2, "0")}
</span>
</div>
<div>
<h3 className="mb-2 text-base font-bold text-foreground">
{step.title}
</h3>
<p className="text-sm leading-relaxed text-[#9A9AB0]">
{step.description}
</p>
</div>
</CardContent>
</Card>
)
})}
</div>
</div>
</section>
)
}
=== ARQUIVO: components/before-after-section.tsx ===
import { IMAGES } from "@/lib/images"
import { XCircle, CheckCircle } from "lucide-react"
const before = [
"Informação espalhada.",
"Retrabalho constante.",
"Atrasos recorrentes.",
"Prioridade no grito.",
]
const after = [
"Fluxo claro no monday.",
"Responsáveis definidos.",
"Cadência de gestão.",
"Visibilidade executiva.",
]
export function BeforeAfterSection() {
return (
<section className="relative overflow-hidden py-8 md:py-12">
<div className="relative mx-auto max-w-6xl px-6">
<div className="mb-12 text-center">
<p className="mb-3 text-xs font-semibold uppercase tracking-[0.2em] text-[#C52960]">
Transformação
</p>
<h2 className="text-pretty text-3xl font-bold text-foreground md:text-4xl">
Antes →
<span className="text-[#3D3D7E]">Depois</span>
</h2>
</div>
<div className="grid items-stretch gap-6 lg:grid-cols-2">
<div className="rounded-2xl border border-[#2A2A45] bg-[#111120] p-8">
<p className="mb-6 flex items-center gap-2 text-sm font-bold uppercase tracking-wider text-[#C52960]">
<XCircle className="size-5" />
Antes
</p>
<ul className="flex flex-col gap-4">
{before.map((item) => (
<li key={item} className="flex items-center gap-4 text-base text-[#9A9AB0]">
<span className="size-2 shrink-0 rounded-full bg-[#C52960]/60" />
{item}
</li>
))}
</ul>
</div>
<div className="relative overflow-hidden rounded-2xl border border-[#3D3D7E]/50 bg-[#3D3D7E]/10 p-8">
<p className="mb-6 flex items-center gap-2 text-sm font-bold uppercase tracking-wider text-[#3D3D7E]">
<CheckCircle className="size-5" />
Depois
</p>
<ul className="relative z-10 flex flex-col gap-4">
{after.map((item) => (
<li key={item} className="flex items-center gap-4 text-base text-foreground">
<span className="size-2 shrink-0 rounded-full bg-[#3D3D7E]" />
{item}
</li>
))}
</ul>
<div className="pointer-events-none absolute -bottom-6 -right-6 w-[280px] rotate-3 opacity-[0.12]">
<img src={IMAGES.visaoGeralTrimestre} alt="" className="w-full rounded-xl" />
</div>
</div>
</div>
<p className="mt-10 text-center text-base font-medium italic text-[#c8c8d8]">
"Ferramenta sem método vira mais uma aba. Implantação com método vira execução."
</p>
</div>
</section>
)
}
=== ARQUIVO: components/visual-examples-section.tsx ===
import { IMAGES } from "@/lib/images"
import { LayoutGrid, BarChart3, Zap } from "lucide-react"
const examples = [
{
icon: LayoutGrid,
title: "Board de Projetos",
subtitle: "Prazo, dono, status",
description: "Cada projeto com responsável claro, deadline visível e status atualizado em tempo real.",
image: IMAGES.planejamentoMensal,
color: "#3D3D7E",
},
{
icon: BarChart3,
title: "Dashboard Executivo",
subtitle: "Visão de KPIs e carga do time",
description: "Liderança acompanha indicadores e gargalos sem precisar abrir reunião.",
image: IMAGES.tarefasEquipe,
color: "#6B2A52",
},
{
icon: Zap,
title: "Automations",
subtitle: "Alertas, aprovações e handoffs",
description: "Follow-up automático, notificações inteligentes e menos atrito entre áreas.",
image: IMAGES.panoramaProjetos,
color: "#C52960",
},
]
export function VisualExamplesSection() {
return (
<section className="relative overflow-hidden bg-[#0B0B14] py-8 md:py-12">
<div className="mx-auto max-w-7xl px-6">
<div className="mb-14 text-center">
<p className="mb-3 text-xs font-semibold uppercase tracking-[0.2em] text-[#C52960]">
Na prática
</p>
<h2 className="text-pretty text-3xl font-bold text-foreground md:text-4xl">
Exemplos do que você passa a ver no
<span className="text-[#3D3D7E]">monday.</span>
</h2>
</div>
<div className="space-y-16">
{examples.map((example, idx) => {
const Icon = example.icon
const isEven = idx % 2 === 0
return (
<div
key={example.title}
className={`grid items-center gap-8 lg:grid-cols-2 ${!isEven ? "lg:grid-cols-2 lg:[grid-auto-flow:dense]" : ""}`}
>
<div className={`relative ${isEven ? "order-2 lg:order-2" : "order-1 lg:order-1"}`}>
<div className="relative">
<div
className="absolute inset-0 rounded-2xl blur-3xl opacity-40"
style={{ backgroundColor: example.color }}
/>
<div className="relative transform transition-transform duration-300 hover:scale-105">
<div className="rounded-2xl border border-white/10 bg-black/40 p-1 shadow-2xl shadow-black/60 backdrop-blur-sm">
<img
src={example.image}
alt={example.title}
className="h-auto w-full rounded-xl object-cover"
/>
</div>
</div>
</div>
</div>
<div className={`${isEven ? "order-1 lg:order-1" : "order-2 lg:order-2"}`}>
<div className="flex items-start gap-4">
<div
className="mt-1 flex size-12 shrink-0 items-center justify-center rounded-lg"
style={{ backgroundColor: `${example.color}20` }}
>
<Icon className="size-6" style={{ color: example.color }} />
</div>
<div>
<h3 className="text-2xl font-bold leading-tight text-foreground md:text-3xl">
{example.title}
</h3>
<p className="mt-1 text-sm font-medium text-muted-foreground">{example.subtitle}</p>
</div>
</div>
<p className="mt-6 text-base leading-relaxed text-[#c8c8d8]">{example.description}</p>
</div>
</div>
)
})}
</div>
</div>
</section>
)
}
=== ARQUIVO: components/faq-section.tsx ===
"use client"
import {
Accordion,
AccordionContent,
AccordionItem,
AccordionTrigger,
} from "@/components/ui/accordion"
const faqs = [
{
question: "Quanto tempo leva uma implantação?",
answer:
"Depende da complexidade da sua operação. Trabalhamos com sprints curtos e entregas incrementais, sempre com go-live assistido para garantir adoção real.",
},
{
question: "Serve para meu tipo de empresa?",
answer:
"Se sua empresa tem time, processos e precisa de controle, sim. Atendemos PMEs de serviços, indústria, varejo, tecnologia e consultorias com operações de 5 a 200 pessoas.",
},
{
question: "Dá para migrar de planilhas e ferramentas atuais?",
answer:
"Sim. Fazemos a migração dos dados relevantes e recriamos a lógica das planilhas em boards estruturados no monday.com, com automações e dashboards desde o dia 1.",
},
{
question: "E se eu já tenho monday e está bagunçado?",
answer:
"Reorganizamos do zero. Fazemos auditoria do ambiente atual, identificamos o que funciona e reestruturamos boards, automações e permissões com governança clara.",
},
{
question: "Vocês treinam o time e garantem adoção?",
answer:
"Sim. O treinamento é por área, focado na rotina real de cada equipe. Não é genérico — cada pessoa sai sabendo exatamente o que fazer no dia a dia.",
},
]
export function FaqSection() {
return (
<section className="py-8 md:py-12">
<div className="mx-auto max-w-3xl px-6">
<div className="mb-10 text-center">
<p className="mb-3 text-xs font-semibold uppercase tracking-[0.2em] text-[#C52960]">
Dúvidas
</p>
<h2 className="text-3xl font-bold text-foreground md:text-4xl">
Perguntas <span className="text-[#3D3D7E]">frequentes.</span>
</h2>
</div>
<Accordion type="single" collapsible className="w-full">
{faqs.map((faq, i) => (
<AccordionItem key={i} value={`faq-${i}`} className="border-border">
<AccordionTrigger className="py-5 text-left text-base font-semibold text-foreground hover:text-[#C52960] hover:no-underline">
{faq.question}
</AccordionTrigger>
<AccordionContent className="pb-5 text-sm leading-relaxed text-muted-foreground">
{faq.answer}
</AccordionContent>
</AccordionItem>
))}
</Accordion>
</div>
</section>
)
}
=== ARQUIVO: components/cta-section.tsx ===
import { WhatsAppButton } from "@/components/whatsapp-button"
import { IMAGES } from "@/lib/images"
export function CtaSection() {
return (
<section className="relative overflow-hidden py-8 md:py-12">
<img
src={IMAGES.team3}
alt=""
className="absolute inset-0 h-full w-full object-cover object-bottom brightness-[0.7]"
/>
<div className="absolute inset-0 bg-gradient-to-t from-[#0B0B14]/85 via-[#0B0B14]/60 to-[#0B0B14]/75" />
<div className="relative z-10 mx-auto max-w-3xl px-6 text-center">
<img
src={IMAGES.almaLogo}
alt="ALMA"
width={48}
height={48}
className="mx-auto mb-8 brightness-0 invert"
/>
<h2 className="mb-6 text-pretty text-3xl font-bold text-foreground md:text-4xl">
Quer colocar sua operação em ritmo usando o monday.com do
<span className="text-[#C52960]">jeito certo?</span>
</h2>
<p className="mb-4 text-lg text-[#e0e0ea]">
Chame a ALMA no WhatsApp e receba um diagnóstico direto ao ponto sobre processos, estrutura e adoção.
</p>
<p className="mb-10 text-sm font-medium italic text-[#b0b0c0]">
"Estratégia sem execução é fantasia. Execução sem método é caos."
</p>
<WhatsAppButton />
<p className="mt-10 text-sm font-bold tracking-wider text-[#C52960]">
INOVAR NÃO É LEGAL, É NECESSÁRIO!
</p>
</div>
</section>
)
}
=== ARQUIVO: components/site-footer.tsx ===
import { IMAGES } from "@/lib/images"
import { BadgeCheck } from "lucide-react"
export function SiteFooter() {
return (
<footer className="border-t border-border bg-card py-8 md:py-10">
<div className="mx-auto flex max-w-6xl flex-col items-center gap-4 px-6">
<div className="flex flex-col items-center gap-4 sm:flex-row sm:gap-6">
<img
src={IMAGES.almaLogo}
alt="ALMA Negócios"
width={32}
height={32}
className="brightness-0 invert opacity-60"
/>
<img
src={IMAGES.mondayPartner}
alt="monday.com Partner Certified"
width={80}
height={80}
className="w-20 h-20 object-contain opacity-70"
/>
</div>
<div className="text-center">
<p className="text-sm font-semibold text-foreground">
ALMA Negócios — Consultoria para PMEs.
</p>
<p className="mt-1 text-xs text-muted-foreground">
Parceiros certificados do monday.com.
</p>
<div className="mt-3 flex items-center justify-center gap-2">
<BadgeCheck className="size-4 text-[#3D3D7E]" />
<p className="text-xs text-muted-foreground">
ALMA é parceira da ABS — Associação Brasileira de Startups
</p>
</div>
</div>
<p className="text-xs font-bold tracking-wider text-[#C52960]">
INOVAR NÃO É LEGAL, É NECESSÁRIO!
</p>
</div>
</footer>
)
}
=== ARQUIVO: components/whatsapp-button.tsx ===
import { MessageCircle } from "lucide-react"
const WHATSAPP_URL =
"https://wa.me/5599999999999?text=Quero%20implantar%20o%20monday.com%20com%20a%20ALMA%20e%20quero%20um%20diagn%C3%B3stico%20da%20minha%20opera%C3%A7%C3%A3o"
interface WhatsAppButtonProps {
variant?: "default" | "sticky"
className?: string
}
export function WhatsAppButton({ variant = "default", className }: WhatsAppButtonProps) {
if (variant === "sticky") {
return (
<a
href={WHATSAPP_URL}
target="_blank"
rel="noopener noreferrer"
aria-label="Falar com a ALMA no WhatsApp"
className={`flex items-center justify-center gap-2 rounded-full bg-[#C52960] px-6 py-3 text-sm font-semibold text-white shadow-lg transition-all hover:brightness-110 hover:shadow-xl ${className ?? ""}`}
>
<MessageCircle className="size-5" />
<span className="hidden sm:inline">WhatsApp — Falar com a ALMA</span>
<span className="sm:hidden">WhatsApp</span>
</a>
)
}
return (
<a
href={WHATSAPP_URL}
target="_blank"
rel="noopener noreferrer"
aria-label="Falar com um consultor no WhatsApp"
className={`inline-flex items-center gap-3 rounded-lg bg-[#C52960] px-8 py-4 text-base font-bold text-white shadow-lg transition-all hover:brightness-110 hover:shadow-xl ${className ?? ""}`}
>
<MessageCircle className="size-5" />
Falar com um consultor no WhatsApp
</a>
)
}
=== ARQUIVO: components/sticky-whatsapp.tsx ===
"use client"
import { useEffect, useState } from "react"
import { WhatsAppButton } from "@/components/whatsapp-button"
export function StickyWhatsApp() {
const [visible, setVisible] = useState(false)
useEffect(() => {
function handleScroll() {
setVisible(window.scrollY > 400)
}
window.addEventListener("scroll", handleScroll, { passive: true })
return () => window.removeEventListener("scroll", handleScroll)
}, [])
return (
<div
className={`fixed bottom-0 left-0 z-50 flex w-full items-center justify-center border-t border-border/40 bg-background/90 px-4 py-3 backdrop-blur-md transition-all duration-300 ${
visible ? "translate-y-0 opacity-100" : "translate-y-full opacity-0"
}`}
>
<WhatsAppButton variant="sticky" />
</div>
)
}
=== ARQUIVO: next.config.mjs ===
const nextConfig = {
typescript: {
ignoreBuildErrors: true,
},
images: {
unoptimized: true,
},
}
export default nextConfig
=== ARQUIVO: package.json ===
{
"name": "my-project",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "eslint ."
},
"dependencies": {
"@hookform/resolvers": "^3.9.1",
"@vercel/analytics": "1.6.1",
"@radix-ui/react-accordion": "1.2.12",
"@radix-ui/react-alert-dialog": "1.1.15",
"@radix-ui/react-aspect-ratio": "1.1.8",
"@radix-ui/react-avatar": "1.1.11",
"@radix-ui/react-checkbox": "1.3.3",
"@radix-ui/react-collapsible": "1.1.12",
"@radix-ui/react-context-menu": "2.2.16",
"@radix-ui/react-dialog": "1.1.15",
"@radix-ui/react-dropdown-menu": "2.1.16",
"@radix-ui/react-hover-card": "1.1.15",
"@radix-ui/react-label": "2.1.8",
"@radix-ui/react-menubar": "1.1.16",
"@radix-ui/react-navigation-menu": "1.2.14",
"@radix-ui/react-popover": "1.1.15",
"@radix-ui/react-progress": "1.1.8",
"@radix-ui/react-radio-group": "1.3.8",
"@radix-ui/react-scroll-area": "1.2.10",
"@radix-ui/react-select": "2.2.6",
"@radix-ui/react-separator": "1.1.8",
"@radix-ui/react-slider": "1.3.6",
"@radix-ui/react-slot": "1.2.4",
"@radix-ui/react-switch": "1.2.6",
"@radix-ui/react-tabs": "1.1.13",
"@radix-ui/react-toast": "1.2.15",
"@radix-ui/react-toggle": "1.1.10",
"@radix-ui/react-toggle-group": "1.1.11",
"@radix-ui/react-tooltip": "1.2.8",
"autoprefixer": "^10.4.20",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"cmdk": "1.1.1",
"date-fns": "4.1.0",
"embla-carousel-react": "8.6.0",
"input-otp": "1.4.2",
"lucide-react": "^0.564.0",
"next": "16.1.6",
"next-themes": "^0.4.6",
"react": "19.2.4",
"react-day-picker": "9.13.2",
"react-dom": "19.2.4",
"react-hook-form": "^7.54.1",
"react-resizable-panels": "^2.1.7",
"recharts": "2.15.0",
"sonner": "^1.7.1",
"tailwind-merge": "^3.3.1",
"vaul": "^1.1.2",
"zod": "^3.24.1"
},
"devDependencies": {
"@tailwindcss/postcss": "^4.2.0",
"@types/node": "^22",
"@types/react": "19.2.14",
"@types/react-dom": "19.2.3",
"postcss": "^8.5",
"tailwindcss": "^4.2.0",
"tw-animate-css": "1.3.3",
"typescript": "5.7.3"
}
}
=== ARQUIVO: tsconfig.json ===
{
"compilerOptions": {
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"target": "ES6",
"skipLibCheck": true,
"strict": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "react-jsx",
"incremental": true,
"plugins": [
{
"name": "next"
}
],
"paths": {
"@/*": ["./*"]
}
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
"exclude": ["node_modules"]
}
=== NOTAS IMPORTANTES ===
1. Os componentes UI (Badge, Card, Accordion) são do shadcn/ui. Instale-os com: npx shadcn@latest add badge card accordion
2. WhatsApp: Atualize o número no whatsapp-button.tsx (linha: const WHATSAPP_URL = "https://wa.me/5599999999999...")
3. Cores principais: Crimson #C52960 | Indigo #3D3D7E | Burgundy #6B2A52
4. Fonts: Inter (body) + Space Grotesk (mono)
5. Tailwind v4 com tema dark por padrão
6. Todas as imagens são URLs de blob storage (podem ser substituídas por locais em /public)
7. A página é fully responsive com mobile-first approach
8. Animações: float e float-slow definidas em globals.cssPronto! Este é o código completo da página. Copie e use em outra conversa para recriar a landing page exatamente igual.
You can send messages while the preview loads