+
{/* Ecosystem and Gallery temporarily removed - restore from git */}
{
e.currentTarget.style.backgroundColor = isDarkMode
? 'rgba(255, 255, 255, 0.1)'
@@ -244,10 +273,34 @@ const Navbar = ({ isDarkMode, setIsDarkMode: _setIsDarkMode }: NavbarProps) => {
>
{
+ e.currentTarget.style.backgroundColor = isDarkMode
+ ? 'rgba(255, 255, 255, 0.1)'
+ : 'rgba(0, 0, 0, 0.05)'
+ }}
+ onMouseLeave={e => {
+ e.currentTarget.style.backgroundColor = 'transparent'
+ }}
+ >
+ About
+
+
{
e.currentTarget.style.backgroundColor = 'transparent'
}}
>
- Home
+ Partners
{/* Ecosystem and Gallery temporarily removed - restore from git */}
= {
+ TradeTrust: {
+ light: 'bg-[#B3ECFF] text-[#0B384F]',
+ dark: 'bg-[#0B384F] text-[#B3ECFF]',
+ },
+ OpenCerts: {
+ light: 'bg-[#EEF2FF] text-primary-40',
+ dark: 'bg-primary-30/30 text-primary-90',
+ },
+}
+
+const DEFAULT_VERTICAL_STYLE = {
+ light: 'bg-neutral-60/60 text-neutral-20',
+ dark: 'bg-neutral-20/40 text-neutral-50',
+}
+
+interface PartnerCardProps {
+ partner: Partner
+ isDarkMode: boolean
+}
+
+const PartnerCard = ({ partner, isDarkMode }: PartnerCardProps) => {
+ const verticalStyle = partner.verticalType
+ ? (VERTICAL_TAG_STYLES[partner.verticalType] ?? DEFAULT_VERTICAL_STYLE)
+ : null
+
+ return (
+
+ {/* Logo */}
+
+

+
+
+ {/* Tags */}
+ {(partner.verticalType || partner.category) && (
+
+ {partner.verticalType && verticalStyle && (
+
+ {partner.verticalType}
+
+ )}
+ {partner.category && (
+
+ {partner.category}
+
+ )}
+
+ )}
+
+ {/* Company name */}
+
+ {partner.name}
+
+
+ {/* Description */}
+ {partner.description && (
+
+ {partner.description}
+
+ )}
+
+ {/* Spacer */}
+
+
+ {/* Visit Site */}
+ {partner.website && (
+
+ Visit Site
+
+
+ )}
+
+ )
+}
+
+export default PartnerCard
diff --git a/src/components/home/PartnersSection/index.tsx b/src/components/home/PartnersSection/index.tsx
new file mode 100644
index 0000000..59a3df0
--- /dev/null
+++ b/src/components/home/PartnersSection/index.tsx
@@ -0,0 +1,94 @@
+import { useNavigate } from 'react-router-dom'
+import { ChevronRight } from 'lucide-react'
+import clsx from 'clsx'
+import partners from '../../../data/partners'
+
+interface PartnersSectionProps {
+ isDarkMode: boolean
+}
+
+const bannerPartners = partners.filter(p => p.bannerLogo)
+const marqueeItems = [...bannerPartners, ...bannerPartners]
+
+const PartnersSection = ({ isDarkMode }: PartnersSectionProps) => {
+ const navigate = useNavigate()
+
+ return (
+
+
+
+
+ Our{' '}
+
+ Partners
+
+
+ Building a foundation of trust for every industry.
+
+
+
+ {/* Centered carousel wrapper */}
+
+ {/* Animated track */}
+
+ {marqueeItems.map((partner, idx) => (
+
+

+
+ ))}
+
+
+
+ {/* CTA */}
+
+
+
+
+ )
+}
+
+export default PartnersSection
diff --git a/src/components/home/VerifySection/ObfuscatedMessage.tsx b/src/components/home/VerifySection/ObfuscatedMessage.tsx
index 01ecc8c..d877905 100644
--- a/src/components/home/VerifySection/ObfuscatedMessage.tsx
+++ b/src/components/home/VerifySection/ObfuscatedMessage.tsx
@@ -34,6 +34,8 @@ export const ObfuscatedMessage: FunctionComponent
= ({
return (
(
+
+
+ {/* Hero */}
+
+
+
+ The Foundation of{' '}
+
+ Digital Trust
+
+
+ TrustVC serves as a core infrastructure layer enabling secure,
+ verifiable digital credentials across multiple industries and use
+ cases.
+
+
+
+
+
+
+
+
+ {/* Core Capabilities */}
+
+
+ Core Capabilities
+
+
+
+
+ {capabilities.map(cap => (
+
+ ))}
+
+
+
+
+)
+
+export default About
diff --git a/src/pages/Home/index.tsx b/src/pages/Home/index.tsx
index 72469f3..26d1c69 100644
--- a/src/pages/Home/index.tsx
+++ b/src/pages/Home/index.tsx
@@ -2,6 +2,7 @@ import HeroSection from '../../components/home/HeroSection'
import VerifySection from '../../components/home/VerifySection'
import Carousel from '../../components/home/Carousel'
import BuiltForDev from '../../components/home/BuiltForDev'
+import PartnersSection from '../../components/home/PartnersSection'
interface HomeProps {
isDarkMode: boolean
@@ -15,6 +16,7 @@ const Home = ({ isDarkMode }: HomeProps) => {
+
)
diff --git a/src/pages/Partners/index.tsx b/src/pages/Partners/index.tsx
new file mode 100644
index 0000000..8eaaea0
--- /dev/null
+++ b/src/pages/Partners/index.tsx
@@ -0,0 +1,90 @@
+import { useState } from 'react'
+import clsx from 'clsx'
+import partners from '../../data/partners'
+import PartnerCard from '../../components/common/PartnerCard'
+
+const CATEGORIES = [
+ 'All',
+ 'Issuance & Attestation',
+ 'Verification & Validation',
+ 'Solution Partners',
+ 'Infrastructure',
+]
+
+interface PartnersProps {
+ isDarkMode: boolean
+}
+
+const Partners = ({ isDarkMode }: PartnersProps) => {
+ const [activeCategory, setActiveCategory] = useState('All')
+
+ const filtered =
+ activeCategory === 'All'
+ ? partners
+ : partners.filter(p => p.category === activeCategory)
+
+ return (
+
+
+ {/* Heading */}
+
+
+
+ Our{' '}
+
+ Partners
+
+
+ The Global Engine for Verifiable Documents and Transferable Records.
+
+
+
+ {/* Category filter */}
+
+ {CATEGORIES.map(cat => (
+
+ ))}
+
+
+ {/* Grid */}
+
+ {filtered.map(partner => (
+
+ ))}
+
+
+
+ )
+}
+
+export default Partners
diff --git a/src/routes.tsx b/src/routes.tsx
index 9bad865..4f1ad0d 100644
--- a/src/routes.tsx
+++ b/src/routes.tsx
@@ -4,6 +4,8 @@ import Home from './pages/Home'
import Contact from './pages/Contact'
import Settings from './pages/Settings'
import NotFound from './pages/NotFound'
+import Partners from './pages/Partners'
+import About from './pages/About'
import NewsRouteFallback from './components/common/NewsRouteFallback'
const News = lazy(() => import('./pages/News'))
@@ -34,6 +36,8 @@ const AppRouter = ({ isDarkMode }: AppRouterProps) => {
}
/>
+
} />
+
} />
} />
} />
} />
diff --git a/src/types/partner.ts b/src/types/partner.ts
new file mode 100644
index 0000000..815e354
--- /dev/null
+++ b/src/types/partner.ts
@@ -0,0 +1,11 @@
+export interface Partner {
+ name: string
+ logo: string
+ logo2x?: string
+ bannerLogo?: string
+ bannerLogo2x?: string
+ website?: string
+ description?: string
+ verticalType?: string
+ category?: string
+}
diff --git a/tailwind.config.js b/tailwind.config.js
index c14f305..0b5c6bb 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -70,6 +70,15 @@ export default {
'form-card': '0px 8px 32px rgba(104, 106, 210, 0.33)',
'form-card-dark': '0px 8px 32px 0px #686AD2',
},
+ keyframes: {
+ marquee: {
+ '0%': { transform: 'translateX(0)' },
+ '100%': { transform: 'translateX(-50%)' },
+ },
+ },
+ animation: {
+ marquee: 'marquee 200s linear infinite',
+ },
backgroundImage: {
'overlay-light':
'linear-gradient(0deg, rgba(255, 255, 255, 0.66), rgba(255, 255, 255, 0.66)), linear-gradient(0deg, rgba(222, 228, 233, 0), rgba(222, 228, 233, 0))',