feat: add animated hero section with TypeAnimation component on About page

This commit is contained in:
2025-10-16 16:06:35 +02:00
parent 4ef0b3918b
commit 40e616fa83
6 changed files with 83 additions and 3 deletions

View File

@@ -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
View File

@@ -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

View File

@@ -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>
) )
} }

View File

@@ -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>
);
}

View File

@@ -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 fundraiseat 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 fundraiseat a fraction of the cost.
</p> </p>

View 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 }