diff --git a/app/[locale]/developers/page.tsx b/app/[locale]/developers/page.tsx index 055ae54f0da..d7ea6cde9d4 100644 --- a/app/[locale]/developers/page.tsx +++ b/app/[locale]/developers/page.tsx @@ -1,5 +1,4 @@ import { Fragment } from "react" -import { Check } from "lucide-react" import { getTranslations } from "next-intl/server" import type { Lang } from "@/lib/types" @@ -10,6 +9,7 @@ import BigNumber from "@/components/BigNumber" import { CopyButton } from "@/components/CopyToClipboard" import FeedbackCard from "@/components/FeedbackCard" import HubHero from "@/components/Hero/HubHero" +import { CheckCircle } from "@/components/icons/CheckCircle" import { Image } from "@/components/Image" import MainArticle from "@/components/MainArticle" import { ButtonLink } from "@/components/ui/buttons/Button" @@ -99,13 +99,7 @@ const WhyGrid = () => { > {items.map(({ heading, description }) => (
-
- -
+

{heading}

{description}

diff --git a/app/[locale]/founders/logos/alliance.svg b/app/[locale]/founders/logos/alliance.svg new file mode 100644 index 00000000000..fd595f24a96 --- /dev/null +++ b/app/[locale]/founders/logos/alliance.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/app/[locale]/founders/logos/arbitrum.svg b/app/[locale]/founders/logos/arbitrum.svg new file mode 100644 index 00000000000..368fe608e1f --- /dev/null +++ b/app/[locale]/founders/logos/arbitrum.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/app/[locale]/founders/logos/base.svg b/app/[locale]/founders/logos/base.svg new file mode 100644 index 00000000000..ba41702e64c --- /dev/null +++ b/app/[locale]/founders/logos/base.svg @@ -0,0 +1,4 @@ + + + + diff --git a/app/[locale]/founders/logos/devconnect.svg b/app/[locale]/founders/logos/devconnect.svg new file mode 100644 index 00000000000..673396c444f --- /dev/null +++ b/app/[locale]/founders/logos/devconnect.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/app/[locale]/founders/logos/ecosystem-support-program.svg b/app/[locale]/founders/logos/ecosystem-support-program.svg new file mode 100644 index 00000000000..18c779180be --- /dev/null +++ b/app/[locale]/founders/logos/ecosystem-support-program.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/[locale]/founders/logos/ef-founder-success.svg b/app/[locale]/founders/logos/ef-founder-success.svg new file mode 100644 index 00000000000..ad906b4fb80 --- /dev/null +++ b/app/[locale]/founders/logos/ef-founder-success.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/[locale]/founders/logos/ens-builder-grants.svg b/app/[locale]/founders/logos/ens-builder-grants.svg new file mode 100644 index 00000000000..670533bc71a --- /dev/null +++ b/app/[locale]/founders/logos/ens-builder-grants.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/[locale]/founders/logos/ethglobal.svg b/app/[locale]/founders/logos/ethglobal.svg new file mode 100644 index 00000000000..01fbccaa6cd --- /dev/null +++ b/app/[locale]/founders/logos/ethglobal.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/app/[locale]/founders/logos/gitcoin.svg b/app/[locale]/founders/logos/gitcoin.svg new file mode 100644 index 00000000000..fb99a9bbc48 --- /dev/null +++ b/app/[locale]/founders/logos/gitcoin.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/app/[locale]/founders/logos/kernel.svg b/app/[locale]/founders/logos/kernel.svg new file mode 100644 index 00000000000..5fdfeca6640 --- /dev/null +++ b/app/[locale]/founders/logos/kernel.svg @@ -0,0 +1,10 @@ + + + + + + + + + +\ diff --git a/app/[locale]/founders/logos/optimism.svg b/app/[locale]/founders/logos/optimism.svg new file mode 100644 index 00000000000..aaccf0a73ff --- /dev/null +++ b/app/[locale]/founders/logos/optimism.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app/[locale]/founders/logos/polygon.svg b/app/[locale]/founders/logos/polygon.svg new file mode 100644 index 00000000000..0ca774eca3f --- /dev/null +++ b/app/[locale]/founders/logos/polygon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/app/[locale]/founders/logos/protocol-guild.svg b/app/[locale]/founders/logos/protocol-guild.svg new file mode 100644 index 00000000000..c74cfcc4e45 --- /dev/null +++ b/app/[locale]/founders/logos/protocol-guild.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/app/[locale]/founders/logos/unichain.svg b/app/[locale]/founders/logos/unichain.svg new file mode 100644 index 00000000000..35b086326b8 --- /dev/null +++ b/app/[locale]/founders/logos/unichain.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/app/[locale]/founders/page.tsx b/app/[locale]/founders/page.tsx new file mode 100644 index 00000000000..2ac9e1c2e67 --- /dev/null +++ b/app/[locale]/founders/page.tsx @@ -0,0 +1,556 @@ +import React from "react" +import { Banknote, ChartNoAxesCombined, Handshake } from "lucide-react" +import { getTranslations } from "next-intl/server" + +import type { Lang, SectionNavDetails } from "@/lib/types" + +import ContentHero from "@/components/Hero/ContentHero" +import { CheckCircle } from "@/components/icons/CheckCircle" +import MainArticle from "@/components/MainArticle" +import { ButtonLink } from "@/components/ui/buttons/Button" +import { Card } from "@/components/ui/card" +import { Section } from "@/components/ui/section" +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" +import { Tag } from "@/components/ui/tag" + +import { cn } from "@/lib/utils/cn" +import { getMetadata } from "@/lib/utils/metadata" + +import Alliance from "./logos/alliance.svg" +import Arbitrum from "./logos/arbitrum.svg" +import Base from "./logos/base.svg" +import Devconnect from "./logos/devconnect.svg" +import EcosystemSupport from "./logos/ecosystem-support-program.svg" +import EFFounderSuccess from "./logos/ef-founder-success.svg" +import EnsBuilderGrants from "./logos/ens-builder-grants.svg" +import EthGlobal from "./logos/ethglobal.svg" +// import Gitcoin from "./logos/gitcoin.svg" +import Kernel from "./logos/kernel.svg" +import Optimism from "./logos/optimism.svg" +import Polygon from "./logos/polygon.svg" +import ProtogolGuild from "./logos/protocol-guild.svg" +import Unichain from "./logos/unichain.svg" + +import heroImg from "@/public/images/upgrades/merge.png" + +const GetInTouchId = "get-in-touch" + +const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { + const { locale } = await params + const t = await getTranslations({ locale, namespace: "page-founders" }) + + const supportTags = { + active: { + label: t("page-founders-support-tag-active"), + // TODO: extract color variants to ui/tag component + className: + "bg-green-100 dark:bg-green-700/50 text-green-700 dark:text-green-100", + }, + grantProgram: { + label: t("page-founders-support-tag-grant-program"), + className: + "bg-blue-100 dark:bg-blue-600/50 text-blue-600 dark:text-blue-100", + }, + auditGrants: { + label: t("page-founders-support-tag-audit-grants"), + className: + "bg-purple-100 dark:bg-purple-600/50 text-purple-600 dark:text-purple-100", + }, + publicGoods: { + label: t("page-founders-support-tag-public-goods"), + className: + "bg-orange-100 dark:bg-orange-700/50 text-orange-700 dark:text-orange-100", + }, + toolingInfra: { + label: t("page-founders-support-tag-tooling-infra"), + className: + "bg-pink-100 dark:bg-pink-800/50 text-pink-800 dark:text-pink-100", + }, + events: { + label: t("page-founders-support-tag-events"), + className: + "bg-yellow-100 dark:bg-yellow-700/50 text-yellow-700 dark:text-yellow-100", + }, + fundraising: { + label: t("page-founders-support-tag-fundraising"), + className: + "bg-yellow-100 dark:bg-yellow-700/50 text-yellow-700 dark:text-yellow-100", + }, + ecosystemEvents: { + label: t("page-founders-support-tag-ecosystem-events"), + className: + "bg-pink-100 dark:bg-pink-800/50 text-pink-800 dark:text-pink-100 tracking-1", + }, + accelerator: { + label: t("page-founders-support-tag-accelerator"), + className: + "bg-orange-100 dark:bg-orange-700/50 text-orange-700 dark:text-orange-100", + }, + mentorship: { + label: t("page-founders-support-tag-mentorship"), + className: + "bg-purple-100 dark:bg-purple-600/50 text-purple-600 dark:text-purple-100", + }, + networking: { + label: t("page-founders-support-tag-networking"), + className: + "bg-blue-100 dark:bg-blue-600/50 text-blue-600 dark:text-blue-100", + }, + } as const satisfies Record + + type SupportTag = keyof typeof supportTags + + type SupportEntity = { + name: string // sr-only h3 + Logo: React.FC> + tags: SupportTag[] + subtitle?: string + description: string + highlights: string[] // w/ CheckCircle + href: string + ctaLabel?: React.ReactNode + } + + type SupportSection = Omit, "href"> & { + entities: SupportEntity[] + categoryCtaLabel?: string + } + + const supportTabs: SupportSection[] = [ + { + key: "funding", + label: t("page-founders-funding-label"), + icon: , + entities: [ + { + name: "Optimism Atlas", + Logo: Optimism, + tags: ["active", "grantProgram", "auditGrants", "publicGoods"], + description: t("page-founders-funding-optimism-description"), + highlights: [ + t("page-founders-funding-optimism-highlight-1"), + t("page-founders-funding-optimism-highlight-2"), + ], + href: "https://atlas.optimism.io/", + ctaLabel: t.rich("page-founders-cta-visit-name", { + name: "Optimism", + }), + }, + // { + // name: "Gitcoin", + // Logo: Gitcoin, + // tags: ["grantProgram", "publicGoods"], + // description: "A quarterly initiative that empowers people and collectives in web3 to allocate funding toward projects and causes they believe in.", + // highlights: ["3,700+ projects supported"], + // href: "https://www.gitcoin.co/program", + // ctaLabel: t.rich("page-founders-cta-visit-name", { name: "Gitcoin" }), + // }, + { + name: "Base", + Logo: Base, + tags: ["active", "grantProgram", "toolingInfra"], + description: t("page-founders-funding-base-description"), + highlights: [t("page-founders-funding-base-highlight-1")], + href: "https://paragraph.com/@grants.base.eth/calling-based-builders", + ctaLabel: t.rich("page-founders-cta-visit-name", { name: "Base" }), + }, + { + name: "Ecosystem Support Program", + Logo: EcosystemSupport, + tags: [ + "active", + "grantProgram", + "publicGoods", + "toolingInfra", + "events", + ], + description: t("page-founders-funding-esp-description"), + highlights: [t("page-founders-funding-esp-highlight-1")], + href: "https://esp.ethereum.foundation/", + ctaLabel: t.rich("page-founders-cta-visit-name", { name: "ESP" }), + }, + { + name: "Arbitrum", + Logo: Arbitrum, + tags: ["active", "grantProgram", "auditGrants", "toolingInfra"], + description: t("page-founders-funding-arbitrum-description"), + highlights: [t("page-founders-funding-arbitrum-highlight-1")], + href: "https://arbitrum.foundation/grants", + ctaLabel: t.rich("page-founders-cta-visit-name", { + name: "Arbitrum", + }), + }, + { + name: "Unichain", + Logo: Unichain, + tags: ["active", "grantProgram", "auditGrants", "toolingInfra"], + description: t("page-founders-funding-unichain-description"), + highlights: [t("page-founders-funding-unichain-highlight-1")], + href: "https://uniswapfoundation.mirror.xyz/CR1Boh_s3T7FDGwn2TQyyHYNMO_wp4jJDdtKR4U4CgE", + ctaLabel: t.rich("page-founders-cta-visit-name", { + name: "Unichain", + }), + }, + { + name: "Polygon", + Logo: Polygon, + tags: ["active", "grantProgram", "toolingInfra"], + description: t("page-founders-funding-polygon-description"), + highlights: [t("page-founders-funding-polygon-highlight-1")], + href: "https://polygon.technology/grants", + ctaLabel: t.rich("page-founders-cta-visit-name", { name: "Polygon" }), + }, + ], + }, + { + key: "accelerators-growth", + label: t("page-founders-accelerators-growth-label"), + icon: , + entities: [ + { + name: "Kernel", + Logo: Kernel, + tags: ["active", "mentorship", "networking"], + description: t("page-founders-accelerators-kernel-description"), + highlights: [ + t("page-founders-accelerators-kernel-highlight-1"), + t("page-founders-accelerators-kernel-highlight-2"), + ], + href: "https://www.kernel.community/", + ctaLabel: t.rich("page-founders-cta-explore-name", { + name: "Kernel", + }), + }, + { + name: "Alliance", + Logo: Alliance, + tags: [ + "active", + "accelerator", + "networking", + "mentorship", + "fundraising", + ], + description: t("page-founders-accelerators-alliance-description"), + highlights: [t("page-founders-accelerators-alliance-highlight-1")], + href: "https://alliance.xyz/", + ctaLabel: t.rich("page-founders-cta-explore-name", { + name: "Alliance", + }), + }, + { + name: "Base", + Logo: Base, + tags: ["accelerator", "mentorship", "networking"], + description: t("page-founders-accelerators-base-description"), + highlights: [t("page-founders-accelerators-base-highlight-1")], + href: "https://www.basebatches.xyz/", + ctaLabel: t.rich("page-founders-cta-explore-name", { name: "Base" }), + }, + ], + }, + { + key: "partnerships-integrations", + label: t("page-founders-partnerships-label"), + icon: , + entities: [ + { + name: "Unichain", + Logo: Unichain, + tags: ["active", "auditGrants"], + description: t("page-founders-partnerships-unichain-description"), + highlights: [t("page-founders-partnerships-unichain-highlight-1")], + href: "https://www.uniswapfoundation.org/grants", + ctaLabel: t.rich("page-founders-cta-visit-name", { + name: "Unichain", + }), + }, + { + name: "ENS Builder Grants", + Logo: EnsBuilderGrants, + tags: ["active", "publicGoods", "fundraising"], + description: t("page-founders-partnerships-ens-description"), + highlights: [ + t("page-founders-partnerships-ens-highlight-1"), + t("page-founders-partnerships-ens-highlight-2"), + ], + href: "https://builder.ensgrants.xyz/", + ctaLabel: t.rich("page-founders-cta-visit-name", { name: "ENS" }), + }, + { + name: "Protocol Guild", + Logo: ProtogolGuild, + tags: ["active", "fundraising"], + description: t( + "page-founders-partnerships-protocol-guild-description" + ), + highlights: [ + t("page-founders-partnerships-protocol-guild-highlight-1"), + ], + href: "https://www.protocolguild.org/", + ctaLabel: t.rich("page-founders-cta-visit-name", { name: "PG" }), + }, + { + name: "Devconnect", + Logo: Devconnect, + tags: ["ecosystemEvents"], + description: t("page-founders-partnerships-devconnect-description"), + highlights: [], + href: "https://devconnect.org/", + ctaLabel: t.rich("page-founders-cta-visit-name", { + name: "Devconnect", + }), + }, + { + name: "ETHGlobal", + Logo: EthGlobal, + tags: ["ecosystemEvents"], + description: t("page-founders-partnerships-ethglobal-description"), + highlights: [], + href: "https://ethglobal.com/", + ctaLabel: t.rich("page-founders-cta-visit-name", { + name: "ETHGlobal", + }), + }, + { + name: "Ethereum Foundation Founder Support", + Logo: EFFounderSuccess, + tags: [], + subtitle: t("page-founders-partnerships-ef-founder-support-subtitle"), + description: t( + "page-founders-partnerships-ef-founder-support-description" + ), + highlights: [], + href: `#${GetInTouchId}`, + ctaLabel: t("page-founders-partnerships-ef-founder-support-cta"), + }, + // { + // name: "Base", + // Logo: Base, + // tags: [], + // description: "Base Batches is a global program for builders creating the next wave of onchain apps", + // highlights: [], + // href: "https://www.basebatches.xyz/", + // ctaLabel: "Visit Base", + // }, + ], + }, + ] + + // TODO: Re-enable metrics when ready + // const metrics: StatsBoxMetric[] = [ + // { label: "Fundraisings", state: { value: "23" } }, + // { label: "GTM strategies", state: { value: "32" } }, + // { label: "Projects", state: { value: "34" } }, + // ] + + const stories: { + name: string + affiliation: string + className?: string + content: React.ReactNode + }[] = [ + { + name: "Fahim", + affiliation: "Optimism", + className: "[&_[data-label='avatar']]:bg-accent-a", + content:

{t("page-founders-story-fahim-p1")}

, + }, + { + name: "Kedian", + affiliation: "LevelMoney", + className: "[&_[data-label='avatar']]:bg-accent-b", + content: ( + <> +

{t("page-founders-story-kedian-p1")}

+

{t("page-founders-story-kedian-p2")}

+ + ), + }, + { + name: "Dith", + affiliation: "Gigaverse", + className: "[&_[data-label='avatar']]:bg-accent-c", + content:

{t("page-founders-story-dith-p1")}

, + }, + ] + + return ( +
+ + +
+
+

{t("page-founders-apply-h2")}

+

{t("page-founders-apply-p1")}

+
+ + + + {supportTabs.map(({ key, label, icon }) => ( + + {icon} {label} + + ))} + + {supportTabs.map(({ key, entities, categoryCtaLabel }) => ( + +
+ {entities.map( + ({ + name, + Logo, + tags, + subtitle, + description, + highlights, + href, + ctaLabel, + }) => ( + +

{name}

+ +
+ {!!tags.length && ( +
+ {tags.map((tag) => ( + + {supportTags[tag].label} + + ))} +
+ )} + {subtitle &&

{subtitle}

} +

{description}

+ {highlights.map((highlight) => ( +
+ +

{highlight}

+
+ ))} +
+ + {ctaLabel || categoryCtaLabel} + +
+ ) + )} +
+
+ ))} +
+
+
+
+

+ {t("page-founders-succeed-h2")} +

+

{t("page-founders-succeed-p1")}

+
+ {/* // TODO: Re-enable metrics when ready */} + {/* */} + +
+ {stories.map(({ name, affiliation, content, className }) => ( + +
{content}
+
+
+ {name[0].toUpperCase()} +
+
+

{name}

+

{affiliation}

+
+
+
+ ))} +
+
+
+

{t("page-founders-get-in-touch-h2")}

+ +

+ {t("page-founders-get-in-touch-p1")} +

+ + {t("page-founders-get-in-touch-cta")} + +
+
+
+ ) +} + +export async function generateMetadata({ + params, +}: { + params: Promise<{ locale: string }> +}) { + const { locale } = await params + + const t = await getTranslations({ + locale, + namespace: "page-founders", + }) + + return await getMetadata({ + locale, + slug: ["founders"], + title: t("page-founders-metadata-title"), + description: t("page-founders-metadata-description"), + image: "/images/upgrades/merge.png", + }) +} +export default Page diff --git a/package.json b/package.json index 401ed5f7981..f750539a101 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ethereum-org-website", - "version": "10.11.0", + "version": "10.12.0", "license": "MIT", "private": true, "scripts": { diff --git a/public/_redirects b/public/_redirects index fcc91b7c34c..f2eab5c3232 100644 --- a/public/_redirects +++ b/public/_redirects @@ -2,83 +2,65 @@ /*/discord https://discord.gg/ethereum-org 301! -/pdfs/* /en/ 301! +/pdfs/* / 301! -/brand /en/assets/ 301! +/brand /assets/ 301! -/ether /en/eth/ 301! +/ether /eth/ 301! -/token /en/developers/ 301! +/token /developers/ 301! -/crowdsale /en/developers/ 301! +/crowdsale /developers/ 301! -/cli /en/developers/ 301! +/cli /developers/ 301! -/greeter /en/developers/ 301! +/greeter /developers/ 301! -/search /en/ 301! +/search / 301! -/use /en/apps/ 301! +/use /apps/ 301! -/dapps /en/apps/ 301! +/dapps /apps/ 301! -/beginners /en/what-is-ethereum/ 301! +/beginners /what-is-ethereum/ 301! -/eth2/ /en/roadmap/ 301! +/eth2/ /roadmap/ 301! -/build/ /en/developers/learning-tools/ 301! +/build/ /developers/learning-tools/ 301! -/nfts/ /en/nft/ 301! +/nfts/ /nft/ 301! -/payments/ /en/payments/ 301! +/payments/ /payments/ 301! -/daos/ /en/dao/ 301! +/daos/ /dao/ 301! -/layer2/ /en/layer-2/ 301! +/layer2/ /layer-2/ 301! /*/layer2/ /:splat/layer-2/ 301! -/grants/ /en/community/grants/ 301! +/grants/ /community/grants/ 301! /no/* /nb/:splat 301! /ph/* /fil/:splat 301! -/java/ /en/developers/docs/programming-languages/java/ 301! +/java/ /developers/docs/programming-languages/java/ 301! -/en/java/ /en/developers/docs/programming-languages/java/ 301! +/python/ /developers/docs/programming-languages/python/ 301! -/python/ /en/developers/docs/programming-languages/python/ 301! +/javascript/ /developers/docs/programming-languages/javascript/ 301! -/en/python/ /en/developers/docs/programming-languages/python/ 301! +/golang/ /developers/docs/programming-languages/golang/ 301! -/javascript/ /en/developers/docs/programming-languages/javascript/ 301! +/rust/ /developers/docs/programming-languages/rust/ 301! -/en/javascript/ /en/developers/docs/programming-languages/javascript/ 301! +/dot-net/ /developers/docs/programming-languages/dot-net/ 301! -/golang/ /en/developers/docs/programming-languages/golang/ 301! +/delphi/ /developers/docs/programming-languages/delphi/ 301! -/en/golang/ /en/developers/docs/programming-languages/golang/ 301! +/dart/ /developers/docs/programming-languages/dart/ 301! -/rust/ /en/developers/docs/programming-languages/rust/ 301! - -/en/rust/ /en/developers/docs/programming-languages/rust/ 301! - -/dot-net/ /en/developers/docs/programming-languages/dot-net/ 301! - -/en/dot-net/ /en/developers/docs/programming-languages/dot-net/ 301! - -/delphi/ /en/developers/docs/programming-languages/delphi/ 301! - -/en/delphi/ /en/developers/docs/programming-languages/delphi/ 301! - -/dart/ /en/developers/docs/programming-languages/dart/ 301! - -/en/dart/ /en/developers/docs/programming-languages/dart/ 301! - -/developers/docs/mining/ /en/developers/docs/consensus-mechanisms/pow/mining/ 301! - -/en/developers/docs/mining/ /en/developers/docs/consensus-mechanisms/pow/mining/ 301! +/developers/docs/mining/ /developers/docs/consensus-mechanisms/pow/mining/ 301! /*/beginners /:splat/what-is-ethereum/ 301! @@ -108,29 +90,29 @@ /*/upgrades/shard-chains/ /:splat/roadmap/danksharding/ 301! -/upgrades/sharding/ /en/roadmap/danksharding/ 301! +/upgrades/sharding/ /roadmap/danksharding/ 301! /*/upgrades/sharding/ /:splat/roadmap/danksharding/ 301! -/upgrades/shard-chains/ /en/roadmap/danksharding/ 301! +/upgrades/shard-chains/ /roadmap/danksharding/ 301! -/upgrades/merge /en/roadmap/merge/ 301! +/upgrades/merge /roadmap/merge/ 301! /*/upgrades/merge /:splat/roadmap/merge/ 301! -/upgrades/merge/issuance /en/roadmap/merge/issuance 301! +/upgrades/merge/issuance /roadmap/merge/issuance 301! /*/upgrades/merge/issuance /:splat/roadmap/merge/issuance 301! -/upgrades/beacon-chain /en/roadmap/beacon-chain 301! +/upgrades/beacon-chain /roadmap/beacon-chain 301! /*/upgrades/beacon-chain /:splat/roadmap/beacon-chain 301! -/upgrades/vision/ /en/roadmap/vision/ 301! +/upgrades/vision/ /roadmap/vision/ 301! /*/upgrades/vision/ /:splat/roadmap/vision/ 301! -/upgrades /en/roadmap 301! +/upgrades /roadmap 301! /*/upgrades /:splat/roadmap 301! @@ -173,7 +155,7 @@ /*/developers/docs/smart-contracts/upgrading-smart-contracts/ /:splat/developers/docs/smart-contracts/upgrading/ 301! -/staking/withdraws /en/staking/withdrawals/ 301! +/staking/withdraws /staking/withdrawals/ 301! /*/writing-cohort https://ethereumwriterscohort.carrd.co/ 301! @@ -185,7 +167,7 @@ /*/enterprise/private-ethereum/ /:splat/enterprise/ 301! -/dashboards /en/resources 301! +/dashboards /resources 301! /*/dashboards /:splat/resources 301! diff --git a/public/content/community/grants/index.md b/public/content/community/grants/index.md index 792b4c50f36..91b179e0765 100644 --- a/public/content/community/grants/index.md +++ b/public/content/community/grants/index.md @@ -10,6 +10,11 @@ The programs listed below offer a variety of funding grants for projects working This list is curated by our community. If there's something missing or incorrect, please edit this page! + + +
Founders, need help accelerating your business? [Head over to Founders Support](/founders/)
+
+ ## Broad Ethereum ecosystem {#broad-ethereum-ecosystem} These programs support the broad Ethereum ecosystem by offering grants to a wide scope of projects. These include solutions for scalability, community building, security, privacy, and more. These grants are not specific to any one Ethereum platform and are a good place to start if you're unsure. @@ -64,7 +69,6 @@ These programs focus on funding projects that benefit the broader community, pub - [Artizen](https://artizen.fund/) - _Helping creators match fund new projects at the frontier of art, science, technology and culture_ - [Quadratic Accelerator](https://qacc.giveth.io/) - _Start-up accelerator program that uses quadratic funding to support projects that benefit the public good_ - ## Work in Ethereum {#work-in-ethereum} Not ready to start your own project? There are hundreds of companies actively looking for passionate individuals to work in and contribute to the Ethereum ecosystem. Looking for more information? [Check out Ethereum related jobs](/community/get-involved/#ethereum-jobs) diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index 9277aa72eca..0a0e9720c5d 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -188,6 +188,10 @@ const Footer = ({ lastDeployLocaleTimestamp }: FooterProps) => { href: "/enterprise/", text: t("enterprise-mainnet"), }, + { + href: "/founders/", + text: t("founders"), + }, ], }, { diff --git a/src/components/Nav/MobileMenu/index.tsx b/src/components/Nav/MobileMenu/index.tsx index 89e52a2d279..9163ef93f3f 100644 --- a/src/components/Nav/MobileMenu/index.tsx +++ b/src/components/Nav/MobileMenu/index.tsx @@ -1,6 +1,6 @@ import { Languages, Menu } from "lucide-react" import { getLocale, getTranslations } from "next-intl/server" -import { Trigger as TabsTrigger } from "@radix-ui/react-tabs" +import * as TabsPrimitive from "@radix-ui/react-tabs" import type { Lang } from "@/lib/types" @@ -19,7 +19,6 @@ import { SheetTrigger, } from "@/components/ui/sheet" import { SheetCloseOnNavigate } from "@/components/ui/sheet-close-on-navigate" -import { Tabs, TabsContent, TabsList } from "@/components/ui/tabs" import { cn } from "@/lib/utils/cn" import { isLangRightToLeft } from "@/lib/utils/translations" @@ -68,28 +67,28 @@ export default async function MobileMenu({ - - - - + - + - +
- + {t("languages")} - +
- + {t("menu")} - +
-
+
-
+ ) diff --git a/src/components/Nav/useNavigation.ts b/src/components/Nav/useNavigation.ts index d0a469bdec6..40aff11cad8 100644 --- a/src/components/Nav/useNavigation.ts +++ b/src/components/Nav/useNavigation.ts @@ -39,7 +39,7 @@ export const useNavigation = () => { "build/home": CodeSquareIcon, "build/get-started": FlagIcon, "build/docs": JournalCodeIcon, - "build/enterprise": BuildingsIcon, + "build/business": BuildingsIcon, "participate/community-hub": UsersFourLight, "participate/events": MegaphoneIcon, "participate/ethereum-org": EthereumIcon, diff --git a/src/components/icons/CheckCircle.tsx b/src/components/icons/CheckCircle.tsx new file mode 100644 index 00000000000..97ae9285cce --- /dev/null +++ b/src/components/icons/CheckCircle.tsx @@ -0,0 +1,22 @@ +import { Check } from "lucide-react" + +import { cn } from "@/lib/utils/cn" + +export const CheckCircle = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+ +
+) diff --git a/src/components/ui/tabs.tsx b/src/components/ui/tabs.tsx index eeed667363c..658f3a5832f 100644 --- a/src/components/ui/tabs.tsx +++ b/src/components/ui/tabs.tsx @@ -12,7 +12,7 @@ const TabsList = React.forwardRef< { ], }, { - id: "build/enterprise", - label: t("enterprise"), - description: t("nav-mainnet-description"), - href: "/enterprise/", + id: "build/business", + label: t("business"), + description: t("nav-business-description"), + items: [ + { + label: t("enterprise"), + description: t("nav-enterprise-description"), + href: "/enterprise/", + }, + { + label: t("founders"), + description: t("nav-founders-description"), + href: "/founders/", + }, + ], }, ], }, diff --git a/src/lib/types.ts b/src/lib/types.ts index 219d10c765d..1c49deff3c4 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -1218,3 +1218,10 @@ export type Story = { country: string | null date: string } + +export type SectionNavDetails = { + key: string + label: string + href?: string + icon?: React.ReactNode +}