diff --git a/src/app/page.tsx b/src/app/page.tsx index a221e1c..8f44146 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,7 +1,14 @@ import Hero from "@/features/landing-page/hero"; import { ValuePropositionSection } from "@/features/landing-page/value-proposition"; import { ThreeStepExplainerSection } from "@/features/landing-page/three-step-explainer"; +import { FeaturesGridSection } from "@/features/landing-page/features-grid"; +import { StatsSection } from "@/features/landing-page/stats"; import { CreateSurvey } from "@/features/landing-page/create-survey"; +import { TrustedBySection } from "@/features/landing-page/trusted-by"; +import { TestimonialsSection } from "@/features/landing-page/testimonials"; +import { PricingSection } from "@/features/landing-page/pricing"; +import { FaqSection } from "@/features/landing-page/faq-section"; +import { CtaBanner } from "@/features/landing-page/cta-banner"; import Footer from "@/features/landing-page/footer"; import Navbar from "@/features/landing-page/navbar"; import SmoothScrollWrapper from "@/components/smooth-scroll-wrapper"; @@ -12,9 +19,16 @@ export default function Home() {
+ + + + + + +
diff --git a/src/features/landing-page/cta-banner.tsx b/src/features/landing-page/cta-banner.tsx new file mode 100644 index 0000000..9d9affb --- /dev/null +++ b/src/features/landing-page/cta-banner.tsx @@ -0,0 +1,83 @@ +"use client"; + +import { motion, type Variants } from "framer-motion"; +import Button from "@/components/button"; +import Link from "next/link"; + +const containerVariants: Variants = { + hidden: { opacity: 0 }, + visible: { + opacity: 1, + transition: { + staggerChildren: 0.2, + delayChildren: 0.1, + }, + }, +}; + +const itemVariants: Variants = { + hidden: { opacity: 0, y: 30 }, + visible: { + opacity: 1, + y: 0, + transition: { duration: 0.7, ease: "easeOut" }, + }, +}; + +export const CtaBanner = () => { + return ( + +
+ + + + Ready to Start{" "} + Earning? + + + + Join thousands of participants and researchers on the leading + decentralized survey platform. Start earning STRK tokens today. + + + + + + + + + + ); +}; diff --git a/src/features/landing-page/faq-section.tsx b/src/features/landing-page/faq-section.tsx new file mode 100644 index 0000000..7932077 --- /dev/null +++ b/src/features/landing-page/faq-section.tsx @@ -0,0 +1,124 @@ +"use client"; + +import { useState } from "react"; +import { motion, AnimatePresence, type Variants } from "framer-motion"; +import { ChevronDown } from "lucide-react"; + +const faqs = [ + { + question: "What is Survexa?", + answer: + "Survexa is a decentralized survey platform built on Starknet. It connects researchers with participants, rewarding respondents with STRK tokens for sharing their opinions and insights.", + }, + { + question: "How do I earn STRK tokens?", + answer: + "Simply browse available surveys, complete them with thoughtful responses, and receive STRK tokens directly to your wallet. The reward amount varies based on survey length and complexity.", + }, + { + question: "How do I create a survey?", + answer: + "Sign up as a researcher, use our intuitive survey builder to create your questions, set your reward budget, and publish. Our platform handles participant matching and token distribution automatically.", + }, + { + question: "Is my data secure?", + answer: + "Yes. Survexa leverages blockchain technology for transparency while keeping individual responses anonymous. Your data is encrypted and you maintain full control over your information.", + }, + { + question: "What types of surveys can I create?", + answer: + "You can create multiple-choice, open-ended, rating scale, and matrix surveys. Our custom templates make it easy to get started quickly for any research need.", + }, +]; + +const containerVariants: Variants = { + hidden: { opacity: 0 }, + visible: { + opacity: 1, + transition: { + staggerChildren: 0.1, + delayChildren: 0.2, + }, + }, +}; + +const itemVariants: Variants = { + hidden: { opacity: 0, y: 20 }, + visible: { + opacity: 1, + y: 0, + transition: { duration: 0.5, ease: "easeOut" }, + }, +}; + +export const FaqSection = () => { + const [openIndex, setOpenIndex] = useState(null); + + return ( + +
+ +

+ Frequently Asked{" "} + Questions +

+

+ Everything you need to know about Survexa. +

+
+ + + {faqs.map((faq, index) => ( + + + + {openIndex === index && ( + +
+

+ {faq.answer} +

+
+
+ )} +
+
+ ))} +
+
+
+ ); +}; diff --git a/src/features/landing-page/features-grid.tsx b/src/features/landing-page/features-grid.tsx new file mode 100644 index 0000000..61b1571 --- /dev/null +++ b/src/features/landing-page/features-grid.tsx @@ -0,0 +1,135 @@ +"use client"; + +import { motion, type Variants } from "framer-motion"; +import { + BarChart3Icon, + ShieldCheckIcon, + ZapIcon, + UsersIcon, + GlobeIcon, + BrainCircuitIcon, +} from "lucide-react"; + +const features = [ + { + icon: ZapIcon, + title: "Lightning Fast Setup", + description: + "Create and launch surveys in minutes with our intuitive builder. No coding required.", + }, + { + icon: BarChart3Icon, + title: "Real-Time Analytics", + description: + "Track responses as they come in with live dashboards, charts, and exportable reports.", + }, + { + icon: ShieldCheckIcon, + title: "Blockchain Verified", + description: + "Every response is verified on-chain, ensuring data integrity and preventing fraud.", + }, + { + icon: UsersIcon, + title: "Targeted Audiences", + description: + "Reach the right respondents with smart demographic and interest-based targeting.", + }, + { + icon: GlobeIcon, + title: "Global Reach", + description: + "Access participants worldwide with multi-language support and localized surveys.", + }, + { + icon: BrainCircuitIcon, + title: "AI-Powered Insights", + description: + "Get intelligent summaries and trend analysis powered by advanced machine learning.", + }, +]; + +const containerVariants: Variants = { + hidden: { opacity: 0 }, + visible: { + opacity: 1, + transition: { + staggerChildren: 0.15, + delayChildren: 0.1, + }, + }, +}; + +const cardVariants: Variants = { + hidden: { opacity: 0, y: 30, scale: 0.95 }, + visible: { + opacity: 1, + y: 0, + scale: 1, + transition: { duration: 0.5, ease: "easeOut" }, + }, +}; + +const headerVariants: Variants = { + hidden: { opacity: 0, y: 30 }, + visible: { + opacity: 1, + y: 0, + transition: { duration: 0.8, ease: "easeOut" }, + }, +}; + +export const FeaturesGridSection = () => { + return ( + +
+ +

+ Everything You Need to{" "} + Succeed +

+

+ Powerful features designed to help you create better surveys and + gather meaningful insights. +

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

+ {feature.title} +

+

+ {feature.description} +

+
+ ); + })} +
+
+
+ ); +}; diff --git a/src/features/landing-page/pricing.tsx b/src/features/landing-page/pricing.tsx new file mode 100644 index 0000000..4c17ade --- /dev/null +++ b/src/features/landing-page/pricing.tsx @@ -0,0 +1,192 @@ +"use client"; + +import { motion, type Variants } from "framer-motion"; +import { CheckIcon } from "lucide-react"; +import Link from "next/link"; + +const plans = [ + { + name: "Free", + price: "0", + period: "forever", + description: "Perfect for individuals getting started with surveys.", + features: [ + "Up to 3 active surveys", + "50 responses per survey", + "Basic analytics", + "Community support", + "STRK token rewards", + ], + cta: "Get Started", + highlighted: false, + }, + { + name: "Pro", + price: "29", + period: "per month", + description: "For teams who need advanced research capabilities.", + features: [ + "Unlimited active surveys", + "Unlimited responses", + "Advanced analytics & exports", + "Priority support", + "Enhanced STRK rewards", + "Custom branding", + "Team collaboration", + ], + cta: "Start Free Trial", + highlighted: true, + }, + { + name: "Enterprise", + price: "Custom", + period: "", + description: "Tailored solutions for large organizations.", + features: [ + "Everything in Pro", + "Dedicated account manager", + "Custom integrations", + "SSO & advanced security", + "SLA guarantees", + "On-premise deployment", + "API access", + ], + cta: "Contact Sales", + highlighted: false, + }, +]; + +const containerVariants: Variants = { + hidden: { opacity: 0 }, + visible: { + opacity: 1, + transition: { + staggerChildren: 0.2, + delayChildren: 0.1, + }, + }, +}; + +const cardVariants: Variants = { + hidden: { opacity: 0, y: 40, scale: 0.95 }, + visible: { + opacity: 1, + y: 0, + scale: 1, + transition: { duration: 0.6, ease: "easeOut" }, + }, +}; + +const headerVariants: Variants = { + hidden: { opacity: 0, y: 30 }, + visible: { + opacity: 1, + y: 0, + transition: { duration: 0.8, ease: "easeOut" }, + }, +}; + +export const PricingSection = () => { + return ( + +
+ +
+ +

+ Simple, Transparent{" "} + Pricing +

+

+ Choose the plan that fits your research needs. All plans include + STRK token rewards for participants. +

+
+ + + {plans.map((plan, index) => ( + + {plan.highlighted && ( +
+ Most Popular +
+ )} + +
+

+ {plan.name} +

+
+ {plan.price !== "Custom" && ( + $ + )} + + {plan.price} + + {plan.period && ( + + /{plan.period} + + )} +
+

+ {plan.description} +

+
+ +
    + {plan.features.map((feature, i) => ( +
  • + + {feature} +
  • + ))} +
+ + + + +
+ ))} +
+
+ + ); +}; diff --git a/src/features/landing-page/stats.tsx b/src/features/landing-page/stats.tsx new file mode 100644 index 0000000..56b2805 --- /dev/null +++ b/src/features/landing-page/stats.tsx @@ -0,0 +1,88 @@ +"use client"; + +import { motion, type Variants } from "framer-motion"; + +const stats = [ + { + value: "50K+", + label: "Active Participants", + description: "Engaged survey respondents earning rewards", + }, + { + value: "12K+", + label: "Surveys Completed", + description: "Research projects successfully delivered", + }, + { + value: "98%", + label: "Completion Rate", + description: "Industry-leading survey finish rate", + }, + { + value: "150K+", + label: "STRK Distributed", + description: "Tokens rewarded to participants", + }, +]; + +const containerVariants: Variants = { + hidden: { opacity: 0 }, + visible: { + opacity: 1, + transition: { + staggerChildren: 0.15, + delayChildren: 0.1, + }, + }, +}; + +const itemVariants: Variants = { + hidden: { opacity: 0, y: 30, scale: 0.9 }, + visible: { + opacity: 1, + y: 0, + scale: 1, + transition: { duration: 0.5, ease: "easeOut" }, + }, +}; + +export const StatsSection = () => { + return ( + +
+ + {stats.map((stat, index) => ( + + + {stat.value} + +

+ {stat.label} +

+

+ {stat.description} +

+
+ ))} +
+
+
+ ); +}; diff --git a/src/features/landing-page/testimonials.tsx b/src/features/landing-page/testimonials.tsx new file mode 100644 index 0000000..be60320 --- /dev/null +++ b/src/features/landing-page/testimonials.tsx @@ -0,0 +1,148 @@ +"use client"; + +import { motion, type Variants } from "framer-motion"; +import Image from "next/image"; + +const testimonials = [ + { + name: "Sarah Chen", + role: "Product Manager", + avatar: "/step-1.jpg", + quote: + "Survexa transformed how we gather customer feedback. The STRK token rewards drive real engagement from participants.", + rating: 5, + }, + { + name: "Alex Rodriguez", + role: "UX Researcher", + avatar: "/step-2.jpg", + quote: + "The quality of responses we get through Survexa is incredible. Incentivized surveys truly make a difference.", + rating: 5, + }, + { + name: "Maya Patel", + role: "Marketing Director", + avatar: "/step-3.jpg", + quote: + "We cut our research costs by 60% while getting faster, more reliable data. Survexa is a game-changer.", + rating: 5, + }, +]; + +const containerVariants: Variants = { + hidden: { opacity: 0 }, + visible: { + opacity: 1, + transition: { + staggerChildren: 0.2, + delayChildren: 0.1, + }, + }, +}; + +const cardVariants: Variants = { + hidden: { opacity: 0, y: 40, scale: 0.95 }, + visible: { + opacity: 1, + y: 0, + scale: 1, + transition: { duration: 0.6, ease: "easeOut" }, + }, +}; + +const headerVariants: Variants = { + hidden: { opacity: 0, y: 30 }, + visible: { + opacity: 1, + y: 0, + transition: { duration: 0.8, ease: "easeOut" }, + }, +}; + +export const TestimonialsSection = () => { + return ( + +
+ +
+ +

+ Trusted by Researchers{" "} + Worldwide +

+

+ See what our community has to say about their experience with + Survexa. +

+
+ + + {testimonials.map((testimonial, index) => ( + +
+ {Array.from({ length: testimonial.rating }).map((_, i) => ( + + + + ))} +
+ +

+ “{testimonial.quote}” +

+ +
+
+ {testimonial.name} +
+
+

+ {testimonial.name} +

+

{testimonial.role}

+
+
+
+ ))} +
+
+ + ); +}; diff --git a/src/features/landing-page/trusted-by.tsx b/src/features/landing-page/trusted-by.tsx new file mode 100644 index 0000000..d01589a --- /dev/null +++ b/src/features/landing-page/trusted-by.tsx @@ -0,0 +1,85 @@ +"use client"; + +import { motion, type Variants } from "framer-motion"; + +const partners = [ + { name: "Starknet", abbr: "SN" }, + { name: "Ethereum", abbr: "ETH" }, + { name: "OpenAI", abbr: "OA" }, + { name: "Google Research", abbr: "GR" }, + { name: "McKinsey", abbr: "MK" }, + { name: "Deloitte", abbr: "DL" }, +]; + +const containerVariants: Variants = { + hidden: { opacity: 0 }, + visible: { + opacity: 1, + transition: { + staggerChildren: 0.1, + delayChildren: 0.2, + }, + }, +}; + +const itemVariants: Variants = { + hidden: { opacity: 0, y: 20 }, + visible: { + opacity: 1, + y: 0, + transition: { duration: 0.5, ease: "easeOut" }, + }, +}; + +const headerVariants: Variants = { + hidden: { opacity: 0, y: 20 }, + visible: { + opacity: 1, + y: 0, + transition: { duration: 0.6, ease: "easeOut" }, + }, +}; + +export const TrustedBySection = () => { + return ( + +
+ + Trusted by leading organizations + + + + {partners.map((partner, index) => ( + +
+ + {partner.abbr} + + + {partner.name} + +
+
+ ))} +
+
+
+ ); +};