diff --git a/src/pages/HomePage.tsx b/src/pages/HomePage.tsx index 09658e4..5dbdb44 100644 --- a/src/pages/HomePage.tsx +++ b/src/pages/HomePage.tsx @@ -1,354 +1,39 @@ -import AboutTestimonial from '@/components/sections/about/AboutTestimonial'; -import ContactCta from '@/components/sections/contact/ContactCta'; -import FaqSimple from '@/components/sections/faq/FaqSimple'; -import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento'; -import HeroOverlayMarquee from '@/components/sections/hero/HeroOverlayMarquee'; -import MetricsFeatureCards from '@/components/sections/metrics/MetricsFeatureCards'; -import PricingMediaCards from '@/components/sections/pricing/PricingMediaCards'; -import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee'; -import TestimonialMarqueeCards from '@/components/sections/testimonial/TestimonialMarqueeCards'; -import { LineChart, Target, TrendingUp, Zap } from "lucide-react"; -import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; +// AUTO-GENERATED shell by per-section-migrate. +// Section bodies live in .//sections/.tsx. Edit the section +// files directly. Non-block content (wrappers, non-inlinable sections) is +// preserved inline; extracted section blocks become refs. + import { useState, useEffect } from "react"; +import HeroSection from './HomePage/sections/Hero'; +import FeaturesSection from './HomePage/sections/Features'; +import TestimonialAboutSection from './HomePage/sections/TestimonialAbout'; +import MetricsSection from './HomePage/sections/Metrics'; +import PricingSection from './HomePage/sections/Pricing'; +import TestimonialsSection from './HomePage/sections/Testimonials'; +import SocialProofSection from './HomePage/sections/SocialProof'; +import FaqSection from './HomePage/sections/Faq'; +import ContactSection from './HomePage/sections/Contact'; -const translations = { - en: { - tag: "Performance Marketing Agency", - title: "Scale your brand with data and strategy", - description: "We combine creativity, analytics, and performance marketing to grow your business with measurable results. From campaign strategy to conversion optimization, every decision is backed by data.", - primaryBtn: "Start Now", - secondaryBtn: "View Pricing" - }, - es: { - tag: "Agencia de Performance Marketing", - title: "Escala tu marca con datos y estrategia", - description: "Combinamos creatividad, analítica y marketing de resultados para hacer crecer tu negocio con resultados medibles. Desde la estrategia de campaña hasta la optimización de conversiones, cada decisión está respaldada por datos.", - primaryBtn: "Empezar Ahora", - secondaryBtn: "Ver Precios" - } -}; - -export default function HomePage() { - const [lang, setLang] = useState<"en" | "es">("es"); - const [isTransitioning, setIsTransitioning] = useState(false); - - useEffect(() => { - const storedRegion = localStorage.getItem("selectedRegion"); - if (storedRegion) { - try { - const region = JSON.parse(storedRegion); - setLang(region.lang === "en" ? "en" : "es"); - } catch (e) {} - } - - const handleRegionChange = (e: Event) => { - const customEvent = e as CustomEvent; - if (customEvent.detail && customEvent.detail.lang) { - setIsTransitioning(true); - setTimeout(() => { - setLang(customEvent.detail.lang === "en" ? "en" : "es"); - setIsTransitioning(false); - }, 300); - } - }; - - window.addEventListener("regionChange", handleRegionChange); - return () => window.removeEventListener("regionChange", handleRegionChange); - }, []); - - const t = translations[lang]; - +export default function HomePage(): React.JSX.Element { return ( - <> -
- - - -
+<> + -
- - - -
+ -
- - - -
+ -
- - - -
+ -
- - - -
+ -
- - - -
+ -
- - - -
+ -
- - - -
+ -
- - - -
+ ); } diff --git a/src/pages/HomePage/sections/Contact.tsx b/src/pages/HomePage/sections/Contact.tsx new file mode 100644 index 0000000..2c38569 --- /dev/null +++ b/src/pages/HomePage/sections/Contact.tsx @@ -0,0 +1,27 @@ +// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this +// file as the canonical source for the "contact" section. + +import React from 'react'; +import ContactCta from '@/components/sections/contact/ContactCta'; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; + +export default function ContactSection(): React.JSX.Element { + return ( +
+ + + +
+ ); +} diff --git a/src/pages/HomePage/sections/Faq.tsx b/src/pages/HomePage/sections/Faq.tsx new file mode 100644 index 0000000..b608aa4 --- /dev/null +++ b/src/pages/HomePage/sections/Faq.tsx @@ -0,0 +1,34 @@ +// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this +// file as the canonical source for the "faq" section. + +import React from 'react'; +import FaqSimple from '@/components/sections/faq/FaqSimple'; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; + +export default function FaqSection(): React.JSX.Element { + return ( +
+ + + +
+ ); +} diff --git a/src/pages/HomePage/sections/Features.tsx b/src/pages/HomePage/sections/Features.tsx new file mode 100644 index 0000000..6994184 --- /dev/null +++ b/src/pages/HomePage/sections/Features.tsx @@ -0,0 +1,71 @@ +import { BarChart3, LineChart, PieChart, Target } from "lucide-react"; +import TextAnimation from "@/components/ui/TextAnimation"; +import ScrollReveal from "@/components/ui/ScrollReveal"; + +export default function FeaturesSection() { + const features = [ + { + icon: BarChart3, + title: "Advanced Tracking", + description: "Monitor your campaigns with precision across every platform and region." + }, + { + icon: PieChart, + title: "Audience Insights", + description: "Understand your demographics and user behavior in real-time." + }, + { + icon: LineChart, + title: "Predictive Modeling", + description: "Forecast trends and optimize your funnel before the market shifts." + }, + { + icon: Target, + title: "Live Dashboards", + description: "Access your data instantly with our premium, high-performance interface." + } + ]; + + return ( +
+
+
+
+ Features +
+ +

+ Nume Analytics provides enterprise-grade tools to scale your paid media and SEO strategies with confidence. +

+
+ +
+ {features.map((feature, index) => { + const Icon = feature.icon; + return ( + +
+
+ +
+

{feature.title}

+

{feature.description}

+
+
+ ); + })} +
+
+ + {/* Decorative background elements */} +
+
+
+ ); +} \ No newline at end of file diff --git a/src/pages/HomePage/sections/Hero.tsx b/src/pages/HomePage/sections/Hero.tsx new file mode 100644 index 0000000..bd06c3d --- /dev/null +++ b/src/pages/HomePage/sections/Hero.tsx @@ -0,0 +1,48 @@ +// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this +// file as the canonical source for the "hero" section. + +import React from 'react'; +import HeroOverlayMarquee from '@/components/sections/hero/HeroOverlayMarquee'; +import { LineChart, Target, TrendingUp, Zap } from "lucide-react"; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; + +export default function HeroSection(): React.JSX.Element { + return ( +
+ + + +
+ ); +} diff --git a/src/pages/HomePage/sections/Metrics.tsx b/src/pages/HomePage/sections/Metrics.tsx new file mode 100644 index 0000000..014aa28 --- /dev/null +++ b/src/pages/HomePage/sections/Metrics.tsx @@ -0,0 +1,49 @@ +// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this +// file as the canonical source for the "metrics" section. + +import React from 'react'; +import MetricsFeatureCards from '@/components/sections/metrics/MetricsFeatureCards'; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; + +export default function MetricsSection(): React.JSX.Element { + return ( +
+ + + +
+ ); +} diff --git a/src/pages/HomePage/sections/Pricing.tsx b/src/pages/HomePage/sections/Pricing.tsx new file mode 100644 index 0000000..467ab21 --- /dev/null +++ b/src/pages/HomePage/sections/Pricing.tsx @@ -0,0 +1,55 @@ +// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this +// file as the canonical source for the "pricing" section. + +import React from 'react'; +import PricingMediaCards from '@/components/sections/pricing/PricingMediaCards'; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; + +export default function PricingSection(): React.JSX.Element { + return ( +
+ + + +
+ ); +} diff --git a/src/pages/HomePage/sections/SocialProof.tsx b/src/pages/HomePage/sections/SocialProof.tsx new file mode 100644 index 0000000..5314d44 --- /dev/null +++ b/src/pages/HomePage/sections/SocialProof.tsx @@ -0,0 +1,29 @@ +// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this +// file as the canonical source for the "social-proof" section. + +import React from 'react'; +import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee'; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; + +export default function SocialProofSection(): React.JSX.Element { + return ( +
+ + + +
+ ); +} diff --git a/src/pages/HomePage/sections/TestimonialAbout.tsx b/src/pages/HomePage/sections/TestimonialAbout.tsx new file mode 100644 index 0000000..a1d37b4 --- /dev/null +++ b/src/pages/HomePage/sections/TestimonialAbout.tsx @@ -0,0 +1,22 @@ +// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this +// file as the canonical source for the "testimonial-about" section. + +import React from 'react'; +import AboutTestimonial from '@/components/sections/about/AboutTestimonial'; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; + +export default function TestimonialAboutSection(): React.JSX.Element { + return ( +
+ + + +
+ ); +} diff --git a/src/pages/HomePage/sections/Testimonials.tsx b/src/pages/HomePage/sections/Testimonials.tsx new file mode 100644 index 0000000..bc5c997 --- /dev/null +++ b/src/pages/HomePage/sections/Testimonials.tsx @@ -0,0 +1,84 @@ +import TextAnimation from "@/components/ui/TextAnimation"; +import GridOrCarousel from "@/components/ui/GridOrCarousel"; +import ScrollReveal from "@/components/ui/ScrollReveal"; + +export default function TestimonialsSection() { + const testimonials = [ + { + quote: "Nume Analytics transformed our data strategy. We now have clear visibility into our funnel and actionable insights that drive real growth.", + name: "Sarah Jenkins", + role: "CMO, TechGrowth", + region: "North America" + }, + { + quote: "The premium aesthetic and deep insights provided by Nume are unmatched in the industry. They truly understand how to scale paid media.", + name: "Michael Chen", + role: "VP of Marketing, InnovateCorp", + region: "Europe" + }, + { + quote: "Our paid media ROI increased by 40% within the first quarter of working with Nume Analytics. Their SEO strategy is equally impressive.", + name: "Elena Rodriguez", + role: "Director of Growth, ScaleUp", + region: "Asia Pacific" + }, + { + quote: "A game-changer for our marketing operations. The funnel audit revealed bottlenecks we didn't even know existed.", + name: "David Smith", + role: "Founder, E-com Plus", + region: "Global" + } + ]; + + return ( +
+
+
+
+

Client Success

+
+ + +
+ + + + {testimonials.map((testimonial, i) => ( +
+
+ {[...Array(5)].map((_, starIdx) => ( + + + + ))} +
+

"{testimonial.quote}"

+
+
+ {testimonial.name.charAt(0)} +
+
+ {testimonial.name} + {testimonial.role} • {testimonial.region} +
+
+
+ ))} +
+
+
+
+ ); +} \ No newline at end of file