diff --git a/bun.lockb b/bun.lockb
new file mode 100755
index 00000000..bd003bb3
Binary files /dev/null and b/bun.lockb differ
diff --git a/package.json b/package.json
index 1bf1eac1..db1c9c9a 100644
--- a/package.json
+++ b/package.json
@@ -26,7 +26,7 @@
"escape-string-regexp": "^5.0.0",
"flexsearch": "^0.7.43",
"github-slugger": "^2.0.0",
- "lucide-react": "^0.286.0",
+ "lucide-react": "^0.416.0",
"next": "^14.2.3",
"nextjs-toploader": "^1.6.12",
"node-html-parser": "^6.1.13",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e38ee605..07ab4ffc 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -54,8 +54,8 @@ importers:
specifier: ^2.0.0
version: 2.0.0
lucide-react:
- specifier: ^0.286.0
- version: 0.286.0(react@18.3.1)
+ specifier: ^0.416.0
+ version: 0.416.0(react@18.3.1)
next:
specifier: ^14.2.3
version: 14.2.3(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -4673,10 +4673,10 @@ packages:
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
engines: {node: '>=10'}
- lucide-react@0.286.0:
- resolution: {integrity: sha512-0+AOFa/uiXlXJJTqcKto1gqbU9XflYgYZbS9DN2ytSIhSBQaF5xfRKAq/k0okBInpgu5P6i7dhCcgbHV4OMkHQ==}
+ lucide-react@0.416.0:
+ resolution: {integrity: sha512-wPWxTzdss1CTz2aqcNWNlbh4YSnH9neJWP3RaeXepxpLCTW+pmu7WcT/wxJe+Q7Y7DqGOxAqakJv0pIK3431Ag==}
peerDependencies:
- react: ^16.5.1 || ^17.0.0 || ^18.0.0
+ react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
lunr@2.3.9:
resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==}
@@ -13076,7 +13076,7 @@ snapshots:
dependencies:
yallist: 4.0.0
- lucide-react@0.286.0(react@18.3.1):
+ lucide-react@0.416.0(react@18.3.1):
dependencies:
react: 18.3.1
diff --git a/src/app/contracts/build/get-started/page.mdx b/src/app/contracts/build/get-started/page.mdx
deleted file mode 100644
index c293d7ec..00000000
--- a/src/app/contracts/build/get-started/page.mdx
+++ /dev/null
@@ -1,186 +0,0 @@
-import { Tabs, TabsList, TabsTrigger, TabsContent } from "@/components/ui/tabs";
-import { createMetadata } from "@doc";
-
-export const metadata = createMetadata({
- image: { title: "Get Started with thirdweb Solidity SDK", icon: "solidity" },
- title: "Get Started with thirdweb Solidity SDK",
- description:
- "To get started with the Solidity SDK, run the following command to create a new project:",
-});
-
-# Getting Started
-
-To get started with the Solidity SDK, run the following command to create a new project:
-
-```bash
-npx thirdweb create contract
-```
-
-Or, install the `contracts` package into your existing Solidity project:
-
-
-
-
- Forge
- Hardhat
-
-
-
-```bash
-forge install https://github.com/thirdweb-dev/contracts
-```
-
-
-```bash
-npm i @thirdweb-dev/contracts
-```
-
-
-
-## Using the Solidity SDK
-
-The Solidity SDK can be used to build new smart contracts _end-to-end_, or to add functionality to your own, existing smart contract using [extensions](/contracts/build/extensions).
-
-All functions in the [base contracts](/contracts/build/base-contracts) and [extensions](/contracts/build/extensions) can be modified by [overriding them](/contracts/build/get-started#inheritance-and-overriding-functions).
-
-### Using Base Contracts
-
-The Solidity SDK includes [base contracts](/contracts/build/base-contracts) that are fully complete smart contracts that can be customized by overriding functions OR by adding extensions.
-
-**1.** To start, import and inherit the base contract. You can find the list of all available base contracts [here](/contracts/build/base-contracts).
-
-**2.** Base contracts expect certain constructor arguments to function as intended. Implement a constructor for your smart contract and pass the
-appropriate values to a constructor for the base contract.
-
-```solidity
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import "@thirdweb-dev/contracts/base/ERC721Base.sol";
-
-contract MyNFT is ERC721Base {
- constructor(
- address _defaultAdmin,
- string memory _name,
- string memory _symbol,
- address _royaltyRecipient,
- uint128 _royaltyBps
- ) ERC721Base(_defaultAdmin, _name, _symbol, _royaltyRecipient, _royaltyBps) {}
-}
-```
-
-**3.** Now you're all set up! 🎉 Your smart contract now has all the [extensions](/contracts/build/extensions) provided by the [base contract](/contracts/build/base-contracts) it inherits and is ready to be [deployed](/contracts/deploy/overview) to any EVM blockchain of your choice.
-
-### Using Extensions
-
-Extensions are to be used via inheritance - your project's smart contract will inherit from them.
-
-Additional [extensions](/contracts/build/extensions) can be added to existing smart contracts or to the [base contracts](/contracts/build/base-contracts) to add extra functionality and unlocking features in the SDKs and Dashboard.
-
-**1.** To start, import and inherit the extension. You can find the list of all available extensions [here](/contracts/build/extensions).
-
-```solidity
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import "@thirdweb-dev/contracts/base/ERC721Base.sol";
-import "@thirdweb-dev/contracts/extension/Permissions.sol";
-
-contract MyNFT is ERC721Base, Permissions {
- constructor(
- address _defaultAdmin,
- string memory _name,
- string memory _symbol,
- address _royaltyRecipient,
- uint128 _royaltyBps
- ) ERC721Base(_defaultAdmin, _name, _symbol, _royaltyRecipient, _royaltyBps) {}
-}
-```
-
-**Note:**
-
-- Some Extensions are **Abstract** and so require certain functions to be implemented\*.
-- Some Extensions are **Interfaces** and so require **all** the functions to be implemented\*.
-
-\*implement = write the logic for the function with a matching function signature (matching name, parameters, visibility and return type)
-
-**2.** Use the functions provided by the Extension to change the behavior of your smart contract.
-
-```solidity
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import "@thirdweb-dev/contracts/base/ERC721Base.sol";
-import "@thirdweb-dev/contracts/extension/Permissions.sol";
-
-contract MyNFT is ERC721Base, Permissions {
- bytes32 private constant MINTER_ROLE = keccak256("MINTER_ROLE");
-
- constructor(
- address _defaultAdmin,
- string memory _name,
- string memory _symbol,
- address _royaltyRecipient,
- uint128 _royaltyBps
- ) ERC721Base(_defaultAdmin, _name, _symbol, _royaltyRecipient, _royaltyBps) {}
-
- /**
- * `_canMint` is a function available in `ERC721Base`.
- *
- * It is called every time a wallet tries to mint NFTs on this
- * contract, and lets you define the condition in which an
- * attempt to mint NFTs should be permitted, or rejected.
- *
- * By default, `ERC721Base` only lets the contract's owner mint
- * NFTs. Here, we override that functionality.
- *
- * We use the `Permissions` extension to specify that anyone holding
- * "MINTER_ROLE" should be able to mint NFTs.
- */
- function _canMint() internal view override returns (bool) {
- return hasRole(MINTER_ROLE, msg.sender);
- }
-}
-```
-
-### Inheritance and Overriding Functions
-
-Inheritance allows you to extend your smart contract's properties to include the parent contract's attributes and properties.
-The inherited functions from this parent contract can be modified in the child contract via a process known as overriding.
-
-Parent contract: Contract that the inheriting contract is inheriting from.
-
-Child contract: The inheriting contract.
-
-To override a function, to add your own custom logic, simply use the keyword `override` when declaring the function, making sure that the function signature matches.
-To add the original logic from the parent contract, use the keyword `super`.
-
-For example, the [`ERC721Base`](/contracts/build/base-contracts/erc-721/base) contract has an implementation of the function `mintTo`, I could instead override this function to add custom logic
-and restrict this function in the `myNFT` contract to only allow 1 NFT per wallet:
-
-```solidity
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-import "@thirdweb-dev/contracts/base/ERC721Base.sol";
-import "@thirdweb-dev/contracts/extension/Permissions.sol";
-
-contract MyNFT is ERC721Base, Permissions {
- constructor(
- address _defaultAdmin,
- string memory _name,
- string memory _symbol,
- address _royaltyRecipient,
- uint128 _royaltyBps
- ) ERC721Base(_defaultAdmin, _name, _symbol, _royaltyRecipient, _royaltyBps) {}
-
- function mintTo(address _to, string memory _tokenURI) public override {
- require(balanceOf(_to) < 1, "only 1 NFT per wallet!");
- super.mintTo(_to, _tokenURI);
- }
-}
-```
-
-```
-
-```
diff --git a/src/app/contracts/build/overview/page.mdx b/src/app/contracts/build/overview/page.mdx
deleted file mode 100644
index 45cb0d2b..00000000
--- a/src/app/contracts/build/overview/page.mdx
+++ /dev/null
@@ -1,26 +0,0 @@
-import { DocImage } from "@doc";
-import extensinoModelImage from "./assets/extension-model.svg";
-import { createMetadata } from "@doc";
-
-export const metadata = createMetadata({
- title: "thirdweb Solidity SDK",
- description:
- "Solidity SDK provides the tools needed to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions.",
- image: {
- title: "thirdweb Solidity SDK",
- icon: "solidity",
- },
-});
-
-# Build (Solidity SDK)
-
-**Build** or **Solidity SDK** provides the tools needed to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions.
-
-
-
-#### Features
-
-- **Supports popular EIPs:** Effortlessly integrate common smart contract features and functionality from popular EIPs such as ERC-20, ERC-721, ERC-1155, permissions, metadata, and more.
-- **Open Source:** The Solidity SDK is open-source and therefore available for any user to audit or contribute to the repository. [View the contracts repository.](https://github.com/thirdweb-dev/contracts)
-- **Gas-optimized and audited base contracts:** Using base contracts provides a gas-optimized and audited foundation to build your projects.
-- **Unlocked Management & Building Tools:** Each inherited extension unlocks easy-to-use functions in the contract interaction SDKs, custom admin dashboards, and tailored data feeds.
diff --git a/src/app/contracts/build/base-contracts/erc-1155/base/page.mdx b/src/app/contracts/modular-contracts/core-contracts/erc-1155/base/page.mdx
similarity index 100%
rename from src/app/contracts/build/base-contracts/erc-1155/base/page.mdx
rename to src/app/contracts/modular-contracts/core-contracts/erc-1155/base/page.mdx
diff --git a/src/app/contracts/build/base-contracts/erc-1155/delayed-reveal/page.mdx b/src/app/contracts/modular-contracts/core-contracts/erc-1155/delayed-reveal/page.mdx
similarity index 100%
rename from src/app/contracts/build/base-contracts/erc-1155/delayed-reveal/page.mdx
rename to src/app/contracts/modular-contracts/core-contracts/erc-1155/delayed-reveal/page.mdx
diff --git a/src/app/contracts/build/base-contracts/erc-1155/drop/page.mdx b/src/app/contracts/modular-contracts/core-contracts/erc-1155/drop/page.mdx
similarity index 100%
rename from src/app/contracts/build/base-contracts/erc-1155/drop/page.mdx
rename to src/app/contracts/modular-contracts/core-contracts/erc-1155/drop/page.mdx
diff --git a/src/app/contracts/build/base-contracts/erc-1155/lazy-mint/page.mdx b/src/app/contracts/modular-contracts/core-contracts/erc-1155/lazy-mint/page.mdx
similarity index 100%
rename from src/app/contracts/build/base-contracts/erc-1155/lazy-mint/page.mdx
rename to src/app/contracts/modular-contracts/core-contracts/erc-1155/lazy-mint/page.mdx
diff --git a/src/app/contracts/modular-contracts/core-contracts/erc-1155/page.mdx b/src/app/contracts/modular-contracts/core-contracts/erc-1155/page.mdx
new file mode 100644
index 00000000..cce6fb30
--- /dev/null
+++ b/src/app/contracts/modular-contracts/core-contracts/erc-1155/page.mdx
@@ -0,0 +1,56 @@
+import { createMetadata } from "@doc";
+
+export const metadata = createMetadata({
+ title: "thirdweb Modular Contracts",
+ description:
+ "Modular Contract provides a framework to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions.",
+ image: {
+ title: "thirdweb Modular Contracts",
+ icon: "solidity",
+ },
+});
+
+# ERC-1155 Core
+
+## Supported Callback Functions
+
+| Function | Mode |
+|----------------------|-------------|
+| `beforeMintERC1155` | REQUIRED |
+| `beforeTransferERC1155` | OPTIONAL |
+| `beforeBatchTransferERC1155` | OPTIONAL |
+| `beforeBurnERC1155` | OPTIONAL |
+| `beforeApproveForAll`| OPTIONAL |
+| `onTokenURI` | REQUIRED |
+| `beforeBatchMintERC1155` | REQUIRED |
+
+## Supported Interfaces
+
+| Interface | ID |
+|------------------|-------------|
+| `ERC165` | `0x01ffc9a7`|
+| `ERC1155` | `0xd9b67a26`|
+| `ERC1155MetadataURI` | `0x0e89341c`|
+| `ERC-7572` | `0xe8a3d485`|
+| `ERC-173` | `0x7f5828d0`|
+
+## Functions Supported
+
+| Function | Description |
+|-------------------------|-----------------------------------------------------------------------------|
+| `constructor` | Initializes the contract with parameters for name, symbol, metadata URI, owner, extensions, and extension data. |
+| `name` | Returns the name of the NFT Collection. |
+| `symbol` | Returns the symbol of the NFT Collection. |
+| `contractURI` | Returns the contract metadata URI. |
+| `totalSupply` | Returns the total supply of a tokenId of the NFT collection. |
+| `uri` | Returns the token metadata of an NFT. |
+| `supportsInterface` | Checks if the contract implements an interface with the given interface ID. |
+| `getSupportedCallbackFunctions` | Returns the supported callback functions. |
+| `setContractURI` | Sets the contract metadata URI. Callable only by the contract admin. |
+| `mint` | Mints tokens with a given tokenId to a specified address, calling the beforeMint hook. |
+| `batchMint` | Batch mints tokens to a specified address, calling the beforeBatchMint hook. |
+| `burn` | Burns a specified amount of tokens, calling the beforeBurn hook if it exists.|
+| `safeTransferFrom` | Transfers ownership of an NFT, calling the beforeTransfer hook if it exists.|
+| `safeBatchTransferFrom` | Batch transfers ownership of NFTs, calling the beforeBatchTransfer hook if it exists. |
+| `setApprovalForAll` | Approves or revokes approval from an operator to transfer all NFTs. Calls the beforeApproveForAll hook if it exists. |
+
diff --git a/src/app/contracts/build/base-contracts/erc-1155/signature-mint/page.mdx b/src/app/contracts/modular-contracts/core-contracts/erc-1155/signature-mint/page.mdx
similarity index 100%
rename from src/app/contracts/build/base-contracts/erc-1155/signature-mint/page.mdx
rename to src/app/contracts/modular-contracts/core-contracts/erc-1155/signature-mint/page.mdx
diff --git a/src/app/contracts/build/base-contracts/erc-20/base/page.mdx b/src/app/contracts/modular-contracts/core-contracts/erc-20/base/page.mdx
similarity index 100%
rename from src/app/contracts/build/base-contracts/erc-20/base/page.mdx
rename to src/app/contracts/modular-contracts/core-contracts/erc-20/base/page.mdx
diff --git a/src/app/contracts/build/base-contracts/erc-20/drop-vote/page.mdx b/src/app/contracts/modular-contracts/core-contracts/erc-20/drop-vote/page.mdx
similarity index 100%
rename from src/app/contracts/build/base-contracts/erc-20/drop-vote/page.mdx
rename to src/app/contracts/modular-contracts/core-contracts/erc-20/drop-vote/page.mdx
diff --git a/src/app/contracts/build/base-contracts/erc-20/drop/page.mdx b/src/app/contracts/modular-contracts/core-contracts/erc-20/drop/page.mdx
similarity index 100%
rename from src/app/contracts/build/base-contracts/erc-20/drop/page.mdx
rename to src/app/contracts/modular-contracts/core-contracts/erc-20/drop/page.mdx
diff --git a/src/app/contracts/modular-contracts/core-contracts/erc-20/page.mdx b/src/app/contracts/modular-contracts/core-contracts/erc-20/page.mdx
new file mode 100644
index 00000000..97eb3d7f
--- /dev/null
+++ b/src/app/contracts/modular-contracts/core-contracts/erc-20/page.mdx
@@ -0,0 +1,50 @@
+import { createMetadata } from "@doc";
+
+export const metadata = createMetadata({
+ title: "thirdweb Modular Contracts",
+ description:
+ "Modular Contract provides a framework to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions.",
+ image: {
+ title: "thirdweb Modular Contracts",
+ icon: "solidity",
+ },
+});
+
+# ERC-20 Core
+
+## Supported Callback Functions
+
+| Function | Mode |
+|----------------------|------------|
+| `beforeMintERC20` | REQUIRED |
+| `beforeTransferERC20`| OPTIONAL |
+| `beforeBurnERC20` | OPTIONAL |
+| `beforeApproveERC20` | OPTIONAL |
+
+## Supported Interfaces
+
+| Interface | ID |
+|-----------------|-------------|
+| `ERC165` | `0x01ffc9a7`|
+| `ERC-7572` | `0xe8a3d485`|
+| `ERC-173` | `0x7f5828d0`|
+| `ERC20` | `0x36372b07`|
+
+## Functions Supported
+
+| Function | Description |
+|-------------------------|-----------------------------------------------------------------------------|
+| `constructor` | Initializes the contract with parameters for name, symbol, metadata URI, owner, extensions, and extension data. |
+| `name` | Returns the name of the token. |
+| `symbol` | Returns the symbol of the token. |
+| `contractURI` | Returns the contract metadata URI. |
+| `getSupportedCallbackFunctions` | Returns the supported callback functions. |
+| `supportsInterface` | Checks if the contract implements an interface with the given interface ID. |
+| `setContractURI` | Sets the contract metadata URI. Callable only by the contract admin. |
+| `mint` | Mints tokens to a specified address, calling the beforeMint hook. |
+| `burn` | Burns a specified amount of tokens, calling the beforeBurn hook if it exists.|
+| `transfer` | Transfers tokens to a specified address, calling the beforeTransfer hook if it exists. |
+| `transferFrom` | Transfers tokens from one address to another, calling the beforeTransfer hook if it exists. |
+| `approve` | Approves a spender to spend tokens on behalf of an owner, calling the beforeApprove hook if it exists. |
+| `permit` | Sets allowance based on token owner's signed approval, calling the beforeApprove hook if it exists. |
+
diff --git a/src/app/contracts/build/base-contracts/erc-20/signature-mint-vote/page.mdx b/src/app/contracts/modular-contracts/core-contracts/erc-20/signature-mint-vote/page.mdx
similarity index 100%
rename from src/app/contracts/build/base-contracts/erc-20/signature-mint-vote/page.mdx
rename to src/app/contracts/modular-contracts/core-contracts/erc-20/signature-mint-vote/page.mdx
diff --git a/src/app/contracts/build/base-contracts/erc-20/signature-mint/page.mdx b/src/app/contracts/modular-contracts/core-contracts/erc-20/signature-mint/page.mdx
similarity index 100%
rename from src/app/contracts/build/base-contracts/erc-20/signature-mint/page.mdx
rename to src/app/contracts/modular-contracts/core-contracts/erc-20/signature-mint/page.mdx
diff --git a/src/app/contracts/build/base-contracts/erc-20/vote/page.mdx b/src/app/contracts/modular-contracts/core-contracts/erc-20/vote/page.mdx
similarity index 100%
rename from src/app/contracts/build/base-contracts/erc-20/vote/page.mdx
rename to src/app/contracts/modular-contracts/core-contracts/erc-20/vote/page.mdx
diff --git a/src/app/contracts/build/base-contracts/erc-4337/account-factory/page.mdx b/src/app/contracts/modular-contracts/core-contracts/erc-4337/account-factory/page.mdx
similarity index 100%
rename from src/app/contracts/build/base-contracts/erc-4337/account-factory/page.mdx
rename to src/app/contracts/modular-contracts/core-contracts/erc-4337/account-factory/page.mdx
diff --git a/src/app/contracts/build/base-contracts/erc-4337/account/page.mdx b/src/app/contracts/modular-contracts/core-contracts/erc-4337/account/page.mdx
similarity index 100%
rename from src/app/contracts/build/base-contracts/erc-4337/account/page.mdx
rename to src/app/contracts/modular-contracts/core-contracts/erc-4337/account/page.mdx
diff --git a/src/app/contracts/build/base-contracts/erc-4337/managed-account-factory/page.mdx b/src/app/contracts/modular-contracts/core-contracts/erc-4337/managed-account-factory/page.mdx
similarity index 100%
rename from src/app/contracts/build/base-contracts/erc-4337/managed-account-factory/page.mdx
rename to src/app/contracts/modular-contracts/core-contracts/erc-4337/managed-account-factory/page.mdx
diff --git a/src/app/contracts/build/base-contracts/erc-4337/managed-account/page.mdx b/src/app/contracts/modular-contracts/core-contracts/erc-4337/managed-account/page.mdx
similarity index 100%
rename from src/app/contracts/build/base-contracts/erc-4337/managed-account/page.mdx
rename to src/app/contracts/modular-contracts/core-contracts/erc-4337/managed-account/page.mdx
diff --git a/src/app/contracts/build/base-contracts/erc-4337/page.mdx b/src/app/contracts/modular-contracts/core-contracts/erc-4337/page.mdx
similarity index 100%
rename from src/app/contracts/build/base-contracts/erc-4337/page.mdx
rename to src/app/contracts/modular-contracts/core-contracts/erc-4337/page.mdx
diff --git a/src/app/contracts/build/base-contracts/erc-721/base/page.mdx b/src/app/contracts/modular-contracts/core-contracts/erc-721/base/page.mdx
similarity index 100%
rename from src/app/contracts/build/base-contracts/erc-721/base/page.mdx
rename to src/app/contracts/modular-contracts/core-contracts/erc-721/base/page.mdx
diff --git a/src/app/contracts/build/base-contracts/erc-721/delayed-reveal/page.mdx b/src/app/contracts/modular-contracts/core-contracts/erc-721/delayed-reveal/page.mdx
similarity index 100%
rename from src/app/contracts/build/base-contracts/erc-721/delayed-reveal/page.mdx
rename to src/app/contracts/modular-contracts/core-contracts/erc-721/delayed-reveal/page.mdx
diff --git a/src/app/contracts/build/base-contracts/erc-721/drop/page.mdx b/src/app/contracts/modular-contracts/core-contracts/erc-721/drop/page.mdx
similarity index 100%
rename from src/app/contracts/build/base-contracts/erc-721/drop/page.mdx
rename to src/app/contracts/modular-contracts/core-contracts/erc-721/drop/page.mdx
diff --git a/src/app/contracts/build/base-contracts/erc-721/lazy-mint/page.mdx b/src/app/contracts/modular-contracts/core-contracts/erc-721/lazy-mint/page.mdx
similarity index 100%
rename from src/app/contracts/build/base-contracts/erc-721/lazy-mint/page.mdx
rename to src/app/contracts/modular-contracts/core-contracts/erc-721/lazy-mint/page.mdx
diff --git a/src/app/contracts/modular-contracts/core-contracts/erc-721/page.mdx b/src/app/contracts/modular-contracts/core-contracts/erc-721/page.mdx
new file mode 100644
index 00000000..71ab0f73
--- /dev/null
+++ b/src/app/contracts/modular-contracts/core-contracts/erc-721/page.mdx
@@ -0,0 +1,53 @@
+import { createMetadata } from "@doc";
+
+export const metadata = createMetadata({
+ title: "thirdweb Modular Contracts",
+ description:
+ "Modular Contract provides a framework to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions.",
+ image: {
+ title: "thirdweb Modular Contracts",
+ icon: "solidity",
+ },
+});
+
+# ERC-721 Core
+
+## Supported Callback Functions
+
+| Function | Mode |
+|----------------------|------------|
+| `beforeMintERC721` | REQUIRED |
+| `beforeTransferERC721`| OPTIONAL |
+| `beforeBurnERC721` | OPTIONAL |
+| `beforeApproveERC721`| OPTIONAL |
+| `beforeApproveForAll`| OPTIONAL |
+| `onTokenURI` | REQUIRED |
+
+## Supported Interfaces
+
+| Interface | ID |
+|------------------|-------------|
+| `ERC165` | `0x01ffc9a7`|
+| `ERC721` | `0x80ac58cd`|
+| `ERC721Metadata` | `0x5b5e139f`|
+| `ERC-7572` | `0xe8a3d485`|
+| `ERC-173` | `0x7f5828d0`|
+
+## Functions Supported
+
+| Function | Description |
+|-------------------------|-----------------------------------------------------------------------------|
+| `constructor` | Initializes the contract with parameters for name, symbol, metadata URI, owner, extensions, and their data. |
+| `contractURI` | Returns the contract metadata URI. |
+| `startTokenId` | Returns the starting token ID for sequential mints. |
+| `totalMinted` | Returns the total number of tokens minted ever. |
+| `tokenURI` | Returns the token metadata of an NFT. |
+| `supportsInterface` | Checks if the contract implements an interface with the given interface ID. |
+| `getSupportedCallbackFunctions` | Returns the supported callback functions. |
+| `setContractURI` | Sets the contract metadata URI. Callable only by the contract admin. |
+| `mint` | Mints tokens to a specified address, calling the beforeMint hook. |
+| `burn` | Burns a specified token, calling the beforeBurn hook if it exists. |
+| `transferFrom` | Transfers ownership of an NFT, calling the beforeTransfer hook if it exists.|
+| `approve` | Approves an address to transfer a specific NFT, calling the beforeApprove hook if it exists. |
+| `setApprovalForAll` | Approves or revokes approval from an operator to transfer or approve for all of the caller's NFTs. |
+
diff --git a/src/app/contracts/build/base-contracts/erc-721/signature-mint/page.mdx b/src/app/contracts/modular-contracts/core-contracts/erc-721/signature-mint/page.mdx
similarity index 100%
rename from src/app/contracts/build/base-contracts/erc-721/signature-mint/page.mdx
rename to src/app/contracts/modular-contracts/core-contracts/erc-721/signature-mint/page.mdx
diff --git a/src/app/contracts/build/base-contracts/page.mdx b/src/app/contracts/modular-contracts/core-contracts/page.mdx
similarity index 100%
rename from src/app/contracts/build/base-contracts/page.mdx
rename to src/app/contracts/modular-contracts/core-contracts/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-1155/ERC1155/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-1155/ERC1155/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-1155/ERC1155BatchMintable/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155BatchMintable/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-1155/ERC1155BatchMintable/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155BatchMintable/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-1155/ERC1155Burnable/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155Burnable/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-1155/ERC1155Burnable/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155Burnable/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-1155/ERC1155ClaimConditions/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155ClaimConditions/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-1155/ERC1155ClaimConditions/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155ClaimConditions/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-1155/ERC1155ClaimCustom/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155ClaimCustom/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-1155/ERC1155ClaimCustom/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155ClaimCustom/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-1155/ERC1155ClaimPhases/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155ClaimPhases/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-1155/ERC1155ClaimPhases/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155ClaimPhases/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-1155/ERC1155Claimable/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155Claimable/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-1155/ERC1155Claimable/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155Claimable/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-1155/ERC1155Drop/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155Drop/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-1155/ERC1155Drop/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155Drop/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-1155/ERC1155DropSinglePhase/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155DropSinglePhase/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-1155/ERC1155DropSinglePhase/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155DropSinglePhase/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-1155/ERC1155Enumerable/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155Enumerable/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-1155/ERC1155Enumerable/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155Enumerable/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-1155/ERC1155Mintable/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155Mintable/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-1155/ERC1155Mintable/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155Mintable/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-1155/ERC1155Revealable/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155Revealable/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-1155/ERC1155Revealable/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155Revealable/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-1155/ERC1155SignatureMint/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155SignatureMint/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-1155/ERC1155SignatureMint/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155SignatureMint/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-1155/ERC1155Staking/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155Staking/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-1155/ERC1155Staking/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155Staking/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-1155/ERC1155Supply/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155Supply/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-1155/ERC1155Supply/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-1155/ERC1155Supply/page.mdx
diff --git a/src/app/contracts/modular-contracts/extension-contracts/erc-1155/metadata/batchMetadataERC1155/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/metadata/batchMetadataERC1155/page.mdx
new file mode 100644
index 00000000..047924ce
--- /dev/null
+++ b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/metadata/batchMetadataERC1155/page.mdx
@@ -0,0 +1,44 @@
+
+import { createMetadata } from "@doc";
+
+export const metadata = createMetadata({
+ title: "thirdweb Modular Contracts",
+ description:
+ "Modular Contract provides a framework to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions.",
+ image: {
+ title: "thirdweb Modular Contracts",
+ icon: "solidity",
+ },
+});
+
+# Batch Metadata ERC-1155
+
+## Description
+
+The `BatchMetadataERC1155` contract is an extension that provides batch metadata functionality for ERC-1155 tokens. It inherits from `BatchMetadataERC721` to leverage the batch metadata capabilities and adapt them for ERC-1155 tokens, allowing for efficient management of metadata across ranges of token IDs.
+
+## Callback Functions
+
+| Function | Description |
+|------------|----------------------------------------------------------------------------|
+| `onTokenURI` | Callback function to retrieve the metadata URI for a given tokenId. |
+
+## Fallback Functions
+
+| Function | Description |
+|-------------------------|-----------------------------------------------------------------------------------------|
+| `getAllMetadataBatches` | Returns all metadata batches for a token. Each batch contains a range of token IDs and their associated base URI. |
+| `uploadMetadata` | Uploads metadata for a range of token IDs. Emits a `NewMetadataBatch` event and a `BatchMetadataUpdate` event. |
+
+## Required Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-1155` | `0xd9b67a26`|
+
+## Supported Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-4906` | `0x49064906`|
+
diff --git a/src/app/contracts/modular-contracts/extension-contracts/erc-1155/metadata/openEditionMetadataERC1155/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/metadata/openEditionMetadataERC1155/page.mdx
new file mode 100644
index 00000000..6a652468
--- /dev/null
+++ b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/metadata/openEditionMetadataERC1155/page.mdx
@@ -0,0 +1,43 @@
+
+import { createMetadata } from "@doc";
+
+export const metadata = createMetadata({
+ title: "thirdweb Modular Contracts",
+ description:
+ "Modular Contract provides a framework to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions.",
+ image: {
+ title: "thirdweb Modular Contracts",
+ icon: "solidity",
+ },
+});
+
+# Open Edition Metadata ERC-1155
+
+## Description
+
+The `OpenEditionMetadataERC1155` contract is an extension that provides open edition metadata functionality for ERC-1155 tokens. It inherits from `OpenEditionMetadataERC721` to leverage shared metadata capabilities, allowing for setting and retrieving a common metadata URI for all tokens within the contract.
+
+## Callback Functions
+
+| Function | Description |
+|---------------|----------------------------------------------------------------------------|
+| `onTokenURI` | Callback function for retrieving the shared metadata URI for a token ID. |
+
+## Fallback Functions
+
+| Function | Description |
+|-------------------------|-------------------------------------------------------------------------|
+| `setSharedMetadata` | Sets the shared metadata URI for all tokens in the contract. Requires minter role. |
+
+## Required Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-1155` | `0xd9b67a26`|
+
+## Supported Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-4906` | `0x49064906`|
+
diff --git a/src/app/contracts/modular-contracts/extension-contracts/erc-1155/metadata/simpleMetadataERC1155/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/metadata/simpleMetadataERC1155/page.mdx
new file mode 100644
index 00000000..f7c25306
--- /dev/null
+++ b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/metadata/simpleMetadataERC1155/page.mdx
@@ -0,0 +1,43 @@
+
+import { createMetadata } from "@doc";
+
+export const metadata = createMetadata({
+ title: "thirdweb Modular Contracts",
+ description:
+ "Modular Contract provides a framework to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions.",
+ image: {
+ title: "thirdweb Modular Contracts",
+ icon: "solidity",
+ },
+});
+
+# Simple Metadata ERC-1155
+
+## Description
+
+The `SimpleMetadataERC1155` contract is an extension that provides simple metadata functionality for ERC-1155 tokens. It inherits from `SimpleMetadataERC721` to leverage the metadata management capabilities and adapt them for ERC-1155 tokens, allowing for easy setting and retrieval of token URIs.
+
+## Callback Functions
+
+| Function | Description |
+|---------------|----------------------------------------------------------------------------|
+| `onTokenURI` | Callback function for retrieving the metadata URI for a given token ID. |
+
+## Fallback Functions
+
+| Function | Description |
+|------------------|-----------------------------------------------------------------------------------------|
+| `setTokenURI` | Sets the token URI for a given token. Requires minter role. |
+
+## Required Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-1155` | `0xd9b67a26`|
+
+## Supported Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-4906` | `0x49064906`|
+
diff --git a/src/app/contracts/modular-contracts/extension-contracts/erc-1155/minting/claimableERC1155/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/minting/claimableERC1155/page.mdx
new file mode 100644
index 00000000..c2f75ec5
--- /dev/null
+++ b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/minting/claimableERC1155/page.mdx
@@ -0,0 +1,45 @@
+
+import { createMetadata } from "@doc";
+
+export const metadata = createMetadata({
+ title: "thirdweb Modular Contracts",
+ description:
+ "Modular Contract provides a framework to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions.",
+ image: {
+ title: "thirdweb Modular Contracts",
+ icon: "solidity",
+ },
+});
+
+# Claimable ERC-1155
+
+## Description
+
+The `ClaimableERC1155` contract is an extension that provides claim-based minting functionality for ERC-1155 tokens. It includes features for setting claim conditions, validating claims via Merkle proofs, and handling signature-based claim requests. This contract ensures secure and controlled minting processes with the possibility of integrating primary sales.
+
+## Callback Functions
+
+| Function | Description |
+|----------------------|----------------------------------------------------------------------------|
+| `beforeMintERC1155` | Callback function for the `ERC1155Core.mint` function. Executes actions before minting tokens, including validation of claim conditions and signature-based requests. |
+
+## Fallback Functions
+
+| Function | Description |
+|---------------------------------------|-----------------------------------------------------------------------------------------|
+| `getSaleConfig` | Returns the sale configuration for a token, including the primary sale recipient. |
+| `setSaleConfig` | Sets the sale configuration for a token, including the primary sale recipient. Requires manager role. |
+| `getClaimConditionByTokenId` | Returns the claim condition for a specific token ID. |
+| `setClaimConditionByTokenId` | Sets the claim condition for a specific token ID. Requires minter role. |
+| `eip712Domain` | Returns the EIP-712 domain details. |
+
+## Required Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-1155` | `0xd9b67a26`|
+
+## Supported Interfaces
+
+(No supported interfaces for this contract)
+
diff --git a/src/app/contracts/modular-contracts/extension-contracts/erc-1155/minting/mintableERC1155/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/minting/mintableERC1155/page.mdx
new file mode 100644
index 00000000..e9eea122
--- /dev/null
+++ b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/minting/mintableERC1155/page.mdx
@@ -0,0 +1,47 @@
+
+import { createMetadata } from "@doc";
+
+export const metadata = createMetadata({
+ title: "thirdweb Modular Contracts",
+ description:
+ "Modular Contract provides a framework to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions.",
+ image: {
+ title: "thirdweb Modular Contracts",
+ icon: "solidity",
+ },
+});
+
+# Mintable ERC-1155
+
+## Description
+
+The `MintableERC1155` contract is an extension that provides minting functionality for ERC-1155 tokens. It includes features for requesting mints via signatures, setting and getting sales configurations, and managing metadata URIs. This contract ensures secure and controlled minting processes with the possibility of integrating primary sales.
+
+## Callback Functions
+
+| Function | Description |
+|----------------------|----------------------------------------------------------------------------|
+| `beforeMintERC1155` | Callback function for the ERC1155Core.mint function. Executes actions before minting tokens, including verification. |
+| `onTokenURI` | Callback function for the ERC1155Core.tokenURI function. Returns the metadata URI for a given tokenId. |
+
+## Fallback Functions
+
+| Function | Description |
+|-------------------------|-----------------------------------------------------------------------------------------|
+| `getSaleConfig` | Returns the sale configuration for a token, including the primary sale recipient. |
+| `setSaleConfig` | Sets the sale configuration for a token, including the primary sale recipient. Requires manager role. |
+| `setTokenURI` | Sets the token URI for a given token. Emits MintableTokenURIUpdated and MetadataUpdate events. Requires minter role. |
+| `eip712Domain` | Returns the EIP-712 domain details. |
+
+## Required Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-1155` | `0xd9b67a26`|
+
+## Supported Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-4906` | `0x49064906`|
+
diff --git a/src/app/contracts/modular-contracts/extension-contracts/erc-1155/misc/royaltyERC1155/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/misc/royaltyERC1155/page.mdx
new file mode 100644
index 00000000..48ffc3cd
--- /dev/null
+++ b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/misc/royaltyERC1155/page.mdx
@@ -0,0 +1,48 @@
+
+import { createMetadata } from "@doc";
+
+export const metadata = createMetadata({
+ title: "thirdweb Modular Contracts",
+ description:
+ "Modular Contract provides a framework to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions.",
+ image: {
+ title: "thirdweb Modular Contracts",
+ icon: "solidity",
+ },
+});
+
+# Royalty ERC-1155
+
+## Description
+
+The `RoyaltyERC1155` contract is an extension that provides royalty functionality for ERC-1155 tokens. It allows setting default royalty information as well as specific royalty details for individual tokens, similar to the functionality provided by `RoyaltyERC721`. This enables creators to receive a percentage of secondary sales as a royalty.
+
+## Callback Functions
+
+| Function | Description |
+|------------|----------------------------------------------------------------------------|
+| `onInstall` | Called by the Core during the installation of the Extension. Sets default royalty information. |
+| `onUninstall` | Called by the Core during the uninstallation of the Extension. |
+
+## Fallback Functions
+
+| Function | Description |
+|-------------------------|-----------------------------------------------------------------------------------------|
+| `royaltyInfo` | Returns the royalty recipient and amount for a given sale based on the token ID and sale price. |
+| `getDefaultRoyaltyInfo` | Returns the default royalty information for the tokens, including the recipient and basis points (bps). |
+| `getRoyaltyInfoForToken`| Returns the overridden royalty information for a specific token ID, including the recipient and basis points (bps). |
+| `setDefaultRoyaltyInfo` | Sets the default royalty information for the tokens. Requires manager role. |
+| `setRoyaltyInfoForToken`| Sets specific royalty information for a given token ID. Requires manager role. |
+
+## Required Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-1155` | `0xd9b67a26`|
+
+## Supported Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `IERC2981` | `0x2a55205a`|
+
diff --git a/src/app/contracts/modular-contracts/extension-contracts/erc-1155/misc/transferableERC1155/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/misc/transferableERC1155/page.mdx
new file mode 100644
index 00000000..a62cae75
--- /dev/null
+++ b/src/app/contracts/modular-contracts/extension-contracts/erc-1155/misc/transferableERC1155/page.mdx
@@ -0,0 +1,45 @@
+
+import { createMetadata } from "@doc";
+
+export const metadata = createMetadata({
+ title: "thirdweb Modular Contracts",
+ description:
+ "Modular Contract provides a framework to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions.",
+ image: {
+ title: "thirdweb Modular Contracts",
+ icon: "solidity",
+ },
+});
+
+# Transferable ERC-1155
+
+## Description
+
+The `TransferableERC1155` contract is an extension that provides transfer control functionality for ERC-1155 tokens. This contract allows enabling or disabling token transfers globally or for specific addresses, adding an extra layer of control over how tokens can be moved.
+
+## Callback Functions
+
+| Function | Description |
+|----------------------------|----------------------------------------------------------------------------------------------------|
+| `beforeTransferERC1155` | Callback function for `ERC1155.safeTransferFrom`. Ensures that transfers are enabled before allowing them. |
+| `beforeBatchTransferERC1155`| Callback function for `ERC1155.safeBatchTransferFrom`. Ensures that batch transfers are enabled before allowing them. |
+
+## Fallback Functions
+
+| Function | Description |
+|-------------------------|-----------------------------------------------------------------------------------------|
+| `isTransferEnabled` | Returns whether transfers are enabled globally for the token. |
+| `isTransferEnabledFor` | Returns whether transfers are enabled for a specific address. |
+| `setTransferable` | Sets the transferability status for the token globally. Requires manager role. |
+| `setTransferableFor` | Sets the transferability status for a specific address. Requires manager role. |
+
+## Required Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-1155` | `0xd9b67a26`|
+
+## Supported Interfaces
+
+(No supported interfaces for this contract)
+
diff --git a/src/app/contracts/build/extensions/erc-20/ERC20/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-20/ERC20/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-20/ERC20/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-20/ERC20/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-20/ERC20BatchMintable/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-20/ERC20BatchMintable/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-20/ERC20BatchMintable/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-20/ERC20BatchMintable/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-20/ERC20Burnable/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-20/ERC20Burnable/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-20/ERC20Burnable/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-20/ERC20Burnable/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-20/ERC20ClaimConditions/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-20/ERC20ClaimConditions/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-20/ERC20ClaimConditions/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-20/ERC20ClaimConditions/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-20/ERC20Mintable/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-20/ERC20Mintable/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-20/ERC20Mintable/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-20/ERC20Mintable/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-20/ERC20Permit/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-20/ERC20Permit/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-20/ERC20Permit/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-20/ERC20Permit/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-20/ERC20SignatureMint/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-20/ERC20SignatureMint/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-20/ERC20SignatureMint/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-20/ERC20SignatureMint/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-20/ERC20Staking/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-20/ERC20Staking/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-20/ERC20Staking/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-20/ERC20Staking/page.mdx
diff --git a/src/app/contracts/modular-contracts/extension-contracts/erc-20/minting/claimableERC20/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-20/minting/claimableERC20/page.mdx
new file mode 100644
index 00000000..8c59cad3
--- /dev/null
+++ b/src/app/contracts/modular-contracts/extension-contracts/erc-20/minting/claimableERC20/page.mdx
@@ -0,0 +1,45 @@
+
+import { createMetadata } from "@doc";
+
+export const metadata = createMetadata({
+ title: "thirdweb Modular Contracts",
+ description:
+ "Modular Contract provides a framework to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions.",
+ image: {
+ title: "thirdweb Modular Contracts",
+ icon: "solidity",
+ },
+});
+
+# Claimable ERC-20
+
+## Description
+
+The `ClaimableERC20` contract is an extension that provides claim-based minting functionality for ERC-20 tokens. It includes features for setting claim conditions, validating claims via Merkle proofs, and handling signature-based claim requests. This contract ensures secure and controlled minting processes with the possibility of integrating primary sales.
+
+## Callback Functions
+
+| Function | Description |
+|----------------------|----------------------------------------------------------------------------|
+| `beforeMintERC20` | Callback function for the `ERC20Core.mint` function. Executes actions before minting tokens, including validation of claim conditions and signature-based requests. |
+
+## Fallback Functions
+
+| Function | Description |
+|----------------------------------|-----------------------------------------------------------------------------------------|
+| `getSaleConfig` | Returns the sale configuration for a token, including the primary sale recipient. |
+| `setSaleConfig` | Sets the sale configuration for a token, including the primary sale recipient. Requires manager role. |
+| `getClaimCondition` | Returns the claim condition for a token. |
+| `setClaimCondition` | Sets the claim condition for a token. Requires minter role. |
+| `eip712Domain` | Returns the EIP-712 domain details. |
+
+## Required Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-20` | `0x36372b07`|
+
+## Supported Interfaces
+
+(No supported interfaces for this contract)
+
diff --git a/src/app/contracts/modular-contracts/extension-contracts/erc-20/minting/mintableERC20/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-20/minting/mintableERC20/page.mdx
new file mode 100644
index 00000000..5a2b81bf
--- /dev/null
+++ b/src/app/contracts/modular-contracts/extension-contracts/erc-20/minting/mintableERC20/page.mdx
@@ -0,0 +1,43 @@
+
+import { createMetadata } from "@doc";
+
+export const metadata = createMetadata({
+ title: "thirdweb Modular Contracts",
+ description:
+ "Modular Contract provides a framework to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions.",
+ image: {
+ title: "thirdweb Modular Contracts",
+ icon: "solidity",
+ },
+});
+
+# Mintable ERC-20
+
+## Description
+
+The `MintableERC20` contract is an extension that provides minting functionality for ERC-20 tokens. It includes features for requesting mints via signatures, setting and getting sales configurations. This contract ensures secure and controlled minting processes with the possibility of integrating primary sales.
+
+## Callback Functions
+
+| Function | Description |
+|----------------------|----------------------------------------------------------------------------|
+| `beforeMintERC20` | Callback function for the `ERC20Core.mint` function. Executes actions before minting tokens, including verification. |
+
+## Fallback Functions
+
+| Function | Description |
+|-------------------------|-----------------------------------------------------------------------------------------|
+| `getSaleConfig` | Returns the sale configuration for a token, including the primary sale recipient. |
+| `setSaleConfig` | Sets the sale configuration for a token, including the primary sale recipient. Requires manager role. |
+| `eip712Domain` | Returns the EIP-712 domain details. |
+
+## Required Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-20` | `0x36372b07`|
+
+## Supported Interfaces
+
+(No supported interfaces for this contract)
+
diff --git a/src/app/contracts/modular-contracts/extension-contracts/erc-20/misc/transferableERC20/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-20/misc/transferableERC20/page.mdx
new file mode 100644
index 00000000..173e896f
--- /dev/null
+++ b/src/app/contracts/modular-contracts/extension-contracts/erc-20/misc/transferableERC20/page.mdx
@@ -0,0 +1,42 @@
+
+import { createMetadata } from "@doc";
+
+export const metadata = createMetadata({
+ title: "thirdweb Modular Contracts",
+ description:
+ "Modular Contract provides a framework to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions.",
+ image: {
+ title: "thirdweb Modular Contracts",
+ icon: "solidity",
+ },
+});
+
+# Transferable ERC-20
+
+## Description
+
+The `TransferableERC20` contract is an extension that provides transfer control functionality for ERC-20 tokens. This contract allows enabling or disabling token transfers globally or for specific addresses, adding an extra layer of control over how tokens can be moved.
+
+## Callback Functions
+
+| Function | Description |
+|----------------------|----------------------------------------------------------------------------|
+| `beforeTransferERC20`| Callback function for `ERC20.transfer`. Ensures that transfers are enabled before allowing them. |
+
+## Fallback Functions
+
+| Function | Description |
+|-------------------------|-----------------------------------------------------------------------------------------|
+| `isTransferEnabled` | Returns whether transfers are enabled globally for the token. |
+| `isTransferEnabledFor` | Returns whether transfers are enabled for a specific address. |
+| `setTransferable` | Sets the transferability status for the token globally. Requires manager role. |
+| `setTransferableFor` | Sets the transferability status for a specific address. Requires manager role. |
+
+## Required Interfaces
+
+(No required interfaces for this contract)
+
+## Supported Interfaces
+
+(No supported interfaces for this contract)
+
diff --git a/src/app/contracts/build/extensions/erc-4337/AccountExtension/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-4337/AccountExtension/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-4337/AccountExtension/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-4337/AccountExtension/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-4337/SmartWallet/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-4337/SmartWallet/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-4337/SmartWallet/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-4337/SmartWallet/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-4337/SmartWalletFactory/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-4337/SmartWalletFactory/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-4337/SmartWalletFactory/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-4337/SmartWalletFactory/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-721/ERC721/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-721/ERC721/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-721/ERC721BatchMintable/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721BatchMintable/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-721/ERC721BatchMintable/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721BatchMintable/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-721/ERC721Burnable/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721Burnable/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-721/ERC721Burnable/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721Burnable/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-721/ERC721ClaimConditions/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721ClaimConditions/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-721/ERC721ClaimConditions/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721ClaimConditions/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-721/ERC721ClaimCustom/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721ClaimCustom/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-721/ERC721ClaimCustom/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721ClaimCustom/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-721/ERC721ClaimPhases/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721ClaimPhases/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-721/ERC721ClaimPhases/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721ClaimPhases/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-721/ERC721Claimable/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721Claimable/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-721/ERC721Claimable/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721Claimable/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-721/ERC721Enumerable/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721Enumerable/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-721/ERC721Enumerable/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721Enumerable/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-721/ERC721Mintable/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721Mintable/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-721/ERC721Mintable/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721Mintable/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-721/ERC721Revealable/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721Revealable/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-721/ERC721Revealable/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721Revealable/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-721/ERC721SignatureMint/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721SignatureMint/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-721/ERC721SignatureMint/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721SignatureMint/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-721/ERC721Staking/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721Staking/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-721/ERC721Staking/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721Staking/page.mdx
diff --git a/src/app/contracts/build/extensions/erc-721/ERC721Supply/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721Supply/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/erc-721/ERC721Supply/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/erc-721/ERC721Supply/page.mdx
diff --git a/src/app/contracts/modular-contracts/extension-contracts/erc-721/metadata/batchMetadataERC721/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-721/metadata/batchMetadataERC721/page.mdx
new file mode 100644
index 00000000..0bda6b4b
--- /dev/null
+++ b/src/app/contracts/modular-contracts/extension-contracts/erc-721/metadata/batchMetadataERC721/page.mdx
@@ -0,0 +1,44 @@
+
+import { createMetadata } from "@doc";
+
+export const metadata = createMetadata({
+ title: "thirdweb Modular Contracts",
+ description:
+ "Modular Contract provides a framework to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions.",
+ image: {
+ title: "thirdweb Modular Contracts",
+ icon: "solidity",
+ },
+});
+
+# Batch Metadata ERC-721
+
+## Description
+
+The `BatchMetadataERC721` contract is an extension that provides batch metadata functionality for ERC-721 tokens. It allows for uploading metadata for ranges of token IDs, and fetching metadata based on those ranges. This improves efficiency and reduces the complexity of managing individual token metadata.
+
+## Callback Functions
+
+| Function | Description |
+|------------|----------------------------------------------------------------------------|
+| `onTokenURI` | Callback function for `ERC721Metadata.tokenURI`. Returns the metadata URI for a given tokenId. |
+
+## Fallback Functions
+
+| Function | Description |
+|-------------------------|-----------------------------------------------------------------------------------------|
+| `getAllMetadataBatches` | Returns all metadata batches for a token. Each batch contains a range of token IDs and their associated base URI. |
+| `uploadMetadata` | Uploads metadata for a range of token IDs. Emits a `NewMetadataBatch` event and a `BatchMetadataUpdate` event. |
+
+## Required Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-721` | `0x80ac58cd`|
+
+## Supported Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-4906` | `0x49064906`|
+
diff --git a/src/app/contracts/modular-contracts/extension-contracts/erc-721/metadata/delayedRevealBatchMetadataERC721/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-721/metadata/delayedRevealBatchMetadataERC721/page.mdx
new file mode 100644
index 00000000..a7758d79
--- /dev/null
+++ b/src/app/contracts/modular-contracts/extension-contracts/erc-721/metadata/delayedRevealBatchMetadataERC721/page.mdx
@@ -0,0 +1,45 @@
+
+import { createMetadata } from "@doc";
+
+export const metadata = createMetadata({
+ title: "thirdweb Modular Contracts",
+ description:
+ "Modular Contract provides a framework to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions.",
+ image: {
+ title: "thirdweb Modular Contracts",
+ icon: "solidity",
+ },
+});
+
+# Delayed Reveal Batch Metadata ERC-721
+
+## Description
+
+The `DelayedRevealBatchMetadataERC721` contract is an extension that provides functionality for delayed reveal of metadata for ERC-721 tokens. It enables the uploading of metadata for ranges of token IDs with optional encryption, allowing tokens to be revealed at a later time with a decryption key. This is useful for scenarios where the token metadata needs to be kept secret until a specified time.
+
+## Callback Functions
+
+| Function | Description |
+|------------|----------------------------------------------------------------------------|
+| `onTokenURI` | Callback function for `ERC721Metadata.tokenURI`. Returns the metadata URI for a given tokenId. If the metadata is encrypted, it returns a placeholder URI. |
+
+## Fallback Functions
+
+| Function | Description |
+|-------------------------|-----------------------------------------------------------------------------------------|
+| `getAllMetadataBatches` | Returns all metadata batches for a token. Each batch contains a range of token IDs, their associated base URI, and any encrypted data. |
+| `uploadMetadata` | Uploads metadata for a range of token IDs. Emits a `NewMetadataBatch` event and a `BatchMetadataUpdate` event. Optionally includes encrypted data and a provenance hash. |
+| `reveal` | Reveals the URI for a range of 'delayed-reveal' tokens using a provided decryption key. Emits a `TokenURIRevealed` event and a `BatchMetadataUpdate` event. |
+
+## Required Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-721` | `0x80ac58cd`|
+
+## Supported Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-4906` | `0x49064906`|
+
diff --git a/src/app/contracts/modular-contracts/extension-contracts/erc-721/metadata/openEditionMetadataERC721/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-721/metadata/openEditionMetadataERC721/page.mdx
new file mode 100644
index 00000000..f723ef20
--- /dev/null
+++ b/src/app/contracts/modular-contracts/extension-contracts/erc-721/metadata/openEditionMetadataERC721/page.mdx
@@ -0,0 +1,43 @@
+
+import { createMetadata } from "@doc";
+
+export const metadata = createMetadata({
+ title: "thirdweb Modular Contracts",
+ description:
+ "Modular Contract provides a framework to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions.",
+ image: {
+ title: "thirdweb Modular Contracts",
+ icon: "solidity",
+ },
+});
+
+# Open Edition Metadata ERC-721
+
+## Description
+
+The `OpenEditionMetadataERC721` contract is an extension that provides shared metadata functionality for ERC-721 tokens in an open edition format. It allows for setting and retrieving a common metadata URI for all tokens within the contract, making it easier to manage metadata for large collections of tokens that share the same metadata.
+
+## Callback Functions
+
+| Function | Description |
+|---------------|----------------------------------------------------------------------------|
+| `onTokenURI` | Callback function for retrieving the shared metadata URI for a given token ID. |
+
+## Fallback Functions
+
+| Function | Description |
+|-------------------------|-------------------------------------------------------------------------|
+| `setSharedMetadata` | Sets the shared metadata URI for all tokens in the contract. Requires minter role. |
+
+## Required Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-721` | `0x80ac58cd`|
+
+## Supported Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-4906` | `0x49064906`|
+
diff --git a/src/app/contracts/modular-contracts/extension-contracts/erc-721/metadata/simpleMetadataERC721/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-721/metadata/simpleMetadataERC721/page.mdx
new file mode 100644
index 00000000..e589cbc7
--- /dev/null
+++ b/src/app/contracts/modular-contracts/extension-contracts/erc-721/metadata/simpleMetadataERC721/page.mdx
@@ -0,0 +1,43 @@
+
+import { createMetadata } from "@doc";
+
+export const metadata = createMetadata({
+ title: "thirdweb Modular Contracts",
+ description:
+ "Modular Contract provides a framework to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions.",
+ image: {
+ title: "thirdweb Modular Contracts",
+ icon: "solidity",
+ },
+});
+
+# Simple Metadata ERC-721
+
+## Description
+
+The `SimpleMetadataERC721` contract is an extension that provides simple metadata functionality for ERC-721 tokens. It allows for easy setting and retrieval of token URIs, making it straightforward to manage metadata for individual tokens.
+
+## Callback Functions
+
+| Function | Description |
+|---------------|----------------------------------------------------------------------------|
+| `onTokenURI` | Callback function for retrieving the metadata URI for a given token ID. |
+
+## Fallback Functions
+
+| Function | Description |
+|------------------|-----------------------------------------------------------------------------------------|
+| `setTokenURI` | Sets the token URI for a given token. Requires minter role. |
+
+## Required Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-721` | `0x80ac58cd`|
+
+## Supported Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-4906` | `0x49064906`|
+
diff --git a/src/app/contracts/modular-contracts/extension-contracts/erc-721/minting/claimableERC721/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-721/minting/claimableERC721/page.mdx
new file mode 100644
index 00000000..1e9f1ed8
--- /dev/null
+++ b/src/app/contracts/modular-contracts/extension-contracts/erc-721/minting/claimableERC721/page.mdx
@@ -0,0 +1,45 @@
+
+import { createMetadata } from "@doc";
+
+export const metadata = createMetadata({
+ title: "thirdweb Modular Contracts",
+ description:
+ "Modular Contract provides a framework to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions.",
+ image: {
+ title: "thirdweb Modular Contracts",
+ icon: "solidity",
+ },
+});
+
+# Claimable ERC-721
+
+## Description
+
+The `ClaimableERC721` contract is an extension that provides claim-based minting functionality for ERC-721 tokens. It includes features for setting claim conditions, validating claims via Merkle proofs, and handling signature-based claim requests. This contract ensures secure and controlled minting processes with the possibility of integrating primary sales.
+
+## Callback Functions
+
+| Function | Description |
+|----------------------|----------------------------------------------------------------------------|
+| `beforeMintERC721` | Callback function for the `ERC721Core.mint` function. Executes actions before minting tokens, including validation of claim conditions and signature-based requests. |
+
+## Fallback Functions
+
+| Function | Description |
+|----------------------------------|-----------------------------------------------------------------------------------------|
+| `getSaleConfig` | Returns the sale configuration for a token, including the primary sale recipient. |
+| `setSaleConfig` | Sets the sale configuration for a token, including the primary sale recipient. Requires manager role. |
+| `getClaimCondition` | Returns the claim condition for a token. |
+| `setClaimCondition` | Sets the claim condition for a token. Requires minter role. |
+| `eip712Domain` | Returns the EIP-712 domain details. |
+
+## Required Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-721` | `0x80ac58cd`|
+
+## Supported Interfaces
+
+(No supported interfaces for this contract)
+
diff --git a/src/app/contracts/modular-contracts/extension-contracts/erc-721/minting/mintableERC721/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-721/minting/mintableERC721/page.mdx
new file mode 100644
index 00000000..0f7bb666
--- /dev/null
+++ b/src/app/contracts/modular-contracts/extension-contracts/erc-721/minting/mintableERC721/page.mdx
@@ -0,0 +1,47 @@
+
+import { createMetadata } from "@doc";
+
+export const metadata = createMetadata({
+ title: "thirdweb Modular Contracts",
+ description:
+ "Modular Contract provides a framework to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions.",
+ image: {
+ title: "thirdweb Modular Contracts",
+ icon: "solidity",
+ },
+});
+
+# Mintable ERC-721
+
+## Description
+
+The `MintableERC721` contract is an extension that provides minting functionality for ERC-721 tokens. It includes features for requesting mints via signatures, setting and getting sales configurations, and managing metadata URIs. This contract ensures secure and controlled minting processes with the possibility of integrating primary sales.
+
+## Callback Functions
+
+| Function | Description |
+|----------------------|----------------------------------------------------------------------------|
+| `beforeMintERC721` | Callback function for the `ERC721Core.mint` function. Executes actions before minting tokens, including verification. |
+| `onTokenURI` | Callback function for the `ERC721Core.tokenURI` function. Returns the metadata URI for a given tokenId. |
+
+## Fallback Functions
+
+| Function | Description |
+|-------------------------|-----------------------------------------------------------------------------------------|
+| `getSaleConfig` | Returns the sale configuration for a token, including the primary sale recipient. |
+| `setSaleConfig` | Sets the sale configuration for a token, including the primary sale recipient. Requires manager role. |
+| `getAllMetadataBatches` | Returns all metadata batches for a token, including the start and end token IDs and their associated base URI. |
+| `eip712Domain` | Returns the EIP-712 domain details. |
+
+## Required Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-721` | `0x80ac58cd`|
+
+## Supported Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-4906` | `0x49064906`|
+
diff --git a/src/app/contracts/modular-contracts/extension-contracts/erc-721/misc/royaltyERC721/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-721/misc/royaltyERC721/page.mdx
new file mode 100644
index 00000000..3084e2fa
--- /dev/null
+++ b/src/app/contracts/modular-contracts/extension-contracts/erc-721/misc/royaltyERC721/page.mdx
@@ -0,0 +1,48 @@
+
+import { createMetadata } from "@doc";
+
+export const metadata = createMetadata({
+ title: "thirdweb Modular Contracts",
+ description:
+ "Modular Contract provides a framework to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions.",
+ image: {
+ title: "thirdweb Modular Contracts",
+ icon: "solidity",
+ },
+});
+
+# Royalty ERC-721
+
+## Description
+
+The `RoyaltyERC721` contract is an extension that provides royalty functionality for ERC-721 tokens. It allows setting default royalty information as well as specific royalty details for individual tokens. This enables creators to receive a percentage of secondary sales as a royalty.
+
+## Callback Functions
+
+| Function | Description |
+|------------|----------------------------------------------------------------------------|
+| `onInstall` | Called by the Core during the installation of the Extension. Sets default royalty information. |
+| `onUninstall` | Called by the Core during the uninstallation of the Extension. |
+
+## Fallback Functions
+
+| Function | Description |
+|-------------------------|-----------------------------------------------------------------------------------------|
+| `royaltyInfo` | Returns the royalty recipient and amount for a given sale based on the token ID and sale price. |
+| `getDefaultRoyaltyInfo` | Returns the default royalty information for the tokens, including the recipient and basis points (bps). |
+| `getRoyaltyInfoForToken`| Returns the overridden royalty information for a specific token ID, including the recipient and basis points (bps). |
+| `setDefaultRoyaltyInfo` | Sets the default royalty information for the tokens. Requires manager role. |
+| `setRoyaltyInfoForToken`| Sets specific royalty information for a given token ID. Requires manager role. |
+
+## Required Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-721` | `0x80ac58cd`|
+
+## Supported Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `IERC2981` | `0x2a55205a`|
+
diff --git a/src/app/contracts/modular-contracts/extension-contracts/erc-721/misc/transferableERC721/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/erc-721/misc/transferableERC721/page.mdx
new file mode 100644
index 00000000..7ccfff44
--- /dev/null
+++ b/src/app/contracts/modular-contracts/extension-contracts/erc-721/misc/transferableERC721/page.mdx
@@ -0,0 +1,44 @@
+
+import { createMetadata } from "@doc";
+
+export const metadata = createMetadata({
+ title: "thirdweb Modular Contracts",
+ description:
+ "Modular Contract provides a framework to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions.",
+ image: {
+ title: "thirdweb Modular Contracts",
+ icon: "solidity",
+ },
+});
+
+# Transferable ERC-721
+
+## Description
+
+The `TransferableERC721` contract is an extension that provides transfer control functionality for ERC-721 tokens. This contract allows enabling or disabling token transfers globally or for specific addresses, adding an extra layer of control over how tokens can be moved.
+
+## Callback Functions
+
+| Function | Description |
+|----------------------|----------------------------------------------------------------------------|
+| `beforeTransferERC721`| Callback function for `ERC721.transferFrom`/`safeTransferFrom`. Ensures that transfers are enabled before allowing them. |
+
+## Fallback Functions
+
+| Function | Description |
+|-------------------------|-----------------------------------------------------------------------------------------|
+| `isTransferEnabled` | Returns whether transfers are enabled globally for the token. |
+| `isTransferEnabledFor` | Returns whether transfers are enabled for a specific address. |
+| `setTransferable` | Sets the transferability status for the token globally. Requires manager role. |
+| `setTransferableFor` | Sets the transferability status for a specific address. Requires manager role. |
+
+## Required Interfaces
+
+| Interface | ID |
+|------------|-------------|
+| `ERC-721` | `0x80ac58cd`|
+
+## Supported Interfaces
+
+(No supported interfaces for this contract)
+
diff --git a/src/app/contracts/build/extensions/general/BatchMintMetadata/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/general/BatchMintMetadata/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/general/BatchMintMetadata/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/general/BatchMintMetadata/page.mdx
diff --git a/src/app/contracts/build/extensions/general/ContractMetadata/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/general/ContractMetadata/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/general/ContractMetadata/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/general/ContractMetadata/page.mdx
diff --git a/src/app/contracts/build/extensions/general/DelayedReveal/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/general/DelayedReveal/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/general/DelayedReveal/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/general/DelayedReveal/page.mdx
diff --git a/src/app/contracts/build/extensions/general/Drop/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/general/Drop/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/general/Drop/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/general/Drop/page.mdx
diff --git a/src/app/contracts/build/extensions/general/DropSinglePhase/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/general/DropSinglePhase/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/general/DropSinglePhase/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/general/DropSinglePhase/page.mdx
diff --git a/src/app/contracts/build/extensions/general/LazyMint/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/general/LazyMint/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/general/LazyMint/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/general/LazyMint/page.mdx
diff --git a/src/app/contracts/build/extensions/general/Multicall/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/general/Multicall/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/general/Multicall/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/general/Multicall/page.mdx
diff --git a/src/app/contracts/build/extensions/general/Ownable/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/general/Ownable/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/general/Ownable/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/general/Ownable/page.mdx
diff --git a/src/app/contracts/build/extensions/general/Permissions/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/general/Permissions/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/general/Permissions/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/general/Permissions/page.mdx
diff --git a/src/app/contracts/build/extensions/general/PermissionsEnumerable/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/general/PermissionsEnumerable/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/general/PermissionsEnumerable/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/general/PermissionsEnumerable/page.mdx
diff --git a/src/app/contracts/build/extensions/general/PlatformFee/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/general/PlatformFee/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/general/PlatformFee/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/general/PlatformFee/page.mdx
diff --git a/src/app/contracts/build/extensions/general/PrimarySale/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/general/PrimarySale/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/general/PrimarySale/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/general/PrimarySale/page.mdx
diff --git a/src/app/contracts/build/extensions/general/Royalty/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/general/Royalty/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/general/Royalty/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/general/Royalty/page.mdx
diff --git a/src/app/contracts/build/extensions/page.mdx b/src/app/contracts/modular-contracts/extension-contracts/page.mdx
similarity index 100%
rename from src/app/contracts/build/extensions/page.mdx
rename to src/app/contracts/modular-contracts/extension-contracts/page.mdx
diff --git a/src/app/contracts/modular-contracts/get-started/assets/deploy-core-contract.png b/src/app/contracts/modular-contracts/get-started/assets/deploy-core-contract.png
new file mode 100644
index 00000000..6a481537
Binary files /dev/null and b/src/app/contracts/modular-contracts/get-started/assets/deploy-core-contract.png differ
diff --git a/src/app/contracts/modular-contracts/get-started/assets/deployed-core-contract.png b/src/app/contracts/modular-contracts/get-started/assets/deployed-core-contract.png
new file mode 100644
index 00000000..5c0fb523
Binary files /dev/null and b/src/app/contracts/modular-contracts/get-started/assets/deployed-core-contract.png differ
diff --git a/src/app/contracts/modular-contracts/get-started/assets/deploying.png b/src/app/contracts/modular-contracts/get-started/assets/deploying.png
new file mode 100644
index 00000000..69dfef88
Binary files /dev/null and b/src/app/contracts/modular-contracts/get-started/assets/deploying.png differ
diff --git a/src/app/contracts/modular-contracts/get-started/assets/install-extension.png b/src/app/contracts/modular-contracts/get-started/assets/install-extension.png
new file mode 100644
index 00000000..56025ab3
Binary files /dev/null and b/src/app/contracts/modular-contracts/get-started/assets/install-extension.png differ
diff --git a/src/app/contracts/modular-contracts/get-started/assets/installed-extension.png b/src/app/contracts/modular-contracts/get-started/assets/installed-extension.png
new file mode 100644
index 00000000..d55d8769
Binary files /dev/null and b/src/app/contracts/modular-contracts/get-started/assets/installed-extension.png differ
diff --git a/src/app/contracts/modular-contracts/get-started/assets/manage-tab-highlight.png b/src/app/contracts/modular-contracts/get-started/assets/manage-tab-highlight.png
new file mode 100644
index 00000000..1cc0b023
Binary files /dev/null and b/src/app/contracts/modular-contracts/get-started/assets/manage-tab-highlight.png differ
diff --git a/src/app/contracts/modular-contracts/get-started/assets/publish-extension-contract.png b/src/app/contracts/modular-contracts/get-started/assets/publish-extension-contract.png
new file mode 100644
index 00000000..7c67e29a
Binary files /dev/null and b/src/app/contracts/modular-contracts/get-started/assets/publish-extension-contract.png differ
diff --git a/src/app/contracts/modular-contracts/get-started/assets/select-network.png b/src/app/contracts/modular-contracts/get-started/assets/select-network.png
new file mode 100644
index 00000000..7a7a5bff
Binary files /dev/null and b/src/app/contracts/modular-contracts/get-started/assets/select-network.png differ
diff --git a/src/app/contracts/modular-contracts/get-started/page.mdx b/src/app/contracts/modular-contracts/get-started/page.mdx
new file mode 100644
index 00000000..b07a023c
--- /dev/null
+++ b/src/app/contracts/modular-contracts/get-started/page.mdx
@@ -0,0 +1,223 @@
+import { DocImage, createMetadata, FeatureCard } from "@doc";
+
+import deployCoreContract from './assets/deploy-core-contract.png';
+import deploying from './assets/deploying.png';
+import deployedCoreContract from './assets/deployed-core-contract.png';
+import publishExtensionContract from './assets/publish-extension-contract.png';
+import selectNetwork from './assets/select-network.png';
+import installExtension from './assets/install-extension.png';
+import installedExtension from './assets/installed-extension.png';
+import manageTabHighlight from './assets/manage-tab-highlight.png';
+
+export const metadata = createMetadata({
+ title: "thirdweb Modular Contracts",
+ description:
+ "Modular Contract provides a framework to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions.",
+ image: {
+ title: "thirdweb Modular Contracts",
+ icon: "solidity",
+ },
+});
+
+# Quickstart
+
+#### Overview
+Modular contracts are a composable set of contracts that can be combined to create a feature complete protocol. To learn more, refer to [How it works](https://thirdweb.com/contracts/modular-contracts/how-it-works)
+
+In this Quickstart, learn how to go over how to create an ERC-721 modular contract with fixed mint pricing
+
+#### 1. Create a new forge project and install the modular-contracts package
+Install Forge from this [guide](https://book.getfoundry.sh/getting-started/installation) from Foundry
+```bash
+forge init
+forge install https://github.com/thirdweb-dev/modular-contracts.git
+forge remappings > remappings.txt
+```
+
+#### 2. Create the core contract
+In the `/src` folder, create a new file called `ERC721Start.sol` with the following code.
+This will inherit the prebuilt `ERC721Core` contract. For a full list of prebuilt core contract, go [here]()
+```solidity
+// SPDX-License-Identifier: UNLICENSED
+pragma solidity ^0.8.0;
+
+import {ERC721Core} from "modular-contracts/src/core/token/ERC721Core.sol";
+
+contract ERC721Start is ERC721Core {
+ constructor(
+ string memory _name,
+ string memory _symbol,
+ string memory _contractURI,
+ address _owner
+ )
+ ERC721Core(
+ _name,
+ _symbol,
+ _contractURI,
+ _owner,
+ new address[](0),
+ new bytes[](0)
+ )
+ {}
+}
+```
+
+#### 3. Deploy the core contract
+In your terminal, run the following command
+```bash
+npx thirdweb deploy
+```
+
+Then select `ERC721Start`
+After signing in, it should open up to the following page to deploy the `ERC721Start` contract
+
+
+After filling in the fields, select the Sepolia testnet chain and then hit Deploy
+
+> If you need funds to deploy the contract, head over to the Sepolia faucet [here](https://thirdweb.com/sepolia/)
+
+
+
+After deploying the contract, you should be redirected to the deployed contract page
+
+
+Hold onto this page as you will need it for later
+
+#### 3. Create the extension contract
+Back in your forge project, in the `/src` folder, create a file called `PricedExtension.sol` and paste in the following code.
+
+For a better understanding of how extension contracts work, refer to the [starter template code](https://github.com/thirdweb-example/modular-contract-extension-starter/blob/main/src/ExtensionStarter.sol)
+```solidity
+// SPDX-License-Identifier: UNLICENSED
+pragma solidity ^0.8.0;
+
+import {ModularExtension} from "modular-contracts/src/ModularExtension.sol";
+import {BeforeMintCallbackERC721} from "modular-contracts/src/callback/BeforeMintCallbackERC721.sol";
+
+contract PricedMint is ModularExtension, BeforeMintCallbackERC721 {
+ uint256 public constant mintPrice = 0.01 ether;
+
+ function getExtensionConfig()
+ external
+ pure
+ override
+ returns (ExtensionConfig memory config)
+ {
+ config.callbackFunctions = new CallbackFunction[](1);
+
+ config.callbackFunctions[0] = CallbackFunction(
+ this.beforeMintERC721.selector
+ );
+
+ config.requiredInterfaces = new bytes4[](1);
+ config.requiredInterfaces[0] = 0x80ac58cd; // ERC721.
+ }
+
+ function beforeMintERC721(
+ address _to,
+ uint256 _startTokenId,
+ uint256 _quantity,
+ bytes memory _data
+ ) external payable virtual override returns (bytes memory) {
+ require(msg.value == mintPrice * _quantity, "Insufficient ETH sent");
+ }
+}
+```
+
+#### 4. Publish the extension contract
+In your terminal, run the following command
+```
+npx thirdweb publish
+```
+
+Then select `PricedMint`
+it should open up to the following page to publish the `PricedMint` contract
+
+
+Accept the defaults and then hit "next"
+It should then redirect you to choose which chain to deploy on.
+Here we'll leave it on the Sepolia testnet
+Afterwards, hit "Publish Contract"
+
+
+#### 5. Install the Extension onto the Core contract
+Back to the deployed core contract page, then go and click on the "Manage" tab
+
+
+It should then redirect to the edit extensions page
+
+
+Here, fill out the info as needed and then hit "Install"
+
+After it has finished installing, it should then show up under the "Installed Extension" section
+
+
+
+#### 6. Test the modular contract
+Now with the modular contract fully up and ready to go, we can test that it setup properly by running the following script
+
+```javascript
+// Pre-requisite: install thirdweb
+
+import {
+ createThirdwebClient,
+ getContract,
+ prepareContractCall,
+ sendTransaction,
+ waitForReceipt,
+ toUnits,
+} from "thirdweb";
+import { privateKeyToAccount } from "thirdweb/wallets";
+import { sepolia } from "thirdweb/chains";
+
+const PRIVATE_KEY = "<"; // Paste your private key here
+const SECRET_KEY = ""; // Paste your secret key here
+
+const TARGET_TOKEN_CORE_ADDRESS = ""; // Paste your target token core address here
+const MINTER_RECIPIENT_ADDRESS = ""; // Paste your minter recipient address here
+
+const client = createThirdwebClient({
+ secretKey: SECRET_KEY,
+});
+
+const account = privateKeyToAccount({
+ client,
+ privateKey: PRIVATE_KEY,
+});
+
+const contract = getContract({
+ client,
+ address: TARGET_TOKEN_CORE_ADDRESS,
+ chain: sepolia,
+});
+
+const transaction = prepareContractCall({
+ contract,
+ method: {
+ type: "function",
+ name: "mint",
+ inputs: [
+ { name: "to", type: "address", internalType: "address" },
+ { name: "amount", type: "uint256", internalType: "uint256" },
+ { name: "data", type: "bytes", internalType: "bytes" },
+ ],
+ value: toUnits("0.01", 18),
+ outputs: [],
+ stateMutability: "payable",
+ },
+ params: [MINTER_RECIPIENT_ADDRESS, 1, ""],
+});
+
+async function main() {
+ // Send transaction
+ const result = await sendTransaction({
+ transaction: transaction,
+ account: account,
+ });
+
+ const receipt = await waitForReceipt(result);
+
+ console.log("NFT minted tx: ", receipt.transactionHash);
+}
+
+main()
diff --git a/src/app/contracts/modular-contracts/how-it-works/assets/transformer.png b/src/app/contracts/modular-contracts/how-it-works/assets/transformer.png
new file mode 100644
index 00000000..4070f7b9
Binary files /dev/null and b/src/app/contracts/modular-contracts/how-it-works/assets/transformer.png differ
diff --git a/src/app/contracts/modular-contracts/how-it-works/page.mdx b/src/app/contracts/modular-contracts/how-it-works/page.mdx
new file mode 100644
index 00000000..864c6573
--- /dev/null
+++ b/src/app/contracts/modular-contracts/how-it-works/page.mdx
@@ -0,0 +1,28 @@
+import { DocImage } from "@doc";
+import { createMetadata, FeatureCard } from "@doc";
+import transformer from "./assets/transformer.png";
+
+export const metadata = createMetadata({
+ title: "thirdweb Modular Contracts",
+ description:
+ "Modular Contract provides a framework to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions.",
+ image: {
+ title: "thirdweb Modular Contracts",
+ icon: "solidity",
+ },
+});
+
+# How it works
+
+A modular contract is composed of two types of contracts:
+
+- Core Contract: the foundational API to be customized by installing extensions
+- Extension Contract: implement a set of functionality to be enabled on a Core Contract upon installation
+
+As an analogy, think of a robot in which the torso is the Core with available sockets for attaching extensions.
+
+
+
+The torso has a particular shape and exposes sockets at fixed places, determining how extensions will be attached. Similarly, a Core smart contract has a fixed API determining which extensions are compatible with installation.
+
+The *Extensions*, e.g., a leg, arm, head, etc., give the robot (i.e., the modular contract) various capabilities.
diff --git a/src/app/contracts/build/modular-contracts/assets/modular-contracts-analogy.png b/src/app/contracts/modular-contracts/modular-contracts/assets/modular-contracts-analogy.png
similarity index 100%
rename from src/app/contracts/build/modular-contracts/assets/modular-contracts-analogy.png
rename to src/app/contracts/modular-contracts/modular-contracts/assets/modular-contracts-analogy.png
diff --git a/src/app/contracts/build/modular-contracts/assets/modular-contracts-flow.png b/src/app/contracts/modular-contracts/modular-contracts/assets/modular-contracts-flow.png
similarity index 100%
rename from src/app/contracts/build/modular-contracts/assets/modular-contracts-flow.png
rename to src/app/contracts/modular-contracts/modular-contracts/assets/modular-contracts-flow.png
diff --git a/src/app/contracts/build/modular-contracts/page.mdx b/src/app/contracts/modular-contracts/modular-contracts/page.mdx
similarity index 99%
rename from src/app/contracts/build/modular-contracts/page.mdx
rename to src/app/contracts/modular-contracts/modular-contracts/page.mdx
index 007037ab..03e77b93 100644
--- a/src/app/contracts/build/modular-contracts/page.mdx
+++ b/src/app/contracts/modular-contracts/modular-contracts/page.mdx
@@ -1,3 +1,5 @@
+# vim: ft=jsx
+
import { DocImage, Callout } from "@doc";
import { Tabs, TabsList, TabsTrigger, TabsContent } from "@/components/ui/tabs";
import modularContractsAnalogyImage from "./assets/modular-contracts-analogy.png";
diff --git a/src/app/contracts/modular-contracts/overview/assets/NFT-drop-overview.png b/src/app/contracts/modular-contracts/overview/assets/NFT-drop-overview.png
new file mode 100644
index 00000000..5e22585b
Binary files /dev/null and b/src/app/contracts/modular-contracts/overview/assets/NFT-drop-overview.png differ
diff --git a/src/app/contracts/modular-contracts/overview/assets/blocks.svg b/src/app/contracts/modular-contracts/overview/assets/blocks.svg
new file mode 100644
index 00000000..dacf503a
--- /dev/null
+++ b/src/app/contracts/modular-contracts/overview/assets/blocks.svg
@@ -0,0 +1 @@
+
diff --git a/src/app/contracts/modular-contracts/overview/assets/circle-plus.svg b/src/app/contracts/modular-contracts/overview/assets/circle-plus.svg
new file mode 100644
index 00000000..4b5416d6
--- /dev/null
+++ b/src/app/contracts/modular-contracts/overview/assets/circle-plus.svg
@@ -0,0 +1 @@
+
diff --git a/src/app/contracts/build/overview/assets/extension-model.svg b/src/app/contracts/modular-contracts/overview/assets/extension-model.svg
similarity index 99%
rename from src/app/contracts/build/overview/assets/extension-model.svg
rename to src/app/contracts/modular-contracts/overview/assets/extension-model.svg
index 90e4e5b2..34c05d54 100644
--- a/src/app/contracts/build/overview/assets/extension-model.svg
+++ b/src/app/contracts/modular-contracts/overview/assets/extension-model.svg
@@ -1,4 +1,4 @@
-