diff --git a/.github/linkChecker.ts b/.github/linkChecker.ts index 723c60ae16a..dacc01b084a 100644 --- a/.github/linkChecker.ts +++ b/.github/linkChecker.ts @@ -5,7 +5,7 @@ import { sync as globSync } from 'glob'; const baseUrl = 'http://localhost:3000'; // base url of the website -const whitelist = ["crates.io", "softwaretestinghelp.com", "coinbase.com", "assets.website-files.com", "moralis.io"] // some websites return 404 for head requests, so we need to whitelist them, (fix: pass header -H 'Accept: text/html' and parse text/html) +const whitelist = ["crates.io", "softwaretestinghelp.com", "coinbase.com", "assets.website-files.com", "moralis.io", "1rpc.io"] // some websites return 404 for head requests, so we need to whitelist them, (fix: pass header -H 'Accept: text/html' and parse text/html) // see https://github.com/rust-lang/crates.io/issues/788 interface LinkCheckResult { diff --git a/app/(home)/layout.tsx b/app/(home)/layout.tsx index ec1215866d9..0b07f9f998a 100644 --- a/app/(home)/layout.tsx +++ b/app/(home)/layout.tsx @@ -1,4 +1,4 @@ -import { Layout } from 'fumadocs-ui/layout'; +import { Layout, DocsLayout } from 'fumadocs-ui/layout'; import type { ReactNode } from 'react'; import { Footer } from '@/components/footer'; import { homebaseOptions } from '@/app/layout.config'; diff --git a/app/(home)/page.client.tsx b/app/(home)/page.client.tsx index 18a6dc9051f..868353d2bd1 100644 --- a/app/(home)/page.client.tsx +++ b/app/(home)/page.client.tsx @@ -5,9 +5,10 @@ import React, { Fragment, type ReactElement, } from 'react'; -import { IndentDecrease, Layers, MailIcon, MonitorCheck, Settings, SproutIcon, SquareGanttChart, TerminalIcon, Webhook, HomeIcon, BadgeDollarSign, CpuIcon, Files, Folder, Globe, Link } from 'lucide-react'; +import { IndentDecrease, Layers, MailIcon, MonitorCheck, Settings, SproutIcon, SquareGanttChart, TerminalIcon, Webhook, HomeIcon, FolderCode, BadgeDollarSign, CpuIcon, Files, Folder, Globe, Link, SquareIcon, ArrowLeftRight, Coins, SquareCode, SquareStackIcon, Triangle, ChevronDownIcon, Pyramid, HandCoins, Server, Code, TrendingUp, ScanFace, Telescope, LayoutTemplate, Building2, BookOpen, Podcast, Wallet } from 'lucide-react'; import { RootToggle } from 'fumadocs-ui/components/layout/root-toggle'; + export function DeployBlockchainAnimation(): React.ReactElement { const installCmd = 'avalanche blockchain deploy myblockchain'; const tickTime = 50; @@ -104,11 +105,10 @@ export function HamburgerMenu(): React.ReactElement { , - url: '/', - + url: '', }, { title: 'Avalanche Protocol', @@ -129,7 +129,13 @@ export function HamburgerMenu(): React.ReactElement { url: '/avalanche-l1s', }, { - title: 'Virtual Machines', + title: 'EVM Customization', + description: 'Customize the Ethereum VM', + icon: , + url: '/evm-l1s', + }, + { + title: 'Custom Virtual Machines', description: 'Customize Your Execution Layer', icon: , url: '/virtual-machines', @@ -162,3 +168,181 @@ export function HamburgerMenu(): React.ReactElement { /> ) } + +interface Option { + title: string + description: string + icon: React.ReactNode + url: string +} + +interface AcademyDropdownProps { + width?: string +} + +export function AcademyDropdown({ width = 'w-72' }: AcademyDropdownProps) { + const options: Option[] = [ + { + title: 'Courses', + description: '', + icon: <>, + url: '', + }, + { + title: 'Blockchain Fundamentals', + description: 'Understand fundamental blockchain concepts.', + icon: , + url: 'https://academy.avax.network/course/blockchain-fundamentals', + }, + { + title: 'Avalanche Fundamentals', + description: 'Overview of Avalanche Consensus, L1s, and VMs.', + icon: , + url: 'https://academy.avax.network/course/avalanche-fundamentals', + }, + { + title: "Multi-Chain Architecture", + description: 'Deploy your own blockchain with multi-chain architecture.', + icon: , + url: 'https://academy.avax.network/course/multi-chain-architecture', + }, + { + title: "Interchain Messaging", + description: 'Build cross-chain dApps on Avalanche.', + icon: , + url: 'https://academy.avax.network/course/interchain-messaging', + }, + { + title: "Interchain Token Transfer", + description: 'Transfer assets between Avalanche blockchains.', + icon: , + url: 'https://academy.avax.network/course/interchain-token-transfer', + }, + { + title: "Customizing the EVM", + description: 'Add custom precompiles to the EVM.', + icon: , + url: 'https://academy.avax.network/course/customizing-evm', + }, + { + title: "Layer 1 Tokenomics", + description: 'Design tokenomics for your Avalanche L1.', + icon: , + url: 'https://academy.avax.network/course/l1-tokenomics', + }, + { + title: "AvaCloud APIs", + description: 'Use AvaCloud APIs to build web apps.', + icon: , + url: 'https://academy.avax.network/course/avacloudapis', + }, + { + title: "HyperSDK", + description: 'Build high-performance blockchains with HyperSDK.', + icon: , + url: 'https://academy.avax.network/course/hypersdk', + } + ]; + return ( + + ) +} + + + +export function GrantsDropdown() { + const options: Option[] = [ + { + title: 'Grants & Programs', + description: '', + icon: <>, + url: '', + }, + { + title: 'Retro9000', + description: 'Build publicly and get rewarded.', + icon: , + url: 'https://www.avax.network/retro9000', + }, + { + title: 'infraBUIDL()', + description: 'Infrastructure projects that enhance user and developer experience', + icon: , + url: 'https://www.avax.network/infrabuidl-program', + }, + { + title: 'Codebase', + description: 'Transforming ambitious builders into extraordinary founders', + icon: , + url: 'https://codebase.avax.network/', + }, + { + title: 'Blizzard Fund', + description: 'VC fund investing in innovative entrepreneurs driving growth on Avalanche', + icon: , + url: 'https://www.blizzard.fund/', + }, + + ]; + return ( + + ) +} + + +export function IntegrationsDropdown() { + const options: Option[] = [ + { + title: 'Integrations', + description: '', + icon: <>, + url: '/integrations', + }, + { + title: 'Account Abstraction', + description: "", + icon: , + url: '/integrations#Account%20Abstraction', + }, + { + title: 'Block Explorers', + description: "", + icon: , + url: '/integrations#Block%20Explorers', + }, + { + title: 'Blockchain as a Service', + description: "", + icon: , + url: '/integrations#Blockchain%20as%20a%20Service', + }, + { + title: 'Enterprise Solutions', + description: "", + icon: , + url: '/integrations#Enterprise%20Solutions', + }, + { + title: 'Indexers', + description: "", + icon: , + url: '/integrations#Indexers', + }, + { + title: 'Oracles', + description: "", + icon: , + url: '/integrations#Oracles', + }, + { + title: 'Wallets', + description: "", + icon: , + url: '/integrations#Wallet%20SDKs', + }, + + ]; + return ( + + ) +} \ No newline at end of file diff --git a/app/(home)/page.tsx b/app/(home)/page.tsx index 137dc9cb2b9..01d171581e7 100644 --- a/app/(home)/page.tsx +++ b/app/(home)/page.tsx @@ -3,7 +3,7 @@ import type { LucideIcon } from 'lucide-react'; import { CpuIcon, BadgeDollarSign, - Globe, MailIcon, SproutIcon, SquareGanttChart, IndentDecrease, Layers, MonitorCheck, Settings, Terminal, Cable, Webhook, ArrowUpRight, Command + Globe, MailIcon, SproutIcon, SquareGanttChart, IndentDecrease, Layers, MonitorCheck, Settings, Terminal, Cable, Webhook, ArrowUpRight, Command, } from 'lucide-react'; import Link from 'next/link'; import type { HTMLAttributes, ReactNode } from 'react'; @@ -12,6 +12,7 @@ import { CodeBlock } from '@/components/code-block'; import { File, Files, Folder } from 'fumadocs-ui/components/files'; import { DeployBlockchainAnimation } from './page.client'; + const badgeVariants = cva( 'mb-2 inline-flex size-7 items-center justify-center rounded-full bg-fd-primary font-medium text-fd-primary-foreground', ); @@ -268,4 +269,11 @@ function Feature({ {props.children} ); -} \ No newline at end of file +} + +interface Option { + title: string + description: string + icon: React.ReactNode + url: string +} diff --git a/app/integrations/layout.tsx b/app/integrations/layout.tsx index a15489ac1ff..e3f5536e868 100644 --- a/app/integrations/layout.tsx +++ b/app/integrations/layout.tsx @@ -1,14 +1,14 @@ import { Layout } from 'fumadocs-ui/layout'; import type { ReactNode } from 'react'; import { Footer } from '@/components/footer'; -import { baseOptions } from '@/app/layout.config'; +import { integrationPageOptions } from '@/app/layout.config'; export default function HomeLayout({ children, }: { children: ReactNode; }): React.ReactElement { - return + return {children}