Compare commits
14 Commits
Author | SHA1 | Date | |
---|---|---|---|
cd8687db54 | |||
c59c905945 | |||
14435d8f63 | |||
987550c7c6 | |||
ecd52b6ada | |||
7e2b30fbcc | |||
a69f35c9a7 | |||
4bea627e6d | |||
6d35b9dd05 | |||
40d1d5ed24 | |||
ddbe3c795d | |||
1df765c4aa | |||
c8a3b455fe | |||
75aa34ae6f |
@@ -1,6 +1,6 @@
|
||||
# EngageOS
|
||||
# ThreeFold
|
||||
|
||||
EngageOS is a [Tailwind Plus](https://tailwindcss.com/plus) site template built using [Tailwind CSS](https://tailwindcss.com) and [Next.js](https://nextjs.org).
|
||||
ThreeFold is a [Tailwind Plus](https://tailwindcss.com/plus) site template built using [Tailwind CSS](https://tailwindcss.com) and [Next.js](https://nextjs.org).
|
||||
|
||||
## Getting started
|
||||
|
||||
|
5
build.sh
@@ -1,6 +1,9 @@
|
||||
#!/bin/bash
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
# Ensure all shell scripts are executable
|
||||
chmod +x *.sh
|
||||
|
||||
PREFIX="threefold"
|
||||
|
||||
echo "building for folder: /$PREFIX/"
|
||||
@@ -14,5 +17,3 @@ pnpm run build
|
||||
# local mirror (optional)
|
||||
# rsync -rav --delete dist/ "${HOME}/hero/var/www/$PREFIX/"
|
||||
|
||||
# deploy to threefold server
|
||||
rsync -avz --delete out/ "root@threefold.info:/root/hero/www/info/$PREFIX/"
|
BIN
public/images/3phone.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
public/images/3router.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
public/images/aibox.png
Normal file
After Width: | Height: | Size: 9.4 KiB |
BIN
public/images/hgu-04.png
Normal file
After Width: | Height: | Size: 124 KiB |
1
public/images/mycelium.svg
Normal file
After Width: | Height: | Size: 83 KiB |
BIN
public/images/tfdash.png
Normal file
After Width: | Height: | Size: 634 KiB |
@@ -1,5 +1,4 @@
|
||||
import { CallToAction } from '@/components/CallToAction'
|
||||
import { Faqs } from '@/components/Faqs'
|
||||
import { Hero } from '@/components/Hero'
|
||||
import { Pricing } from '@/components/Pricing'
|
||||
import { PrimaryFeatures } from '@/components/PrimaryFeatures'
|
||||
@@ -14,6 +13,10 @@ import GlobeDemo from '@/components/GlobeDemo'
|
||||
import { Dashboard } from '@/components/Dashboard'
|
||||
import { AppsPreview } from '@/components/Apps'
|
||||
import { FarmerPreview } from '@/components/Farmer'
|
||||
import { TfDashboard } from '@/components/TfDashboard'
|
||||
import { ProductsPreview } from '@/components/Products'
|
||||
import { CallTo } from '@/components/CallTo'
|
||||
import { Faqss } from '@/components/Faqs'
|
||||
|
||||
|
||||
export default function Home() {
|
||||
@@ -23,8 +26,11 @@ export default function Home() {
|
||||
<StackSectionPreview />
|
||||
<Dashboard />
|
||||
<FarmerPreview />
|
||||
<TfDashboard />
|
||||
<AppsPreview />
|
||||
|
||||
<ProductsPreview />
|
||||
<CallTo />
|
||||
<Faqss />
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
@@ -12,11 +12,11 @@ const inter = Inter({
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: {
|
||||
template: '%s - EngageOS',
|
||||
default: 'EngageOS - Invest at the perfect time.',
|
||||
template: '%s - ThreeFold',
|
||||
default: 'ThreeFold - Decentralized internet by everyone, for everyone.',
|
||||
},
|
||||
description:
|
||||
'By leveraging insights from our network of industry insiders, you’ll know exactly when to buy to maximize profit, and exactly when to sell to avoid painful losses.',
|
||||
'ThreeFold is a fully operational, decentralized internet infrastructure – deployed locally, scalable globally, and owned and powered by the people.',
|
||||
}
|
||||
|
||||
export default function RootLayout({
|
||||
@@ -25,8 +25,10 @@ export default function RootLayout({
|
||||
children: React.ReactNode
|
||||
}) {
|
||||
return (
|
||||
<html lang="en" className={clsx('antialiased', inter.variable)} style={{ backgroundColor: '#121212' }}>
|
||||
<body style={{ backgroundColor: '#121212', color: '#ffffff' }}>{children}</body>
|
||||
<html lang="en" className={clsx('antialiased', inter.variable)} suppressHydrationWarning>
|
||||
<body className="bg-[#121212] text-white" suppressHydrationWarning>
|
||||
{children}
|
||||
</body>
|
||||
</html>
|
||||
)
|
||||
}
|
||||
|
@@ -22,7 +22,7 @@ const logos = [
|
||||
export function AppsPreview() {
|
||||
return (
|
||||
<div className="relative flex h-[40rem] w-full overflow-hidden rounded-md bg-transparent antialiased md:items-center md:justify-center">
|
||||
<div className="relative z-10 mx-auto w-full max-w-4xl p-4 pt-24">
|
||||
<div className="relative z-10 mx-auto w-full max-w-3xl p-4 pt-16">
|
||||
|
||||
{/* Heading */}
|
||||
<motion.div
|
||||
@@ -31,7 +31,7 @@ export function AppsPreview() {
|
||||
animate={{ opacity: 1, y: 0 }}
|
||||
transition={{ duration: 1 }}
|
||||
>
|
||||
<h1 className="bg-opacity-50 bg-gradient-to-b from-neutral-50 to-neutral-400 bg-clip-text tracking-tighter text-center text-4xl font-semibold text-transparent lg:text-6xl">
|
||||
<h1 className="bg-opacity-50 bg-gradient-to-b from-neutral-50 to-neutral-400 bg-clip-text tracking-tighter text-center text-4xl font-semibold text-transparent lg:text-5xl">
|
||||
Anything That Runs on Linux Can Run on ThreeFold
|
||||
</h1>
|
||||
</motion.div>
|
||||
|
28
src/components/Banner.tsx
Normal file
@@ -0,0 +1,28 @@
|
||||
import { XMarkIcon } from '@heroicons/react/20/solid'
|
||||
|
||||
export function Banner() {
|
||||
return (
|
||||
<div className="relative flex items-center gap-x-6 bg-gray-200 px-6 py-2.5 after:absolute after:inset-x-0 after:bottom-0 after:h-px after:bg-white/10 sm:px-3.5 sm:before:flex-1">
|
||||
<p className="text-sm/6 text-white">
|
||||
<strong className="font-semibold">ThreeFold is going commercial!</strong>
|
||||
<svg viewBox="0 0 2 2" aria-hidden="true" className="mx-2 inline size-0.5 fill-current">
|
||||
<circle r={1} cx={1} cy={1} />
|
||||
</svg>
|
||||
Read our <a
|
||||
href="https://www.threefold.io/newsroom/summer-2025-roundup/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="underline hover:text-white hover:font-semibold"
|
||||
>
|
||||
2025 Summer Round Up →
|
||||
</a>
|
||||
</p>
|
||||
<div className="flex flex-1 justify-end">
|
||||
<button type="button" className="-m-3 p-3 focus-visible:-outline-offset-4">
|
||||
<span className="sr-only">Dismiss</span>
|
||||
<XMarkIcon aria-hidden="true" className="size-5 text-white" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
@@ -16,7 +16,7 @@ export default function Benefits() {
|
||||
Built Different. For a Change.
|
||||
</h2>
|
||||
<p className="mt-6 lg:text-lg text-base text-gray-300">
|
||||
EngageOS isn't just another tech platform — it's a digital infrastructure built from the ground up for purpose-driven organizations. From white-label sovereignty to field-ready resilience, every element of EngageOS is designed to meet the real-world challenges of civil society.
|
||||
ThreeFold isn't just another tech platform — it's a digital infrastructure built from the ground up for purpose-driven organizations. From white-label sovereignty to field-ready resilience, every element of ThreeFold is designed to meet the real-world challenges of civil society.
|
||||
</p>
|
||||
</div>
|
||||
</Container>
|
||||
@@ -32,7 +32,7 @@ export default function Benefits() {
|
||||
<h3 className="text-sm/4 font-semibold text-white"> Built for Civil Society</h3>
|
||||
<p className="mt-2 text-lg font-medium tracking-tight text-white">Purpose-First, Not Profit-First</p>
|
||||
<p className="mt-2 max-w-lg text-sm/6 text-gray-300">
|
||||
Unlike traditional SaaS built for commercial scale, EngageOS was born from the realities of NGOs, grassroots coalitions, and purpose-led institutions. Every module, flow, and metric is optimized to serve impact — not ad revenue or venture capital.
|
||||
Unlike traditional SaaS built for commercial scale, ThreeFold was born from the realities of NGOs, grassroots coalitions, and purpose-led institutions. Every module, flow, and metric is optimized to serve impact — not ad revenue or venture capital.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -48,7 +48,7 @@ export default function Benefits() {
|
||||
<h3 className="text-sm/4 font-semibold text-white">White-Label, Zero-Code</h3>
|
||||
<p className="mt-2 text-lg font-medium tracking-tight text-white">Your Brand, Your Movements</p>
|
||||
<p className="mt-2 max-w-lg text-sm/6 text-gray-300">
|
||||
EngageOS empowers organizations to fully own their digital identity. From Red Cross OS to Montessori OS, each instance is custom-branded — no tech team required. You launch a platform that looks and feels like you, not us.
|
||||
ThreeFold empowers organizations to fully own their digital identity. From Red Cross OS to Montessori OS, each instance is custom-branded — no tech team required. You launch a platform that looks and feels like you, not us.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -64,7 +64,7 @@ export default function Benefits() {
|
||||
<h3 className="text-sm/4 font-semibold text-white">Sovereign & Ethical Infrastructure</h3>
|
||||
<p className="mt-2 text-lg font-medium tracking-tight text-white">Own Your Data. Always.</p>
|
||||
<p className="mt-2 max-w-lg text-sm/6 text-gray-300">
|
||||
We don't mine or monetize user data. EngageOS runs on decentralized, privacy-respecting infrastructure — built for trust, compliance, and sovereignty. You control where your data lives and who sees it.
|
||||
We don't mine or monetize user data. ThreeFold runs on decentralized, privacy-respecting infrastructure — built for trust, compliance, and sovereignty. You control where your data lives and who sees it.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -80,7 +80,7 @@ export default function Benefits() {
|
||||
<h3 className="text-sm/4 font-semibold text-white">Mutualized Model</h3>
|
||||
<p className="mt-2 text-lg font-medium tracking-tight text-white">Share Infrastructure. Multiply Impact.</p>
|
||||
<p className="mt-2 max-w-lg text-sm/6 text-gray-300">
|
||||
By pooling tech costs across aligned organizations, EngageOS offers enterprise-grade functionality at a fraction of the price. When one partner grows, the entire ecosystem benefits — through shared modules, updates, and insights.
|
||||
By pooling tech costs across aligned organizations, ThreeFold offers enterprise-grade functionality at a fraction of the price. When one partner grows, the entire ecosystem benefits — through shared modules, updates, and insights.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -4,6 +4,8 @@ import clsx from 'clsx'
|
||||
const baseStyles = {
|
||||
solid:
|
||||
'inline-flex justify-center rounded-lg py-2 px-3 text-sm font-semibold transition-colors',
|
||||
glass:
|
||||
'rounded-md bg-white/10 px-3.5 py-2.5 text-sm font-semibold text-white hover:bg-white/15',
|
||||
outline:
|
||||
'inline-flex justify-center rounded-lg border py-[calc(--spacing(2)-1px)] px-[calc(--spacing(3)-1px)] text-sm transition-colors',
|
||||
}
|
||||
@@ -11,14 +13,14 @@ const baseStyles = {
|
||||
const variantStyles = {
|
||||
solid: {
|
||||
gradient:
|
||||
'bg-gradient-to-r from-[#caa5f0] via-[#8f79f9] to-[#3c82f5] text-white hover:brightness-110 active:brightness-95',
|
||||
'btn-new-gradient',
|
||||
cyan: 'relative overflow-hidden bg-cyan-500 text-white before:absolute before:inset-0 active:before:bg-transparent hover:before:bg-white/10 active:bg-cyan-600 active:text-white/80 before:transition-colors',
|
||||
white:
|
||||
'bg-white text-cyan-900 hover:bg-white/90 active:bg-white/90 active:text-cyan-900/70',
|
||||
'bg-white text-black hover:bg-white/90 active:bg-white/90 active:text-gray-400',
|
||||
gray: 'bg-gray-800 text-white hover:bg-gray-900 active:bg-gray-800 active:text-white/80',
|
||||
},
|
||||
outline: {
|
||||
gray: 'border-gray-300 text-gray-700 hover:border-gray-400 active:bg-gray-100 active:text-gray-700/80',
|
||||
gray: 'border-gray-300 text-gray-700 hover:border-gray-600 hover:text-white active:bg-gray-100 active:text-gray-600/80',
|
||||
},
|
||||
}
|
||||
|
||||
@@ -27,6 +29,9 @@ type ButtonProps = (
|
||||
variant?: 'solid'
|
||||
color?: keyof typeof variantStyles.solid
|
||||
}
|
||||
| {
|
||||
variant: 'glass'
|
||||
}
|
||||
| {
|
||||
variant: 'outline'
|
||||
color?: keyof typeof variantStyles.outline
|
||||
@@ -41,15 +46,22 @@ type ButtonProps = (
|
||||
|
||||
export function Button({ className, ...props }: ButtonProps) {
|
||||
props.variant ??= 'solid'
|
||||
props.color ??= 'gray'
|
||||
|
||||
if (props.variant !== 'glass') {
|
||||
props.color ??= 'gray'
|
||||
}
|
||||
|
||||
let variantClass: string | undefined = undefined
|
||||
|
||||
if (props.variant === 'outline' && props.color) {
|
||||
variantClass = variantStyles.outline[props.color]
|
||||
} else if (props.variant === 'solid' && props.color) {
|
||||
variantClass = variantStyles.solid[props.color]
|
||||
}
|
||||
|
||||
className = clsx(
|
||||
baseStyles[props.variant],
|
||||
props.variant === 'outline'
|
||||
? variantStyles.outline[props.color]
|
||||
: props.variant === 'solid'
|
||||
? variantStyles.solid[props.color]
|
||||
: undefined,
|
||||
variantClass,
|
||||
className,
|
||||
)
|
||||
|
||||
|
47
src/components/CallTo.tsx
Normal file
@@ -0,0 +1,47 @@
|
||||
export function CallTo() {
|
||||
return (
|
||||
<div className="bg-transparent">
|
||||
<div className="mx-auto max-w-7xl py-24 px-6 lg:px-4">
|
||||
<div className="relative isolate overflow-hidden bg-stat-gradient py-16 text-center after:pointer-events-none after:absolute after:inset-0 sm:rounded-3xl sm:px-16">
|
||||
<div className="mx-auto max-w-2xl lg:max-w-2xl">
|
||||
<h2 className="text-2xl font-semibold tracking-tight leading-tight text-white lg:text-4xl">
|
||||
More Resilient, More Powerful, More Diverse With You
|
||||
</h2>
|
||||
<p className="mx-auto mt-6 max-w-xl text-sm font-light text-pretty text-white lg:text-base">
|
||||
Unlike the corporate internet, where users are the product, in the new internet, participants are the owners and beneficiaries.
|
||||
</p>
|
||||
<p className="mx-auto mt-6 max-w-xl text-sm font-light text-pretty text-white lg:text-base">
|
||||
By participating, you're not just using the technology, you're also helping to build a digital world that protects privacy, promotes fairness, and returns control to the people.
|
||||
</p>
|
||||
<div className="mt-10 flex items-center justify-center gap-x-6">
|
||||
<a
|
||||
href="#"
|
||||
className="rounded-md bg-white/10 px-3.5 py-2.5 text-sm font-semibold text-white hover:bg-white/15"
|
||||
>
|
||||
{' '}
|
||||
Get started{' '}
|
||||
</a>
|
||||
<a href="#" className="text-sm/6 font-semibold text-white">
|
||||
Learn more
|
||||
<span aria-hidden="true">→</span>
|
||||
</a>
|
||||
</div>
|
||||
<svg
|
||||
viewBox="0 0 1024 1024"
|
||||
aria-hidden="true"
|
||||
className="absolute top-1/2 left-1/2 -z-10 size-256 -translate-x-1/2 mask-[radial-gradient(closest-side,white,transparent)]"
|
||||
>
|
||||
<circle r={512} cx={512} cy={512} fill="url(#827591b1-ce8c-4110-b064-7cb85a0b1217)" fillOpacity="0.7" />
|
||||
<defs>
|
||||
<radialGradient id="827591b1-ce8c-4110-b064-7cb85a0b1217">
|
||||
<stop stopColor="#fff4f8" />
|
||||
<stop offset={1} stopColor="#97979d" />
|
||||
</radialGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
@@ -7,7 +7,7 @@ export default function Cta() {
|
||||
Scale Your Impact, Not Your Costs
|
||||
</h2>
|
||||
<p className="mx-auto mt-6 max-w-xl text-lg/8 text-pretty text-gray-300">
|
||||
EngageOS gives purpose-driven teams the power to mobilize communities, grow movements, and fundraise faster—
|
||||
ThreeFold gives purpose-driven teams the power to mobilize communities, grow movements, and fundraise faster—
|
||||
all from one unified platform.
|
||||
</p>
|
||||
<div className="mt-10 flex items-center justify-center gap-x-6">
|
||||
|
@@ -6,7 +6,7 @@ import { Button } from "./Button";
|
||||
|
||||
export function Dashboard() {
|
||||
return (
|
||||
<div className="py-24 bg-transparent">
|
||||
<div className="py-24 bg-transparent relative">
|
||||
<div className="mx-auto max-w-2xl px-6 lg:max-w-7xl lg:px-8">
|
||||
<div className="grid grid-cols-1 gap-8 lg:grid-cols-3">
|
||||
{/* Column 1: Title & NODES */}
|
||||
@@ -19,7 +19,7 @@ export function Dashboard() {
|
||||
<p className="mt-4 sm:mt-6 text-sm font-light text-pretty text-white lg:text-base">
|
||||
ThreeFold’s groundbreaking technology enables anyone – individuals, organizations, and communities – to deploy their own Internet infrastructure.
|
||||
</p>
|
||||
<Button className="mt-6" variant="solid" color="gradient" href="https://threefold.io/build" >Explore TFGrid →</Button>
|
||||
<Button className="mt-8" variant="outline" href="https://threefold.io/build" >Explore TFGrid →</Button>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -87,23 +87,23 @@ function StatCard({
|
||||
}) {
|
||||
return (
|
||||
<div
|
||||
className={`relative flex flex-col overflow-hidden rounded-2xl bg-stat-gradient p-8 shadow-sm backdrop-blur transition-all duration-300 ease-out hover:scale-105 ${className}`}
|
||||
className={`relative flex flex-col overflow-hidden rounded-2xl bg-stat-gradient p-8 transition-all duration-300 ease-out hover:scale-105 ${className}`}
|
||||
style={{
|
||||
filter: 'brightness(1)',
|
||||
}}
|
||||
onMouseEnter={(e) => {
|
||||
e.currentTarget.style.filter = 'brightness(0.8) drop-shadow(0 0 20px rgba(156, 163, 175, 0.5))';
|
||||
e.currentTarget.style.filter = 'brightness(0.8)';
|
||||
}}
|
||||
onMouseLeave={(e) => {
|
||||
e.currentTarget.style.filter = 'brightness(1)';
|
||||
}}
|
||||
>
|
||||
<h3 className="text-lg font-semibold text-cyan-400">{label}</h3>
|
||||
<h3 className="text-lg font-semibold text-gradient-neutral-vertical" style={{ textShadow: '0 0 12px rgba(255, 255, 255, 0.4), 0 0 24px rgba(255, 255, 255, 0.2)' }}>{label}</h3>
|
||||
<p className="mt-2 text-sm font-light text-pretty text-white lg:text-base">
|
||||
{description}
|
||||
</p>
|
||||
<div className="mt-8 flex items-center space-x-3">
|
||||
<span className="text-cyan-400 text-3xl">•</span>
|
||||
<span className="text-gradient-neutral-vertical text-3xl">•</span>
|
||||
<div className="text-5xl font-semibold tracking-tight text-white tabular-nums">
|
||||
{value}
|
||||
{unit && (
|
||||
|
63
src/components/Faq.tsx
Normal file
@@ -0,0 +1,63 @@
|
||||
const faqs = [
|
||||
{
|
||||
question: 'Is this a separate new Internet?',
|
||||
answer: 'ThreeFold creates a decentralized internet infrastructure that can operate independently, offering alternatives to traditional centralized systems while maintaining compatibility with existing internet protocols.',
|
||||
},
|
||||
{
|
||||
question: 'Why do we need a new Internet?',
|
||||
answer: 'The current internet is increasingly centralized and controlled by few entities. ThreeFold provides a more democratic, private, and secure alternative where users and developers have full control over their data and applications.',
|
||||
},
|
||||
{
|
||||
question: 'How can I participate?',
|
||||
answer: 'You can participate by becoming a farmer, a user, a partner or by developing apps. Provide capacity to the ThreeFold Grid, Use capacity, build solutions, develop applications, and many more.',
|
||||
},
|
||||
{
|
||||
question: 'How can I get V4 nodes?',
|
||||
answer: 'Our partners are selling V4 nodes with a new reward scheme and ready to grow to millions of nodes. Click here to get V4 nodes.',
|
||||
},
|
||||
{
|
||||
question: 'What can I do with the ThreeFold Grid?',
|
||||
answer: 'ThreeFold grid can be used to host any web2, web3 and future workload. For more details see our docs.',
|
||||
},
|
||||
{
|
||||
question: 'How secure and private is my data?',
|
||||
answer: 'ThreeFold is designed to be secure and private by default. We use end-to-end encryption to protect your data and ensure that only you have access to your data.',
|
||||
},
|
||||
{
|
||||
question: 'Who should use the ThreeFold Grid?',
|
||||
answer: 'Individuals, businesses, and organizations who want to be autonomous and have full control over their data and applications. Security is a very big problem today, Technology as used by ThreeFold has the potential to resolve this if used properly. We are building a channel of solution providers and integrators who want to build on top of ThreeFold.',
|
||||
},
|
||||
]
|
||||
|
||||
export function Faq () {
|
||||
return (
|
||||
<div className="bg-transparent">
|
||||
<div className="mx-auto max-w-7xl px-6 py-24 sm:pt-32 lg:px-8 lg:py-40">
|
||||
<div className="lg:grid lg:grid-cols-12 lg:gap-8">
|
||||
<div className="lg:col-span-5">
|
||||
<h2 className="text-3xl font-semibold tracking-tight text-pretty text-white sm:text-4xl">
|
||||
Frequently asked questions
|
||||
</h2>
|
||||
<p className="mt-4 text-base/7 text-pretty text-gray-400">
|
||||
Can’t find the answer you’re looking for? Reach out to our{' '}
|
||||
<a href="#" className="font-semibold text-indigo-400 hover:text-indigo-300">
|
||||
customer support
|
||||
</a>{' '}
|
||||
team.
|
||||
</p>
|
||||
</div>
|
||||
<div className="mt-10 lg:col-span-7 lg:mt-0">
|
||||
<dl className="space-y-10">
|
||||
{faqs.map((faq) => (
|
||||
<div key={faq.question}>
|
||||
<dt className="text-base/7 font-semibold text-white">{faq.question}</dt>
|
||||
<dd className="mt-2 text-base/7 text-gray-400">{faq.answer}</dd>
|
||||
</div>
|
||||
))}
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
@@ -3,48 +3,48 @@ import { Container } from '@/components/Container'
|
||||
const faqs = [
|
||||
[
|
||||
{
|
||||
question: 'What is EngageOS?',
|
||||
question: 'What is ThreeFold?',
|
||||
answer:
|
||||
'EngageOS is a white-label engagement platform built specifically for purpose-driven organizations. It allows NGOs, foundations, and impact coalitions to launch their own branded platforms to engage communities, deliver training, and mobilize support.',
|
||||
'ThreeFold is a white-label engagement platform built specifically for purpose-driven organizations. It allows NGOs, foundations, and impact coalitions to launch their own branded platforms to engage communities, deliver training, and mobilize support.',
|
||||
},
|
||||
{
|
||||
question: 'Do I need a tech team to use EngageOS?',
|
||||
question: 'Do I need a tech team to use ThreeFold?',
|
||||
answer:
|
||||
'No. EngageOS is fully plug-and-play. It’s designed so any organization—regardless of technical capacity—can deploy and customize their own platform without writing a line of code.',
|
||||
'No. ThreeFold is fully plug-and-play. It’s designed so any organization—regardless of technical capacity—can deploy and customize their own platform without writing a line of code.',
|
||||
},
|
||||
{
|
||||
question: 'Can we fully customize the platform’s look and feel?',
|
||||
answer:
|
||||
'Absolutely. From logos and colors to navigation and community features, EngageOS supports full white-label customization so the platform feels like your own digital headquarters.',
|
||||
'Absolutely. From logos and colors to navigation and community features, ThreeFold supports full white-label customization so the platform feels like your own digital headquarters.',
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
question: 'What kinds of organizations use EngageOS?',
|
||||
question: 'What kinds of organizations use ThreeFold?',
|
||||
answer:
|
||||
'We work with NGOs, educational networks, development agencies, faith-based groups, and mission-aligned coalitions that want to better engage, train, and mobilize their communities at scale.',
|
||||
},
|
||||
{
|
||||
question: 'Is EngageOS multilingual and accessible offline?',
|
||||
question: 'Is ThreeFold multilingual and accessible offline?',
|
||||
answer:
|
||||
'Yes. The platform supports multilingual content and offline-friendly delivery—ideal for reaching underserved communities with limited connectivity.',
|
||||
},
|
||||
{
|
||||
question: 'Can we use EngageOS for fundraising?',
|
||||
question: 'Can we use ThreeFold for fundraising?',
|
||||
answer:
|
||||
'Yes. EngageOS includes built-in fundraising tools, including peer-to-peer, micro-donation, and pay-it-forward models—plus full donor engagement capabilities.',
|
||||
'Yes. ThreeFold includes built-in fundraising tools, including peer-to-peer, micro-donation, and pay-it-forward models—plus full donor engagement capabilities.',
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
question: 'How is EngageOS different from other platforms?',
|
||||
question: 'How is ThreeFold different from other platforms?',
|
||||
answer:
|
||||
'Unlike general-purpose platforms, EngageOS is mission-built for civil society. It integrates engagement, learning, and fundraising in one secure, ethical platform—hosted on sovereign infrastructure.',
|
||||
'Unlike general-purpose platforms, ThreeFold is mission-built for civil society. It integrates engagement, learning, and fundraising in one secure, ethical platform—hosted on sovereign infrastructure.',
|
||||
},
|
||||
{
|
||||
question: 'What is the pricing model?',
|
||||
answer:
|
||||
'EngageOS operates on a flexible SaaS model, with plans ranging from €30K to €300K annually depending on features and user scale. For grassroots initiatives, pay-it-forward and sponsorship models are also available.',
|
||||
'ThreeFold operates on a flexible SaaS model, with plans ranging from €30K to €300K annually depending on features and user scale. For grassroots initiatives, pay-it-forward and sponsorship models are also available.',
|
||||
},
|
||||
{
|
||||
question: 'How do we get started?',
|
||||
@@ -55,7 +55,7 @@ const faqs = [
|
||||
]
|
||||
|
||||
|
||||
export function Faqs() {
|
||||
export function Faqss () {
|
||||
return (
|
||||
<section
|
||||
id="faqs"
|
||||
@@ -66,14 +66,14 @@ export function Faqs() {
|
||||
<div className="mx-auto max-w-2xl lg:mx-0">
|
||||
<h2
|
||||
id="faqs-title"
|
||||
className="text-3xl font-medium tracking-tight text-gray-900"
|
||||
className="text-2xl font-semibold tracking-tight leading-tight text-white lg:text-4xl"
|
||||
>
|
||||
Frequently asked questions
|
||||
</h2>
|
||||
<p className="mt-2 lg:text-lg text-base text-gray-600">
|
||||
If you have anything else you want to ask,{' '}
|
||||
<a
|
||||
href="mailto:info@example.com"
|
||||
href="mailto:info@threefold.io"
|
||||
className="text-gray-900 underline"
|
||||
>
|
||||
reach out to us
|
||||
@@ -83,7 +83,7 @@ export function Faqs() {
|
||||
</div>
|
||||
<ul
|
||||
role="list"
|
||||
className="mx-auto mt-16 grid max-w-2xl grid-cols-1 gap-8 sm:mt-20 lg:max-w-none lg:grid-cols-3"
|
||||
className="mx-auto mt-12 grid max-w-2xl grid-cols-1 gap-8 lg:max-w-none lg:grid-cols-3"
|
||||
>
|
||||
{faqs.map((column, columnIndex) => (
|
||||
<li key={columnIndex}>
|
||||
|
@@ -47,7 +47,7 @@ export function FarmerPreview() {
|
||||
return (
|
||||
<section className="w-full bg-transparent px-4 py-8 sm:px-6 mt-12 sm:pb-12 lg:px-8 relative">
|
||||
{/* Gradient Blob Component */}
|
||||
<div className="absolute w-[400px] h-[200px] bg-gradient-to-br from-[#505050] to-[#7e7e7e] opacity-40 rounded-full blur-[150px] bottom-[200px] left-[-150px] z-0" />
|
||||
<div className="absolute w-[400px] h-[200px] bg-gradient-to-br from-[#535353] to-[#7e7e7e] opacity-60 rounded-full blur-[150px] bottom-[200px] left-[-150px] z-0" />
|
||||
<div className="absolute w-[200px] h-[100px] bg-gradient-to-br from-[#505050] to-[#7e7e7e] opacity-50 rounded-full blur-[150px] top-[200px] right-[-150px] z-0" />
|
||||
<div className="mx-auto max-w-7xl">
|
||||
<div className="lg:flex lg:items-center lg:justify-between lg:px-8">
|
||||
@@ -61,7 +61,7 @@ export function FarmerPreview() {
|
||||
</div>
|
||||
{/* Right Column - Stacked Cubes (2/3 width) */}
|
||||
<div className="lg:col-span-2 flex items-center justify-center lg:justify-start order-2 lg:order-2">
|
||||
<Button variant="outline" className=" text-black px-4 py-2 rounded-md hover:bg-gray-700 transition-colors">
|
||||
<Button variant="outline">
|
||||
Become A Farmer
|
||||
</Button>
|
||||
</div>
|
||||
@@ -70,7 +70,7 @@ export function FarmerPreview() {
|
||||
{posts.map((post) => (
|
||||
<article
|
||||
key={post.id}
|
||||
className="relative isolate flex flex-col justify-end overflow-hidden rounded-2xl bg-state-gradient px-8 lg:pt-12"
|
||||
className="relative isolate flex flex-col justify-end overflow-hidden rounded-2xl bg-stat-gradient px-8 lg:pt-12"
|
||||
>
|
||||
<div className="absolute inset-0 -z-10 bg-linear-to-t from-gray-200 via-gray-300/10"
|
||||
style={{
|
||||
|
@@ -28,11 +28,11 @@ export function Footer() {
|
||||
<div className="flex items-center text-white">
|
||||
<Logomark className="h-10 w-10 flex-none fill-cyan-500" />
|
||||
<div className="ml-4">
|
||||
<p className="text-base font-semibold">EngageOS</p>
|
||||
<p className="mt-1 text-sm">Empowering Purpose-Driven Organizations.</p>
|
||||
<p className="text-base font-semibold">ThreeFold</p>
|
||||
<p className="mt-1 text-sm">Decentralized internet infrastructure by everyone, for everyone.</p>
|
||||
</div>
|
||||
</div>
|
||||
<nav className="mt-11 flex gap-8">
|
||||
<nav className="mt-8 flex gap-8">
|
||||
<NavLinks />
|
||||
</nav>
|
||||
</div>
|
||||
@@ -47,7 +47,7 @@ export function Footer() {
|
||||
required
|
||||
className="w-60 min-w-0 shrink"
|
||||
/>
|
||||
<Button type="submit" color="cyan" className="ml-4 flex-none">
|
||||
<Button type="submit" variant='glass' className="ml-4 flex-none">
|
||||
<span className="hidden lg:inline">Join our newsletter</span>
|
||||
<span className="lg:hidden">Join newsletter</span>
|
||||
</Button>
|
||||
|
@@ -73,7 +73,7 @@ export function Header() {
|
||||
{({ open }) => (
|
||||
<>
|
||||
<PopoverButton
|
||||
className="relative z-10 -m-2 inline-flex items-center rounded-lg stroke-white p-2 hover:bg-gray-800/50 hover:stroke-gray-300 focus:not-data-focus:outline-hidden active:stroke-white"
|
||||
className="relative z-10 -m-2 inline-flex items-center rounded-lg stroke-white p-2 hover:bg-transparent hover:stroke-gray-200 focus:not-data-focus:outline-hidden active:stroke-white"
|
||||
aria-label="Toggle site navigation"
|
||||
>
|
||||
{({ open }) =>
|
||||
@@ -134,9 +134,11 @@ export function Header() {
|
||||
</Popover>
|
||||
<div className="flex items-center gap-6 max-lg:hidden">
|
||||
<Button href="/login" variant="outline">
|
||||
Log in
|
||||
Info
|
||||
</Button>
|
||||
<Button href="#" variant="glass">
|
||||
Participate
|
||||
</Button>
|
||||
<Button href="#">Download</Button>
|
||||
</div>
|
||||
</div>
|
||||
</Container>
|
||||
|
@@ -22,7 +22,7 @@ export default function HeroHome() {
|
||||
Empowering Purpose-Driven Organizations.
|
||||
</h1>
|
||||
<p className="mt-8 lg:lg:text-lg text-base text-base text-gray-300">
|
||||
Welcome to <span className={`font-semibold ${gradientText}`}>EngageOS</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>
|
||||
<div className="mt-12 flex items-center justify-center gap-x-6 relative z-10">
|
||||
<Button color="gradient">Get in Touch</Button>
|
||||
|
@@ -1,10 +1,12 @@
|
||||
import { Footer } from '@/components/Footer'
|
||||
import { Header } from '@/components/Header'
|
||||
import { Banner } from '@/components/Banner'
|
||||
|
||||
export function Layout({ children }: { children: React.ReactNode }) {
|
||||
return (
|
||||
<>
|
||||
<Header />
|
||||
<Banner />
|
||||
<main className="flex-auto">{children}</main>
|
||||
<Footer />
|
||||
</>
|
||||
|
@@ -9,15 +9,14 @@ export function NavLinks() {
|
||||
let timeoutRef = useRef<number | null>(null)
|
||||
|
||||
return [
|
||||
['Features', '/#features'],
|
||||
['Reviews', '/#reviews'],
|
||||
['Pricing', '/#pricing'],
|
||||
['FAQs', '/#faqs'],
|
||||
['About', '/#features'],
|
||||
['Build', '/#reviews'],
|
||||
['Host', '/#pricing'],
|
||||
].map(([label, href], index) => (
|
||||
<Link
|
||||
key={label}
|
||||
href={href}
|
||||
className="relative -mx-3 -my-2 rounded-lg px-3 py-2 text-sm text-gray-300 transition-colors delay-150 hover:text-white hover:delay-0"
|
||||
className="relative -mx-3 -my-2 rounded-lg px-3 py-2 text-sm text-gray-700 transition-colors delay-150 hover:text-white hover:delay-0"
|
||||
onMouseEnter={() => {
|
||||
if (timeoutRef.current) {
|
||||
window.clearTimeout(timeoutRef.current)
|
||||
@@ -33,7 +32,7 @@ export function NavLinks() {
|
||||
<AnimatePresence>
|
||||
{hoveredIndex === index && (
|
||||
<motion.span
|
||||
className="absolute inset-0 rounded-lg bg-gray-800"
|
||||
className="absolute inset-0 rounded-lg bg-transparent"
|
||||
layoutId="hoverBackground"
|
||||
initial={{ opacity: 0 }}
|
||||
animate={{ opacity: 1, transition: { duration: 0.15 } }}
|
||||
|
@@ -25,7 +25,7 @@ const plans = [
|
||||
'Basic learning paths',
|
||||
'Donations & campaigns',
|
||||
'Your logo & colors',
|
||||
'EngageOS subdomain (yourname.engageos.org)',
|
||||
'ThreeFold subdomain (yourname.ThreeFold.org)',
|
||||
'Email support',
|
||||
],
|
||||
logomarkClassName: 'fill-gray-300',
|
||||
|
@@ -39,7 +39,7 @@ const features = [
|
||||
{
|
||||
name: 'Invite friends for better returns',
|
||||
description:
|
||||
'For every friend you invite to EngageOS, you get insider notifications 5 seconds sooner. And it’s 10 seconds if you invite an insider.',
|
||||
'For every friend you invite to ThreeFold, you get insider notifications 5 seconds sooner. And it’s 10 seconds if you invite an insider.',
|
||||
icon: DeviceUserIcon,
|
||||
screen: InviteScreen,
|
||||
},
|
||||
@@ -584,9 +584,9 @@ export function PrimaryFeatures() {
|
||||
Every feature you need to win. Try it for yourself.
|
||||
</h2>
|
||||
<p className="mt-2 lg:text-lg text-base text-gray-400">
|
||||
EngageOS was built for investors like you who play by their own rules
|
||||
ThreeFold was built for investors like you who play by their own rules
|
||||
and aren’t going to let SEC regulations get in the way of their
|
||||
dreams. If other investing tools are afraid to build it, EngageOS has
|
||||
dreams. If other investing tools are afraid to build it, ThreeFold has
|
||||
it.
|
||||
</p>
|
||||
</div>
|
||||
|
119
src/components/Products.tsx
Normal file
@@ -0,0 +1,119 @@
|
||||
"use client";
|
||||
import { Button } from "./Button";
|
||||
import Image from "next/image";
|
||||
|
||||
const products = [
|
||||
{
|
||||
id: 1,
|
||||
colSpan: "lg:col-span-3",
|
||||
rounded: "rounded-[calc(var(--radius-lg)+1px)] max-lg:rounded-t-[calc(2rem+1px)] lg:rounded-tl-[calc(2rem+1px)]",
|
||||
img: "/images/3nodes.png",
|
||||
title: "3Nodes",
|
||||
desc: "The backbone of storage and infrastructure, providing compute and data resources.",
|
||||
color: "indigo-400",
|
||||
bgRounded: "max-lg:rounded-t-4xl lg:rounded-tl-4xl"
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
colSpan: "lg:col-span-3",
|
||||
rounded: "rounded-[calc(var(--radius-lg)+1px)] lg:rounded-tr-[calc(2rem+1px)]",
|
||||
img: "/images/mycelium.svg",
|
||||
title: "Mycelium",
|
||||
desc: "End-to-end encrypted overlay network, always looking for the shortest possible path between participants",
|
||||
color: "indigo-400",
|
||||
bgRounded: "lg:rounded-tr-4xl"
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
colSpan: "lg:col-span-2",
|
||||
rounded: "rounded-[calc(var(--radius-lg)+1px)] lg:rounded-bl-[calc(2rem+1px)]",
|
||||
img: "/images/aibox.png",
|
||||
title: "AIBox",
|
||||
desc: "A self-hosted AI compute solution powered by ThreeFold.",
|
||||
color: "indigo-400",
|
||||
bgRounded: "lg:rounded-bl-4xl"
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
colSpan: "lg:col-span-2",
|
||||
rounded: "rounded-[calc(var(--radius-lg)+1px)]",
|
||||
img: "/images/3phone.png",
|
||||
title: "3Phone",
|
||||
desc: "OwnPhone is the first secure device in the 3Phone family designed to work seamlessly with the ThreeFold Grid.",
|
||||
color: "indigo-400",
|
||||
bgRounded: ""
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
colSpan: "lg:col-span-2",
|
||||
rounded: "rounded-[calc(var(--radius-lg)+1px)] max-lg:rounded-b-[calc(2rem+1px)] lg:rounded-br-[calc(2rem+1px)]",
|
||||
img: "/images/3router.png",
|
||||
title: "3Router",
|
||||
desc: "Smart routers ensure shortest-path connections between nodes and phones with end-to-end encryption.",
|
||||
color: "indigo-400",
|
||||
bgRounded: "max-lg:rounded-b-4xl lg:rounded-br-4xl"
|
||||
}
|
||||
];
|
||||
|
||||
export function ProductsPreview() {
|
||||
|
||||
return (
|
||||
<section className="w-full bg-transparent px-4 py-8 sm:px-6 mt-12 sm:pb-12 lg:px-6 relative">
|
||||
|
||||
<div className="mx-auto max-w-7xl">
|
||||
<div className="lg:flex lg:items-center lg:justify-between lg:px-8">
|
||||
{/* Left Column - Text (1/3 width) */}
|
||||
<div className="lg:col-span-1 flex max text-center lg:text-left order-1 lg:order-1">
|
||||
<div className="max-w-4xl">
|
||||
<h2 className="text-xl sm:text-2xl font-semibold tracking-tight leading-tight text-white lg:text-4xl">
|
||||
Join the Movement to Build a New Internet
|
||||
</h2>
|
||||
<p className="mt-4 lg:mt-6 text-sm font-light text-pretty text-white lg:text-base">
|
||||
There are many ways to be part of our mission to create a more open, autonomous, and interconnected digital world. Farming is just one pillar of our ecosystem. Explore all the products that are driving this transformation.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
{/* Right Column - Stacked Cubes (2/3 width) */}
|
||||
<div className="lg:col-span-2 flex items-center justify-center lg:justify-start order-2 lg:order-2">
|
||||
<Button variant="outline">
|
||||
Join the Ecosystem
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
<div className="mt-10 grid grid-cols-1 gap-6 sm:mt-16 lg:grid-cols-6 lg:grid-rows-2">
|
||||
{products.map(product => (
|
||||
<div
|
||||
key={product.id}
|
||||
className={`rounded-2xl bg-stat-gradient p-8 shadow-sm backdrop-blur transition-all duration-300 ease-out hover:scale-105 ${product.colSpan}`}
|
||||
style={{
|
||||
filter: 'brightness(1)',
|
||||
}}
|
||||
onMouseEnter={(e) => {
|
||||
e.currentTarget.style.filter = 'brightness(0.8) drop-shadow(0 0 20px rgba(156, 163, 175, 0.5))';
|
||||
}}
|
||||
onMouseLeave={(e) => {
|
||||
e.currentTarget.style.filter = 'brightness(1)';
|
||||
}}
|
||||
>
|
||||
<div className="flex h-full flex-col lg:flex-row items-center lg:items-start gap-6">
|
||||
<div className="flex-shrink-0">
|
||||
<img
|
||||
alt={`${product.title} screenshot`}
|
||||
src={product.img}
|
||||
className="w-20 h-20 lg:w-24 lg:h-24 object-contain"
|
||||
/>
|
||||
</div>
|
||||
<div className="flex-1 text-center lg:text-left">
|
||||
<h3 className="text-xl lg:text-2xl font-semibold text-white mb-3">{product.title}</h3>
|
||||
<p className="text-gray-700 text-sm font-light text-pretty lg:text-base">
|
||||
{product.desc}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
@@ -16,37 +16,37 @@ interface Review {
|
||||
const reviews: Array<Review> = [
|
||||
{
|
||||
title: 'A true game-changer for nonprofits.',
|
||||
body: 'EngageOS allowed us to centralize our volunteer hub, training, and crowdfunding into one platform. We have seen a 3x jump in community engagement.',
|
||||
body: 'ThreeFold allowed us to centralize our volunteer hub, training, and crowdfunding into one platform. We have seen a 3x jump in community engagement.',
|
||||
author: 'Sarah D., Program Director at WomenRise',
|
||||
rating: 5,
|
||||
},
|
||||
{
|
||||
title: 'No tech team needed.',
|
||||
body: 'Launching our own branded platform felt intimidating—until EngageOS. It is intuitive, scalable, and beautifully designed.',
|
||||
body: 'Launching our own branded platform felt intimidating—until ThreeFold. It is intuitive, scalable, and beautifully designed.',
|
||||
author: 'Ahmed K., Director at The Green Schools Alliance',
|
||||
rating: 5,
|
||||
},
|
||||
{
|
||||
title: 'Empowered our youth programs.',
|
||||
body: 'Thanks to EngageOS, we built a digital home for our learning initiatives with AI-powered content in three languages.',
|
||||
body: 'Thanks to ThreeFold, we built a digital home for our learning initiatives with AI-powered content in three languages.',
|
||||
author: 'Maria T., Learning Lead at Global Youth Voices',
|
||||
rating: 5,
|
||||
},
|
||||
{
|
||||
title: 'Secure and sovereign.',
|
||||
body: 'As a human rights coalition, data privacy is critical. EngageOS is the only platform that met our ethical tech standards.',
|
||||
body: 'As a human rights coalition, data privacy is critical. ThreeFold is the only platform that met our ethical tech standards.',
|
||||
author: 'Lukas M., CTO at Liberty Commons',
|
||||
rating: 5,
|
||||
},
|
||||
{
|
||||
title: 'Decentralized. Local-first. Exactly what we needed.',
|
||||
body: 'EngageOS helped us launch a regional platform for community-led health training across East Africa—with full offline access.',
|
||||
body: 'ThreeFold helped us launch a regional platform for community-led health training across East Africa—with full offline access.',
|
||||
author: 'Grace N., Digital Programs at Umoja Health Network',
|
||||
rating: 5,
|
||||
},
|
||||
{
|
||||
title: 'The best decision we made this year.',
|
||||
body: 'Instead of duct-taping tools together, EngageOS gave us one powerful stack to engage, fundraise, and scale impact.',
|
||||
body: 'Instead of duct-taping tools together, ThreeFold gave us one powerful stack to engage, fundraise, and scale impact.',
|
||||
author: 'Jonas F., COO at Youth in Action Europe',
|
||||
rating: 5,
|
||||
},
|
||||
@@ -58,19 +58,19 @@ const reviews: Array<Review> = [
|
||||
},
|
||||
{
|
||||
title: 'Our community feels seen and heard.',
|
||||
body: 'With EngageOS, we integrated storytelling, campaigns, and microdonations into a single, smooth experience.',
|
||||
body: 'With ThreeFold, we integrated storytelling, campaigns, and microdonations into a single, smooth experience.',
|
||||
author: 'Nicolas R., Communications Lead at OurStories Foundation',
|
||||
rating: 5,
|
||||
},
|
||||
{
|
||||
title: 'EngageOS scales with us.',
|
||||
title: 'ThreeFold scales with us.',
|
||||
body: 'We piloted in 2 cities and now run campaigns across 7 countries—all on the same platform. It grows with our ambition.',
|
||||
author: 'Delphine A., Global Lead at Future Farmers',
|
||||
rating: 5,
|
||||
},
|
||||
{
|
||||
title: 'This platform is our movement.',
|
||||
body: 'Before EngageOS, our digital presence was scattered. Now we have a true home where our supporters connect and take action.',
|
||||
body: 'Before ThreeFold, our digital presence was scattered. Now we have a true home where our supporters connect and take action.',
|
||||
author: 'Ravi P., Strategy Director at Clean Energy for All',
|
||||
rating: 5,
|
||||
},
|
||||
@@ -259,7 +259,7 @@ export function Reviews() {
|
||||
id="reviews-title"
|
||||
className="text-3xl font-medium tracking-tight text-white sm:text-center"
|
||||
>
|
||||
Everyone is changing their life with EngageOS.
|
||||
Everyone is changing their life with ThreeFold.
|
||||
</h2>
|
||||
<p className="mt-2 lg:text-lg text-base text-gray-300 sm:text-center">
|
||||
Thousands of people have doubled their net-worth in the last 30 days.
|
||||
|
@@ -58,7 +58,7 @@ export function SecondaryFeatures() {
|
||||
The Platform Built for Purpose-driven Organizations
|
||||
</h2>
|
||||
<p className="mt-4 lg:text-lg text-base text-gray-600">
|
||||
EngageOS is the first plug-and-play engagement infrastructure built for civil society. From Red Cross OS to Montessori OS, any org can launch their own digital headquarters—no tech team needed.
|
||||
ThreeFold is the first plug-and-play engagement infrastructure built for civil society. From Red Cross OS to Montessori OS, any org can launch their own digital headquarters—no tech team needed.
|
||||
</p>
|
||||
</div>
|
||||
<div className="relative overflow-hidden pt-16">
|
||||
|
@@ -22,23 +22,23 @@ export function SpotlightPreview() {
|
||||
/>
|
||||
<div className="relative z-10 mx-auto w-full max-w-7xl p-4 pt-20 md:pt-0">
|
||||
<div className="flex justify-center mb-6">
|
||||
<div className="mb-4 relative rounded-full px-3 py-1 text-sm/6 text-gray-600 ring-1 ring-gray-900/10 hover:ring-gray-900/20">
|
||||
<div className="mb-4 relative rounded-full px-3 py-1 text-sm/6 text-gray-700 ring-1 ring-gray-900/10 hover:ring-gray-900/20 animate-fade-in-delay-1">
|
||||
Announcing The New TF Marketplace.{' '}
|
||||
<a href="#" className="font-semibold text-white hover:text-gray-200">
|
||||
<a href="#" className="font-semibold text-white hover:text-gray-800">
|
||||
<span aria-hidden="true" className="absolute inset-0" />
|
||||
Read more <span aria-hidden="true">→</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h1 className="bg-opacity-50 bg-gradient-to-b from-neutral-50 to-neutral-400 bg-clip-text tracking-tighter text-center text-4xl font-semibold text-transparent lg:text-6xl">
|
||||
<h1 className="bg-opacity-50 bg-gradient-to-b from-neutral-50 to-neutral-400 bg-clip-text tracking-tighter text-center text-4xl font-semibold text-transparent lg:text-6xl animate-fade-in-delay-2">
|
||||
Built by Everyone <br /> for Everyone.
|
||||
</h1>
|
||||
<p className="mx-auto mt-8 max-w-lg text-center text-base lg:text-xl font-light text-neutral-300">
|
||||
<p className="mx-auto mt-8 max-w-lg text-center text-base lg:text-xl font-light text-neutral-200 animate-fade-in-delay-3">
|
||||
ThreeFold is a fully operational, decentralized internet infrastructure – deployed locally, scalable globally, and owned and powered by the people.
|
||||
</p>
|
||||
<div className="mt-8 flex flex-col sm:flex-row justify-center gap-4">
|
||||
<Button href="/login" variant="outline" color="gray">
|
||||
<div className="mt-8 flex flex-col sm:flex-row justify-center gap-4 animate-fade-in-delay-4">
|
||||
<Button href="/login" variant="glass">
|
||||
Start Building
|
||||
</Button>
|
||||
<Button href="#" variant="outline" color="gray">
|
||||
|
@@ -2,11 +2,15 @@
|
||||
|
||||
import { StackedCubes } from "@/components/ui/StackedCubes";
|
||||
import { Button } from "@/components/Button";
|
||||
import { motion, useInView } from "framer-motion";
|
||||
import { useRef } from "react";
|
||||
|
||||
export function StackSectionPreview() {
|
||||
const ref = useRef(null);
|
||||
const isInView = useInView(ref);
|
||||
|
||||
return (
|
||||
<section className="w-full bg-transparent px-4 py-8 sm:px-6 sm:pb-12 lg:px-8 relative">
|
||||
<section ref={ref} className="w-full bg-transparent px-4 py-8 sm:px-6 sm:pb-12 lg:px-8 relative">
|
||||
{/* Gradient Blob Component */}
|
||||
<div className="absolute w-[400px] h-[200px] bg-gradient-to-br from-[#505050] to-[#7e7e7e] opacity-40 rounded-full blur-[150px] bottom-[200px] left-[-150px] z-0" />
|
||||
<div className="absolute w-[200px] h-[100px] bg-gradient-to-br from-[#505050] to-[#7e7e7e] opacity-50 rounded-full blur-[150px] top-[200px] right-[-150px] z-0" />
|
||||
@@ -14,18 +18,40 @@ export function StackSectionPreview() {
|
||||
<div className="grid grid-cols-1 lg:grid-cols-3 gap-4 lg:gap-16 items-center lg:items-start">
|
||||
{/* Left Column - Text (1/3 width) */}
|
||||
<div className="text-center lg:text-left lg:col-span-1 order-1 lg:order-1">
|
||||
<h2 className="text-xl sm:text-2xl font-semibold tracking-tight leading-tight text-white lg:text-4xl">
|
||||
<motion.h2
|
||||
className="text-xl sm:text-2xl font-semibold tracking-tight leading-tight text-white lg:text-4xl"
|
||||
initial={{ opacity: 0, y: 30 }}
|
||||
animate={isInView ? { opacity: 1, y: 0 } : { opacity: 0, y: 30 }}
|
||||
transition={{ duration: 0.8, delay: 0.2 }}
|
||||
>
|
||||
A Decentralized Infrastructure Layer
|
||||
</h2>
|
||||
<p className="mt-4 sm:mt-6 text-sm font-light text-pretty text-white lg:text-base">
|
||||
</motion.h2>
|
||||
<motion.p
|
||||
className="mt-4 lg:mt-6 text-sm font-light text-pretty text-white lg:text-base"
|
||||
initial={{ opacity: 0, y: 30 }}
|
||||
animate={isInView ? { opacity: 1, y: 0 } : { opacity: 0, y: 30 }}
|
||||
transition={{ duration: 0.8, delay: 0.4 }}
|
||||
>
|
||||
We have built a foundational platform that runs directly on bare metal, offering a scalable solution focused on the essential building blocks of the Internet and Cloud: compute, data, and network.
|
||||
</p>
|
||||
<Button className="mt-4" variant="solid" color="gradient" href="https://threefold.io/build" >Discover How It Works →</Button>
|
||||
</motion.p>
|
||||
<motion.div
|
||||
initial={{ opacity: 0, y: 30 }}
|
||||
animate={isInView ? { opacity: 1, y: 0 } : { opacity: 0, y: 30 }}
|
||||
transition={{ duration: 0.8, delay: 0.6 }}
|
||||
>
|
||||
<Button className="mt-12" variant="outline" href="https://threefold.io/build" >Discover How It Works →</Button>
|
||||
</motion.div>
|
||||
</div>
|
||||
|
||||
{/* Right Column - Stacked Cubes (2/3 width) */}
|
||||
<div className="lg:col-span-2 flex items-center justify-center lg:justify-start order-2 lg:order-2">
|
||||
<StackedCubes />
|
||||
<motion.div
|
||||
initial={{ opacity: 0, y: 30 }}
|
||||
animate={isInView ? { opacity: 1, y: 0 } : { opacity: 0, y: 30 }}
|
||||
transition={{ duration: 0.8, delay: 0.3 }}
|
||||
>
|
||||
<StackedCubes />
|
||||
</motion.div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
91
src/components/TfDashboard.tsx
Normal file
@@ -0,0 +1,91 @@
|
||||
'use client'
|
||||
|
||||
import { CloudArrowUpIcon, LockClosedIcon, ServerIcon } from '@heroicons/react/20/solid'
|
||||
import { motion } from 'framer-motion'
|
||||
import { Button } from './Button'
|
||||
|
||||
const features = [
|
||||
{
|
||||
name: 'Push to deploy.',
|
||||
description: 'Lorem ipsum, dolor sit amet consectetur adipisicing elit aute id magna.',
|
||||
icon: CloudArrowUpIcon,
|
||||
},
|
||||
{
|
||||
name: 'SSL certificates.',
|
||||
description: 'Anim aute id magna aliqua ad ad non deserunt sunt. Qui irure qui lorem cupidatat commodo.',
|
||||
icon: LockClosedIcon,
|
||||
},
|
||||
{
|
||||
name: 'Database backups.',
|
||||
description: 'Ac tincidunt sapien vehicula erat auctor pellentesque rhoncus.',
|
||||
icon: ServerIcon,
|
||||
},
|
||||
]
|
||||
|
||||
export function TfDashboard() {
|
||||
return (
|
||||
<div className="bg-transparent pt-24 pb-0">
|
||||
<div className="mx-auto max-w-7xl px-4 lg:px-2">
|
||||
<div className="relative isolate overflow-hidden bg-stat-gradient px-6 py-12 after:pointer-events-none after:absolute lg:rounded-3xl sm:px-10 sm:py-24 after:lg:rounded-3xl lg:py-24 xl:px-24">
|
||||
<div className="mx-auto grid max-w-2xl grid-cols-1 gap-x-8 gap-y-16 sm:gap-y-20 lg:mx-0 lg:max-w-none lg:grid-cols-2 lg:items-center lg:gap-y-0">
|
||||
<div className="lg:row-start-2 lg:max-w-md">
|
||||
<motion.h2
|
||||
className="text-3xl font-semibold tracking-tight text-balance text-white sm:text-4xl"
|
||||
initial={{opacity: 0}}
|
||||
animate={{opacity: 1}}
|
||||
transition={{delay: 0.5, duration: 0.5}}
|
||||
>
|
||||
Threefold Dashboard
|
||||
</motion.h2>
|
||||
<motion.p
|
||||
className="mt-4 lg:mt-6 text-sm font-light text-pretty text-white lg:text-base"
|
||||
initial={{opacity: 0}}
|
||||
animate={{opacity: 1}}
|
||||
transition={{delay: 1, duration: 0.5}}
|
||||
>
|
||||
ThreeFold is open for developers and system administrators. Deploy virtual machines, containers, Kubernetes clusters, web gateways, and more on top of a best-effort decentralized open source cloud.
|
||||
</motion.p>
|
||||
<motion.p
|
||||
className="mt-6 text-sm font-light text-pretty text-white lg:text-base"
|
||||
initial={{opacity: 0}}
|
||||
animate={{opacity: 1}}
|
||||
transition={{delay: 1.5, duration: 0.5}}
|
||||
>
|
||||
The ThreeFold Dashboard is your gateway to the new internet infrastructure. It can be used by any Web2, Web3, AI, or Edge IT workload – enabling a world of possibilities.
|
||||
</motion.p>
|
||||
<motion.div
|
||||
initial={{opacity: 0}}
|
||||
animate={{opacity: 1}}
|
||||
transition={{delay: 2, duration: 1}}
|
||||
>
|
||||
<Button className="mt-8" variant="outline" href="https://dashboard.threefold.io" >Explore the Dashboard →</Button>
|
||||
</motion.div>
|
||||
</div>
|
||||
<motion.img
|
||||
alt="Product screenshot"
|
||||
src="/images/tfdash.png"
|
||||
width={2432}
|
||||
height={1442}
|
||||
className="relative z-0 max-w-xl min-w-full rounded-xl shadow-xl ring-1 ring-white/10 lg:row-span-4 lg:w-5xl lg:max-w-none"
|
||||
whileHover={{scale: 1.05}}
|
||||
transition={{duration: 0.5}}
|
||||
/>
|
||||
|
||||
</div>
|
||||
<div
|
||||
aria-hidden="true"
|
||||
className="pointer-events-none absolute top-1/2 left-12 -z-10 -translate-y-1/2 transform-gpu blur-3xl lg:top-auto lg:-bottom-48 lg:translate-y-0"
|
||||
>
|
||||
<div
|
||||
style={{
|
||||
clipPath:
|
||||
'polygon(74.1% 44.1%, 100% 61.6%, 97.5% 26.9%, 85.5% 0.1%, 80.7% 2%, 72.5% 32.5%, 60.2% 62.4%, 52.4% 68.1%, 47.5% 58.3%, 45.2% 34.5%, 27.5% 76.7%, 0.1% 64.9%, 17.9% 100%, 27.6% 76.8%, 76.1% 97.7%, 74.1% 44.1%)',
|
||||
}}
|
||||
className="aspect-1155/678 w-288.75 bg-linear-to-tr from-[#fff4f8] to-[#97979d] opacity-20"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
@@ -61,7 +61,7 @@ export default function Tractions() {
|
||||
Trusted by Changemakers worldwide
|
||||
</p>
|
||||
<p className="mt-6 lg:text-lg text-base text-gray-300">
|
||||
EngageOS powers the digital headquarters for over 300,000 users across 50+ countries. From grassroots NGOs to global movements, our platform is built to scale impact, not just numbers.
|
||||
ThreeFold powers the digital headquarters for over 300,000 users across 50+ countries. From grassroots NGOs to global movements, our platform is built to scale impact, not just numbers.
|
||||
</p>
|
||||
<dl className="mt-16 grid max-w-xl grid-cols-1 gap-8 sm:mt-20 sm:grid-cols-2 xl:mt-16">
|
||||
{stats.map((stat) => (
|
||||
|
@@ -228,4 +228,106 @@
|
||||
.bg-stat-gradient {
|
||||
background: linear-gradient(to bottom, rgba(17, 17, 17, 0.5), rgba(50, 48, 49, 0.5));
|
||||
}
|
||||
|
||||
.btn-new-gradient {
|
||||
background: radial-gradient(circle, rgba(230, 245, 236, 1) 0%, rgba(172, 193, 232, 1) 100%);
|
||||
color: #545853;
|
||||
}
|
||||
|
||||
.btn-new-gradient:hover {
|
||||
background: radial-gradient(circle, rgba(230, 245, 236, 0.8) 0%, rgba(172, 193, 232, 0.8) 100%);
|
||||
color: #545853;
|
||||
}
|
||||
|
||||
.btn-new-gradient:active {
|
||||
background: radial-gradient(circle, rgba(230, 245, 236, 0.6) 0%, rgba(172, 193, 232, 0.6) 100%);
|
||||
color: #545853;
|
||||
}
|
||||
|
||||
.bg-gradient-soft {
|
||||
background: #e6f5ec;
|
||||
background: radial-gradient(circle, rgba(230, 245, 236, 1) 0%, rgba(172, 193, 232, 1) 100%);
|
||||
}
|
||||
|
||||
.bg-gradient-dark {
|
||||
background: #e6f5ec;
|
||||
background: radial-gradient(circle, rgb(204, 255, 225) 0%, rgb(156, 186, 240) 100%);
|
||||
}
|
||||
|
||||
.bg-gradient-neutral {
|
||||
@apply bg-gradient-to-b from-neutral-50 to-neutral-400;
|
||||
/* Recommended text colors for good contrast */
|
||||
color: #1f2937; /* neutral-800 for light text */
|
||||
}
|
||||
|
||||
/* Alternative text color variants */
|
||||
.bg-gradient-neutral .text-light {
|
||||
color: #374151; /* neutral-700 */
|
||||
}
|
||||
|
||||
.bg-gradient-neutral .text-medium {
|
||||
color: #4b5563; /* neutral-600 */
|
||||
}
|
||||
|
||||
.bg-gradient-neutral .text-dark {
|
||||
color: #1f2937; /* neutral-800 */
|
||||
}
|
||||
|
||||
/* Text gradient utilities */
|
||||
.text-gradient-neutral {
|
||||
background: linear-gradient(to right, rgb(249, 250, 251), rgb(75, 85, 99));
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
}
|
||||
|
||||
.text-gradient-neutral-vertical {
|
||||
background: linear-gradient(to bottom, rgb(249, 250, 251), rgb(126, 126, 126));
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
}
|
||||
|
||||
/* Variations with different opacity levels */
|
||||
.text-gradient-neutral-light {
|
||||
background: linear-gradient(to right, rgba(249, 250, 251, 0.8), rgba(75, 85, 99, 0.8));
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
}
|
||||
|
||||
.text-gradient-neutral-dark {
|
||||
background: linear-gradient(to right, rgba(156, 163, 175, 0.8), rgba(31, 41, 55, 1));
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
}
|
||||
|
||||
/* Reusable animation effects */
|
||||
.animate-fade-in-delay-1 {
|
||||
animation: fadeInUp 0.8s ease-out 0.2s both;
|
||||
}
|
||||
|
||||
.animate-fade-in-delay-2 {
|
||||
animation: fadeInUp 0.8s ease-out 0.4s both;
|
||||
}
|
||||
|
||||
.animate-fade-in-delay-3 {
|
||||
animation: fadeInUp 0.8s ease-out 0.6s both;
|
||||
}
|
||||
|
||||
.animate-fade-in-delay-4 {
|
||||
animation: fadeInUp 0.8s ease-out 0.8s both;
|
||||
}
|
||||
|
||||
@keyframes fadeInUp {
|
||||
0% {
|
||||
opacity: 0;
|
||||
transform: translateY(30px);
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|