feat: add animated hero section with TypeAnimation component on About page
This commit is contained in:
		@@ -29,6 +29,7 @@
 | 
				
			|||||||
    "react": "^18.3.1",
 | 
					    "react": "^18.3.1",
 | 
				
			||||||
    "react-countup": "^6.5.3",
 | 
					    "react-countup": "^6.5.3",
 | 
				
			||||||
    "react-dom": "^18.3.1",
 | 
					    "react-dom": "^18.3.1",
 | 
				
			||||||
 | 
					    "react-type-animation": "^3.2.0",
 | 
				
			||||||
    "tailwind-merge": "^2.6.0",
 | 
					    "tailwind-merge": "^2.6.0",
 | 
				
			||||||
    "tailwindcss": "^4.1.7",
 | 
					    "tailwindcss": "^4.1.7",
 | 
				
			||||||
    "three": "^0.179.1",
 | 
					    "three": "^0.179.1",
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										16
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							@@ -65,6 +65,9 @@ importers:
 | 
				
			|||||||
      react-dom:
 | 
					      react-dom:
 | 
				
			||||||
        specifier: ^18.3.1
 | 
					        specifier: ^18.3.1
 | 
				
			||||||
        version: 18.3.1(react@18.3.1)
 | 
					        version: 18.3.1(react@18.3.1)
 | 
				
			||||||
 | 
					      react-type-animation:
 | 
				
			||||||
 | 
					        specifier: ^3.2.0
 | 
				
			||||||
 | 
					        version: 3.2.0(prop-types@15.8.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
      tailwind-merge:
 | 
					      tailwind-merge:
 | 
				
			||||||
        specifier: ^2.6.0
 | 
					        specifier: ^2.6.0
 | 
				
			||||||
        version: 2.6.0
 | 
					        version: 2.6.0
 | 
				
			||||||
@@ -2270,6 +2273,13 @@ packages:
 | 
				
			|||||||
    peerDependencies:
 | 
					    peerDependencies:
 | 
				
			||||||
      react: ^18.0.0
 | 
					      react: ^18.0.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  react-type-animation@3.2.0:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-WXTe0i3rRNKjmggPvT5ntye1QBt0ATGbijeW6V3cQe2W0jaMABXXlPPEdtofnS9tM7wSRHchEvI9SUw+0kUohw==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      prop-types: ^15.5.4
 | 
				
			||||||
 | 
					      react: '>= 15.0.0'
 | 
				
			||||||
 | 
					      react-dom: '>= 15.0.0'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  react-use-measure@2.1.7:
 | 
					  react-use-measure@2.1.7:
 | 
				
			||||||
    resolution: {integrity: sha512-KrvcAo13I/60HpwGO5jpW7E9DfusKyLPLvuHlUyP5zqnmAPhNc6qTRjUQrdTADl0lpPpDVU2/Gg51UlOGHXbdg==}
 | 
					    resolution: {integrity: sha512-KrvcAo13I/60HpwGO5jpW7E9DfusKyLPLvuHlUyP5zqnmAPhNc6qTRjUQrdTADl0lpPpDVU2/Gg51UlOGHXbdg==}
 | 
				
			||||||
    peerDependencies:
 | 
					    peerDependencies:
 | 
				
			||||||
@@ -4945,6 +4955,12 @@ snapshots:
 | 
				
			|||||||
      react: 18.3.1
 | 
					      react: 18.3.1
 | 
				
			||||||
      scheduler: 0.21.0
 | 
					      scheduler: 0.21.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  react-type-animation@3.2.0(prop-types@15.8.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      prop-types: 15.8.1
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      react-dom: 18.3.1(react@18.3.1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  react-use-measure@2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
 | 
					  react-use-measure@2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      react: 18.3.1
 | 
					      react: 18.3.1
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,10 @@
 | 
				
			|||||||
 | 
					import { AboutHero } from "@/components/AboutHero"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default function About() {
 | 
					export default function About() {
 | 
				
			||||||
  return (
 | 
					  return (
 | 
				
			||||||
    <div>
 | 
					    <div>
 | 
				
			||||||
      {/* About page content will go here */}
 | 
					      <AboutHero />
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
  )
 | 
					  )
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,50 @@
 | 
				
			|||||||
 | 
					"use client";
 | 
				
			||||||
 | 
					import { TypeAnimation } from 'react-type-animation';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const rotatingWords = [
 | 
				
			||||||
 | 
					  "everyone",
 | 
				
			||||||
 | 
					  1500,
 | 
				
			||||||
 | 
					  "creators",
 | 
				
			||||||
 | 
					  1500,
 | 
				
			||||||
 | 
					  "dreamers",
 | 
				
			||||||
 | 
					  1500,
 | 
				
			||||||
 | 
					  "developers",
 | 
				
			||||||
 | 
					  1500,
 | 
				
			||||||
 | 
					  "communities",
 | 
				
			||||||
 | 
					  1500,
 | 
				
			||||||
 | 
					  "humanity",
 | 
				
			||||||
 | 
					  1500,
 | 
				
			||||||
 | 
					  "builders",
 | 
				
			||||||
 | 
					  1500,
 | 
				
			||||||
 | 
					  "thinkers",
 | 
				
			||||||
 | 
					  1500,
 | 
				
			||||||
 | 
					  "doers",
 | 
				
			||||||
 | 
					  1500,
 | 
				
			||||||
 | 
					  "pioneers",
 | 
				
			||||||
 | 
					  1500,
 | 
				
			||||||
 | 
					  "the next billion",
 | 
				
			||||||
 | 
					  1500,
 | 
				
			||||||
 | 
					  "All",
 | 
				
			||||||
 | 
					  1500,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function AboutHero() {
 | 
				
			||||||
 | 
					  return (
 | 
				
			||||||
 | 
					    <section className="flex flex-col items-start justify-center min-h-[70vh] px-6 md:px-16  text-white">
 | 
				
			||||||
 | 
					      <h1 className="text-5xl lg:text-8xl font-medium leading-tight">
 | 
				
			||||||
 | 
					        Building a Decentralized Internet for{" "}
 | 
				
			||||||
 | 
					        <TypeAnimation
 | 
				
			||||||
 | 
					          sequence={rotatingWords}
 | 
				
			||||||
 | 
					          wrapper="span"
 | 
				
			||||||
 | 
					          speed={50}
 | 
				
			||||||
 | 
					          className="relative inline-block text-[#00FFD1]"
 | 
				
			||||||
 | 
					          repeat={Infinity}
 | 
				
			||||||
 | 
					        />        .
 | 
				
			||||||
 | 
					      </h1>
 | 
				
			||||||
 | 
					      <p className="max-w-3xl mt-6 text-lg md:text-2xl text-gray-800">
 | 
				
			||||||
 | 
					        At <span className="text-[#00FFD1] font-medium">ThreeFold</span>, we are empowering
 | 
				
			||||||
 | 
					        individuals and organizations to shape an open, resilient, and sustainable internet.
 | 
				
			||||||
 | 
					      </p>
 | 
				
			||||||
 | 
					    </section>
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,6 +4,7 @@ import Image from 'next/image'
 | 
				
			|||||||
import { Button } from './Button'
 | 
					import { Button } from './Button'
 | 
				
			||||||
import Engage from '@/images/engage.svg'
 | 
					import Engage from '@/images/engage.svg'
 | 
				
			||||||
import { gradientText, gradientDark } from '@/components/Gradients'
 | 
					import { gradientText, gradientDark } from '@/components/Gradients'
 | 
				
			||||||
 | 
					import { h1 as H1 } from '@/components/ui/Text'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const navigation = [
 | 
					const navigation = [
 | 
				
			||||||
  { name: 'Product', href: '#' },
 | 
					  { name: 'Product', href: '#' },
 | 
				
			||||||
@@ -18,9 +19,9 @@ export default function HeroHome() {
 | 
				
			|||||||
        <div className="">
 | 
					        <div className="">
 | 
				
			||||||
          <div className="mx-auto max-w-7xl px-8 lg:px-8">
 | 
					          <div className="mx-auto max-w-7xl px-8 lg:px-8">
 | 
				
			||||||
            <div className="mx-auto max-w-3xl text-center">
 | 
					            <div className="mx-auto max-w-3xl text-center">
 | 
				
			||||||
              <h1 className="text-3xl font-medium tracking-tight text-white lg:text-5xl">
 | 
					              <H1 className="text-white">
 | 
				
			||||||
                Empowering Purpose-Driven Organizations.
 | 
					                Empowering Purpose-Driven Organizations.
 | 
				
			||||||
              </h1>
 | 
					              </H1>
 | 
				
			||||||
              <p className="mt-8 lg:lg:text-lg text-base text-gray-300">
 | 
					              <p className="mt-8 lg:lg:text-lg text-base text-gray-300">
 | 
				
			||||||
                Welcome to <span className={`font-semibold ${gradientText}`}>ThreeFold</span>: the first all-in-one, white-label engagement platform to mobilize communities, engage supporters, scale impact, and fundraise—at a fraction of the cost.
 | 
					                Welcome to <span className={`font-semibold ${gradientText}`}>ThreeFold</span>: the first all-in-one, white-label engagement platform to mobilize communities, engage supporters, scale impact, and fundraise—at a fraction of the cost.
 | 
				
			||||||
              </p>
 | 
					              </p>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										9
									
								
								src/components/ui/Text.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								src/components/ui/Text.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					import { cn } from '@/lib/utils'
 | 
				
			||||||
 | 
					import React from 'react'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const h1 = React.forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(({ className, ...props }, ref) => (
 | 
				
			||||||
 | 
					  <h1 ref={ref} className={cn('text-4xl font-medium tracking-tight lg:text-5xl', className)} {...props} />
 | 
				
			||||||
 | 
					))
 | 
				
			||||||
 | 
					h1.displayName = 'H1'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export { h1 }
 | 
				
			||||||
		Reference in New Issue
	
	Block a user