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 (
-
- );
-};
-
-const ArrowLeft = ({
- isFocused,
- ...rest
-}: {
- isFocused: boolean;
- // biome-ignore lint/suspicious/noExplicitAny: FIXME
- onClick: () => any;
-}) => {
- return (
-
- );
-};
-
-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;