diff --git a/app/page.tsx b/app/page.tsx index b3437d5..757783a 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,159 +1,5 @@ -"use client"; +import { HomePage } from "@/components/views/Home/HomePage"; -import { useEffect, useState } from "react"; -import { Navbar } from "@/components/views/Home/Navbar"; -import { Hero } from "@/components/views/Home/Hero"; -import { Features } from "@/components/views/Home/Features"; -import { HowItWorks } from "@/components/views/Home/HowItWorks"; -import { Stats } from "@/components/views/Home/Stats"; -import { Footer } from "@/components/views/Home/Footer"; -import { Sparkles } from "lucide-react"; - -//Loading Screen -function LoadingScreen({ onComplete }: { onComplete: () => void }) { - const [progress, setProgress] = useState(0); - - useEffect(() => { - const interval = setInterval(() => { - setProgress((prev) => { - if (prev >= 100) { - clearInterval(interval); - setTimeout(onComplete, 300); - return 100; - } - return prev + Math.random() * 15; - }); - }, 100); - - return () => clearInterval(interval); - }, [onComplete]); - - return ( -
-
-
- -
- -

- Smart-Admin Copilot -

- -
-
-
- -

- Loading amazing experience... -

-
- ); -} - -//Scroll Progress -function ScrollProgressBar() { - const [progress, setProgress] = useState(0); - - useEffect(() => { - const handleScroll = () => { - const scrollTop = window.scrollY; - const docHeight = - document.documentElement.scrollHeight - window.innerHeight; - const scrollPercent = (scrollTop / docHeight) * 100; - setProgress(scrollPercent); - }; - - window.addEventListener("scroll", handleScroll, { passive: true }); - return () => window.removeEventListener("scroll", handleScroll); - }, []); - - return ( -
-
-
- ); -} - -//Back To Top -function BackToTop() { - const [isVisible, setIsVisible] = useState(false); - - useEffect(() => { - const handleScroll = () => { - setIsVisible(window.scrollY > 500); - }; - - window.addEventListener("scroll", handleScroll, { passive: true }); - return () => window.removeEventListener("scroll", handleScroll); - }, []); - - const scrollToTop = () => { - window.scrollTo({ top: 0, behavior: "smooth" }); - }; - - return ( - - ); -} - -//Main Page export default function Home() { - const [isLoading, setIsLoading] = useState(true); - - const handleLoadingComplete = () => { - setIsLoading(false); - }; - - if (isLoading) { - return ; - } - - return ( -
- - - - -
- - - - -
-
- - -
- ); + return ; } diff --git a/components/views/Home/HomePage.tsx b/components/views/Home/HomePage.tsx new file mode 100644 index 0000000..9435c6c --- /dev/null +++ b/components/views/Home/HomePage.tsx @@ -0,0 +1,155 @@ +"use client"; + +import { useEffect, useState } from "react"; +import { Navbar } from "@/components/views/Home/Navbar"; +import { Hero } from "@/components/views/Home/Hero"; +import { Features } from "@/components/views/Home/Features"; +import { HowItWorks } from "@/components/views/Home/HowItWorks"; +import { Stats } from "@/components/views/Home/Stats"; +import { Footer } from "@/components/views/Home/Footer"; +import { Sparkles } from "lucide-react"; + +function LoadingScreen({ onComplete }: { onComplete: () => void }) { + const [progress, setProgress] = useState(0); + + useEffect(() => { + const interval = setInterval(() => { + setProgress((prev) => { + if (prev >= 100) { + clearInterval(interval); + setTimeout(onComplete, 300); + return 100; + } + return prev + Math.random() * 15; + }); + }, 100); + + return () => clearInterval(interval); + }, [onComplete]); + + return ( +
+
+
+ +
+ +

+ Smart-Admin Copilot +

+ +
+
+
+ +

+ Loading amazing experience... +

+
+ ); +} + +function ScrollProgressBar() { + const [progress, setProgress] = useState(0); + + useEffect(() => { + const handleScroll = () => { + const scrollTop = window.scrollY; + const docHeight = + document.documentElement.scrollHeight - window.innerHeight; + const scrollPercent = (scrollTop / docHeight) * 100; + setProgress(scrollPercent); + }; + + window.addEventListener("scroll", handleScroll, { passive: true }); + return () => window.removeEventListener("scroll", handleScroll); + }, []); + + return ( +
+
+
+ ); +} + +function BackToTop() { + const [isVisible, setIsVisible] = useState(false); + + useEffect(() => { + const handleScroll = () => { + setIsVisible(window.scrollY > 500); + }; + + window.addEventListener("scroll", handleScroll, { passive: true }); + return () => window.removeEventListener("scroll", handleScroll); + }, []); + + const scrollToTop = () => { + window.scrollTo({ top: 0, behavior: "smooth" }); + }; + + return ( + + ); +} + +export function HomePage() { + const [isLoading, setIsLoading] = useState(true); + + const handleLoadingComplete = () => { + setIsLoading(false); + }; + + if (isLoading) { + return ; + } + + return ( +
+ + + + +
+ + + + +
+
+ + +
+ ); +} diff --git a/hooks/useScrollAnimation.ts b/hooks/useScrollAnimation.ts index 46a93d6..5dd3c55 100644 --- a/hooks/useScrollAnimation.ts +++ b/hooks/useScrollAnimation.ts @@ -55,77 +55,3 @@ export function useScrollAnimation( reset, }; } - -export function useCountUp( - end: number, - duration: number = 2000, - start: number = 0, -) { - const [count, setCount] = useState(start); - const [isAnimating, setIsAnimating] = useState(false); - const countRef = useRef(start); - - const startAnimation = useCallback(() => { - if (isAnimating) return; - - setIsAnimating(true); - const startTime = Date.now(); - const range = end - start; - - const animate = () => { - const elapsed = Date.now() - startTime; - const progress = Math.min(elapsed / duration, 1); - - const easeOut = 1 - Math.pow(1 - progress, 3); - const currentCount = Math.floor(start + range * easeOut); - - countRef.current = currentCount; - setCount(currentCount); - - if (progress < 1) { - requestAnimationFrame(animate); - } else { - setCount(end); - setIsAnimating(false); - } - }; - - requestAnimationFrame(animate); - }, [end, duration, start, isAnimating]); - - const reset = useCallback(() => { - setCount(start); - setIsAnimating(false); - }, [start]); - - return { count, startAnimation, reset, isAnimating }; -} - -export function useParallax(speed: number = 0.5) { - const ref = useRef(null); - const [offset, setOffset] = useState(0); - - useEffect(() => { - if (typeof window === "undefined") return; - - const handleScroll = () => { - if (!ref.current) return; - - const rect = ref.current.getBoundingClientRect(); - const scrolled = window.scrollY; - const elementTop = rect.top + scrolled; - const relativeScroll = scrolled - elementTop + window.innerHeight; - - setOffset(relativeScroll * speed * 0.1); - }; - - window.addEventListener("scroll", handleScroll, { passive: true }); - handleScroll(); - - return () => { - window.removeEventListener("scroll", handleScroll); - }; - }, [speed]); - - return { ref, offset }; -} diff --git a/hooks/useTheme.ts b/hooks/useTheme.ts index f8ce3b6..111396c 100644 --- a/hooks/useTheme.ts +++ b/hooks/useTheme.ts @@ -1,11 +1,11 @@ "use client"; -import { useState } from "react"; +import { useEffect, useState } from "react"; import { useTheme as useNextTheme } from "next-themes"; export function useTheme() { const { theme, resolvedTheme, setTheme } = useNextTheme(); - const [mounted] = useState(true); + const [mounted, setMounted] = useState(true); const currentTheme = resolvedTheme ?? theme ?? "light"; diff --git a/public/file.svg b/public/file.svg deleted file mode 100644 index 004145c..0000000 --- a/public/file.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/globe.svg b/public/globe.svg deleted file mode 100644 index 567f17b..0000000 --- a/public/globe.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/next.svg b/public/next.svg deleted file mode 100644 index 5174b28..0000000 --- a/public/next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/vercel.svg b/public/vercel.svg deleted file mode 100644 index 7705396..0000000 --- a/public/vercel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/window.svg b/public/window.svg deleted file mode 100644 index b2b2a44..0000000 --- a/public/window.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file