diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 0000000..4259c53 --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,23 @@ +and_chr 132 +and_ff 132 +and_uc 15.5 +chrome 131 +chrome 130 +chrome 127 +chrome 126 +chrome 125 +chrome 109 +edge 131 +firefox 133 +ios_saf 18.2 +ios_saf 18.1 +ios_saf 18.0 +ios_saf 17.6-17.7 +ios_saf 17.5 +ios_saf 16.6-16.7 +ios_saf 15.6-15.8 +op_mob 80 +opera 114 +safari 18.1 +safari 17.6 +samsung 27 diff --git a/.gitignore b/.gitignore index 818f4b3..941fc58 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,6 @@ yarn-error.log* # typescript *.tsbuildinfo -next-env.d.ts + .DS_Store diff --git a/app/blog/[slug]/page.tsx b/app/blog/[slug]/page.tsx index 393ec41..5b89b18 100644 --- a/app/blog/[slug]/page.tsx +++ b/app/blog/[slug]/page.tsx @@ -9,6 +9,37 @@ interface BlogPost { category: string; } +// Simulating an API call with a timeout +async function fetchBlogPost(slug: string): Promise { + return new Promise((resolve) => { + setTimeout(() => { + const post = blogPosts.find((post) => post.slug === slug); + resolve(post || null); + }, 100); // 100ms timeout to simulate API call + }); +} + +export async function generateStaticParams() { + // In a real application, you would fetch this data from an API or database + return blogPosts.map((post) => ({ + slug: post.slug, + })); +} + +export async function generateMetadata({ params }: { params: { slug: string } }) { + const post = await fetchBlogPost(params.slug); + + if (!post) { + return { + title: "Post Not Found", + }; + } + + return { + title: post.title, + }; +} + const blogPosts: BlogPost[] = [ { slug: "introducing-mev-protection", @@ -136,8 +167,8 @@ function CategoryBadge({ category }: { category: string }) { ); } -export default function BlogPost({ params }: { params: { slug: string } }) { - const post = blogPosts.find((post) => post.slug === params.slug); +export default async function BlogPost({ params }: { params: { slug: string } }) { + const post = await fetchBlogPost(params.slug); if (!post) { notFound(); diff --git a/app/blog/page.tsx b/app/blog/page.tsx index 2bbf2f1..b7cd28a 100644 --- a/app/blog/page.tsx +++ b/app/blog/page.tsx @@ -9,6 +9,15 @@ interface BlogPost { category: string; } +// Simulating an API call with a timeout +async function fetchBlogPosts(): Promise { + return new Promise((resolve) => { + setTimeout(() => { + resolve(blogPosts); + }, 100); // 100ms timeout to simulate API call + }); +} + const blogPosts: BlogPost[] = [ { slug: "introducing-mev-protection", @@ -52,13 +61,15 @@ function CategoryBadge({ category }: { category: string }) { ); } -export default function BlogPage() { +export default async function BlogPage() { + const posts = await fetchBlogPosts(); + return (

Blog

- {blogPosts.map((post) => ( + {posts.map((post) => (
diff --git a/app/components/api-endpoint.tsx b/app/components/api-endpoint.tsx index 9ec5cd7..2f401de 100644 --- a/app/components/api-endpoint.tsx +++ b/app/components/api-endpoint.tsx @@ -4,11 +4,11 @@ import { Input } from "@/components/ui/input"; export function APIEndpoint() { return (
-

Try Our SecureRPC API

+

Public API Endpoint

@@ -17,7 +17,7 @@ export function APIEndpoint() {

- Get started with our SecureRPC API for reliable and secure blockchain interactions. + Get started with our SecureRPC API for MEV Protection, and low latency network access.

); diff --git a/app/components/feature-grid.tsx b/app/components/feature-grid.tsx index 68174b3..bcfd087 100644 --- a/app/components/feature-grid.tsx +++ b/app/components/feature-grid.tsx @@ -1,5 +1,5 @@ import type React from "react"; -import { Zap, Shield, DollarSign, Server } from "lucide-react"; +import { Zap, Shield, DollarSign } from "lucide-react"; export function FeatureGrid() { return ( @@ -21,9 +21,9 @@ export function FeatureGrid() { description="Maximize MEV earnings with our advanced strategies and tools." /> } - title="Enterprise SecureRPC" - description="Stable and reliable blockchain interactions for your applications." + icon={} + title="Relay+ Protect" + description="Advanced MEV protection and transaction privacy for Ethereum." />
diff --git a/app/components/footer.tsx b/app/components/footer.tsx index d1d01cd..6bfd76d 100644 --- a/app/components/footer.tsx +++ b/app/components/footer.tsx @@ -1,21 +1,22 @@ -import Link from "next/link"; -import { Twitter, Github } from "lucide-react"; -import { Badge } from "@/components/ui/badge"; +import Link from "next/link" +import { Twitter, Github } from "lucide-react" +import { Logo } from "./logo" +import { HoverCard, HoverCardTrigger, HoverCardContent } from "@/components/ui/hover-card" // This would typically come from an environment variable or build-time constant -const GIT_VERSION_HASH = "a1b2c3d"; +const GIT_VERSION_HASH = "a1b2c3d" export function Footer() { return ( -
+
- Manifold Finance +

- © 2025 Manifold Finance. All rights reserved. + © {new Date().getFullYear()} All rights reserved.

@@ -23,25 +24,44 @@ export function Footer() { href="https://twitter.com/manifoldfinance" target="_blank" rel="noopener noreferrer" - className="text-gray-400 hover:text-white transition-colors"> + className="text-gray-400 hover:text-white transition-colors" + > + className="text-gray-400 hover:text-white transition-colors" + >
- - Systems Nominal - + + +
+
+ Operational +
+ + +
+
+

System Status

+

All systems are operational.

+
+ Last checked: {new Date().toLocaleString()} +
+
+
+
+ Version: {GIT_VERSION_HASH}
- ); + ) } + diff --git a/app/components/header.tsx b/app/components/header.tsx index 15f6686..e33ae80 100644 --- a/app/components/header.tsx +++ b/app/components/header.tsx @@ -2,8 +2,8 @@ import * as React from "react"; import Link from "next/link"; +import Image from "next/image"; import { Logo } from "@/app/components/logo"; -import { StatusIndicator } from "@/app/components/status-indicator"; import { cn } from "@/lib/utils"; import { NavigationMenu, @@ -17,26 +17,49 @@ import { import { Button } from "@/components/ui/button"; import { Menu } from "lucide-react"; -const products: { title: string; href: string; description: string }[] = [ +const solutions: { title: string; href: string; description: string }[] = [ { - title: "High-Performance Staking", + title: "High-Yield Staking", href: "/solutions/staking", - description: "Build and manage efficient staking solutions for maximum returns.", + description: "Maximum returns, natively.", }, { - title: "Secure Restaking", + title: "AVS Restaking", href: "/solutions/restaking", - description: "Leverage restaking protocols while ensuring top-notch security.", + description: "AVS Operations", }, { - title: "MEV Optimization", + title: "MEV Relay", href: "/solutions/mev", - description: "Maximize MEV earnings with our advanced strategies and tools.", + description: "Maximize MEV earnings as a Validator. Protect yourself as a user.", }, { title: "Enterprise SecureRPC", href: "/solutions/securerpc", - description: "Stable and reliable blockchain interactions for your applications.", + description: "MEV Protection and RPC as a Service", + }, +]; + +const products: { title: string; href: string; description: string }[] = [ + { + title: "FOLD Staking", + href: "/products/fold-staking", + description: "Stake your FOLD tokens and earn rewards.", + }, + { + title: "SecureRPC", + href: "/products/securerpc", + description: "MEV Protection as a Service", + }, + { + title: "XGA", + href: "https://xga.com", + description: "Hello World Auction.", + }, + { + title: "mevETH", + href: "/products/meveth", + description: "Maximized MEV rewards for Ethereum staking.", }, ]; @@ -67,15 +90,17 @@ const ListItem = React.forwardRef, React.ComponentPropsWit ({ className, title, children, ...props }, ref) => { return (
  • - -
    {title}
    -

    {children}

    + + +
    {title}
    +

    {children}

    +
  • ); @@ -93,7 +118,6 @@ function MobileMenu() { {isOpen && (
    - {/* Add mobile menu items here */} +
    +
    + + + + + + + + +
    - + ); } -const ListItem = React.forwardRef, React.ComponentPropsWithoutRef<"a">>( - ({ className, title, children, ...props }, ref) => { - return ( -
  • - - -
    {title}
    -

    {children}

    -
    -
    -
  • - ); - }, -); -ListItem.displayName = "ListItem"; - function MobileNavItem({ title, items, @@ -159,7 +147,7 @@ function MobileNavItem({ onClick={() => setIsOpen(!isOpen)} className="flex w-full items-center justify-between py-2 text-left"> {title} - + {isOpen && (
    diff --git a/app/components/mev-protection-comparison.tsx b/app/components/mev-protection-comparison.tsx new file mode 100644 index 0000000..4d302f0 --- /dev/null +++ b/app/components/mev-protection-comparison.tsx @@ -0,0 +1,183 @@ +"use client"; + +import { useState } from "react"; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; +import { ChevronDown, ChevronUp } from "lucide-react"; + +interface ComparisonData { + feature: string; + relayProtect: string; + flashbotsMevShare: string; + mevBlocker: string; +} + +const comparisonData: ComparisonData[] = [ + { + feature: "Architecture Foundation", + relayProtect: "Private mempool implementation with complete transaction isolation", + flashbotsMevShare: "Transparent order flow with partial information disclosure", + mevBlocker: "Hybrid approach combining privacy with controlled information flow", + }, + { + feature: "Transaction Privacy", + relayProtect: + "Full privacy until validator commitment, zero information leakage during pending state", + flashbotsMevShare: "Partial privacy with strategic information hints for market efficiency", + mevBlocker: "Enhanced privacy with selective disclosure mechanisms", + }, + { + feature: "Processing Pipeline", + relayProtect: "Direct entry into encrypted transaction pool with validator-only access", + flashbotsMevShare: "Routing through trusted builder network with hint system", + mevBlocker: "Multi-stage processing with privacy-preserving intermediaries", + }, + { + feature: "Block Construction Method", + relayProtect: "Private block building with complete state knowledge", + flashbotsMevShare: "Collaborative block building with partial information sharing", + mevBlocker: "Hybrid block building with selective validator participation", + }, + { + feature: "Network Integration", + relayProtect: "Deep integration with validator networks, minimal external dependencies", + flashbotsMevShare: "Extensive integration across multiple builder networks", + mevBlocker: "Moderate integration requirements with existing infrastructure", + }, + { + feature: "Economic Model", + relayProtect: "Users retain 70-80% of MEV protection benefits, lower validator share", + flashbotsMevShare: "Equal distribution between users, builders, and validators", + mevBlocker: "Variable distribution favoring validator incentivization", + }, + { + feature: "Market Impact", + relayProtect: "Reduces overall MEV extraction by 85-95% through complete privacy", + flashbotsMevShare: "Reduces MEV extraction by 60-75% through controlled disclosure", + mevBlocker: "Reduces MEV extraction by 70-85% through hybrid approach", + }, + { + feature: "Implementation Complexity", + relayProtect: "High initial setup complexity, simpler long-term maintenance", + flashbotsMevShare: "Moderate complexity with established infrastructure", + mevBlocker: "Moderate to high complexity with ongoing maintenance needs", + }, + { + feature: "Validator Requirements", + relayProtect: "Enhanced validation capabilities with privacy preservation", + flashbotsMevShare: "Standard validation with builder network participation", + mevBlocker: "Advanced validation with privacy protocol support", + }, + { + feature: "Network Overhead", + relayProtect: "Low network overhead due to efficient encryption", + flashbotsMevShare: "Moderate overhead from hint system and builder network", + mevBlocker: "Moderate to high overhead from privacy protocols", + }, + { + feature: "Cost Structure", + relayProtect: "Lower direct costs, higher initial setup investment", + flashbotsMevShare: "Moderate costs with established fee structure", + mevBlocker: "Variable costs depending on network conditions", + }, + { + feature: "Backrunning Prevention", + relayProtect: "Near-complete prevention through full transaction privacy", + flashbotsMevShare: "Partial prevention through controlled information flow", + mevBlocker: "Enhanced prevention through hybrid privacy model", + }, + { + feature: "Scaling Capabilities", + relayProtect: "Highly scalable with minimal bottlenecks", + flashbotsMevShare: "Moderately scalable with potential builder constraints", + mevBlocker: "Scalable with some privacy-related limitations", + }, + { + feature: "Integration Flexibility", + relayProtect: "Limited flexibility due to strict privacy requirements", + flashbotsMevShare: "High flexibility with multiple integration options", + mevBlocker: "Moderate flexibility with hybrid approach", + }, + { + feature: "Upgrade Path", + relayProtect: "Clear upgrade path with backward compatibility", + flashbotsMevShare: "Complex upgrade path with multiple stakeholders", + mevBlocker: "Moderate upgrade complexity with partial compatibility", + }, +]; + +export function MEVProtectionComparison() { + const [expandedRows, setExpandedRows] = useState([]); + + const toggleRow = (index: number) => { + setExpandedRows((prev) => + prev.includes(index) ? prev.filter((i) => i !== index) : [...prev, index], + ); + }; + + return ( + + + MEV Protection Comparison + + Compare Relay+ Protect with other MEV protection solutions + + + +
    + + + + + + + + + + + {comparisonData.map((row, index) => ( + + + + + + + ))} + +
    FeatureRelay+ ProtectFlashbots MEV-ShareMEV Blocker
    {row.feature} +
    + {row.relayProtect} +
    + {row.relayProtect.length > 100 && ( + + )} +
    +
    + {row.flashbotsMevShare} +
    +
    +
    + {row.mevBlocker} +
    +
    +
    +
    +
    + ); +} diff --git a/app/components/status-indicator.tsx b/app/components/status-indicator.tsx deleted file mode 100644 index 8b629c6..0000000 --- a/app/components/status-indicator.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { cn } from "@/lib/utils"; - -type StatusIndicatorProps = { - status: "operational" | "degraded" | "outage"; -}; - -export function StatusIndicator({ status }: StatusIndicatorProps) { - return ( -
    -
    - {status} -
    - ); -} diff --git a/app/globals.css b/app/globals.css index 59e819b..cdec42b 100644 --- a/app/globals.css +++ b/app/globals.css @@ -10,9 +10,8 @@ @layer base { :root { - --background: 0 0% 100%; - --foreground: 222.2 84% 4.9%; - + --background: 200 0% 0%; + --foreground: 0 0% 100%; --muted: 210 40% 96.1%; --muted-foreground: 215.4 16.3% 46.9%; @@ -43,8 +42,8 @@ } .dark { - --background: 222.2 84% 4.9%; - --foreground: 210 40% 98%; + --background: 200 0% 0%; + --foreground: 0 0% 100%; --muted: 217.2 32.6% 17.5%; --muted-foreground: 215 20.2% 65.1%; @@ -90,3 +89,4 @@ @apply font-heading; } } + diff --git a/app/layout.tsx b/app/layout.tsx index 8cdfba4..0f2451f 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,39 +1,32 @@ -import { Space_Grotesk, Noto_Sans } from "next/font/google"; -import { Footer } from "./components/footer"; -import ErrorBoundary from "./components/error-boundary"; -import "./globals.css"; -import type { Metadata } from "next"; -import { CommandMenu } from "./components/command-menu"; -import { Header } from "./components/header"; -import type React from "react"; +import { Space_Grotesk, Noto_Sans } from "next/font/google" +import ErrorBoundary from "./components/error-boundary" +import "./globals.css" +import type { Metadata } from "next" +import { CommandMenu } from "./components/command-menu" +import { Header } from "./components/header" +import type React from "react" +import { LayoutWrapper } from "./components/layout-wrapper" const spaceGrotesk = Space_Grotesk({ subsets: ["latin"], variable: "--font-space-grotesk", -}); +}) const notoSans = Noto_Sans({ subsets: ["latin"], weight: ["400", "700"], variable: "--font-noto-sans", -}); +}) export const metadata: Metadata = { metadataBase: new URL("https://manifoldfinance.com"), title: { - default: "Manifold Finance - Optimized Infrastructure for Ethereum", + default: "Manifold Finance - Powering markets across networks.", template: "%s | Manifold Finance", }, description: "Manifold Finance provides optimized infrastructure for the next generation of Ethereum, offering high-performance staking, MEV optimization, and enterprise-grade SecureRPC.", - keywords: [ - "Manifold Finance", - "Ethereum", - "Staking", - "MEV", - "SecureRPC", - "Blockchain Infrastructure", - ], + keywords: ["Manifold Finance", "Ethereum", "Staking", "MEV", "SecureRPC", "Blockchain Infrastructure"], authors: [{ name: "Manifold Finance" }], creator: "Manifold Finance", publisher: "Manifold Finance", @@ -47,25 +40,25 @@ export const metadata: Metadata = { locale: "en_US", url: "https://manifoldfinance.com", siteName: "Manifold Finance", - title: "Manifold Finance - Optimized Infrastructure for Ethereum", + title: "Manifold Finance - Powering markets across networks.", description: - "Build high-performance staking solutions, maximize MEV earnings, and leverage enterprise-grade SecureRPC with Manifold Finance.", + "High-yielding staking solutions, maximize MEV earnings, and more with Manifold Finance.", images: [ { url: "https://manifoldfinance.com/og-image.jpg", width: 1200, height: 630, - alt: "Manifold Finance - Optimized Ethereum Infrastructure", + alt: "Manifold Finance - Powering markets across networks", }, ], }, twitter: { card: "summary_large_image", - title: "Manifold Finance - Optimized Infrastructure for Ethereum", + title: "Manifold Finance - Powering markets across networks", description: - "Build high-performance staking solutions, maximize MEV earnings, and leverage enterprise-grade SecureRPC with Manifold Finance.", + "High-yielding staking solutions, maximize MEV earnings, and more with Manifold Finance.", images: ["https://manifoldfinance.com/og-image.jpg"], - creator: "@manifoldfinance", + creator: "@foldfinance", }, icons: { icon: "/favicon.ico", @@ -73,24 +66,28 @@ export const metadata: Metadata = { apple: "/apple-touch-icon.png", }, manifest: "https://manifoldfinance.com/site.webmanifest", -}; +} export default function RootLayout({ children, }: { - children: React.ReactNode; + children: React.ReactNode }) { + //const pathname = usePathname() + //const isHomePage = pathname === "/" + return ( - +
    -
    {children}
    -