diff --git a/package-lock.json b/package-lock.json index 9c4cac5..4ae91ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "aos": "^2.3.4", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", + "framer-motion": "^12.4.7", "lucide-react": "^0.476.0", "next": "15.1.7", "react": "^19.0.0", @@ -3228,6 +3229,33 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/framer-motion": { + "version": "12.4.7", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.4.7.tgz", + "integrity": "sha512-VhrcbtcAMXfxlrjeHPpWVu2+mkcoR31e02aNSR7OUS/hZAciKa8q6o3YN2mA1h+jjscRsSyKvX6E1CiY/7OLMw==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.4.5", + "motion-utils": "^12.0.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -4345,6 +4373,21 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/motion-dom": { + "version": "12.4.5", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.4.5.tgz", + "integrity": "sha512-Q2xmhuyYug1CGTo0jdsL05EQ4RhIYXlggFS/yPhQQRNzbrhjKQ1tbjThx5Plv68aX31LsUQRq4uIkuDxdO5vRQ==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.0.0" + } + }, + "node_modules/motion-utils": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.0.0.tgz", + "integrity": "sha512-MNFiBKbbqnmvOjkPyOKgHUp3Q6oiokLkI1bEwm5QA28cxMZrv0CbbBGDNmhF6DIXsi1pCQBSs0dX8xjeER1tmA==", + "license": "MIT" + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", diff --git a/package.json b/package.json index 32a43d3..3fc9d6a 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "aos": "^2.3.4", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", + "framer-motion": "^12.4.7", "lucide-react": "^0.476.0", "next": "15.1.7", "react": "^19.0.0", diff --git a/src/components/FaqSection.tsx b/src/components/FaqSection.tsx index 5942ae2..cd581fa 100644 --- a/src/components/FaqSection.tsx +++ b/src/components/FaqSection.tsx @@ -1,6 +1,8 @@ "use client"; -import { X, Plus } from "lucide-react"; -import { useState } from "react"; + +import { Plus } from "lucide-react"; +import * as React from "react"; +import { motion, AnimatePresence } from "framer-motion"; interface FAQItem { id: string; @@ -36,7 +38,7 @@ const faqs: FAQItem[] = [ ]; export default function FAQSection() { - const [openItems, setOpenItems] = useState>(new Set()); + const [openItems, setOpenItems] = React.useState>(new Set()); const handleItemClick = (itemId: string) => { const newOpenItems = new Set(openItems); @@ -57,27 +59,86 @@ export default function FAQSection() {
{faqs.map((faq) => ( -
- + + + + - {openItems.has(faq.id) && ( -
-

{faq.answer}

-
- )} -
+ + {openItems.has(faq.id) && ( + + +

{faq.answer}

+
+
+ )} +
+ ))}
diff --git a/src/components/HeroSection.tsx b/src/components/HeroSection.tsx index 8882c01..9931c8a 100644 --- a/src/components/HeroSection.tsx +++ b/src/components/HeroSection.tsx @@ -1,7 +1,11 @@ +"use client"; + import React from "react"; import styles from "./HeroSection.module.css"; import Link from "next/link"; import Image from "next/image"; +import { motion } from "framer-motion"; + const HeroSection: React.FC = () => { return (
@@ -9,34 +13,53 @@ const HeroSection: React.FC = () => {
{/* Left Background */}
{/* Right Background */}
-
- Hero Slider -
+ + Hero Slider + +
{/* Main Content */} -
-
- R - +
+ R + evolutionize Your Social Media Strategy with a Personalized
@@ -49,7 +72,12 @@ const HeroSection: React.FC = () => {

-
+

Customers Rating @@ -61,37 +89,63 @@ const HeroSection: React.FC = () => { (8,279 reviews)

-
+ {/* CTA Button */} - - Generate - Generate Icon - + + Generate + Generate Icon + +
- {/* Customer Reviews */}
-
+
{/* Social Icons */} -
- Social Icons -
+ + + Social Icons + +
); diff --git a/src/components/SocialSection.tsx b/src/components/SocialSection.tsx index ed30bca..82df988 100644 --- a/src/components/SocialSection.tsx +++ b/src/components/SocialSection.tsx @@ -1,24 +1,50 @@ +"use client"; +import React, { useRef } from "react"; import Image from "next/image"; -import React from "react"; +import { motion, useInView } from "framer-motion"; const SocialSection: React.FC = () => { + const sectionRef = useRef(null); + const isInView = useInView(sectionRef, { + once: false, + amount: 0.3, + }); + + const fadeInUp = { + hidden: { + opacity: 0, + y: 60, + }, + visible: { + opacity: 1, + y: 0, + transition: { + duration: 0.8, + ease: "easeOut", + }, + }, + }; + return ( -
+
-
- Example Image -
+ +
+ Example Image +
+
);