From f9ff3383a719021f54b1a71d1cff24420cf9b1c5 Mon Sep 17 00:00:00 2001 From: Matiss Jurevics Date: Mon, 15 Dec 2025 19:35:35 +0000 Subject: [PATCH] feat: Implement hero text and model fade-in animations, and update site navigation and footer content. --- src/App.jsx | 44 ++++++++++++++++++++++++++++++--------- src/canvas/HeroModel.jsx | 11 +++++++++- src/components/Footer.jsx | 33 +++++++++-------------------- src/components/Header.jsx | 3 --- 4 files changed, 54 insertions(+), 37 deletions(-) diff --git a/src/App.jsx b/src/App.jsx index 96cdcb7..c82dc63 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -14,6 +14,7 @@ function App() { const lenisRef = useRef() useEffect(() => { + // Lenis setup const lenis = new Lenis({ duration: 1.2, easing: (t) => Math.min(1, 1.001 - Math.pow(2, -10 * t)), @@ -34,8 +35,28 @@ function App() { requestAnimationFrame(raf) + // Hero Text Animation + const ctx = gsap.context(() => { + const tl = gsap.timeline(); + tl.from(".hero-title", { + y: 100, + opacity: 0, + duration: 1.5, + ease: "power4.out", + delay: 0.5 + }) + .from(".hero-subtitle", { + y: 20, + opacity: 0, + duration: 1, + ease: "power3.out" + }, "-=1"); + + }); + return () => { lenis.destroy() + ctx.revert(); } }, []) @@ -64,16 +85,19 @@ function App() { mixBlendMode: 'difference', // Ensure text pops against wireframe color: '#fff' }}> -

- Matiss
Jurevics -

-

+

+ Matiss
Jurevics +

+ +

{ const mesh = useRef(); + const materialRef = useRef(); const noise3D = useMemo(() => createNoise3D(), []); // Create geometry with HIGHER segment count for smoother, denser wave like the reference @@ -27,16 +28,24 @@ const Terrain = () => { // Slight rotation mesh.current.rotation.x = -Math.PI / 2.5; mesh.current.rotation.z += 0.0005; + + // Entrance animation logic (simple lerp for opacity) + // We start opacity at 0 in the material and lerp to 0.15 + // Ideally use a spring or GSAP, but lerp is cheap and easy here + if (materialRef.current) { + materialRef.current.opacity = THREE.MathUtils.lerp(materialRef.current.opacity, 0.15, 0.02); + } } }); return ( ); diff --git a/src/components/Footer.jsx b/src/components/Footer.jsx index cc1d683..b7f8d2a 100644 --- a/src/components/Footer.jsx +++ b/src/components/Footer.jsx @@ -16,39 +16,26 @@ const Footer = () => { gap: '40px' }}>

-

Products

+

Socials

-

Support

+

Contact

-
- -
-

Company

-
-

Newsletter

+

Stay Updated

- Sign up for the latest news, product releases, and exclusive offers. + Occasional updates on new projects and experiments.

{ alignItems: 'center', color: '#444' }}> -
Teenage Engineering
+
Matiss Jurevics
© 2024
diff --git a/src/components/Header.jsx b/src/components/Header.jsx index 223ba7c..d617801 100644 --- a/src/components/Header.jsx +++ b/src/components/Header.jsx @@ -37,9 +37,6 @@ const Header = () => { Contact -
- Cart (0) -
); };