diff --git a/apps/dashboard/framer-rewrites.js b/apps/dashboard/framer-rewrites.js index 22d971c9367..14b19dae8af 100644 --- a/apps/dashboard/framer-rewrites.js +++ b/apps/dashboard/framer-rewrites.js @@ -6,8 +6,10 @@ module.exports = [ // -- product landing pages -- // -- connect "/connect/sign-in", + // -- nebula "/nebula", // -- contracts + "/contracts", "/contracts/modular-contracts", "/contracts/explore", "/contracts/deployment-tool", @@ -20,4 +22,7 @@ module.exports = [ "/solutions/ecosystem", // -- campaigns -- "/unlimited-wallets", + // -- TPP -- + "/trusted-partner-program", + "/trusted-partner-program/:partner_slug", ]; diff --git a/apps/dashboard/src/components/contracts/CaseStudyStatic.tsx b/apps/dashboard/src/components/contracts/CaseStudyStatic.tsx deleted file mode 100644 index 4e17b884512..00000000000 --- a/apps/dashboard/src/components/contracts/CaseStudyStatic.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import { Flex } from "@chakra-ui/react"; -import { ChakraNextImage } from "components/Image"; -import type { StaticImageData } from "next/image"; -import type { ReactNode } from "react"; -import { Heading, Text, TrackedLink } from "tw-components"; - -export interface CaseStudyStaticProps { - title: ReactNode; - description: string; - image: StaticImageData; - label: string; - href: string; - TRACKING_CATEGORY: string; -} - -const CaseStudyStatic = ({ - image, - title, - description, - label, - href, - TRACKING_CATEGORY, -}: CaseStudyStaticProps) => { - return ( - - - - - - - {title} - - - - {description} - - - - - ); -}; - -export default CaseStudyStatic; diff --git a/apps/dashboard/src/components/contracts/ContractInteractionSection.tsx b/apps/dashboard/src/components/contracts/ContractInteractionSection.tsx deleted file mode 100644 index a4707c34a84..00000000000 --- a/apps/dashboard/src/components/contracts/ContractInteractionSection.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import { Box } from "@chakra-ui/react"; -import { ChakraNextImage } from "components/Image"; -import { useState } from "react"; - -export const ContractInteractionSection = () => { - const [contractStateOne, setContractStateOne] = useState(true); - const [contractStateTwo, setContractStateTwo] = useState(false); - - return ( - - - { - setContractStateTwo(true); - setContractStateOne(false); - }} - /> - - - - - { - setContractStateOne(true); - setContractStateTwo(false); - }} - /> - - - - ); -}; diff --git a/apps/dashboard/src/components/contracts/LandingCaseStudyStaticSection.tsx b/apps/dashboard/src/components/contracts/LandingCaseStudyStaticSection.tsx deleted file mode 100644 index 22cca29f236..00000000000 --- a/apps/dashboard/src/components/contracts/LandingCaseStudyStaticSection.tsx +++ /dev/null @@ -1,195 +0,0 @@ -import { Flex, Icon, useBreakpointValue } from "@chakra-ui/react"; -import { useRef, useState } from "react"; -import { Heading } from "tw-components"; -import CaseStudyStatic, { type CaseStudyStaticProps } from "./CaseStudyStatic"; - -const ArrowRight = ({ - isFocused, - ...rest -}: { - isFocused: boolean; - // biome-ignore lint/suspicious/noExplicitAny: FIXME - onClick: () => any; -}) => { - return ( - - right - - - - - ); -}; - -const ArrowLeft = ({ - isFocused, - ...rest -}: { - isFocused: boolean; - // biome-ignore lint/suspicious/noExplicitAny: FIXME - onClick: () => any; -}) => { - return ( - - left - - - - - ); -}; - -interface LandingCaseStudyStaticSectionProps { - studies: Omit[]; - TRACKING_CATEGORY: string; -} -const CARD_WIDTH = 341; -const GAP = 24; - -const LandingCaseStudyStaticSection = ({ - studies, - TRACKING_CATEGORY, -}: LandingCaseStudyStaticSectionProps) => { - const containerRef = useRef(null); - const isTablet = useBreakpointValue({ base: true, xl: false }); - const [isFocusedRight, setIsFocusedRight] = useState(false); - const [isFocusedLeft, setIsFocusedLeft] = useState(false); - - const scroll = (direction: "right" | "left") => { - const container = containerRef.current; - if (container) { - const scrollDistance = CARD_WIDTH + GAP + (!isTablet ? 16 : 0); - const currentScroll = container.scrollLeft; - - const newScroll = - direction === "left" - ? currentScroll - scrollDistance - : currentScroll + scrollDistance; - container.scrollTo({ - left: newScroll, - behavior: "smooth", - }); - } - }; - - return ( - - - - Smart contracts for every use case - - - - scroll("left")} - fontSize="48px" - isFocused={isFocusedLeft} - onMouseOver={() => setIsFocusedLeft(true)} - onMouseLeave={() => setIsFocusedLeft(false)} - /> - scroll("right")} - transition="250ms ease" - fontSize="48px" - isFocused={isFocusedRight} - onMouseOver={() => setIsFocusedRight(true)} - onMouseLeave={() => setIsFocusedRight(false)} - /> - - - - - {studies.map(({ title, description, image, href, label }, idx) => ( - - ))} - - - ); -}; - -export default LandingCaseStudyStaticSection; diff --git a/apps/dashboard/src/components/contracts/Stats.tsx b/apps/dashboard/src/components/contracts/Stats.tsx deleted file mode 100644 index d74c1f83218..00000000000 --- a/apps/dashboard/src/components/contracts/Stats.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import { Flex, SimpleGrid, type SimpleGridProps } from "@chakra-ui/react"; -import { Heading, Text } from "tw-components"; - -interface Stat { - title: string; - description: string; -} - -type StatsProps = { - stats: Stat[]; -} & SimpleGridProps; - -const Stats = ({ stats, ...rest }: StatsProps) => { - return ( - - {stats.map((stat, idx) => { - const showBorder = idx !== 0; - - return ( - - - {stat.title} - - - - {stat.description} - - - ); - })} - - ); -}; - -export default Stats; diff --git a/apps/dashboard/src/page-id.ts b/apps/dashboard/src/page-id.ts index c64ca79062b..3ddaa5a1060 100644 --- a/apps/dashboard/src/page-id.ts +++ b/apps/dashboard/src/page-id.ts @@ -39,9 +39,6 @@ export enum PageId { // thirdweb.com/auth AuthLanding = "auth-landing", - // thirdweb.com/cointracts - ContractsLanding = "contracts-landing", - // thirdweb.com/grant/superchain GrantSuperChain = "grant-superchain", diff --git a/apps/dashboard/src/pages/contracts.tsx b/apps/dashboard/src/pages/contracts.tsx deleted file mode 100644 index f6179b8e698..00000000000 --- a/apps/dashboard/src/pages/contracts.tsx +++ /dev/null @@ -1,353 +0,0 @@ -import { Container, Flex } from "@chakra-ui/react"; -import { ChakraNextImage } from "components/Image"; -import { ContractInteractionSection } from "components/contracts/ContractInteractionSection"; -import LandingCaseStudyStaticSection from "components/contracts/LandingCaseStudyStaticSection"; -import Stats from "components/contracts/Stats"; -import { LandingCardWithImage } from "components/landing-pages/card-with-image"; -import LandingCardWithMetrics from "components/landing-pages/card-with-metrics"; -import { LandingEndCTA } from "components/landing-pages/end-cta"; -import { LandingGridSection } from "components/landing-pages/grid-section"; -import { LandingHeroWithSideImage } from "components/landing-pages/hero-with-side-image"; -import { LandingLayout } from "components/landing-pages/layout"; -import { getAbsoluteUrl } from "lib/vercel-utils"; -import { ZapIcon } from "lucide-react"; -import { PageId } from "page-id"; -import { Heading, Text, TrackedLinkButton } from "tw-components"; -import type { ThirdwebNextPage } from "utils/types"; - -const TRACKING_CATEGORY = "contracts"; - -const caseStudies = [ - { - title: "Build an NFT drop", - description: - "Build a drop where users can claim NFTs. Determine who and when can claim the drop and configure advanced features such as delayed reveal.", - image: require("../../public/assets/contracts/build-nft-drop.png"), - label: "build-nft", - href: "/explore/nft", - }, - { - title: "Build a marketplace", - description: - "Build an NFT marketplace where users can buy, sell or trade digital assets with crypto or fiat currency.", - image: require("../../public/assets/contracts/build-marketplace.png"), - label: "build-marketplace", - href: "/explore/marketplace", - }, - { - title: "Build a token airdrop", - description: "Let users claim an allocation of ERC20 tokens.", - image: require("../../public/assets/contracts/build-token-airdrop.png"), - label: "token-airdrop", - href: "/explore/airdrop", - }, - { - title: "Build a loyalty program with evolving NFTs", - description: - "Give your loyal customers an NFT that evolves based on other asset holdings in user's wallet. Create an NFT that dynamically updates through different membership tiers.", - image: require("../../public/assets/contracts/build-loyalty-program.png"), - label: "build-loyalty", - href: "/thirdweb.eth/LoyaltyCard", - }, -]; - -export const metrics = [ - { - title: "Onchain Summer", - description: - "Powering an onchain festival to celebrate the launch of Base Mainnet – with daily mints in collaboration with 50+ of the world's leading brands, creators, & artists.", - image: require("../../public/assets/landingpage/case-study-onchain-summer.png"), - mobileImage: require("../../public/assets/landingpage/case-study-onchain-summer.png"), - items: [ - { - title: "$2.4M+", - description: "For Creators", - }, - { - title: "25%", - description: "Active Wallets on Base", - colSpan: 2, - }, - { - title: "1M+", - description: "Transactions", - }, - ], - href: "https://twitter.com/thirdweb/status/1719736720865001723", - hoverBackground: "#0053FF", - }, - { - title: "Pixels", - description: - "Building a thriving in-game economy with VIP memberships, in-game tokens, and digital assets that users own — all onchain.", - image: require("../../public/assets/landingpage/pixels.png"), - mobileImage: require("../../public/assets/landingpage/mobile-pixels.png"), - items: [ - { - title: "100k+", - description: "Daily Users", - }, - { - title: "1.5M+", - description: "Monthly Transactions", - colSpan: 2, - }, - { - title: "10k+", - description: "VIP Members", - }, - ], - href: "https://blog.thirdweb.com/case-studies/pixels-builds-an-onchain-ecosystem-for-its-web3-game", - hoverBackground: "#622AFF", - }, - { - title: "Layer3", - description: - "Creating the most engaging way to explore crypto — with gamified experiences, immersive quests, and NFT rewards.", - image: require("../../public/assets/landingpage/case-study-layer3.png"), - mobileImage: require("../../public/assets/landingpage/case-study-layer3.png"), - items: [ - { - title: "16.7M+", - description: "Transactions", - }, - { - title: "685K+", - description: "Total Users", - colSpan: 2, - }, - { - title: "20+", - description: "Chains", - }, - ], - href: "https://blog.thirdweb.com/case-studies/layer3-powers-web3-adoption-through-gamified-experiences-nft-rewards/", - hoverBackground: "#FEA421", - }, -]; - -const Contracts: ThirdwebNextPage = () => { - return ( - - - - - - - - - Any smart contract, on any EVM chain - - - - Explore & extend our library of audited, modular smart contracts — - and deploy to any EVM chain in seconds. - - - - - - - - - - - } - py={6} - px={8} - bgColor="white" - _hover={{ - bgColor: "white", - opacity: 0.8, - }} - mt={{ base: 2, md: 16 }} - color="black" - href="/explore" - category={TRACKING_CATEGORY} - label="explore" - fontWeight="bold" - > - Explore contracts - - - - - - Build with a powerful Solidity SDK - - - - The complete Solidity toolkit to build custom smart contracts, with - a set of pre-built base contracts and extensions. - - - - - - - - - - - - - - - - - - - - - - Trusted by the best - - - - Powering web3 apps across verticals — from onchain games to - creator platforms. - - - } - desktopColumns={3} - TRACKING_CATEGORY={TRACKING_CATEGORY} - metrics={metrics} - /> - - - - ); -}; - -Contracts.pageId = PageId.ContractsLanding; - -export default Contracts;