diff --git a/package-lock.json b/package-lock.json index 77f6130..74b575b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1934,9 +1934,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001667", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001667.tgz", - "integrity": "sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==", + "version": "1.0.30001745", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001745.tgz", + "integrity": "sha512-ywt6i8FzvdgrrrGbr1jZVObnVv6adj+0if2/omv9cmR2oiZs30zL4DIyaptKcbOrBdOIc74QTMoJvSE2QHh5UQ==", "dev": true, "funding": [ { @@ -1951,7 +1951,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "2.4.2", diff --git a/package.json b/package.json index 8fe35a4..0b0353d 100644 --- a/package.json +++ b/package.json @@ -42,4 +42,4 @@ "typescript-eslint": "^8.3.0", "vite": "^5.4.2" } -} \ No newline at end of file +} diff --git a/src/components/About/About.tsx b/src/components/About/About.tsx index a3cec6d..74c03bd 100644 --- a/src/components/About/About.tsx +++ b/src/components/About/About.tsx @@ -1,5 +1,4 @@ import React, { useRef, useEffect } from 'react'; -import { useInView } from 'react-intersection-observer'; import { gsap } from 'gsap'; import { ScrollTrigger } from 'gsap/ScrollTrigger'; import { Target, Rocket, Users, Award } from 'lucide-react'; @@ -8,58 +7,83 @@ gsap.registerPlugin(ScrollTrigger); const About: React.FC = () => { const sectionRef = useRef(null); - const [ref, inView] = useInView({ - threshold: 0.3, - triggerOnce: true, - }); useEffect(() => { - if (inView && sectionRef.current) { - const tl = gsap.timeline(); - - tl.fromTo('.about-title', - { y: 50, opacity: 0 }, - { y: 0, opacity: 1, duration: 0.8, ease: "power3.out" } - ) - .fromTo('.about-text', - { y: 30, opacity: 0 }, - { y: 0, opacity: 1, duration: 0.6, ease: "power3.out", stagger: 0.2 }, - "-=0.4" - ) - .fromTo('.about-card', + if (sectionRef.current) { + const ctx = gsap.context(() => { + // Title + gsap.fromTo( + ".about-title", { y: 50, opacity: 0 }, - { y: 0, opacity: 1, duration: 0.6, ease: "power3.out", stagger: 0.15 }, - "-=0.3" + { + y: 0, + opacity: 1, + duration: 0.8, + ease: "power3.out", + scrollTrigger: { + trigger: ".about-title", + start: "top 80%", + toggleActions: "play none none reverse", + }, + } ); + + // Text paragraphs + gsap.utils.toArray(".about-text").forEach((el: any, i) => { + gsap.fromTo( + el, + { y: 30, opacity: 0 }, + { + y: 0, + opacity: 1, + duration: 0.6, + ease: "power3.out", + delay: i * 0.1, + scrollTrigger: { + trigger: el, + start: "top 85%", + toggleActions: "play none none reverse", + }, + } + ); + }); + + // Feature cards + gsap.utils.toArray(".about-card").forEach((el: any, i) => { + gsap.fromTo( + el, + { y: 40, opacity: 0, scale: 0.95 }, + { + y: 0, + opacity: 1, + scale: 1, + duration: 0.6, + ease: "power3.out", + delay: i * 0.1, + scrollTrigger: { + trigger: el, + start: "top 90%", + toggleActions: "play none none reverse", + }, + } + ); + }); + }, sectionRef); + + return () => ctx.revert(); } - }, [inView]); + }, []); const features = [ - { - icon: Target, - title: 'Strategic Vision', - description: 'We align digital solutions with your business objectives for maximum impact.', - }, - { - icon: Rocket, - title: 'Innovation First', - description: 'Cutting-edge technology and creative thinking drive every project we deliver.', - }, - { - icon: Users, - title: 'Collaborative Approach', - description: 'Your success is our success. We work as an extension of your team.', - }, - { - icon: Award, - title: 'Excellence Delivered', - description: 'Award-winning designs and development that exceed industry standards.', - }, + { icon: Target, title: "Strategic Vision", description: "We align digital solutions with your business objectives for maximum impact." }, + { icon: Rocket, title: "Innovation First", description: "Cutting-edge technology and creative thinking drive every project we deliver." }, + { icon: Users, title: "Collaborative Approach", description: "Your success is our success. We work as an extension of your team." }, + { icon: Award, title: "Excellence Delivered", description: "Award-winning designs and development that exceed industry standards." }, ]; return (
-
+
{/* Section Header */} @@ -68,33 +92,27 @@ const About: React.FC = () => { About Nextify

- We're a forward-thinking digital agency that transforms ambitious ideas into - extraordinary digital experiences through innovation, creativity, and technical excellence. + We're a forward-thinking digital agency that transforms ambitious ideas into extraordinary digital experiences through innovation, creativity, and technical excellence.

- {/* Main Content Grid */} + {/* Main Grid */}
- - {/* Left Column - Text Content */} + {/* Left */}

Pioneering Digital Excellence Since 2019

- Founded with a vision to revolutionize digital experiences, Nextify has grown from - a passionate startup to a recognized leader in cutting-edge web development and - digital strategy. + Founded with a vision to revolutionize digital experiences, Nextify has grown from a passionate startup to a recognized leader in cutting-edge web development and digital strategy.

- Our team of creative designers, skilled developers, and strategic thinkers work - collaboratively to deliver solutions that not only meet today's needs but - anticipate tomorrow's opportunities. + Our team of creative designers, skilled developers, and strategic thinkers work collaboratively to deliver solutions that not only meet today's needs but anticipate tomorrow's opportunities.

- {/* Key Stats */} + {/* Stats */}
500+
@@ -107,7 +125,7 @@ const About: React.FC = () => {
- {/* Right Column - Visual Element */} + {/* Right */}
@@ -115,9 +133,7 @@ const About: React.FC = () => {
-
-

Our Mission

-
+

Our Mission

  • Provide digital solutions that help small businesses thrive
  • @@ -125,40 +141,35 @@ const About: React.FC = () => {
  • Create hands-on learning and product innovation
  • Deliver technology with social responsibility
-
- {/* Features Grid */} + {/* Features */}
- {features.map((feature, index) => ( -
+ {features.map((f, i) => ( +
- +
-

- {feature.title} -

-

- {feature.description} -

+

{f.title}

+

{f.description}

))}
- {/* Background decorations */} + {/* Background Decorations */}
-
+
); }; -export default About; \ No newline at end of file +export default About; diff --git a/src/components/Contact/Contact.tsx b/src/components/Contact/Contact.tsx index a65bcde..c3c50be 100644 --- a/src/components/Contact/Contact.tsx +++ b/src/components/Contact/Contact.tsx @@ -1,6 +1,5 @@ -import React, { useRef, useEffect, useState } from 'react'; -import { useInView } from 'react-intersection-observer'; -import { gsap } from 'gsap'; +import React, { useRef, useState } from 'react'; +import { useScrollAnimations } from '../../hooks/useScrollAnimations'; import { Mail, Phone, @@ -25,23 +24,22 @@ const Contact: React.FC = () => { const [isSubmitting, setIsSubmitting] = useState(false); const [isSubmitted, setIsSubmitted] = useState(false); - const [ref, inView] = useInView({ - threshold: 0.3, - triggerOnce: true, - }); + useScrollAnimations(sectionRef); const contactInfo = [ { icon: Mail, title: 'Email Us', details: ['thenextifytech@gmail.com'], - gradient: 'from-purple-400 to-pink-400' + gradient: 'from-purple-400 to-pink-400', + action: () => window.open('mailto:thenextifytech@gmail.com') }, { icon: Phone, title: 'Call Us', - details: ['918590319003'], - gradient: 'from-cyan-400 to-blue-400' + details: ['+918590319003'], + gradient: 'from-cyan-400 to-blue-400', + action: () => window.open('tel:+918590319003') }, { icon: MapPin, @@ -68,32 +66,6 @@ const Contact: React.FC = () => { 'Other' ]; - useEffect(() => { - if (inView && sectionRef.current) { - const tl = gsap.timeline(); - - tl.fromTo('.contact-title', - { y: 50, opacity: 0 }, - { y: 0, opacity: 1, duration: 0.8, ease: "power3.out" } - ) - .fromTo('.contact-subtitle', - { y: 30, opacity: 0 }, - { y: 0, opacity: 1, duration: 0.6, ease: "power3.out" }, - "-=0.4" - ) - .fromTo('.contact-card', - { y: 50, opacity: 0, scale: 0.9 }, - { y: 0, opacity: 1, scale: 1, duration: 0.6, ease: "power3.out", stagger: 0.1 }, - "-=0.3" - ) - .fromTo('.contact-form', - { x: 50, opacity: 0 }, - { x: 0, opacity: 1, duration: 0.8, ease: "power3.out" }, - "-=0.4" - ); - } - }, [inView]); - const handleInputChange = (e: React.ChangeEvent) => { setFormData({ ...formData, @@ -105,13 +77,12 @@ const Contact: React.FC = () => { e.preventDefault(); setIsSubmitting(true); - // Simulate API call + // Simulate submission await new Promise(resolve => setTimeout(resolve, 2000)); setIsSubmitting(false); setIsSubmitted(true); - // Reset form after success message setTimeout(() => { setIsSubmitted(false); setFormData({ @@ -125,17 +96,26 @@ const Contact: React.FC = () => { }, 3000); }; + // WhatsApp button handler + const handleBookCall = () => { + const phoneNumber = '918590319003'; + const message = encodeURIComponent( + `Hi! I would like to schedule a call regarding my ${formData.service || 'project'}.` + ); + window.open(`https://wa.me/${phoneNumber}?text=${message}`, '_blank'); + }; + return (
-
+
{/* Section Header */}
-

+

Get In Touch

-

+

Ready to bring your digital vision to life? Let's start a conversation about your project and explore how we can help you achieve your goals.

@@ -144,7 +124,11 @@ const Contact: React.FC = () => { {/* Contact Info Grid */}
{contactInfo.map((info, index) => ( -
+
@@ -152,9 +136,7 @@ const Contact: React.FC = () => { {info.title} {info.details.map((detail, detailIndex) => ( -

- {detail} -

+

{detail}

))}
))} @@ -164,7 +146,7 @@ const Contact: React.FC = () => {
{/* Contact Form */} -
+
@@ -173,106 +155,7 @@ const Contact: React.FC = () => { {!isSubmitted ? (
- - {/* Name and Email Row */} -
-
- - -
-
- - -
-
- - {/* Company and Phone Row */} -
-
- - -
-
- - -
-
- - {/* Service Selection */} -
- - -
- - {/* Message */} -
- -