From 6b9b27fab9346813b60c5210ef405e358cf9b6a2 Mon Sep 17 00:00:00 2001 From: sasha-astiadi Date: Sun, 14 Sep 2025 17:01:46 +0200 Subject: [PATCH] ok --- src/app/(main)/page.tsx | 4 ++ src/components/GridStats.tsx | 119 +++++++++++++++++++++++++++++++++++ src/components/NavLinks.tsx | 2 +- tailwind.config.js | 77 +++++++++++++++++++++++ 4 files changed, 201 insertions(+), 1 deletion(-) create mode 100644 tailwind.config.js diff --git a/src/app/(main)/page.tsx b/src/app/(main)/page.tsx index 14dd795..1f12f98 100644 --- a/src/app/(main)/page.tsx +++ b/src/app/(main)/page.tsx @@ -10,6 +10,7 @@ import { Companies } from '@/components/Companies' import { CallTo } from '@/components/CallTo' import { ScrollDown } from '@/components/ui/ScrollDown' import { ScrollUp } from '@/components/ui/ScrollUp' +import { GridStats } from '@/components/GridStats' export default function Home() { return ( @@ -20,6 +21,9 @@ export default function Home() {
+
+ +
diff --git a/src/components/GridStats.tsx b/src/components/GridStats.tsx index e69de29..4b30b86 100644 --- a/src/components/GridStats.tsx +++ b/src/components/GridStats.tsx @@ -0,0 +1,119 @@ +"use client"; + +import CountUp from "react-countup"; +import React from "react"; +import { Button } from "./Button"; + +export function GridStats() { + return ( +
+
+
+ {/* Column 1: Title & NODES */} +
+ {/* Title + Description */} +
+

+ Powered by a Global Community +

+

+ ThreeFold’s groundbreaking technology enables anyone – individuals, organizations, and communities – to deploy their own Internet infrastructure. +

+ +
+ + +
+ + {/* Column 2: CORES (staggered) + SSD */} +
+ } + note="Total Central Processing Unit Cores available on the grid." + className="mt-24" + /> + + } + unit="GB" + note="The total amount of storage (SSD, HDD, & RAM) on the grid." + /> +
+ + + + {/* Column 3: nodes countries */} +
+ } + note="The total number of nodes on the grid." + + /> + + } + note="The total number of countries with active nodes." + /> +
+
+
+
+ ); +} + +// 🧱 Stat Card Component +function StatCard({ + label, + description, + value, + unit, + note, + className = "", +}: { + label: string; + description: string; + value: React.ReactNode; + unit?: string; + note: string; + className?: string; +}) { + return ( +
{ + e.currentTarget.style.filter = 'brightness(0.8)'; + }} + onMouseLeave={(e) => { + e.currentTarget.style.filter = 'brightness(1)'; + }} + > +

{label}

+

+ {description} +

+
+ +
+ {value} + {unit && ( + {unit} + )} +
+
+

+ {note} +

+
+ ); +} diff --git a/src/components/NavLinks.tsx b/src/components/NavLinks.tsx index dcec93c..8e3a56d 100644 --- a/src/components/NavLinks.tsx +++ b/src/components/NavLinks.tsx @@ -10,12 +10,12 @@ export function NavLinks() { return [ ['About', '/#home-about'], + ['Cloud', '/#grid-stats'], ['Marketplace', '/#companies'], ['Technology', '/#stack-section'], ['How it works', '/#steps'], ['Use Cases', '/#clickable-gallery'], ['Coming Soon', '/#use-cases'], - ['Get Started', '/#call-to-action'], ['FAQs', '/#faqs'], ].map(([label, href], index) => (