diff --git a/apps/portal/src/app/Header.tsx b/apps/portal/src/app/Header.tsx
index 561b2628e44..540163ffdb2 100644
--- a/apps/portal/src/app/Header.tsx
+++ b/apps/portal/src/app/Header.tsx
@@ -122,6 +122,10 @@ export const connectLinks: Array<{
] as const;
const apisLinks = [
+ {
+ name: "Nebula",
+ href: "/nebula/api-reference",
+ },
{
name: "Insight",
href: "https://insight.thirdweb.com/reference",
@@ -139,11 +143,7 @@ const apisLinks = [
const supportLinks = [
{
name: "Get thirdweb support",
- href: "https://thirdweb.com/support",
- },
- {
- name: "Knowledge Base",
- href: "https://support.thirdweb.com",
+ href: "/knowledge-base",
},
{
name: "Contact Sales",
diff --git a/apps/portal/src/app/knowledge-base/assets/add-new-vercel.png b/apps/portal/src/app/knowledge-base/assets/add-new-vercel.png
new file mode 100644
index 00000000000..7bd2dc85e4c
Binary files /dev/null and b/apps/portal/src/app/knowledge-base/assets/add-new-vercel.png differ
diff --git a/apps/portal/src/app/knowledge-base/assets/context-filters.png b/apps/portal/src/app/knowledge-base/assets/context-filters.png
new file mode 100644
index 00000000000..05f57b28cea
Binary files /dev/null and b/apps/portal/src/app/knowledge-base/assets/context-filters.png differ
diff --git a/apps/portal/src/app/knowledge-base/assets/create-project-vercel.png b/apps/portal/src/app/knowledge-base/assets/create-project-vercel.png
new file mode 100644
index 00000000000..7453eacff75
Binary files /dev/null and b/apps/portal/src/app/knowledge-base/assets/create-project-vercel.png differ
diff --git a/apps/portal/src/app/knowledge-base/assets/deploy-github.png b/apps/portal/src/app/knowledge-base/assets/deploy-github.png
new file mode 100644
index 00000000000..a0558ba41f7
Binary files /dev/null and b/apps/portal/src/app/knowledge-base/assets/deploy-github.png differ
diff --git a/apps/portal/src/app/knowledge-base/assets/deploy-vercel.png b/apps/portal/src/app/knowledge-base/assets/deploy-vercel.png
new file mode 100644
index 00000000000..0669da42233
Binary files /dev/null and b/apps/portal/src/app/knowledge-base/assets/deploy-vercel.png differ
diff --git a/apps/portal/src/app/knowledge-base/assets/inspect-console.png b/apps/portal/src/app/knowledge-base/assets/inspect-console.png
new file mode 100644
index 00000000000..a611ed0b162
Binary files /dev/null and b/apps/portal/src/app/knowledge-base/assets/inspect-console.png differ
diff --git a/apps/portal/src/app/knowledge-base/assets/keys.png b/apps/portal/src/app/knowledge-base/assets/keys.png
new file mode 100644
index 00000000000..d372453b1d0
Binary files /dev/null and b/apps/portal/src/app/knowledge-base/assets/keys.png differ
diff --git a/apps/portal/src/app/knowledge-base/assets/new-project-github.png b/apps/portal/src/app/knowledge-base/assets/new-project-github.png
new file mode 100644
index 00000000000..1d4b2e88c57
Binary files /dev/null and b/apps/portal/src/app/knowledge-base/assets/new-project-github.png differ
diff --git a/apps/portal/src/app/knowledge-base/assets/new-project-name-github.png b/apps/portal/src/app/knowledge-base/assets/new-project-name-github.png
new file mode 100644
index 00000000000..68af67b3955
Binary files /dev/null and b/apps/portal/src/app/knowledge-base/assets/new-project-name-github.png differ
diff --git a/apps/portal/src/app/knowledge-base/assets/new-project.png b/apps/portal/src/app/knowledge-base/assets/new-project.png
new file mode 100644
index 00000000000..8cbc736a17a
Binary files /dev/null and b/apps/portal/src/app/knowledge-base/assets/new-project.png differ
diff --git a/apps/portal/src/app/knowledge-base/assets/permissions-soulbound.png b/apps/portal/src/app/knowledge-base/assets/permissions-soulbound.png
new file mode 100644
index 00000000000..9af95de8c3d
Binary files /dev/null and b/apps/portal/src/app/knowledge-base/assets/permissions-soulbound.png differ
diff --git a/apps/portal/src/app/knowledge-base/assets/screenshot-console.png b/apps/portal/src/app/knowledge-base/assets/screenshot-console.png
new file mode 100644
index 00000000000..cf2e3f46450
Binary files /dev/null and b/apps/portal/src/app/knowledge-base/assets/screenshot-console.png differ
diff --git a/apps/portal/src/app/knowledge-base/assets/set-approval-forall.png b/apps/portal/src/app/knowledge-base/assets/set-approval-forall.png
new file mode 100644
index 00000000000..70a73d54bb3
Binary files /dev/null and b/apps/portal/src/app/knowledge-base/assets/set-approval-forall.png differ
diff --git a/apps/portal/src/app/knowledge-base/assets/soulbound-explorer.png b/apps/portal/src/app/knowledge-base/assets/soulbound-explorer.png
new file mode 100644
index 00000000000..e8851eaabb2
Binary files /dev/null and b/apps/portal/src/app/knowledge-base/assets/soulbound-explorer.png differ
diff --git a/apps/portal/src/app/knowledge-base/assets/streamed-response.png b/apps/portal/src/app/knowledge-base/assets/streamed-response.png
new file mode 100644
index 00000000000..a745cd36537
Binary files /dev/null and b/apps/portal/src/app/knowledge-base/assets/streamed-response.png differ
diff --git a/apps/portal/src/app/knowledge-base/assets/tab-console.png b/apps/portal/src/app/knowledge-base/assets/tab-console.png
new file mode 100644
index 00000000000..dc16a86bf87
Binary files /dev/null and b/apps/portal/src/app/knowledge-base/assets/tab-console.png differ
diff --git a/apps/portal/src/app/knowledge-base/assets/variables-vercel.png b/apps/portal/src/app/knowledge-base/assets/variables-vercel.png
new file mode 100644
index 00000000000..ed0994c2a16
Binary files /dev/null and b/apps/portal/src/app/knowledge-base/assets/variables-vercel.png differ
diff --git a/apps/portal/src/app/knowledge-base/get-started/page.mdx b/apps/portal/src/app/knowledge-base/get-started/page.mdx
new file mode 100644
index 00000000000..4915e365b37
--- /dev/null
+++ b/apps/portal/src/app/knowledge-base/get-started/page.mdx
@@ -0,0 +1,68 @@
+import { WalletIcon, FileIcon, MessageCircleIcon, BracesIcon, BotIcon, BlocksIcon } from "lucide-react";
+import { DocImage, createMetadata, FeatureCard, GithubTemplateCard, Stack, Grid, ArticleCard, ArticleIconCard } from "@doc";
+import { ExternalLink } from "lucide-react";
+
+export const metadata = createMetadata({
+ title: "thirdweb Knowledge Base",
+
+ description:
+ "This Knowledge Base collects concise guides and troubleshooting tips for common web3 development challenges—especially when using thirdweb, but many articles apply to any web3 project.",
+});
+
+# Welcome to thirdweb Support!
+
+This section shows you how to leverage our Knowledge Base, request support, and understand our response process.
+
+---
+
+## 1. thirdweb Resources
+
+Before opening a support ticket, check these resources:
+
+- **Documentation:** [thirdweb Docs](https://portal.thirdweb.com/)
+- **Changelog:** Stay up to date with our latest releases: [thirdweb Changelog](https://portal.thirdweb.com/changelog)
+- **Status Page:** [thirdweb Status](https://status.thirdweb.com/)
+- **Guides & Troubleshooting:** Explore tutorials and tips: [thirdweb Guides](https://blog.thirdweb.com/guides/)
+- **Templates:** [thirdweb Starters](https://github.com/thirdweb-example/)
+- **Video Tutorials:** [YouTube](https://www.youtube.com/@thirdweb_)
+- **Playground:** Test live in [thirdweb Playground](https://playground.thirdweb.com/)
+
+---
+
+## 2. How to Request Support
+
+- **Submit a ticket** through our system: [thirdweb.com/support](https://thirdweb.com/support).
+- Our team operates **worldwide** and will respond **as soon as possible**.
+ - *Response times may vary depending on issue severity and priority.*
+ - We’ll keep you updated on your ticket’s progress.
+- For faster resolution, please include a minimal reproduction with step-by-step instructions.
+- Found an issue in our open-source code? Submit a PR: [thirdweb-dev/js](https://github.com/thirdweb-dev/js).
+
+---
+
+## 3. Response Time Expectations
+
+### Starter Plan
+
+- Estimated response time: **3 business days**.
+- We aim to respond sooner when possible.
+
+### Growth Plan & Accelerate Customers
+
+- Estimated response time: **Within 48 business hours**.
+
+### Scale & Pro Plans
+
+- Estimated response time: **Within 2 business hours**.
+- Customers on the **Scale** or **Pro** plans get a **dedicated Slack channel or Telegram group**.
+
+---
+
+## Need Help?
+
+You can [submit a ticket](https://thirdweb.com/support), and we’ll be happy to help you!
+
+
+
+
+
diff --git a/apps/portal/src/app/knowledge-base/how-to/console-error-sharing/page.mdx b/apps/portal/src/app/knowledge-base/how-to/console-error-sharing/page.mdx
new file mode 100644
index 00000000000..9aea48a1551
--- /dev/null
+++ b/apps/portal/src/app/knowledge-base/how-to/console-error-sharing/page.mdx
@@ -0,0 +1,44 @@
+import { DocImage, Step, Steps } from "@doc";
+import ScreenshotConsole from "../../assets/screenshot-console.png";
+import TabConsole from "../../assets/tab-console.png";
+import Inspect from "../../assets/inspect-console.png";
+
+# How to share your console log errors
+
+Follow these steps to capture and share your browser console errors:
+
+
+
+
+Navigate to the page where you’re seeing errors.
+
+
+
+Right-click and choose **Inspect** (or **Inspect Element**) to open DevTools.
+
+
+
+
+ Click on the **Console** tab to view logs and errors.
+
+
+
+
+ Screenshot any red error messages in **Console**.
+
+
+
+
+ Send your screenshots to our support team.
+
+
+
+
+
+By following these steps, you’ll give us the full error context so we can resolve your issue quickly.
+
+---
+
+
+Still stuck? [**Contact our support team**](https://thirdweb.com/support)
+
diff --git a/apps/portal/src/app/knowledge-base/how-to/creating-soulbound-nfts/page.mdx b/apps/portal/src/app/knowledge-base/how-to/creating-soulbound-nfts/page.mdx
new file mode 100644
index 00000000000..2f1dc873b4a
--- /dev/null
+++ b/apps/portal/src/app/knowledge-base/how-to/creating-soulbound-nfts/page.mdx
@@ -0,0 +1,47 @@
+import { DocImage } from "@doc";
+import Soulbound from "../../assets/soulbound-explorer.png";
+import Permissions from "../../assets/permissions-soulbound.png";
+
+# What is a Soulbound Token
+
+Let’s first understand what a Soulbound Token (SBT) is:
+
+A **Soulbound Token** is a unique digital asset that cannot be transferred to another wallet. Once minted, it remains permanently tied to the owner’s wallet—perfect for credentials, achievement badges, or any on-chain proof of identity.
+
+## How to make your tokens Soulbound or Non-Transferrable
+
+The easiest way is via the **Permissions** tab on your thirdweb contract dashboard. For a visual walkthrough, check out our [guide on making NFTs non-transferable](https://blog.thirdweb.com/guides/make-your-nft-non-transferable/?utm_source=dc).
+
+If you prefer using the **Explorer**, follow these steps:
+
+1. **Connect your wallet**
+ Ensure your wallet is connected to the Dashboard/Explorer and set to the same network as your contract.
+
+2. **Select the correct network**
+ Verify the network selector (top-right) matches your contract’s deployment chain (e.g., Ethereum Mainnet, Goerli).
+
+3. **Open the Explorer**
+ In the thirdweb Dashboard, select your contract and switch to the **Explorer** tab.
+
+4. **Choose `revokeRole` under write**
+ The `revokeRole` function requires two inputs: **Role** and **Account**.
+
+5. **Convert `TRANSFER_ROLE` to bytes32**
+ Use a [keccak256 tool](https://emn178.github.io/online-tools/keccak_256.html) to hash the string `TRANSFER_ROLE`, then prefix with `0x`.
+ For example:
+ `0x8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c`
+
+6. **Set the account to the zero address**
+ Enter `0x0000000000000000000000000000000000000000` to revoke transfer rights from every wallet.
+
+7. **Confirm the on-chain transaction**
+ Click “write” and approve the transaction in your wallet.
+
+
+
+8. **Verify in Permissions**
+ Refresh the **Permissions** tab to confirm that `TRANSFER_ROLE` is revoked for the zero address.
+
+
+
+That’s it—your tokens are officially soulbound!
diff --git a/apps/portal/src/app/knowledge-base/how-to/deploy-mint-template/page.mdx b/apps/portal/src/app/knowledge-base/how-to/deploy-mint-template/page.mdx
new file mode 100644
index 00000000000..b22dca11013
--- /dev/null
+++ b/apps/portal/src/app/knowledge-base/how-to/deploy-mint-template/page.mdx
@@ -0,0 +1,73 @@
+import { DocImage } from "@doc";
+import deployGithub from "../../assets/deploy-github.png";
+import newProject from "../../assets/new-project-github.png";
+import newProjectName from "../../assets/new-project-name-github.png";
+import newVercel from "../../assets/add-new-vercel.png";
+import createVercel from "../../assets/create-project-vercel.png";
+import variablesVercel from "../../assets/variables-vercel.png";
+import deployVercel from "../../assets/deploy-vercel.png";
+
+
+
+# How to deploy an NFT Mint site template [NO CODE]
+
+## Prerequisites
+
+- [GitHub account](https://github.com)
+- [thirdweb account](https://thirdweb.com/)
+- [Vercel account](https://vercel.com/)
+
+
+## Step-by-Step Guide
+
+### 1. Initial Setup
+
+- Navigate to the [NFT Minting Template repository](https://github.com/thirdweb-example/nft-minting-template)
+- Click **Deploy with Vercel**
+
+
+
+### 2. Configure Git Repository
+
+- **Choose your Git provider** (GitHub, GitLab, or Bitbucket)
+- **Set up your repository details**:
+ - **Git Scope**: Select your GitHub username or organization
+ - **Repository Name**: Enter a name (e.g., `my-nft-minting-website`)
+ - **Team**: Select your team if applicable
+
+
+
+
+
+### 3. Create Thirdweb Project
+
+- Go to the [thirdweb dashboard](https://thirdweb.com/team/~/~/) and create a new project
+- Enter your project name (e.g., `NFT MINTING TEMPLATE`)
+- Configure allowed domains:
+ - Add your custom domain (e.g., `mydomain.com`)
+ - Add `localhost:` for local development
+- Click **Create** and save your Client ID and Secret Key
+
+
+
+
+
+### 4. Configure Environment Variables
+
+- In Vercel, add the following:
+ 
+ - `NEXT_PUBLIC_THIRDWEB_CLIENT_ID`: Your thirdweb Client ID
+ - `THIRDWEB_SECRET_KEY`: Your thirdweb Secret Key
+ - `NFT_CONTRACT_ADDRESS`: Your NFT contract address
+ - `NFT_CONTRACT_CHAIN_ID`: Chain ID (e.g., 43113 for Avalanche testnet)
+ - `NFT_CONTRACT_TOKEN_ID`: `0` for ERC-721 or the token ID for ERC-1155
+
+
+
+### 5. Deploy
+
+- Click **Deploy** in the Vercel dashboard
+- Wait for the build and deployment to complete
+- Access your new mint site via the provided Vercel URL
+
+
diff --git a/apps/portal/src/app/knowledge-base/layout.tsx b/apps/portal/src/app/knowledge-base/layout.tsx
new file mode 100644
index 00000000000..b1f2b498b38
--- /dev/null
+++ b/apps/portal/src/app/knowledge-base/layout.tsx
@@ -0,0 +1,18 @@
+import { DocLayout } from "@/components/Layouts/DocLayout";
+import { createMetadata } from "@doc";
+import { sidebar } from "./sidebar";
+
+export default async function Layout(props: { children: React.ReactNode }) {
+ return (
+
+ {props.children}
+
+ );
+}
+
+export const metadata = createMetadata({
+ title: "thirdweb Knowledge Base",
+
+ description:
+ "This Knowledge Base collects concise guides and troubleshooting tips for common web3 development challenges—especially when using thirdweb, but many articles apply to any web3 project.",
+});
diff --git a/apps/portal/src/app/knowledge-base/onchain-common-errors/thirdweb-cli/device-link-error/page.mdx b/apps/portal/src/app/knowledge-base/onchain-common-errors/thirdweb-cli/device-link-error/page.mdx
new file mode 100644
index 00000000000..d89a33a8169
--- /dev/null
+++ b/apps/portal/src/app/knowledge-base/onchain-common-errors/thirdweb-cli/device-link-error/page.mdx
@@ -0,0 +1,25 @@
+# Issue linking device on the authorization page via Thirdweb CLI
+
+Encountering issues when linking a new device via the authorization page.
+
+### Error
+
+How to authorize your account using `secretKey` for the thirdweb CLI
+
+### Solution
+
+You can authorize the CLI with a `secretKey` in just a couple of steps:
+
+1. **Get your `secretKey`**
+ Head over to the thirdweb dashboard and generate a key: https://thirdweb.com/team/~/~/.
+
+2. **Deploy with your `secretKey`**
+ Run the following command: `npx thirdweb deploy -k secretKey`
+
+3. **Use the same pattern for other commands**
+ You can also use other methods like `upload`, `publish`, and `build` using the same format:
+ - `npx thirdweb upload -k secretKey`
+ - `npx thirdweb publish -k secretKey`
+ - `npx thirdweb build -k secretKey`
+
+That’s it! The CLI will now use your `secretKey` to authenticate every command.
diff --git a/apps/portal/src/app/knowledge-base/page.mdx b/apps/portal/src/app/knowledge-base/page.mdx
new file mode 100644
index 00000000000..4915e365b37
--- /dev/null
+++ b/apps/portal/src/app/knowledge-base/page.mdx
@@ -0,0 +1,68 @@
+import { WalletIcon, FileIcon, MessageCircleIcon, BracesIcon, BotIcon, BlocksIcon } from "lucide-react";
+import { DocImage, createMetadata, FeatureCard, GithubTemplateCard, Stack, Grid, ArticleCard, ArticleIconCard } from "@doc";
+import { ExternalLink } from "lucide-react";
+
+export const metadata = createMetadata({
+ title: "thirdweb Knowledge Base",
+
+ description:
+ "This Knowledge Base collects concise guides and troubleshooting tips for common web3 development challenges—especially when using thirdweb, but many articles apply to any web3 project.",
+});
+
+# Welcome to thirdweb Support!
+
+This section shows you how to leverage our Knowledge Base, request support, and understand our response process.
+
+---
+
+## 1. thirdweb Resources
+
+Before opening a support ticket, check these resources:
+
+- **Documentation:** [thirdweb Docs](https://portal.thirdweb.com/)
+- **Changelog:** Stay up to date with our latest releases: [thirdweb Changelog](https://portal.thirdweb.com/changelog)
+- **Status Page:** [thirdweb Status](https://status.thirdweb.com/)
+- **Guides & Troubleshooting:** Explore tutorials and tips: [thirdweb Guides](https://blog.thirdweb.com/guides/)
+- **Templates:** [thirdweb Starters](https://github.com/thirdweb-example/)
+- **Video Tutorials:** [YouTube](https://www.youtube.com/@thirdweb_)
+- **Playground:** Test live in [thirdweb Playground](https://playground.thirdweb.com/)
+
+---
+
+## 2. How to Request Support
+
+- **Submit a ticket** through our system: [thirdweb.com/support](https://thirdweb.com/support).
+- Our team operates **worldwide** and will respond **as soon as possible**.
+ - *Response times may vary depending on issue severity and priority.*
+ - We’ll keep you updated on your ticket’s progress.
+- For faster resolution, please include a minimal reproduction with step-by-step instructions.
+- Found an issue in our open-source code? Submit a PR: [thirdweb-dev/js](https://github.com/thirdweb-dev/js).
+
+---
+
+## 3. Response Time Expectations
+
+### Starter Plan
+
+- Estimated response time: **3 business days**.
+- We aim to respond sooner when possible.
+
+### Growth Plan & Accelerate Customers
+
+- Estimated response time: **Within 48 business hours**.
+
+### Scale & Pro Plans
+
+- Estimated response time: **Within 2 business hours**.
+- Customers on the **Scale** or **Pro** plans get a **dedicated Slack channel or Telegram group**.
+
+---
+
+## Need Help?
+
+You can [submit a ticket](https://thirdweb.com/support), and we’ll be happy to help you!
+
+
+
+
+
diff --git a/apps/portal/src/app/knowledge-base/sidebar.tsx b/apps/portal/src/app/knowledge-base/sidebar.tsx
new file mode 100644
index 00000000000..1006137db53
--- /dev/null
+++ b/apps/portal/src/app/knowledge-base/sidebar.tsx
@@ -0,0 +1,78 @@
+import type { SideBar } from "@/components/Layouts/DocLayout";
+
+import { BracesIcon, CodeIcon, RocketIcon } from "lucide-react";
+
+export const sidebar: SideBar = {
+ name: "Support Knowledge Base",
+ links: [
+ {
+ name: "Get Started",
+ href: "/knowledge-base/get-started",
+ icon: ,
+ },
+ {
+ separator: true,
+ },
+ {
+ name: "thirdweb Resources",
+ isCollapsible: false,
+ links: [
+ {
+ name: "How to",
+ icon: ,
+ links: [
+ {
+ name: "Creating Soulbound NFTs",
+ expanded: true,
+ href: "/knowledge-base/how-to/creating-soulbound-nfts",
+ },
+ {
+ name: "Console Error Sharing",
+ expanded: true,
+ href: "/knowledge-base/how-to/console-error-sharing",
+ },
+ {
+ name: "Deploy mint template",
+ expanded: true,
+ href: "/knowledge-base/how-to/deploy-mint-template",
+ },
+ ],
+ },
+ ],
+ },
+ {
+ name: "Troubleshoot",
+ isCollapsible: false,
+ links: [
+ {
+ name: "Onchain common errors",
+ icon: ,
+ links: [
+ {
+ name: "Thirdweb CLI: Device Link Error",
+ href: "/knowledge-base/onchain-common-errors/thirdweb-cli/device-link-error",
+ },
+ ],
+ },
+ {
+ name: "Contracts",
+ icon: ,
+ links: [
+ {
+ name: "Airdrop Contract",
+ href: "/knowledge-base/troubleshoot/contracts/airdrop-contract",
+ },
+ {
+ name: "Embed Feature Not Found",
+ href: "/knowledge-base/troubleshoot/contracts/embed-feature-not-found",
+ },
+ {
+ name: "Batch Upload",
+ href: "/knowledge-base/troubleshoot/contracts/batch-upload",
+ },
+ ],
+ },
+ ],
+ },
+ ],
+};
diff --git a/apps/portal/src/app/knowledge-base/troubleshoot/contracts/airdrop-contract/page.mdx b/apps/portal/src/app/knowledge-base/troubleshoot/contracts/airdrop-contract/page.mdx
new file mode 100644
index 00000000000..759abab79c6
--- /dev/null
+++ b/apps/portal/src/app/knowledge-base/troubleshoot/contracts/airdrop-contract/page.mdx
@@ -0,0 +1,48 @@
+import { DocImage } from "@doc";
+import setApproval from "../../../assets/set-approval-forall.png";
+
+
+# Airdrop Contract Troubleshooting
+
+Airdropping NFTs to your community is a popular way to provide utility in many NFT-based projects. Using the [airdrop contracts](https://thirdweb.com/explore/airdrop), you can airdrop any ERC20, ERC721, or ERC1155 tokens.
+
+To get started, here is a quick overview of how to airdrop NFTs:
+
+- Deploy your NFT/token contract and mint tokens
+- Deploy the airdrop contract
+- Approve the airdrop contract in your NFT contract via `approve` or `setApprovalForAll`. We recommend `setApprovalForAll` for large airdrops so you don’t need to approve each token ID individually.
+- Enter your NFT/token parameters into the airdrop contract’s `airdrop` function and execute
+
+
+
+If you encounter an error after following these steps, verify the following:
+
+- You have enough funds in your wallet to cover gas fees
+- The airdrop contract has been granted approval on the NFT contract. See the example below:
+
+
+
+- Your airdrop parameters use the correct formatting:
+ - **recipients** must be an array of quoted addresses: `["0x...","0x...","0x..."]`
+ - **token ID** must be an array of numeric IDs: `[0,1,2]`
+
+## Common Airdrop Issues
+
+1. NFTs aren’t minted/claimed
+2. Trying to airdrop too many NFTs at once
+3. Airdropping NFTs to invalid wallet addresses
+
+**NFTs aren’t minted/claimed**
+Make sure you’ve minted the NFTs to your wallet first. You can only airdrop tokens you already own.
+
+**Trying to airdrop too many NFTs at once**
+Most chains limit a single transaction to around 100 recipients. Split large lists into batches of 100 addresses or fewer.
+
+**Airdropping NFTs to invalid wallet addresses**
+If you see `execution reverted: ERC1155: transfer to non ERC1155Receiver implementer`, one or more addresses in your list aren’t valid ERC1155 recipients. Remove any invalid addresses and try again.
+
+---
+
+Can’t get this working? [**Contact our support team**](https://thirdweb.com/support) for help.
diff --git a/apps/portal/src/app/knowledge-base/troubleshoot/contracts/batch-upload/page.mdx b/apps/portal/src/app/knowledge-base/troubleshoot/contracts/batch-upload/page.mdx
new file mode 100644
index 00000000000..fae8a38ae6f
--- /dev/null
+++ b/apps/portal/src/app/knowledge-base/troubleshoot/contracts/batch-upload/page.mdx
@@ -0,0 +1,23 @@
+# Batch Upload Issues
+
+Uploading large amounts of media for your drop contracts can sometimes fail. This guide will help you identify and resolve the most common causes.
+
+## Common Causes
+
+### 1. Oversized batches
+Although our batch uploader technically supports up to 25 GB, we recommend splitting large uploads into smaller chunks—ideally 100 MB per batch, and no more than 1–2 GB at a time. If you still see errors, try uploading just 2–3 files as a quick test.
+
+### 2. Network interference
+- **VPNs** can interrupt your connection—disable any active VPN during uploads.
+- **Ad blockers** may block necessary requests—turn them off temporarily.
+- **Anti-virus software** can also interfere—pause it while you upload.
+
+## Best Practices
+
+- Aim for 100 MB batches when possible.
+- Keep each batch upload under 10 minutes to avoid timeout.
+- Test with a small batch of 2–3 files to verify your setup before larger uploads.
+
+## Need More Help?
+
+If you’ve tried these steps and still encounter issues, [contact our support team](https://thirdweb.com/support).
diff --git a/apps/portal/src/app/knowledge-base/troubleshoot/contracts/embed-feature-not-found/page.mdx b/apps/portal/src/app/knowledge-base/troubleshoot/contracts/embed-feature-not-found/page.mdx
new file mode 100644
index 00000000000..cdbabac1d83
--- /dev/null
+++ b/apps/portal/src/app/knowledge-base/troubleshoot/contracts/embed-feature-not-found/page.mdx
@@ -0,0 +1,38 @@
+import { createMetadata } from "@doc";
+
+export const metadata = createMetadata({
+ title: "Missing embed menu in contracts",
+ description:
+ "Troubleshooting guide for the deprecated embed menu feature in thirdweb contracts.",
+});
+
+# Missing embed Menu in Contracts
+
+
+## Problem
+
+The embed menu in your thirdweb contract has been deprecated and will no longer appear in the dashboard—this can be confusing if you’ve used it before. Here are a few alternative solutions to embed contract functionality into your project:
+
+## Solution
+
+The embed feature has been deprecated. However, there are alternative solutions available for embedding contract functionality into a project:
+
+### Alternative Solutions
+
+1. **Use NFT Minting Templates**
+ - Deploy NFT minting pages using the following templates:
+ - **Vercel:** [NFT Minting Template](https://github.com/thirdweb-example/nft-minting-template)
+ - **Railway:** [NFT Minting Page for Railway](https://github.com/warengonzaga/thirdweb-nft-minting-page-railway)
+ - For a full no-code walkthrough, check out our [Deploy Mint Template guide](/knowledge-base/how-to/deploy-mint-template).
+
+
+
+2. **Configure API Key Settings**
+ - Ensure that your API keys are correctly set up to prevent authorization errors.
+ - Refer to the API Key Configuration guide: https://portal.thirdweb.com/account/api-keys/access
+
+## Additional Tips
+
+- If you experience issues deploying the templates, check your environment variables and API key configurations.
+- Reach out to thirdweb support for further assistance if needed.
+- **Join our [Telegram community](https://t.me/officialthirdweb)** for updates, changelogs, and new features.
\ No newline at end of file
diff --git a/apps/portal/src/app/knowledge-base/troubleshoot/page.mdx b/apps/portal/src/app/knowledge-base/troubleshoot/page.mdx
new file mode 100644
index 00000000000..d90e588cd40
--- /dev/null
+++ b/apps/portal/src/app/knowledge-base/troubleshoot/page.mdx
@@ -0,0 +1,3 @@
+# Nebula Troubleshoot Guide
+
+For any issues you encounter while using Nebula, please [visit our support site](https://thirdweb.com/support).
\ No newline at end of file
diff --git a/apps/portal/src/app/page.tsx b/apps/portal/src/app/page.tsx
index 15977e5051a..8ee6843cbb1 100644
--- a/apps/portal/src/app/page.tsx
+++ b/apps/portal/src/app/page.tsx
@@ -8,7 +8,6 @@ import { ReactIcon } from "../icons";
import { TypeScriptIcon } from "../icons";
import { BridgeIcon } from "../icons/products/BridgeIcon";
import { ConnectIcon } from "../icons/products/ConnectIcon";
-import { ContractsIcon } from "../icons/products/ContractsIcon";
import { EngineIcon } from "../icons/products/EngineIcon";
import { InsightIcon } from "../icons/products/InsightIcon";
import { NebulaIcon } from "../icons/products/NebulaIcon";
@@ -178,12 +177,6 @@ function LearningResourcesSection() {
description="API interface for LLMs"
icon={NebulaIcon}
/>
-
);
diff --git a/apps/portal/src/icons/products/ContractsIcon.tsx b/apps/portal/src/icons/products/ContractsIcon.tsx
deleted file mode 100644
index 849a9fc6fcd..00000000000
--- a/apps/portal/src/icons/products/ContractsIcon.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-export function ContractsIcon({ className }: { className?: string }) {
- return (
-
- );
-}