Skip to content

[Docs] Add Ecosystem Wallet to sidebar and update documentation #7643

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Conversation

joaquim-verges
Copy link
Member

@joaquim-verges joaquim-verges commented Jul 17, 2025


PR-Codex overview

This PR primarily focuses on updating various transaction-related components and documentation within the thirdweb platform, including enhancements to the user wallet experience, Stripe payment integration, and the introduction of new features for server wallets and session keys.

Detailed summary

  • Updated links in Header.tsx and various sidebar components to point to /transactions.
  • Added EngineIcon export in index.ts.
  • Introduced a new layout in transactions/layout.tsx using DocLayout.
  • Enhanced Distribute Tokens and Sell NFTs with Stripe pages with new images and content.
  • Improved Session Keys guide with detailed steps for setup and execution.
  • Added new functionalities for server wallets and gas sponsorship in Sponsor Gas documentation.
  • Updated API endpoints and descriptions across various pages for clarity and accuracy.

✨ Ask PR-Codex anything about this PR by commenting with /codex {your question}

Summary by CodeRabbit

  • New Features

    • Added new sidebar links for "User Wallets," "Server Wallets," "External Wallets," and "Ecosystem Wallets" for improved navigation.
    • Introduced comprehensive documentation pages for Transactions, including sending, monitoring, sponsoring gas, distributing tokens, session keys, and Stripe payments.
    • Added new guides for Server Wallets and Ecosystem Wallet setup with detailed usage instructions.
    • Introduced a new layout and sidebar configuration for the Transactions section.
  • Documentation

    • Enhanced Ecosystem Wallet documentation with expanded introduction and detailed WalletConnect (Reown) registration steps.
    • Updated Engine v3 "Get Started" guide with production API endpoints.
    • Added extensive multi-platform transaction guides with code samples for HTTP, TypeScript, React, React Native, Unity, .NET, and Unreal Engine.
    • Added guides for gas sponsorship using EIP-7702 and ERC-4337 standards.
    • Added a new guide on selling NFTs via Stripe payments integrated with the transactions API.
    • Added a detailed guide on using session keys for secure smart account transactions.
    • Updated Vault documentation to reflect current product positioning and navigation.
    • Improved navigation links and SDK references across the portal for consistency.

Copy link

vercel bot commented Jul 17, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
docs-v2 ✅ Ready (Inspect) Visit Preview 💬 Add feedback Jul 18, 2025 4:02am
nebula ✅ Ready (Inspect) Visit Preview 💬 Add feedback Jul 18, 2025 4:02am
thirdweb_playground ✅ Ready (Inspect) Visit Preview 💬 Add feedback Jul 18, 2025 4:02am
thirdweb-www ✅ Ready (Inspect) Visit Preview 💬 Add feedback Jul 18, 2025 4:02am
wallet-ui ✅ Ready (Inspect) Visit Preview 💬 Add feedback Jul 18, 2025 4:02am

@vercel vercel bot temporarily deployed to Preview – thirdweb-www July 17, 2025 23:01 Inactive
@vercel vercel bot temporarily deployed to Preview – nebula July 17, 2025 23:01 Inactive
@vercel vercel bot temporarily deployed to Preview – thirdweb_playground July 17, 2025 23:01 Inactive
@vercel vercel bot temporarily deployed to Preview – wallet-ui July 17, 2025 23:01 Inactive
Copy link

changeset-bot bot commented Jul 17, 2025

⚠️ No Changeset found

Latest commit: a93c75d

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

Copy link
Contributor

coderabbitai bot commented Jul 17, 2025

Walkthrough

A new sidebar link for "Ecosystem Wallet" was added in the portal app's sidebar. The Ecosystem Wallet documentation page was expanded with detailed instructions and images for registering with WalletConnect (Reown), and outdated steps were removed. The Engine v3 "Get Started" guide updated all API endpoint URLs from a development to a production address.

Changes

File(s) Change Summary
apps/portal/src/app/connect/sidebar.tsx Renamed "Create Wallets" link to "User Wallets"; added "Server Wallets" and "External Wallets" links; removed duplicate "External Wallets"; added "Ecosystem Wallets" link under Resources.
apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx Updated documentation: removed Client ID step; expanded intro; added detailed WalletConnect (Reown) registration instructions with images.
apps/portal/src/app/engine/v3/get-started/page.mdx Replaced all API endpoint URLs from development to production in code examples.
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/EngineCloudChartCard/EngineCloudBarChartCardUI.tsx Updated URL in EmptyStateCard link from /engine/v3 to /transactions.
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/layout.tsx Updated "Learn More" button URL in EngineLegacyBannerUI from /engine/v3 to /transactions.
apps/portal/src/app/Header.tsx Changed "Transactions" navigation link href from /engine to /transactions.
apps/portal/src/app/connect/wallet/server/page.mdx Added new Server Wallets documentation page with HTTP API and TypeScript SDK usage instructions.
apps/portal/src/app/connect/wallet/sign-in-methods/configure/page.mdx Renamed heading "Create wallets" to "User Wallets"; removed "Interactive Guide" subheading and description.
apps/portal/src/app/page.tsx Updated SDK card links and icons: changed TypeScript SDK href; removed React SDK card; added React and React Native SDK cards; updated "Transactions" article href to /transactions.
apps/portal/src/app/transactions/distribute-tokens/page.mdx Added new "Distribute Tokens" documentation page with frontend and backend examples for token airdrops via transactions API.
apps/portal/src/app/transactions/layout.tsx Added new React layout component for transactions section with sidebar and header.
apps/portal/src/app/transactions/monitor/page.mdx Added new "Monitor Transactions" documentation page with HTTP and TypeScript/React tabs for tracking transactions.
apps/portal/src/app/transactions/page.mdx Added new comprehensive "Transactions" documentation page covering multi-platform transaction sending and management.
apps/portal/src/app/transactions/session-keys/page.mdx Added new "Session Keys" guide explaining secure transaction execution on behalf of smart accounts.
apps/portal/src/app/transactions/sidebar.tsx Added new sidebar configuration for transactions section with links to guides, API references, and resources.
apps/portal/src/app/transactions/sponsor/page.mdx Added new "Sponsor Gas" documentation page explaining gas sponsorship using EIP-7702 and ERC-4337 standards.
apps/portal/src/app/transactions/stripe-payments/page.mdx Added new guide for selling NFTs with Stripe payments integrated via transactions API, including frontend and backend code and webhook handling.
apps/portal/src/app/vault/get-started/page.mdx Updated Vault get-started doc text to reflect current product positioning and corrected navigation path.
apps/portal/src/icons/index.ts Added export of EngineIcon to icons index file.
packages/thirdweb/src/engine/server-wallet.ts Removed example line showing vaultAccessToken usage from JSDoc comment; no functional changes.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant Sidebar
    participant EcosystemWalletDoc
    participant ReownDashboard

    User->>Sidebar: Open sidebar
    Sidebar-->>User: Show "Ecosystem Wallet" link
    User->>Sidebar: Click "Ecosystem Wallet"
    Sidebar->>EcosystemWalletDoc: Load documentation page
    EcosystemWalletDoc-->>User: Display setup instructions
    User->>ReownDashboard: Register wallet as per instructions
    ReownDashboard-->>User: Confirm registration and integration
Loading
sequenceDiagram
    participant User
    participant EngineDoc
    participant API

    User->>EngineDoc: View "Get Started" guide
    EngineDoc-->>User: Show code examples with production API endpoint
    User->>API: Make requests using production endpoint
    API-->>User: Respond to requests
Loading

Possibly related PRs

Suggested labels

packages, SDK

Warning

Review ran into problems

🔥 Problems

Errors were encountered while retrieving linked issues.

Errors (3)
  • TEAM-0000: Entity not found: Issue - Could not find referenced Issue.
  • EIP-7702: Entity not found: Issue - Could not find referenced Issue.
  • ERC-4337: Entity not found: Issue - Could not find referenced Issue.
✨ Finishing Touches
  • 📝 Generate Docstrings

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@joaquim-verges joaquim-verges marked this pull request as ready for review July 17, 2025 23:01
@joaquim-verges joaquim-verges requested review from a team as code owners July 17, 2025 23:01
@github-actions github-actions bot added the Portal Involves changes to the Portal (docs) codebase. label Jul 17, 2025
Copy link
Member Author


How to use the Graphite Merge Queue

Add either label to this PR to merge it via the merge queue:

  • merge-queue - adds this PR to the back of the merge queue
  • hotfix - for urgent hot fixes, skip the queue and merge this PR next

You must have a Graphite account in order to use the merge queue. Sign up using this link.

An organization admin has enabled the Graphite Merge Queue in this repository.

Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue.

This stack of pull requests is managed by Graphite. Learn more about stacking.

@joaquim-verges joaquim-verges changed the title [Connect] Add Ecosystem Wallet to sidebar and update documentation [Docs] Add Ecosystem Wallet to sidebar and update documentation Jul 17, 2025
Copy link

codecov bot commented Jul 17, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 56.43%. Comparing base (4cbf671) to head (a93c75d).
Report is 5 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #7643      +/-   ##
==========================================
- Coverage   56.46%   56.43%   -0.04%     
==========================================
  Files         908      908              
  Lines       58159    58193      +34     
  Branches     4225     4226       +1     
==========================================
  Hits        32840    32840              
- Misses      25211    25244      +33     
- Partials      108      109       +1     
Flag Coverage Δ
packages 56.43% <ø> (-0.04%) ⬇️
Files with missing lines Coverage Δ
packages/thirdweb/src/engine/server-wallet.ts 3.64% <ø> (ø)

... and 2 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🔭 Outside diff range comments (1)
apps/portal/src/app/engine/v3/get-started/page.mdx (1)

56-75: Centralize the Engine API URL to avoid duplication

The example code hardcodes the full endpoint multiple times, which risks drift when the URL needs updating. Consider defining a single MDX constant or variable for the base URL and reusing it in all snippets:

• At the top of apps/portal/src/app/engine/v3/get-started/page.mdx (e.g.):

export const ENGINE_WRITE_URL = "https://engine.thirdweb.com/v1/write/contract";

• Then update each snippet:

curl -X POST "{ENGINE_WRITE_URL}" \
  -H "Content-Type: application/json" \
  -H "x-secret-key: <your-project-secret-key>" \
  -H "x-vault-access-token: <your-vault-access-token>" \
  -d '{ ... }'

• Apply the same change to lines 81–105, 111–135, 148–183, and 212–244.

This DRY approach ensures any future URL change only needs one update.

🧹 Nitpick comments (4)
apps/portal/src/app/connect/sidebar.tsx (1)

56-59: Add an icon for consistency with surrounding links

Neighbouring top-level links (“Get Started”, “Create Wallets”, …) either have an icon or intentionally omit one as a group.
Consider supplying an icon (e.g. WalletIcon) for “Ecosystem Wallet” so the visual rhythm of the sidebar remains coherent.

apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx (3)

5-9: Missing alt text on newly imported images

The four WalletConnect screenshots are rendered later without an alt attribute, hurting accessibility & SEO.

-<DocImage src={WalletconnectCreate} />
+<DocImage src={WalletconnectCreate} alt="Reown dashboard – create project" />

Apply the same pattern to the other three images.


21-23: Spelling errors in intro copy

accrossacross
ecossytemecosystem

Minor, but these typos undermine credibility.


104-145: Section is very long – consider sub-steps or collapsible details

The WalletConnect/Reown registration guide is excellent but dense.
Breaking each list (e.g. “Complete Your Project Details”) into <ul> bullets or using collapsible <details> blocks will improve scannability without losing content.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 61bfebf and 7bf3cb2.

📒 Files selected for processing (3)
  • apps/portal/src/app/connect/sidebar.tsx (1 hunks)
  • apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx (2 hunks)
  • apps/portal/src/app/engine/v3/get-started/page.mdx (5 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx}

Instructions used from:

Sources:
📄 CodeRabbit Inference Engine

  • CLAUDE.md
🧠 Learnings (4)
📓 Common learnings
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support for in-app wallets (social/email login) in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Unified `Wallet` and `Account` interfaces in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support EIP-1193, EIP-5792, EIP-7702 standards in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Smart wallets with account abstraction in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Surface breaking changes prominently in PR descriptions
apps/portal/src/app/engine/v3/get-started/page.mdx (5)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Server Side Data Fetching: Use `Authorization: Bearer` header – never embed tokens in URLs
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Surface breaking changes prominently in PR descriptions
Learnt from: MananTank
PR: thirdweb-dev/js#7315
File: apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/nft/launch-nft.tsx:155-160
Timestamp: 2025-06-10T00:46:58.580Z
Learning: In the dashboard application, the route structure for team and project navigation is `/team/[team_slug]/[project_slug]/...` without a `/project/` segment. Contract links should be formatted as `/team/${teamSlug}/${projectSlug}/contract/${chainId}/${contractAddress}`.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Server Components: Perform heavy data fetching
Learnt from: MananTank
PR: thirdweb-dev/js#7177
File: apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/public-pages/erc20/erc20.tsx:15-17
Timestamp: 2025-05-27T19:54:55.885Z
Learning: The `fetchDashboardContractMetadata` function from "@3rdweb-sdk/react/hooks/useDashboardContractMetadata" has internal error handlers for all promises and cannot throw errors, so external error handling is not needed when calling this function.
apps/portal/src/app/connect/sidebar.tsx (9)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support for in-app wallets (social/email login) in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Smart wallets with account abstraction in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Unified `Wallet` and `Account` interfaces in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support EIP-1193, EIP-5792, EIP-7702 standards in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Use `NavLink` for internal navigation with automatic active states in dashboard and playground apps
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/layout.tsx : Layouts should reuse `SidebarLayout` / `FullWidthSidebarLayout` (`@/components/blocks/SidebarLayout`).
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/**/*.{ts,tsx} : Use `NavLink` (`@/components/ui/NavLink`) for internal navigation so active states are handled automatically.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Import UI primitives from `@/components/ui/*` (Button, Input, Select, Tabs, Card, Sidebar, Badge, Separator) in dashboard and playground apps
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Interactive UI that relies on hooks (`useState`, `useEffect`, React Query, wallet hooks).
apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx (5)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support for in-app wallets (social/email login) in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support EIP-1193, EIP-5792, EIP-7702 standards in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Unified `Wallet` and `Account` interfaces in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Smart wallets with account abstraction in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Interactive UI that relies on hooks (`useState`, `useEffect`, React Query, wallet hooks).
🪛 LanguageTool
apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx

[grammar] ~21-~21: Ensure spelling is correct
Context: ...stem Wallet Ecosystem wallets can span accross multiple apps and games. You can regist...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (8)
  • GitHub Check: E2E Tests (pnpm, vite)
  • GitHub Check: E2E Tests (pnpm, webpack)
  • GitHub Check: E2E Tests (pnpm, esbuild)
  • GitHub Check: Unit Tests
  • GitHub Check: Lint Packages
  • GitHub Check: Build Packages
  • GitHub Check: Size
  • GitHub Check: Analyze (javascript)

Copy link
Contributor

github-actions bot commented Jul 17, 2025

size-limit report 📦

Path Size Loading time (3g) Running time (snapdragon) Total time
thirdweb (esm) 63.25 KB (0%) 1.3 s (0%) 598 ms (+150.37% 🔺) 1.9 s
thirdweb (cjs) 353.31 KB (0%) 7.1 s (0%) 1.9 s (-2.5% 🔽) 9 s
thirdweb (minimal + tree-shaking) 5.7 KB (0%) 114 ms (0%) 203 ms (+1135.98% 🔺) 317 ms
thirdweb/chains (tree-shaking) 526 B (0%) 11 ms (0%) 101 ms (+2413.07% 🔺) 111 ms
thirdweb/react (minimal + tree-shaking) 19.59 KB (0%) 392 ms (0%) 154 ms (+211.02% 🔺) 546 ms

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🧹 Nitpick comments (6)
apps/portal/src/app/transactions/stripe-payments/page.mdx (4)

15-20: Fix wording & clarity in intro paragraph

Minor wording issue makes the sentence hard to parse.

-This guide uses thirdweb the transactions API to sell NFTs with credit card:
+This guide uses the thirdweb Transactions API to sell NFTs with credit cards:

37-46: Code snippet will not compile – missing React import

Most React setups require import React from "react" (or the new JSX runtime pragma) for JSX to compile. Add the import so that consumers can copy-paste without confusion.

-import { ThirdwebProvider } from "thirdweb/react";
+import React from "react";
+import { ThirdwebProvider } from "thirdweb/react";

91-112: Stripe payment flow lacks error path & loading states

stripe.confirmPayment can reject (card declines, 3-DS, etc.). The current implementation always shows “success”. Wrap in try / catch, show a spinner while awaiting, and surface error.message so integrators do not adopt a brittle flow.

-const onClick = async () => {
-  // Submit payment to Stripe. The NFT is minted later in the webhook.
-  await stripe.confirmPayment({
+const onClick = async () => {
+  setLoading(true);
+  try {
+    // Submit payment to Stripe. The NFT is minted later in the webhook.
+    await stripe.confirmPayment({
       elements,
       confirmParams: { return_url: "http://localhost:3000" },
       redirect: "if_required",
-  });
-  alert("Payment success. The NFT will be delivered to your wallet shortly.");
+    });
+    alert("Payment success. The NFT will be delivered to your wallet shortly.");
+  } catch (err) {
+    alert((err as Error).message ?? "Payment failed");
+  } finally {
+    setLoading(false);
+  }
 };

181-207: Transaction enqueue sample hard-codes values & lacks failure recovery

Hard-coding tokenId = 0n and supply = 1n is fine for a quick start but could mislead users integrating dynamic mints. Consider adding a comment explaining these constants and showing where to catch await serverWallet.enqueueTransaction failures (e.g., insufficient allowance).

Also, defineChain is referenced but not imported, which will not compile.

-import { createThirdwebClient, getContract, Engine } from "thirdweb";
+import { createThirdwebClient, getContract, Engine, defineChain } from "thirdweb";
apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx (2)

21-23: Correct spelling errors in the introduction.

accrossacross, ecossytemecosystem.

-Ecosystem wallets can span accross multiple apps and games. You can register partners, setup access controls and sponsor gas for your entire ecossytem.
+Ecosystem wallets can span across multiple apps and games. You can register partners, set up access controls, and sponsor gas for your entire ecosystem.

104-104: Avoid multiple top-level (#) headings.

The document already opens with # Ecosystem Wallet; using another # creates two <h1> elements and hurts accessibility / SEO hierarchy.
Switch this to ## (or lower) to keep a single root heading.

-# How to Register Your thirdweb Ecosystem Wallet with WalletConnect (now Reown)
+## How to Register Your thirdweb Ecosystem Wallet with WalletConnect (now Reown)
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7bf3cb2 and 6c50048.

⛔ Files ignored due to path filters (9)
  • apps/portal/src/app/transactions/distribute-tokens/assets/airdrop-nfts-1.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/distribute-tokens/assets/airdrop-nfts-2.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/distribute-tokens/assets/airdrop-nfts-3.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/distribute-tokens/assets/airdrop-nfts-4.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/distribute-tokens/assets/airdrop-overview.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/stripe-payments/assets/nft-checkout-1.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/stripe-payments/assets/nft-checkout-2.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/stripe-payments/assets/nft-checkout-3.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/stripe-payments/assets/nft-checkout-overview.png is excluded by !**/*.png
📒 Files selected for processing (20)
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/EngineCloudChartCard/EngineCloudBarChartCardUI.tsx (1 hunks)
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/layout.tsx (1 hunks)
  • apps/portal/src/app/Header.tsx (1 hunks)
  • apps/portal/src/app/connect/sidebar.tsx (2 hunks)
  • apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx (2 hunks)
  • apps/portal/src/app/connect/wallet/server/page.mdx (1 hunks)
  • apps/portal/src/app/connect/wallet/sign-in-methods/configure/page.mdx (1 hunks)
  • apps/portal/src/app/engine/v3/get-started/page.mdx (5 hunks)
  • apps/portal/src/app/page.tsx (2 hunks)
  • apps/portal/src/app/transactions/distribute-tokens/page.mdx (1 hunks)
  • apps/portal/src/app/transactions/layout.tsx (1 hunks)
  • apps/portal/src/app/transactions/monitor/page.mdx (1 hunks)
  • apps/portal/src/app/transactions/page.mdx (1 hunks)
  • apps/portal/src/app/transactions/session-keys/page.mdx (1 hunks)
  • apps/portal/src/app/transactions/sidebar.tsx (1 hunks)
  • apps/portal/src/app/transactions/sponsor/page.mdx (1 hunks)
  • apps/portal/src/app/transactions/stripe-payments/page.mdx (1 hunks)
  • apps/portal/src/app/vault/get-started/page.mdx (1 hunks)
  • apps/portal/src/icons/index.ts (1 hunks)
  • packages/thirdweb/src/engine/server-wallet.ts (0 hunks)
💤 Files with no reviewable changes (1)
  • packages/thirdweb/src/engine/server-wallet.ts
✅ Files skipped from review due to trivial changes (11)
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/layout.tsx
  • apps/portal/src/icons/index.ts
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/EngineCloudChartCard/EngineCloudBarChartCardUI.tsx
  • apps/portal/src/app/connect/wallet/sign-in-methods/configure/page.mdx
  • apps/portal/src/app/vault/get-started/page.mdx
  • apps/portal/src/app/transactions/layout.tsx
  • apps/portal/src/app/engine/v3/get-started/page.mdx
  • apps/portal/src/app/transactions/monitor/page.mdx
  • apps/portal/src/app/transactions/sidebar.tsx
  • apps/portal/src/app/transactions/distribute-tokens/page.mdx
  • apps/portal/src/app/connect/wallet/server/page.mdx
🚧 Files skipped from review as they are similar to previous changes (1)
  • apps/portal/src/app/connect/sidebar.tsx
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx}

Instructions used from:

Sources:
📄 CodeRabbit Inference Engine

  • CLAUDE.md
🧠 Learnings (8)
📓 Common learnings
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support for in-app wallets (social/email login) in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support EIP-1193, EIP-5792, EIP-7702 standards in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Surface breaking changes prominently in PR descriptions
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Unified `Wallet` and `Account` interfaces in wallet architecture
apps/portal/src/app/page.tsx (14)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Use `NavLink` for internal navigation with automatic active states in dashboard and playground apps
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/**/*.{ts,tsx} : Use `NavLink` (`@/components/ui/NavLink`) for internal navigation so active states are handled automatically.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Server Components: Implement redirect logic with `redirect()` from `next/navigation`
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Use design system tokens (e.g., `bg-card`, `border-border`, `text-muted-foreground`)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Components: Support fast transitions with prefetched data
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Import UI primitives from `@/components/ui/*` (Button, Input, Select, Tabs, Card, Sidebar, Badge, Separator) in dashboard and playground apps
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/api/**/*.{ts,tsx} : Redirect logic using `redirect()` from `next/navigation`.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/exports/react.native.ts : React Native specific exports are in `src/exports/react.native.ts`
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Components: Handle interactive UI with React hooks (`useState`, `useEffect`, React Query, wallet hooks)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Side Data Fetching: Use descriptive, stable `queryKeys` for cache hits
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Anything that consumes hooks from `@tanstack/react-query` or thirdweb SDKs.
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Interactive UI that relies on hooks (`useState`, `useEffect`, React Query, wallet hooks).
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/**/*.{ts,tsx} : Reuse core UI primitives; avoid re-implementing buttons, cards, modals.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to packages/react-native-adapter/**/*.{ts,tsx} : Mobile platform shims are in `packages/react-native-adapter/`
apps/portal/src/app/transactions/session-keys/page.mdx (3)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Smart wallets with account abstraction in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Unified `Wallet` and `Account` interfaces in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support for in-app wallets (social/email login) in wallet architecture
apps/portal/src/app/transactions/sponsor/page.mdx (6)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support EIP-1193, EIP-5792, EIP-7702 standards in wallet architecture
Learnt from: MananTank
PR: thirdweb-dev/js#7152
File: apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/tokens/shared-page.tsx:41-48
Timestamp: 2025-05-26T16:28:50.772Z
Learning: The `projectMeta` prop is not required for the server-rendered `ContractTokensPage` component in the tokens shared page, unlike some other shared pages where it's needed for consistency.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support for in-app wallets (social/email login) in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Unified `Wallet` and `Account` interfaces in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/extensions/**/*.{ts,tsx} : Auto-generated contracts from ABI definitions in extensions
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Smart wallets with account abstraction in wallet architecture
apps/portal/src/app/transactions/page.mdx (8)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/extensions/**/*.{ts,tsx} : Auto-generated contracts from ABI definitions in extensions
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Unified `Wallet` and `Account` interfaces in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support for in-app wallets (social/email login) in wallet architecture
Learnt from: MananTank
PR: thirdweb-dev/js#7152
File: apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/tokens/shared-page.tsx:41-48
Timestamp: 2025-05-26T16:28:50.772Z
Learning: The `projectMeta` prop is not required for the server-rendered `ContractTokensPage` component in the tokens shared page, unlike some other shared pages where it's needed for consistency.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support EIP-1193, EIP-5792, EIP-7702 standards in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Smart wallets with account abstraction in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Interactive UI that relies on hooks (`useState`, `useEffect`, React Query, wallet hooks).
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Anything that consumes hooks from `@tanstack/react-query` or thirdweb SDKs.
apps/portal/src/app/Header.tsx (10)
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/**/*.{ts,tsx} : Use `NavLink` (`@/components/ui/NavLink`) for internal navigation so active states are handled automatically.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Use `NavLink` for internal navigation with automatic active states in dashboard and playground apps
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/api/**/*.{ts,tsx} : Redirect logic using `redirect()` from `next/navigation`.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Server Components: Implement redirect logic with `redirect()` from `next/navigation`
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Components: Support fast transitions with prefetched data
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/hooks/**/*.{ts,tsx} : Prefer API routes or server actions to keep tokens secret; the browser only sees relative paths.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Server Side Data Fetching: Use `Authorization: Bearer` header – never embed tokens in URLs
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/hooks/**/*.{ts,tsx} : Keep `queryKey` stable and descriptive for cache hits.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Unified `Wallet` and `Account` interfaces in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Smart wallets with account abstraction in wallet architecture
apps/portal/src/app/transactions/stripe-payments/page.mdx (7)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support EIP-1193, EIP-5792, EIP-7702 standards in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/extensions/**/*.{ts,tsx} : Auto-generated contracts from ABI definitions in extensions
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support for in-app wallets (social/email login) in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to packages/thirdweb/src/exports/**/*.{ts,tsx} : Every public symbol must have comprehensive TSDoc with at least one `@example` block that compiles and custom annotation tags (`@beta`, `@internal`, `@experimental`)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Unified `Wallet` and `Account` interfaces in wallet architecture
Learnt from: MananTank
PR: thirdweb-dev/js#7315
File: apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/nft/launch-nft.tsx:153-226
Timestamp: 2025-06-10T00:50:20.795Z
Learning: In apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/nft/launch-nft.tsx, the updateStatus function correctly expects a complete MultiStepState["status"] object. For pending states, { type: "pending" } is the entire status object. For error states, { type: "error", message: React.ReactNode } is the entire status object. The current code incorrectly spreads the entire step object instead of passing just the status object.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to packages/thirdweb/src/exports/**/*.{ts,tsx} : Export everything via `exports/` directory, grouped by feature in the public API of the SDK
apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx (6)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support for in-app wallets (social/email login) in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Unified `Wallet` and `Account` interfaces in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support EIP-1193, EIP-5792, EIP-7702 standards in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Smart wallets with account abstraction in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Components: Handle interactive UI with React hooks (`useState`, `useEffect`, React Query, wallet hooks)
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Interactive UI that relies on hooks (`useState`, `useEffect`, React Query, wallet hooks).
🧬 Code Graph Analysis (1)
apps/portal/src/app/page.tsx (2)
apps/portal/src/icons/index.ts (2)
  • TypeScriptIcon (22-22)
  • ReactIcon (21-21)
apps/portal/src/components/Document/SDKCard.tsx (1)
  • SDKCard (4-27)
🪛 LanguageTool
apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx

[grammar] ~21-~21: Ensure spelling is correct
Context: ...stem Wallet Ecosystem wallets can span accross multiple apps and games. You can regist...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (8)
  • GitHub Check: Size
  • GitHub Check: E2E Tests (pnpm, webpack)
  • GitHub Check: E2E Tests (pnpm, esbuild)
  • GitHub Check: E2E Tests (pnpm, vite)
  • GitHub Check: Unit Tests
  • GitHub Check: Build Packages
  • GitHub Check: Lint Packages
  • GitHub Check: Analyze (javascript)
🔇 Additional comments (7)
apps/portal/src/app/Header.tsx (1)

43-43: LGTM! Navigation update aligns with the new transactions section.

The href change from "/engine" to "/transactions" correctly reflects the new transactions documentation structure introduced in this PR.

apps/portal/src/app/page.tsx (2)

92-105: LGTM! SDK reference links updated correctly.

The href updates to "/references/typescript/v5" and the addition of separate React and React Native cards improve the SDK documentation structure and navigation consistency.


184-184: LGTM! Transactions link updated to match new navigation.

The href change from "/engine" to "/transactions" correctly aligns with the new transactions documentation section.

apps/portal/src/app/transactions/session-keys/page.mdx (1)

1-223: Excellent comprehensive documentation for session keys.

This new documentation page provides thorough coverage of session keys implementation with:

  • Clear prerequisites and setup instructions
  • Well-structured code examples for TypeScript and React
  • Proper security considerations and best practices
  • Helpful troubleshooting section with error handling patterns

The content is well-organized and follows good documentation practices.

apps/portal/src/app/transactions/sponsor/page.mdx (1)

1-209: Well-structured gas sponsorship documentation.

This new documentation effectively explains gas sponsorship with:

  • Clear distinction between EIP-7702 and ERC-4337 approaches
  • Multi-platform code examples (HTTP, TypeScript, .NET)
  • Proper use of tabbed interface for better organization
  • Syntactically correct code examples across all platforms

The content is technically accurate and well-organized.

apps/portal/src/app/transactions/page.mdx (1)

1-557: Comprehensive multi-platform transactions documentation.

This new documentation page provides excellent coverage of transaction handling across all supported platforms with:

  • Clear installation and setup instructions for each platform
  • Well-structured code examples with proper syntax
  • Appropriate use of tabbed interface for platform-specific content
  • Helpful callouts for platform-specific considerations (like Expo Go limitations)
  • Good organization with consistent patterns across platforms

The documentation follows thirdweb's documentation standards and provides valuable developer guidance.

apps/portal/src/app/transactions/stripe-payments/page.mdx (1)

146-175: Webhook handler: body parsing config & header access may be outdated

export const config = { api: { bodyParser: false } }; applies to the pages router, not the app router. In the /app directory you need:

export const runtime = "node"; // or "edge" if supported
export const dynamic = "force-dynamic"; // ensures the route isn’t prerendered

Additionally headers() comes from next/headers; import it explicitly:

import { headers } from "next/headers";

If this is left as-is, webhook signature verification can silently fail.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

♻️ Duplicate comments (6)
apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx (2)

5-8: Fix incorrect asset paths (repeat of previous feedback).

../assets/… resolves to ecosystem/assets/, not ecosystem/set-up/assets/, which will 404.
Please change all four WalletConnect image imports to ./assets/….

-import WalletconnectCreate from "../assets/walletconnect-create.png";
-import WalletconnectUrl from "../assets/walletconnect-url.png";
-import WalletconnectWallet from "../assets/walletconnect-wallet.png";
-import WalletconnectGuide from "../assets/walletconnect-guide.png";
+import WalletconnectCreate from "./assets/walletconnect-create.png";
+import WalletconnectUrl from "./assets/walletconnect-url.png";
+import WalletconnectWallet from "./assets/walletconnect-wallet.png";
+import WalletconnectGuide from "./assets/walletconnect-guide.png";

110-120: Move DocImage components inside their corresponding <Step> blocks (repeat).

<Steps> must only contain <Step> children. Images placed outside a <Step> break the component contract and may render unpredictably.
Embed the three images (117-120) inside the first <Step> before </Step>, and the guide image (131) inside the second <Step> before its closing tag.

Also applies to: 131-132

apps/portal/src/app/transactions/stripe-payments/page.mdx (3)

49-60: Missing React / Stripe imports ‑ code will not compile
Same issue flagged in a previous review – useState, loadStripe, Elements, useElements, useStripe, and PaymentElement are used but never imported, so the example won’t even type-check / compile.


119-140: Still no validation of buyerWalletAddress
We previously flagged this – the handler trusts user input blindly. At minimum:

if (!buyerWalletAddress) {
  return NextResponse.json(
    { error: "buyerWalletAddress is required" },
    { status: 400 },
  );
}

62-70: No error handling around network request

fetch("/api/stripe-intent") is unguarded. A network error or a non-2xx status will surface as an unhandled promise rejection, which is not what you want readers to copy-paste.

-const resp = await fetch("/api/stripe-intent", { ... });
-const json = await resp.json();
-setClientSecret(json.clientSecret);
+try {
+  const resp = await fetch("/api/stripe-intent", { ... });
+  if (!resp.ok) throw new Error(`Status ${resp.status}`);
+  const { clientSecret } = await resp.json();
+  setClientSecret(clientSecret);
+} catch (err) {
+  console.error("Failed to retrieve Stripe client secret", err);
+  alert("Something went wrong, please refresh and try again.");
+}
apps/portal/src/app/transactions/page.mdx (1)

366-383: Same missing import in React Native snippet

prepareContractCall is again referenced without import. Please add it to keep snippets consistent and functional.

🧹 Nitpick comments (4)
apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx (1)

21-23: Correct typos in introductory paragraph.

accrossacross
ecossytemecosystem

-Ecosystem wallets can span accross multiple apps and games. You can register partners, setup access controls and sponsor gas for your entire ecossytem.
+Ecosystem wallets can span across multiple apps and games. You can register partners, set up access controls, and sponsor gas for your entire ecosystem.
apps/portal/src/app/transactions/stripe-payments/page.mdx (1)

15-21: Grammar + list formatting hurts credibility

“thirdweb the transactions API” is ungrammatical and the ordered list renders as three × “1.”. Small, but this is the very first paragraph visitors read.

-This guide uses thirdweb the transactions API to sell NFTs with credit card:
-
-1. A buyer pays with credit card.
-1. Upon payment, your backend calls the transactions API.
-1. the transactions API mints an NFT to the buyer's wallet.
+This guide uses thirdweb’s Transactions API to sell NFTs with credit-card payments:
+
+1. A buyer pays with a credit card.  
+2. Your backend calls the Transactions API.  
+3. The Transactions API mints an NFT to the buyer’s wallet.
apps/portal/src/app/transactions/page.mdx (1)

74-92: Invalid JSON – trailing comma

The HTTP payload contains a trailing comma after the params array (line 90). That is not valid JSON and will 400 on most HTTP clients.

-          "params": ["0x...", "1000000000000000000"],
+          "params": ["0x...", "1000000000000000000"]
apps/portal/src/app/transactions/sponsor/page.mdx (1)

66-76: Typo & trailing comma

  1. Comment reads “address address”.
  2. Trailing comma after the params array makes the JSON invalid.
-    "from": "0x...", // your server wallet **signer (EOA) address** address
+    "from": "0x...", // your server-wallet **signer (EOA) address**

-    "params": ["0x...", "1000000000000000000"],
+    "params": ["0x...", "1000000000000000000"]
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6c50048 and e4824fc.

⛔ Files ignored due to path filters (9)
  • apps/portal/src/app/transactions/distribute-tokens/assets/airdrop-nfts-1.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/distribute-tokens/assets/airdrop-nfts-2.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/distribute-tokens/assets/airdrop-nfts-3.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/distribute-tokens/assets/airdrop-nfts-4.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/distribute-tokens/assets/airdrop-overview.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/stripe-payments/assets/nft-checkout-1.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/stripe-payments/assets/nft-checkout-2.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/stripe-payments/assets/nft-checkout-3.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/stripe-payments/assets/nft-checkout-overview.png is excluded by !**/*.png
📒 Files selected for processing (20)
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/EngineCloudChartCard/EngineCloudBarChartCardUI.tsx (1 hunks)
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/layout.tsx (1 hunks)
  • apps/portal/src/app/Header.tsx (1 hunks)
  • apps/portal/src/app/connect/sidebar.tsx (2 hunks)
  • apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx (2 hunks)
  • apps/portal/src/app/connect/wallet/server/page.mdx (1 hunks)
  • apps/portal/src/app/connect/wallet/sign-in-methods/configure/page.mdx (1 hunks)
  • apps/portal/src/app/engine/v3/get-started/page.mdx (5 hunks)
  • apps/portal/src/app/page.tsx (2 hunks)
  • apps/portal/src/app/transactions/distribute-tokens/page.mdx (1 hunks)
  • apps/portal/src/app/transactions/layout.tsx (1 hunks)
  • apps/portal/src/app/transactions/monitor/page.mdx (1 hunks)
  • apps/portal/src/app/transactions/page.mdx (1 hunks)
  • apps/portal/src/app/transactions/session-keys/page.mdx (1 hunks)
  • apps/portal/src/app/transactions/sidebar.tsx (1 hunks)
  • apps/portal/src/app/transactions/sponsor/page.mdx (1 hunks)
  • apps/portal/src/app/transactions/stripe-payments/page.mdx (1 hunks)
  • apps/portal/src/app/vault/get-started/page.mdx (1 hunks)
  • apps/portal/src/icons/index.ts (1 hunks)
  • packages/thirdweb/src/engine/server-wallet.ts (0 hunks)
💤 Files with no reviewable changes (1)
  • packages/thirdweb/src/engine/server-wallet.ts
✅ Files skipped from review due to trivial changes (2)
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/EngineCloudChartCard/EngineCloudBarChartCardUI.tsx
  • apps/portal/src/app/connect/wallet/sign-in-methods/configure/page.mdx
🚧 Files skipped from review as they are similar to previous changes (13)
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/layout.tsx
  • apps/portal/src/app/Header.tsx
  • apps/portal/src/icons/index.ts
  • apps/portal/src/app/vault/get-started/page.mdx
  • apps/portal/src/app/transactions/layout.tsx
  • apps/portal/src/app/engine/v3/get-started/page.mdx
  • apps/portal/src/app/page.tsx
  • apps/portal/src/app/connect/sidebar.tsx
  • apps/portal/src/app/transactions/session-keys/page.mdx
  • apps/portal/src/app/transactions/monitor/page.mdx
  • apps/portal/src/app/transactions/distribute-tokens/page.mdx
  • apps/portal/src/app/transactions/sidebar.tsx
  • apps/portal/src/app/connect/wallet/server/page.mdx
🧰 Additional context used
🧠 Learnings (5)
📓 Common learnings
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Surface breaking changes prominently in PR descriptions
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support for in-app wallets (social/email login) in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Unified `Wallet` and `Account` interfaces in wallet architecture
apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx (16)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support for in-app wallets (social/email login) in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Unified `Wallet` and `Account` interfaces in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support EIP-1193, EIP-5792, EIP-7702 standards in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Smart wallets with account abstraction in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Components: Handle interactive UI with React hooks (`useState`, `useEffect`, React Query, wallet hooks)
Learnt from: MananTank
PR: thirdweb-dev/js#7315
File: apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/nft/launch-nft.tsx:153-226
Timestamp: 2025-06-10T00:50:20.795Z
Learning: In apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/nft/launch-nft.tsx, the updateStatus function correctly expects a complete MultiStepState["status"] object. For pending states, { type: "pending" } is the entire status object. For error states, { type: "error", message: React.ReactNode } is the entire status object. The current code incorrectly spreads the entire step object instead of passing just the status object.
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/**/*.{ts,tsx} : Prefer composable primitives over custom markup: `Button`, `Input`, `Select`, `Tabs`, `Card`, `Sidebar`, `Separator`, `Badge`.
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/**/*.{ts,tsx} : Reuse core UI primitives; avoid re-implementing buttons, cards, modals.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/feature/components/**/*.{tsx,ts} : Group feature-specific components under `feature/components/*` with barrel `index.ts`
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Interactive UI that relies on hooks (`useState`, `useEffect`, React Query, wallet hooks).
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/**/*.{ts,tsx} : Icons come from `lucide-react` or the project-specific `…/icons` exports – never embed raw SVG.
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/**/*.{ts,tsx} : Place the file close to its feature: `feature/components/MyComponent.tsx`.
Learnt from: saminacodes
PR: thirdweb-dev/js#7543
File: apps/portal/src/app/pay/page.mdx:4-4
Timestamp: 2025-07-07T21:21:47.488Z
Learning: In the thirdweb-dev/js repository, lucide-react icons must be imported with the "Icon" suffix (e.g., ExternalLinkIcon, RocketIcon) as required by the new linting rule, contrary to the typical lucide-react convention of importing without the suffix.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Import UI primitives from `@/components/ui/*` (Button, Input, Select, Tabs, Card, Sidebar, Badge, Separator) in dashboard and playground apps
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Use design system tokens (e.g., `bg-card`, `border-border`, `text-muted-foreground`)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Server Components (Node edge): Start files with `import "server-only";`
apps/portal/src/app/transactions/sponsor/page.mdx (5)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support EIP-1193, EIP-5792, EIP-7702 standards in wallet architecture
Learnt from: MananTank
PR: thirdweb-dev/js#7152
File: apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/tokens/shared-page.tsx:41-48
Timestamp: 2025-05-26T16:28:50.772Z
Learning: The `projectMeta` prop is not required for the server-rendered `ContractTokensPage` component in the tokens shared page, unlike some other shared pages where it's needed for consistency.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/extensions/**/*.{ts,tsx} : Auto-generated contracts from ABI definitions in extensions
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support for in-app wallets (social/email login) in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Smart wallets with account abstraction in wallet architecture
apps/portal/src/app/transactions/stripe-payments/page.mdx (20)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support EIP-1193, EIP-5792, EIP-7702 standards in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/extensions/**/*.{ts,tsx} : Auto-generated contracts from ABI definitions in extensions
Learnt from: MananTank
PR: thirdweb-dev/js#7285
File: apps/dashboard/src/app/(app)/(dashboard)/published-contract/components/uri-based-deploy.tsx:57-57
Timestamp: 2025-06-05T13:59:49.886Z
Learning: In the thirdweb dashboard Next.js app, when using loginRedirect() in server components, ensure to add a return statement after the redirect call to prevent further code execution and potential security issues.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Side Data Fetching: Keep tokens secret via internal API routes or server actions
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Server Components (Node edge): Start files with `import "server-only";`
Learnt from: jnsdls
PR: thirdweb-dev/js#6929
File: apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/insight/webhooks/page.tsx:14-19
Timestamp: 2025-05-21T05:17:31.283Z
Learning: In Next.js server components, the `params` object can sometimes be a Promise that needs to be awaited, despite type annotations suggesting otherwise. In apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/insight/webhooks/page.tsx, it's necessary to await the params object before accessing its properties.
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/api/**/*.{ts,tsx} : Prefix files with `import "server-only";` so they never end up in the client bundle.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Server Side Data Fetching: Use `Authorization: Bearer` header – never embed tokens in URLs
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Smart wallets with account abstraction in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/hooks/**/*.{ts,tsx} : Prefer API routes or server actions to keep tokens secret; the browser only sees relative paths.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Server Side Data Fetching: Always call `getAuthToken()` to retrieve JWT from cookies
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support for in-app wallets (social/email login) in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Components: Handle interactive UI with React hooks (`useState`, `useEffect`, React Query, wallet hooks)
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Interactive UI that relies on hooks (`useState`, `useEffect`, React Query, wallet hooks).
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Anything that consumes hooks from `@tanstack/react-query` or thirdweb SDKs.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Components (browser): Begin files with `'use client';`
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Client components must start with `'use client';` before imports.
Learnt from: MananTank
PR: thirdweb-dev/js#7315
File: apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/nft/launch-nft.tsx:153-226
Timestamp: 2025-06-10T00:50:20.795Z
Learning: In apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/nft/launch-nft.tsx, the updateStatus function correctly expects a complete MultiStepState["status"] object. For pending states, { type: "pending" } is the entire status object. For error states, { type: "error", message: React.ReactNode } is the entire status object. The current code incorrectly spreads the entire step object instead of passing just the status object.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Side Data Fetching: Wrap calls in React Query (`@tanstack/react-query`)
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/pages/*.client.tsx : Pages requiring fast transitions where data is prefetched on the client.
apps/portal/src/app/transactions/page.mdx (16)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Unified `Wallet` and `Account` interfaces in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support for in-app wallets (social/email login) in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Smart wallets with account abstraction in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support EIP-1193, EIP-5792, EIP-7702 standards in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/extensions/**/*.{ts,tsx} : Auto-generated contracts from ABI definitions in extensions
Learnt from: MananTank
PR: thirdweb-dev/js#7152
File: apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/tokens/shared-page.tsx:41-48
Timestamp: 2025-05-26T16:28:50.772Z
Learning: The `projectMeta` prop is not required for the server-rendered `ContractTokensPage` component in the tokens shared page, unlike some other shared pages where it's needed for consistency.
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Interactive UI that relies on hooks (`useState`, `useEffect`, React Query, wallet hooks).
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Components: Support fast transitions with prefetched data
Learnt from: MananTank
PR: thirdweb-dev/js#7434
File: apps/dashboard/src/app/(app)/team/~/~/contract/[chain]/[contractAddress]/components/project-selector.tsx:62-76
Timestamp: 2025-06-24T21:38:03.155Z
Learning: In the project-selector.tsx component for contract imports, the addToProject.mutate() call is intentionally not awaited (fire-and-forget pattern) to allow immediate navigation to the contract page while the import happens in the background. This is a deliberate design choice to prioritize user experience.
Learnt from: MananTank
PR: thirdweb-dev/js#7315
File: apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/nft/launch-nft.tsx:153-226
Timestamp: 2025-06-10T00:50:20.795Z
Learning: In apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/nft/launch-nft.tsx, the updateStatus function correctly expects a complete MultiStepState["status"] object. For pending states, { type: "pending" } is the entire status object. For error states, { type: "error", message: React.ReactNode } is the entire status object. The current code incorrectly spreads the entire step object instead of passing just the status object.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Components: Handle interactive UI with React hooks (`useState`, `useEffect`, React Query, wallet hooks)
Learnt from: MananTank
PR: thirdweb-dev/js#7177
File: apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/public-pages/erc20/_hooks/useTokenPriceData.ts:49-49
Timestamp: 2025-05-27T19:55:25.056Z
Learning: In the ERC20 public pages token price data hook (`useTokenPriceData.ts`), direct array access on `json.data[0]` without optional chaining is intentionally correct and should not be changed to use safety checks.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/exports/react.native.ts : React Native specific exports are in `src/exports/react.native.ts`
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Side Data Fetching: Wrap calls in React Query (`@tanstack/react-query`)
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Anything that consumes hooks from `@tanstack/react-query` or thirdweb SDKs.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Side Data Fetching: Use descriptive, stable `queryKeys` for cache hits
🪛 LanguageTool
apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx

[grammar] ~21-~21: Ensure spelling is correct
Context: ...stem Wallet Ecosystem wallets can span accross multiple apps and games. You can regist...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (8)
  • GitHub Check: E2E Tests (pnpm, esbuild)
  • GitHub Check: E2E Tests (pnpm, vite)
  • GitHub Check: Size
  • GitHub Check: E2E Tests (pnpm, webpack)
  • GitHub Check: Unit Tests
  • GitHub Check: Lint Packages
  • GitHub Check: Build Packages
  • GitHub Check: Analyze (javascript)

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (5)
apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx (2)

111-120: Images must be children of <Step> – same issue as last review.

<Steps> only accepts <Step> nodes. Leaving DocImage tags outside their Steps violates the contract and breaks rendering.

Move the three images into the first Step and the guide image into the second:

-</Step>

-<DocImage src={WalletconnectCreate} />
-<DocImage src={WalletconnectUrl} />
-<DocImage src={WalletconnectWallet} />
+  <DocImage src={WalletconnectCreate} />
+  <DocImage src={WalletconnectUrl} />
+  <DocImage src={WalletconnectWallet} />
+</Step>-</Step>

-<DocImage src={WalletconnectGuide} />
+  <DocImage src={WalletconnectGuide} />
+</Step>

Also applies to: 131-131


5-8: Fix broken image paths – use ./assets, not ../assets.

page.mdx lives in ecosystem/set-up/; ../assets resolves to ecosystem/assets/, so every image 404s at build-time. Point to the local assets folder instead.

-import WalletconnectCreate from "../assets/walletconnect-create.png";
-import WalletconnectUrl from "../assets/walletconnect-url.png";
-import WalletconnectWallet from "../assets/walletconnect-wallet.png";
-import WalletconnectGuide from "../assets/walletconnect-guide.png";
+import WalletconnectCreate from "./assets/walletconnect-create.png";
+import WalletconnectUrl from "./assets/walletconnect-url.png";
+import WalletconnectWallet from "./assets/walletconnect-wallet.png";
+import WalletconnectGuide from "./assets/walletconnect-guide.png";
apps/portal/src/app/transactions/stripe-payments/page.mdx (3)

119-141: Guard buyerWalletAddress and surface Stripe errors

buyerWalletAddress is trusted blindly; an empty string reaches metadata and later breaks the mint call. Also, any stripe.paymentIntents.create failure will bubble as 500 without context.

-  const { buyerWalletAddress } = await req.json();
+  const { buyerWalletAddress } = await req.json();
+  if (!buyerWalletAddress) {
+    return NextResponse.json(
+      { error: "buyerWalletAddress is required" },
+      { status: 400 },
+    );
+  }-  const paymentIntent = await stripe.paymentIntents.create({
+  let paymentIntent;
+  try {
+    paymentIntent = await stripe.paymentIntents.create({-  });
+    });
+  } catch (e) {
+    return NextResponse.json({ error: (e as Error).message }, { status: 500 });
+  }

150-170: Example webhook is missing critical imports & safer header handling

Stripe, NextRequest, NextResponse, headers, and defineChain are used but never imported, so the sample will not compile.

-import { createThirdwebClient, getContract, Engine } from "thirdweb";
+import { createThirdwebClient, getContract, Engine, defineChain } from "thirdweb";
+import { NextRequest, NextResponse } from "next/server";
+import { headers } from "next/headers";
+import { Stripe } from "stripe";

Additionally, guard against a null signature:

-const signature = headers().get("stripe-signature");
+const signature = headers().get("stripe-signature") ?? "";

61-70: Add basic error handling around /api/stripe-intent fetch

A failed network request or non-200 response will currently throw and leave the UI stuck.

-  const resp = await fetch("/api/stripe-intent", {
+  let resp;
+  try {
+    resp = await fetch("/api/stripe-intent", {
       method: "POST",
       headers: { "Content-Type": "application/json" },
       body: JSON.stringify({ buyerWalletAddress }),
-  });
-  const json = await resp.json();
-  setClientSecret(json.clientSecret);
+    });
+    if (!resp.ok) throw new Error("Failed to create intent");
+    const { clientSecret } = await resp.json();
+    setClientSecret(clientSecret);
+  } catch (err) {
+    console.error(err);
+    alert("Unable to start checkout. Please try again.");
+  }
🧹 Nitpick comments (2)
apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx (1)

21-22: Spelling tweaks for polish.

-Ecosystem wallets can span accross multiple apps and games. You can register partners, setup access controls and sponsor gas for your entire ecossytem.
+Ecosystem wallets can span across multiple apps and games. You can register partners, set up access controls, and sponsor gas for your entire ecosystem.
apps/portal/src/app/transactions/stripe-payments/page.mdx (1)

15-22: Minor grammar & clarity issues in the intro

“uses thirdweb the transactions API” reads awkwardly and the numbering “1.” for every bullet is rendered fine in Markdown but looks sloppy in source.
Consider:

This guide uses thirdweb **Transactions API** to sell NFTs with credit-card payments:

1. A buyer pays with a credit card.  
2. Upon payment, your backend calls the Transactions API.  
3. The Transactions API mints an NFT to the buyer's wallet.
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e4824fc and 2b83af4.

⛔ Files ignored due to path filters (9)
  • apps/portal/src/app/transactions/distribute-tokens/assets/airdrop-nfts-1.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/distribute-tokens/assets/airdrop-nfts-2.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/distribute-tokens/assets/airdrop-nfts-3.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/distribute-tokens/assets/airdrop-nfts-4.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/distribute-tokens/assets/airdrop-overview.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/stripe-payments/assets/nft-checkout-1.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/stripe-payments/assets/nft-checkout-2.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/stripe-payments/assets/nft-checkout-3.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/stripe-payments/assets/nft-checkout-overview.png is excluded by !**/*.png
📒 Files selected for processing (20)
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/EngineCloudChartCard/EngineCloudBarChartCardUI.tsx (1 hunks)
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/layout.tsx (1 hunks)
  • apps/portal/src/app/Header.tsx (1 hunks)
  • apps/portal/src/app/connect/sidebar.tsx (2 hunks)
  • apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx (2 hunks)
  • apps/portal/src/app/connect/wallet/server/page.mdx (1 hunks)
  • apps/portal/src/app/connect/wallet/sign-in-methods/configure/page.mdx (1 hunks)
  • apps/portal/src/app/engine/v3/get-started/page.mdx (5 hunks)
  • apps/portal/src/app/page.tsx (2 hunks)
  • apps/portal/src/app/transactions/distribute-tokens/page.mdx (1 hunks)
  • apps/portal/src/app/transactions/layout.tsx (1 hunks)
  • apps/portal/src/app/transactions/monitor/page.mdx (1 hunks)
  • apps/portal/src/app/transactions/page.mdx (1 hunks)
  • apps/portal/src/app/transactions/session-keys/page.mdx (1 hunks)
  • apps/portal/src/app/transactions/sidebar.tsx (1 hunks)
  • apps/portal/src/app/transactions/sponsor/page.mdx (1 hunks)
  • apps/portal/src/app/transactions/stripe-payments/page.mdx (1 hunks)
  • apps/portal/src/app/vault/get-started/page.mdx (1 hunks)
  • apps/portal/src/icons/index.ts (1 hunks)
  • packages/thirdweb/src/engine/server-wallet.ts (0 hunks)
💤 Files with no reviewable changes (1)
  • packages/thirdweb/src/engine/server-wallet.ts
✅ Files skipped from review due to trivial changes (1)
  • apps/portal/src/app/transactions/session-keys/page.mdx
🚧 Files skipped from review as they are similar to previous changes (16)
  • apps/portal/src/app/connect/wallet/sign-in-methods/configure/page.mdx
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/layout.tsx
  • apps/portal/src/app/Header.tsx
  • apps/portal/src/app/engine/v3/get-started/page.mdx
  • apps/portal/src/app/vault/get-started/page.mdx
  • apps/portal/src/app/transactions/layout.tsx
  • apps/portal/src/icons/index.ts
  • apps/portal/src/app/connect/sidebar.tsx
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/EngineCloudChartCard/EngineCloudBarChartCardUI.tsx
  • apps/portal/src/app/page.tsx
  • apps/portal/src/app/transactions/sidebar.tsx
  • apps/portal/src/app/transactions/distribute-tokens/page.mdx
  • apps/portal/src/app/transactions/monitor/page.mdx
  • apps/portal/src/app/connect/wallet/server/page.mdx
  • apps/portal/src/app/transactions/sponsor/page.mdx
  • apps/portal/src/app/transactions/page.mdx
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Surface breaking changes prominently in PR descriptions
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support EIP-1193, EIP-5792, EIP-7702 standards in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support for in-app wallets (social/email login) in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Unified `Wallet` and `Account` interfaces in wallet architecture
apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx (16)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support for in-app wallets (social/email login) in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Unified `Wallet` and `Account` interfaces in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support EIP-1193, EIP-5792, EIP-7702 standards in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Smart wallets with account abstraction in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Components: Handle interactive UI with React hooks (`useState`, `useEffect`, React Query, wallet hooks)
Learnt from: MananTank
PR: thirdweb-dev/js#7315
File: apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/nft/launch-nft.tsx:153-226
Timestamp: 2025-06-10T00:50:20.795Z
Learning: In apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/nft/launch-nft.tsx, the updateStatus function correctly expects a complete MultiStepState["status"] object. For pending states, { type: "pending" } is the entire status object. For error states, { type: "error", message: React.ReactNode } is the entire status object. The current code incorrectly spreads the entire step object instead of passing just the status object.
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/**/*.{ts,tsx} : Prefer composable primitives over custom markup: `Button`, `Input`, `Select`, `Tabs`, `Card`, `Sidebar`, `Separator`, `Badge`.
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/**/*.{ts,tsx} : Reuse core UI primitives; avoid re-implementing buttons, cards, modals.
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Interactive UI that relies on hooks (`useState`, `useEffect`, React Query, wallet hooks).
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/feature/components/**/*.{tsx,ts} : Group feature-specific components under `feature/components/*` with barrel `index.ts`
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/**/*.{ts,tsx} : Icons come from `lucide-react` or the project-specific `…/icons` exports – never embed raw SVG.
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/**/*.{ts,tsx} : Place the file close to its feature: `feature/components/MyComponent.tsx`.
Learnt from: saminacodes
PR: thirdweb-dev/js#7543
File: apps/portal/src/app/pay/page.mdx:4-4
Timestamp: 2025-07-07T21:21:47.488Z
Learning: In the thirdweb-dev/js repository, lucide-react icons must be imported with the "Icon" suffix (e.g., ExternalLinkIcon, RocketIcon) as required by the new linting rule, contrary to the typical lucide-react convention of importing without the suffix.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Import UI primitives from `@/components/ui/*` (Button, Input, Select, Tabs, Card, Sidebar, Badge, Separator) in dashboard and playground apps
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Use design system tokens (e.g., `bg-card`, `border-border`, `text-muted-foreground`)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Server Components (Node edge): Start files with `import "server-only";`
apps/portal/src/app/transactions/stripe-payments/page.mdx (26)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support EIP-1193, EIP-5792, EIP-7702 standards in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/extensions/**/*.{ts,tsx} : Auto-generated contracts from ABI definitions in extensions
Learnt from: MananTank
PR: thirdweb-dev/js#7285
File: apps/dashboard/src/app/(app)/(dashboard)/published-contract/components/uri-based-deploy.tsx:57-57
Timestamp: 2025-06-05T13:59:49.886Z
Learning: In the thirdweb dashboard Next.js app, when using loginRedirect() in server components, ensure to add a return statement after the redirect call to prevent further code execution and potential security issues.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Side Data Fetching: Keep tokens secret via internal API routes or server actions
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Server Components (Node edge): Start files with `import "server-only";`
Learnt from: jnsdls
PR: thirdweb-dev/js#6929
File: apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/insight/webhooks/page.tsx:14-19
Timestamp: 2025-05-21T05:17:31.283Z
Learning: In Next.js server components, the `params` object can sometimes be a Promise that needs to be awaited, despite type annotations suggesting otherwise. In apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/insight/webhooks/page.tsx, it's necessary to await the params object before accessing its properties.
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/api/**/*.{ts,tsx} : Prefix files with `import "server-only";` so they never end up in the client bundle.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Server Side Data Fetching: Use `Authorization: Bearer` header – never embed tokens in URLs
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Smart wallets with account abstraction in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/hooks/**/*.{ts,tsx} : Prefer API routes or server actions to keep tokens secret; the browser only sees relative paths.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Server Side Data Fetching: Always call `getAuthToken()` to retrieve JWT from cookies
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support for in-app wallets (social/email login) in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Components: Handle interactive UI with React hooks (`useState`, `useEffect`, React Query, wallet hooks)
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Interactive UI that relies on hooks (`useState`, `useEffect`, React Query, wallet hooks).
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Anything that consumes hooks from `@tanstack/react-query` or thirdweb SDKs.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Components (browser): Begin files with `'use client';`
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Client components must start with `'use client';` before imports.
Learnt from: MananTank
PR: thirdweb-dev/js#7315
File: apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/nft/launch-nft.tsx:153-226
Timestamp: 2025-06-10T00:50:20.795Z
Learning: In apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/nft/launch-nft.tsx, the updateStatus function correctly expects a complete MultiStepState["status"] object. For pending states, { type: "pending" } is the entire status object. For error states, { type: "error", message: React.ReactNode } is the entire status object. The current code incorrectly spreads the entire step object instead of passing just the status object.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Side Data Fetching: Wrap calls in React Query (`@tanstack/react-query`)
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/pages/*.client.tsx : Pages requiring fast transitions where data is prefetched on the client.
Learnt from: MananTank
PR: thirdweb-dev/js#7152
File: apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/claim-conditions/shared-claim-conditions-page.tsx:43-49
Timestamp: 2025-05-26T16:31:02.480Z
Learning: In the thirdweb dashboard codebase, when `redirectToContractLandingPage()` is called, an explicit return statement is not required afterward because the function internally calls Next.js's `redirect()` which throws an error to halt execution.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Server Components: Read cookies/headers with `next/headers`
Learnt from: arcoraven
PR: thirdweb-dev/js#7505
File: apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/analytics/components/WebhookAnalyticsCharts.tsx:186-204
Timestamp: 2025-07-10T10:18:33.238Z
Learning: The ThirdwebBarChart component in apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/analytics/components/WebhookAnalyticsCharts.tsx does not accept standard accessibility props like `aria-label` and `role` in its TypeScript interface, causing compilation errors when added.
Learnt from: MananTank
PR: thirdweb-dev/js#7298
File: apps/dashboard/src/app/nebula-app/move-funds/move-funds.tsx:424-424
Timestamp: 2025-06-06T23:46:08.795Z
Learning: The thirdweb project has an ESLint rule that restricts direct usage of `defineChain`. When it's necessary to use `defineChain` directly, it's acceptable to disable the rule with `// eslint-disable-next-line no-restricted-syntax`.
Learnt from: MananTank
PR: thirdweb-dev/js#7152
File: apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/analytics/shared-analytics-page.tsx:33-39
Timestamp: 2025-05-26T16:30:24.965Z
Learning: In the thirdweb dashboard codebase, redirectToContractLandingPage function already handles execution termination internally (likely using Next.js redirect() which throws an exception), so no explicit return statement is needed after calling it.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Analytics Events: Never import `posthog-js` in server components
🪛 LanguageTool
apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx

[grammar] ~21-~21: Ensure spelling is correct
Context: ...stem Wallet Ecosystem wallets can span accross multiple apps and games. You can regist...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: Size
  • GitHub Check: Lint Packages
  • GitHub Check: Analyze (javascript)

Comment on lines +48 to +56
```tsx
import { createThirdwebClient } from "thirdweb";
import { ThirdwebProvider, ConnectButton, useActiveAccount } from "thirdweb/react";

const client = createThirdwebClient({
clientId: "your-client-id",
});

// src/app/page.tsx
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Missing 'use client'; and several essential imports

The snippet is a client component (it uses hooks) but lacks the directive and React/Stripe imports, so readers who copy it will hit compile/runtime errors.

+'use client';
+
 import { useState } from "react";
 import { loadStripe } from "@stripe/stripe-js";
-import { Elements } from "@stripe/react-stripe-js";
+import {
+  Elements,
+  PaymentElement,
+  useElements,
+  useStripe,
+} from "@stripe/react-stripe-js";

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In apps/portal/src/app/transactions/stripe-payments/page.mdx around lines 48 to
56, the component uses hooks but is missing the 'use client' directive and
necessary imports like React and Stripe. Add the 'use client'; directive at the
top of the file and include all essential imports such as React and Stripe to
ensure the component compiles and runs correctly.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (6)
apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx (2)

5-8: Fix inconsistent asset import paths

The walletconnect-* images are imported from ../assets, whereas every other image in this doc lives under ./assets. Unless you intentionally placed these images in the parent folder, this will 404 at build time.

-import WalletconnectCreate from "../assets/walletconnect-create.png";
-import WalletconnectUrl from "../assets/walletconnect-url.png";
-import WalletconnectWallet from "../assets/walletconnect-wallet.png";
-import WalletconnectGuide from "../assets/walletconnect-guide.png";
+import WalletconnectCreate from "./assets/walletconnect-create.png";
+import WalletconnectUrl from "./assets/walletconnect-url.png";
+import WalletconnectWallet from "./assets/walletconnect-wallet.png";
+import WalletconnectGuide from "./assets/walletconnect-guide.png";

117-131: Keep DocImage inside its corresponding <Step>

<Steps> only expects <Step> children. Placing DocImage components between steps breaks the contract and may render unpredictably. Nest the images just before the closing </Step> of the section they illustrate.

apps/portal/src/app/transactions/page.mdx (1)

154-159: wallet is still undefined – example will not compile

wallet.getAccount() is referenced but no wallet object is declared or imported anywhere in the snippet, so readers who copy-paste this code will hit a TS error.

apps/portal/src/app/transactions/stripe-payments/page.mdx (3)

49-59: Missing all React / Stripe imports and "use client" directive

useState, loadStripe, Elements, useElements, useStripe, PaymentElement (and the "use client" pragma) are still absent, so this snippet will not compile for anyone following the guide.


123-141: Still no validation of buyerWalletAddress

The POST /api/stripe-intent handler trusts buyerWalletAddress blindly. A simple guard prevents bad requests and avoids Stripe metadata pollution.

 const { buyerWalletAddress } = await req.json();
+if (!buyerWalletAddress) {
+  return NextResponse.json(
+    { error: "buyerWalletAddress is required" },
+    { status: 400 },
+  );
+}

150-176: Webhook example still missing critical imports & null-safe header access

Stripe, NextRequest, NextResponse, defineChain, and headers are used without imports, and headers().get("stripe-signature") can return null.

🧹 Nitpick comments (1)
apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx (1)

21-24: Correct spelling & wording in the introduction

Minor typos hurt credibility:

-Ecosystem wallets can span accross multiple apps and games. You can register partners, setup access controls and sponsor gas for your entire ecossytem.
+Ecosystem wallets can span across multiple apps and games. You can register partners, set up access controls, and sponsor gas for your entire ecosystem.
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2b83af4 and 0a50fb8.

⛔ Files ignored due to path filters (9)
  • apps/portal/src/app/transactions/distribute-tokens/assets/airdrop-nfts-1.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/distribute-tokens/assets/airdrop-nfts-2.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/distribute-tokens/assets/airdrop-nfts-3.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/distribute-tokens/assets/airdrop-nfts-4.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/distribute-tokens/assets/airdrop-overview.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/stripe-payments/assets/nft-checkout-1.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/stripe-payments/assets/nft-checkout-2.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/stripe-payments/assets/nft-checkout-3.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/stripe-payments/assets/nft-checkout-overview.png is excluded by !**/*.png
📒 Files selected for processing (20)
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/EngineCloudChartCard/EngineCloudBarChartCardUI.tsx (1 hunks)
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/layout.tsx (1 hunks)
  • apps/portal/src/app/Header.tsx (1 hunks)
  • apps/portal/src/app/connect/sidebar.tsx (2 hunks)
  • apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx (2 hunks)
  • apps/portal/src/app/connect/wallet/server/page.mdx (1 hunks)
  • apps/portal/src/app/connect/wallet/sign-in-methods/configure/page.mdx (1 hunks)
  • apps/portal/src/app/engine/v3/get-started/page.mdx (5 hunks)
  • apps/portal/src/app/page.tsx (2 hunks)
  • apps/portal/src/app/transactions/distribute-tokens/page.mdx (1 hunks)
  • apps/portal/src/app/transactions/layout.tsx (1 hunks)
  • apps/portal/src/app/transactions/monitor/page.mdx (1 hunks)
  • apps/portal/src/app/transactions/page.mdx (1 hunks)
  • apps/portal/src/app/transactions/session-keys/page.mdx (1 hunks)
  • apps/portal/src/app/transactions/sidebar.tsx (1 hunks)
  • apps/portal/src/app/transactions/sponsor/page.mdx (1 hunks)
  • apps/portal/src/app/transactions/stripe-payments/page.mdx (1 hunks)
  • apps/portal/src/app/vault/get-started/page.mdx (1 hunks)
  • apps/portal/src/icons/index.ts (1 hunks)
  • packages/thirdweb/src/engine/server-wallet.ts (0 hunks)
💤 Files with no reviewable changes (1)
  • packages/thirdweb/src/engine/server-wallet.ts
✅ Files skipped from review due to trivial changes (1)
  • apps/portal/src/app/transactions/session-keys/page.mdx
🚧 Files skipped from review as they are similar to previous changes (15)
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/EngineCloudChartCard/EngineCloudBarChartCardUI.tsx
  • apps/portal/src/app/connect/wallet/sign-in-methods/configure/page.mdx
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/layout.tsx
  • apps/portal/src/app/vault/get-started/page.mdx
  • apps/portal/src/icons/index.ts
  • apps/portal/src/app/Header.tsx
  • apps/portal/src/app/transactions/layout.tsx
  • apps/portal/src/app/connect/sidebar.tsx
  • apps/portal/src/app/engine/v3/get-started/page.mdx
  • apps/portal/src/app/page.tsx
  • apps/portal/src/app/transactions/monitor/page.mdx
  • apps/portal/src/app/transactions/distribute-tokens/page.mdx
  • apps/portal/src/app/connect/wallet/server/page.mdx
  • apps/portal/src/app/transactions/sponsor/page.mdx
  • apps/portal/src/app/transactions/sidebar.tsx
🧰 Additional context used
🧠 Learnings (4)
📓 Common learnings
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Surface breaking changes prominently in PR descriptions
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support EIP-1193, EIP-5792, EIP-7702 standards in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support for in-app wallets (social/email login) in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Unified `Wallet` and `Account` interfaces in wallet architecture
apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx (16)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support for in-app wallets (social/email login) in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Unified `Wallet` and `Account` interfaces in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support EIP-1193, EIP-5792, EIP-7702 standards in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Smart wallets with account abstraction in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Components: Handle interactive UI with React hooks (`useState`, `useEffect`, React Query, wallet hooks)
Learnt from: MananTank
PR: thirdweb-dev/js#7315
File: apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/nft/launch-nft.tsx:153-226
Timestamp: 2025-06-10T00:50:20.795Z
Learning: In apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/nft/launch-nft.tsx, the updateStatus function correctly expects a complete MultiStepState["status"] object. For pending states, { type: "pending" } is the entire status object. For error states, { type: "error", message: React.ReactNode } is the entire status object. The current code incorrectly spreads the entire step object instead of passing just the status object.
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/**/*.{ts,tsx} : Prefer composable primitives over custom markup: `Button`, `Input`, `Select`, `Tabs`, `Card`, `Sidebar`, `Separator`, `Badge`.
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/**/*.{ts,tsx} : Reuse core UI primitives; avoid re-implementing buttons, cards, modals.
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Interactive UI that relies on hooks (`useState`, `useEffect`, React Query, wallet hooks).
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/feature/components/**/*.{tsx,ts} : Group feature-specific components under `feature/components/*` with barrel `index.ts`
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/**/*.{ts,tsx} : Icons come from `lucide-react` or the project-specific `…/icons` exports – never embed raw SVG.
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/**/*.{ts,tsx} : Place the file close to its feature: `feature/components/MyComponent.tsx`.
Learnt from: saminacodes
PR: thirdweb-dev/js#7543
File: apps/portal/src/app/pay/page.mdx:4-4
Timestamp: 2025-07-07T21:21:47.488Z
Learning: In the thirdweb-dev/js repository, lucide-react icons must be imported with the "Icon" suffix (e.g., ExternalLinkIcon, RocketIcon) as required by the new linting rule, contrary to the typical lucide-react convention of importing without the suffix.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Import UI primitives from `@/components/ui/*` (Button, Input, Select, Tabs, Card, Sidebar, Badge, Separator) in dashboard and playground apps
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Use design system tokens (e.g., `bg-card`, `border-border`, `text-muted-foreground`)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Server Components (Node edge): Start files with `import "server-only";`
apps/portal/src/app/transactions/stripe-payments/page.mdx (29)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support EIP-1193, EIP-5792, EIP-7702 standards in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to packages/thirdweb/src/exports/**/*.{ts,tsx} : Every public symbol must have comprehensive TSDoc with at least one `@example` block that compiles and custom annotation tags (`@beta`, `@internal`, `@experimental`)
Learnt from: MananTank
PR: thirdweb-dev/js#7285
File: apps/dashboard/src/app/(app)/(dashboard)/published-contract/components/uri-based-deploy.tsx:57-57
Timestamp: 2025-06-05T13:59:49.886Z
Learning: In the thirdweb dashboard Next.js app, when using loginRedirect() in server components, ensure to add a return statement after the redirect call to prevent further code execution and potential security issues.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Side Data Fetching: Keep tokens secret via internal API routes or server actions
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Server Components (Node edge): Start files with `import "server-only";`
Learnt from: jnsdls
PR: thirdweb-dev/js#6929
File: apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/insight/webhooks/page.tsx:14-19
Timestamp: 2025-05-21T05:17:31.283Z
Learning: In Next.js server components, the `params` object can sometimes be a Promise that needs to be awaited, despite type annotations suggesting otherwise. In apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/insight/webhooks/page.tsx, it's necessary to await the params object before accessing its properties.
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/api/**/*.{ts,tsx} : Prefix files with `import "server-only";` so they never end up in the client bundle.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Server Side Data Fetching: Use `Authorization: Bearer` header – never embed tokens in URLs
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Smart wallets with account abstraction in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/hooks/**/*.{ts,tsx} : Prefer API routes or server actions to keep tokens secret; the browser only sees relative paths.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Server Side Data Fetching: Always call `getAuthToken()` to retrieve JWT from cookies
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support for in-app wallets (social/email login) in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Components: Handle interactive UI with React hooks (`useState`, `useEffect`, React Query, wallet hooks)
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Interactive UI that relies on hooks (`useState`, `useEffect`, React Query, wallet hooks).
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Anything that consumes hooks from `@tanstack/react-query` or thirdweb SDKs.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Components (browser): Begin files with `'use client';`
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Client components must start with `'use client';` before imports.
Learnt from: MananTank
PR: thirdweb-dev/js#7315
File: apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/nft/launch-nft.tsx:153-226
Timestamp: 2025-06-10T00:50:20.795Z
Learning: In apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/nft/launch-nft.tsx, the updateStatus function correctly expects a complete MultiStepState["status"] object. For pending states, { type: "pending" } is the entire status object. For error states, { type: "error", message: React.ReactNode } is the entire status object. The current code incorrectly spreads the entire step object instead of passing just the status object.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Side Data Fetching: Wrap calls in React Query (`@tanstack/react-query`)
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/pages/*.client.tsx : Pages requiring fast transitions where data is prefetched on the client.
Learnt from: MananTank
PR: thirdweb-dev/js#7152
File: apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/claim-conditions/shared-claim-conditions-page.tsx:43-49
Timestamp: 2025-05-26T16:31:02.480Z
Learning: In the thirdweb dashboard codebase, when `redirectToContractLandingPage()` is called, an explicit return statement is not required afterward because the function internally calls Next.js's `redirect()` which throws an error to halt execution.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Server Components: Read cookies/headers with `next/headers`
Learnt from: arcoraven
PR: thirdweb-dev/js#7505
File: apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/analytics/components/WebhookAnalyticsCharts.tsx:186-204
Timestamp: 2025-07-10T10:18:33.238Z
Learning: The ThirdwebBarChart component in apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/analytics/components/WebhookAnalyticsCharts.tsx does not accept standard accessibility props like `aria-label` and `role` in its TypeScript interface, causing compilation errors when added.
Learnt from: MananTank
PR: thirdweb-dev/js#7298
File: apps/dashboard/src/app/nebula-app/move-funds/move-funds.tsx:424-424
Timestamp: 2025-06-06T23:46:08.795Z
Learning: The thirdweb project has an ESLint rule that restricts direct usage of `defineChain`. When it's necessary to use `defineChain` directly, it's acceptable to disable the rule with `// eslint-disable-next-line no-restricted-syntax`.
Learnt from: MananTank
PR: thirdweb-dev/js#7152
File: apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/analytics/shared-analytics-page.tsx:33-39
Timestamp: 2025-05-26T16:30:24.965Z
Learning: In the thirdweb dashboard codebase, redirectToContractLandingPage function already handles execution termination internally (likely using Next.js redirect() which throws an exception), so no explicit return statement is needed after calling it.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Analytics Events: Never import `posthog-js` in server components
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Import UI primitives from `@/components/ui/*` (Button, Input, Select, Tabs, Card, Sidebar, Badge, Separator) in dashboard and playground apps
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Components that listen to user events, animations or live updates.
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/hooks/**/*.{ts,tsx} : Use React Query (`@tanstack/react-query`) for all client data fetching.
apps/portal/src/app/transactions/page.mdx (25)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Unified `Wallet` and `Account` interfaces in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support for in-app wallets (social/email login) in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Smart wallets with account abstraction in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support EIP-1193, EIP-5792, EIP-7702 standards in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/extensions/**/*.{ts,tsx} : Auto-generated contracts from ABI definitions in extensions
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Interactive UI that relies on hooks (`useState`, `useEffect`, React Query, wallet hooks).
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Components: Handle interactive UI with React hooks (`useState`, `useEffect`, React Query, wallet hooks)
Learnt from: MananTank
PR: thirdweb-dev/js#7152
File: apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/tokens/shared-page.tsx:41-48
Timestamp: 2025-05-26T16:28:50.772Z
Learning: The `projectMeta` prop is not required for the server-rendered `ContractTokensPage` component in the tokens shared page, unlike some other shared pages where it's needed for consistency.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Components: Support fast transitions with prefetched data
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to packages/thirdweb/src/exports/**/*.{ts,tsx} : Every public symbol must have comprehensive TSDoc with at least one `@example` block that compiles and custom annotation tags (`@beta`, `@internal`, `@experimental`)
Learnt from: MananTank
PR: thirdweb-dev/js#7315
File: apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/nft/launch-nft.tsx:153-226
Timestamp: 2025-06-10T00:50:20.795Z
Learning: In apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/nft/launch-nft.tsx, the updateStatus function correctly expects a complete MultiStepState["status"] object. For pending states, { type: "pending" } is the entire status object. For error states, { type: "error", message: React.ReactNode } is the entire status object. The current code incorrectly spreads the entire step object instead of passing just the status object.
Learnt from: MananTank
PR: thirdweb-dev/js#7177
File: apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/public-pages/erc20/_hooks/useTokenPriceData.ts:49-49
Timestamp: 2025-05-27T19:55:25.056Z
Learning: In the ERC20 public pages token price data hook (`useTokenPriceData.ts`), direct array access on `json.data[0]` without optional chaining is intentionally correct and should not be changed to use safety checks.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/exports/react.native.ts : React Native specific exports are in `src/exports/react.native.ts`
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Side Data Fetching: Wrap calls in React Query (`@tanstack/react-query`)
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Anything that consumes hooks from `@tanstack/react-query` or thirdweb SDKs.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Side Data Fetching: Use descriptive, stable `queryKeys` for cache hits
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to test/src/test-wallets.ts : Predefined test accounts are in `test/src/test-wallets.ts`
Learnt from: jnsdls
PR: thirdweb-dev/js#7364
File: apps/dashboard/src/app/(app)/account/components/AccountHeader.tsx:36-41
Timestamp: 2025-06-18T02:13:34.500Z
Learning: In the logout flow in apps/dashboard/src/app/(app)/account/components/AccountHeader.tsx, when `doLogout()` fails, the cleanup steps (resetAnalytics(), wallet disconnect, router refresh) should NOT execute. This is intentional to maintain consistency - if server-side logout fails, client-side cleanup should not occur.
Learnt from: MananTank
PR: thirdweb-dev/js#7434
File: apps/dashboard/src/app/(app)/team/~/~/contract/[chain]/[contractAddress]/components/project-selector.tsx:62-76
Timestamp: 2025-06-24T21:38:03.155Z
Learning: In the project-selector.tsx component for contract imports, the addToProject.mutate() call is intentionally not awaited (fire-and-forget pattern) to allow immediate navigation to the contract page while the import happens in the background. This is a deliberate design choice to prioritize user experience.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Import UI primitives from `@/components/ui/*` (Button, Input, Select, Tabs, Card, Sidebar, Badge, Separator) in dashboard and playground apps
Learnt from: MananTank
PR: thirdweb-dev/js#7152
File: apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/claim-conditions/shared-claim-conditions-page.tsx:43-49
Timestamp: 2025-05-26T16:31:02.480Z
Learning: In the thirdweb dashboard codebase, when `redirectToContractLandingPage()` is called, an explicit return statement is not required afterward because the function internally calls Next.js's `redirect()` which throws an error to halt execution.
Learnt from: MananTank
PR: thirdweb-dev/js#7356
File: apps/nebula/src/app/not-found.tsx:1-1
Timestamp: 2025-06-17T18:30:52.976Z
Learning: In the thirdweb/js project, the React namespace is available for type annotations (like React.FC) without needing to explicitly import React. This is project-specific configuration that differs from typical TypeScript/React setups.
Learnt from: MananTank
PR: thirdweb-dev/js#7152
File: apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/analytics/shared-analytics-page.tsx:33-39
Timestamp: 2025-05-26T16:30:24.965Z
Learning: In the thirdweb dashboard codebase, redirectToContractLandingPage function already handles execution termination internally (likely using Next.js redirect() which throws an exception), so no explicit return statement is needed after calling it.
Learnt from: saminacodes
PR: thirdweb-dev/js#7543
File: apps/portal/src/app/pay/page.mdx:4-4
Timestamp: 2025-07-07T21:21:47.488Z
Learning: In the thirdweb-dev/js repository, lucide-react icons must be imported with the "Icon" suffix (e.g., ExternalLinkIcon, RocketIcon) as required by the new linting rule, contrary to the typical lucide-react convention of importing without the suffix.
Learnt from: MananTank
PR: thirdweb-dev/js#7177
File: apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/public-pages/erc20/erc20.tsx:15-17
Timestamp: 2025-05-27T19:54:55.885Z
Learning: The `fetchDashboardContractMetadata` function from "@3rdweb-sdk/react/hooks/useDashboardContractMetadata" has internal error handlers for all promises and cannot throw errors, so external error handling is not needed when calling this function.
🪛 LanguageTool
apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx

[grammar] ~21-~21: Ensure spelling is correct
Context: ...stem Wallet Ecosystem wallets can span accross multiple apps and games. You can regist...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (8)
  • GitHub Check: Size
  • GitHub Check: E2E Tests (pnpm, webpack)
  • GitHub Check: E2E Tests (pnpm, esbuild)
  • GitHub Check: E2E Tests (pnpm, vite)
  • GitHub Check: Unit Tests
  • GitHub Check: Lint Packages
  • GitHub Check: Build Packages
  • GitHub Check: Analyze (javascript)

Comment on lines +440 to +443
);

// Send a transaction
var receipt = await contract.Write(wallet, contract, "transfer", weiValue, toAddress, amount);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Undefined wallet variable in Unity sample

contract.Write(wallet, …) uses a wallet parameter that is never declared. Either create the wallet (e.g. var wallet = await PrivateKeyWallet.Create(…)) or pass a valid signer reference.

-var receipt = await contract.Write(wallet, contract, "transfer", weiValue, toAddress, amount);
+// example
+var wallet = await PrivateKeyWallet.Create(sdk, "YOUR_PRIVATE_KEY");
+var receipt = await contract.Write(
+    wallet,
+    contract,
+    "transfer",
+    weiValue,
+    toAddress,
+    amount
+);
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
);
// Send a transaction
var receipt = await contract.Write(wallet, contract, "transfer", weiValue, toAddress, amount);
);
// Send a transaction
// example
var wallet = await PrivateKeyWallet.Create(sdk, "YOUR_PRIVATE_KEY");
var receipt = await contract.Write(
wallet,
contract,
"transfer",
weiValue,
toAddress,
amount
);
🤖 Prompt for AI Agents
In apps/portal/src/app/transactions/page.mdx around lines 440 to 443, the
variable `wallet` used in the call to `contract.Write(wallet, ...)` is not
declared or initialized. To fix this, declare and initialize the `wallet`
variable properly before this call, for example by creating it with `var wallet
= await PrivateKeyWallet.Create(...)` or by passing a valid signer object that
represents the wallet to be used for signing the transaction.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (7)
apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx (3)

5-8: Inconsistent relative asset paths still unresolved
The WalletConnect / Reown images are imported from ../assets/* while every other image in the file uses ./assets/*. Unless these PNGs truly live in a sibling folder, this will 404 at build time.

-import WalletconnectCreate from "../assets/walletconnect-create.png";
-import WalletconnectUrl from "../assets/walletconnect-url.png";
-import WalletconnectWallet from "../assets/walletconnect-wallet.png";
-import WalletconnectGuide from "../assets/walletconnect-guide.png";
+import WalletconnectCreate from "./assets/walletconnect-create.png";
+import WalletconnectUrl from "./assets/walletconnect-url.png";
+import WalletconnectWallet from "./assets/walletconnect-wallet.png";
+import WalletconnectGuide from "./assets/walletconnect-guide.png";

111-120: DocImage components must be nested inside their <Step>
<Steps> expects only <Step> children. Placing images at the root level breaks that contract and will render unpredictably.

-</Step>
-
-<DocImage src={WalletconnectCreate} />
-<DocImage src={WalletconnectUrl} />
-<DocImage src={WalletconnectWallet} />
+  <DocImage src={WalletconnectCreate} />
+  <DocImage src={WalletconnectUrl} />
+  <DocImage src={WalletconnectWallet} />
+</Step>

131-131: Move guide image inside its corresponding <Step> – same structural issue as above.

-</Step>
-
-<DocImage src={WalletconnectGuide} />
+  <DocImage src={WalletconnectGuide} />
+</Step>
apps/portal/src/app/transactions/stripe-payments/page.mdx (4)

49-60: Example snippet still lacks 'use client'; and required React/Stripe imports

Previous feedback already covered this. The snippet won’t compile for readers without:

+'use client';
+
+import { useState } from "react";
+import { loadStripe } from "@stripe/stripe-js";
+import { Elements } from "@stripe/react-stripe-js";

Add these above the existing imports.


72-88: stripe helpers referenced without import, and error handling absent

loadStripe, Elements aren’t imported and the fetch call should be wrapped in try / catch to surface network failures.


119-141: /api/stripe-intent still trusts buyerWalletAddress blindly

Add a guard clause before creating the PaymentIntent to prevent null / empty metadata, and return 400 on bad input.
Imports (Stripe, NextResponse) are fine, but the omission above was already pointed out earlier.


150-216: Webhook example: missing critical imports & null-safe header access

Issues already raised remain:

  1. NextRequest, NextResponse, headers, defineChain, and Stripe are not imported.
  2. headers().get("stripe-signature") may return null; pass a fallback string.
  3. export const config … is for the Pages router – not supported in /app/api/*.

Please address these to avoid copy-paste breakage.

🧹 Nitpick comments (4)
apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx (2)

21-23: Fix spelling & grammar in the introduction
accrossacross, ecossytemecosystem, and use the verb phrase “set up” rather than “setup”.

-Ecosystem wallets can span accross multiple apps and games. You can register partners, setup access controls and sponsor gas for your entire ecossytem.
+Ecosystem wallets can span across multiple apps and games. You can register partners, set up access controls, and sponsor gas for your entire ecosystem.

121-129: Minor copy edit – “Wallet Guide” spacing
The actual tab label in the Reown dashboard is “Wallet Guide”, two words.

-Navigate to the **WalletGuide** tab and fill out the following form:
+Navigate to the **Wallet Guide** tab and fill out the following form:
apps/portal/src/app/transactions/stripe-payments/page.mdx (2)

15-21: Typo in intro sentence – missing possessive 's

thirdweb the transactions API → should be thirdweb's transactions API.

-This guide uses thirdweb the transactions API to sell NFTs with credit card:
+This guide uses thirdweb's transactions API to sell NFTs with credit cards:

91-111: CreditCardForm snippet missing Stripe hooks & components imports

Readers will see runtime errors unless the snippet includes:

-import { Elements } from "@stripe/react-stripe-js";
+import {
+  Elements,
+  PaymentElement,
+  useElements,
+  useStripe,
+} from "@stripe/react-stripe-js";
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0a50fb8 and a93c75d.

⛔ Files ignored due to path filters (9)
  • apps/portal/src/app/transactions/distribute-tokens/assets/airdrop-nfts-1.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/distribute-tokens/assets/airdrop-nfts-2.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/distribute-tokens/assets/airdrop-nfts-3.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/distribute-tokens/assets/airdrop-nfts-4.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/distribute-tokens/assets/airdrop-overview.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/stripe-payments/assets/nft-checkout-1.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/stripe-payments/assets/nft-checkout-2.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/stripe-payments/assets/nft-checkout-3.png is excluded by !**/*.png
  • apps/portal/src/app/transactions/stripe-payments/assets/nft-checkout-overview.png is excluded by !**/*.png
📒 Files selected for processing (20)
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/EngineCloudChartCard/EngineCloudBarChartCardUI.tsx (1 hunks)
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/layout.tsx (1 hunks)
  • apps/portal/src/app/Header.tsx (1 hunks)
  • apps/portal/src/app/connect/sidebar.tsx (2 hunks)
  • apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx (2 hunks)
  • apps/portal/src/app/connect/wallet/server/page.mdx (1 hunks)
  • apps/portal/src/app/connect/wallet/sign-in-methods/configure/page.mdx (1 hunks)
  • apps/portal/src/app/engine/v3/get-started/page.mdx (5 hunks)
  • apps/portal/src/app/page.tsx (2 hunks)
  • apps/portal/src/app/transactions/distribute-tokens/page.mdx (1 hunks)
  • apps/portal/src/app/transactions/layout.tsx (1 hunks)
  • apps/portal/src/app/transactions/monitor/page.mdx (1 hunks)
  • apps/portal/src/app/transactions/page.mdx (1 hunks)
  • apps/portal/src/app/transactions/session-keys/page.mdx (1 hunks)
  • apps/portal/src/app/transactions/sidebar.tsx (1 hunks)
  • apps/portal/src/app/transactions/sponsor/page.mdx (1 hunks)
  • apps/portal/src/app/transactions/stripe-payments/page.mdx (1 hunks)
  • apps/portal/src/app/vault/get-started/page.mdx (1 hunks)
  • apps/portal/src/icons/index.ts (1 hunks)
  • packages/thirdweb/src/engine/server-wallet.ts (0 hunks)
💤 Files with no reviewable changes (1)
  • packages/thirdweb/src/engine/server-wallet.ts
✅ Files skipped from review due to trivial changes (1)
  • apps/portal/src/app/transactions/session-keys/page.mdx
🚧 Files skipped from review as they are similar to previous changes (16)
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/EngineCloudChartCard/EngineCloudBarChartCardUI.tsx
  • apps/portal/src/app/Header.tsx
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/layout.tsx
  • apps/portal/src/app/connect/wallet/sign-in-methods/configure/page.mdx
  • apps/portal/src/app/vault/get-started/page.mdx
  • apps/portal/src/app/transactions/layout.tsx
  • apps/portal/src/icons/index.ts
  • apps/portal/src/app/engine/v3/get-started/page.mdx
  • apps/portal/src/app/connect/sidebar.tsx
  • apps/portal/src/app/transactions/monitor/page.mdx
  • apps/portal/src/app/transactions/distribute-tokens/page.mdx
  • apps/portal/src/app/transactions/sidebar.tsx
  • apps/portal/src/app/connect/wallet/server/page.mdx
  • apps/portal/src/app/page.tsx
  • apps/portal/src/app/transactions/sponsor/page.mdx
  • apps/portal/src/app/transactions/page.mdx
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Surface breaking changes prominently in PR descriptions
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support EIP-1193, EIP-5792, EIP-7702 standards in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support for in-app wallets (social/email login) in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Unified `Wallet` and `Account` interfaces in wallet architecture
apps/portal/src/app/transactions/stripe-payments/page.mdx (31)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support EIP-1193, EIP-5792, EIP-7702 standards in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to packages/thirdweb/src/exports/**/*.{ts,tsx} : Every public symbol must have comprehensive TSDoc with at least one `@example` block that compiles and custom annotation tags (`@beta`, `@internal`, `@experimental`)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/extensions/**/*.{ts,tsx} : Auto-generated contracts from ABI definitions in extensions
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Unified `Wallet` and `Account` interfaces in wallet architecture
Learnt from: MananTank
PR: thirdweb-dev/js#7285
File: apps/dashboard/src/app/(app)/(dashboard)/published-contract/components/uri-based-deploy.tsx:57-57
Timestamp: 2025-06-05T13:59:49.886Z
Learning: In the thirdweb dashboard Next.js app, when using loginRedirect() in server components, ensure to add a return statement after the redirect call to prevent further code execution and potential security issues.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Side Data Fetching: Keep tokens secret via internal API routes or server actions
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Server Components (Node edge): Start files with `import "server-only";`
Learnt from: jnsdls
PR: thirdweb-dev/js#6929
File: apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/insight/webhooks/page.tsx:14-19
Timestamp: 2025-05-21T05:17:31.283Z
Learning: In Next.js server components, the `params` object can sometimes be a Promise that needs to be awaited, despite type annotations suggesting otherwise. In apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/insight/webhooks/page.tsx, it's necessary to await the params object before accessing its properties.
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/api/**/*.{ts,tsx} : Prefix files with `import "server-only";` so they never end up in the client bundle.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Server Side Data Fetching: Use `Authorization: Bearer` header – never embed tokens in URLs
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Smart wallets with account abstraction in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/hooks/**/*.{ts,tsx} : Prefer API routes or server actions to keep tokens secret; the browser only sees relative paths.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Server Side Data Fetching: Always call `getAuthToken()` to retrieve JWT from cookies
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support for in-app wallets (social/email login) in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Components: Handle interactive UI with React hooks (`useState`, `useEffect`, React Query, wallet hooks)
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Interactive UI that relies on hooks (`useState`, `useEffect`, React Query, wallet hooks).
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Anything that consumes hooks from `@tanstack/react-query` or thirdweb SDKs.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Components (browser): Begin files with `'use client';`
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Client components must start with `'use client';` before imports.
Learnt from: MananTank
PR: thirdweb-dev/js#7315
File: apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/nft/launch-nft.tsx:153-226
Timestamp: 2025-06-10T00:50:20.795Z
Learning: In apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/nft/launch-nft.tsx, the updateStatus function correctly expects a complete MultiStepState["status"] object. For pending states, { type: "pending" } is the entire status object. For error states, { type: "error", message: React.ReactNode } is the entire status object. The current code incorrectly spreads the entire step object instead of passing just the status object.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Side Data Fetching: Wrap calls in React Query (`@tanstack/react-query`)
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/pages/*.client.tsx : Pages requiring fast transitions where data is prefetched on the client.
Learnt from: MananTank
PR: thirdweb-dev/js#7152
File: apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/claim-conditions/shared-claim-conditions-page.tsx:43-49
Timestamp: 2025-05-26T16:31:02.480Z
Learning: In the thirdweb dashboard codebase, when `redirectToContractLandingPage()` is called, an explicit return statement is not required afterward because the function internally calls Next.js's `redirect()` which throws an error to halt execution.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Server Components: Read cookies/headers with `next/headers`
Learnt from: arcoraven
PR: thirdweb-dev/js#7505
File: apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/analytics/components/WebhookAnalyticsCharts.tsx:186-204
Timestamp: 2025-07-10T10:18:33.238Z
Learning: The ThirdwebBarChart component in apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/analytics/components/WebhookAnalyticsCharts.tsx does not accept standard accessibility props like `aria-label` and `role` in its TypeScript interface, causing compilation errors when added.
Learnt from: MananTank
PR: thirdweb-dev/js#7298
File: apps/dashboard/src/app/nebula-app/move-funds/move-funds.tsx:424-424
Timestamp: 2025-06-06T23:46:08.795Z
Learning: The thirdweb project has an ESLint rule that restricts direct usage of `defineChain`. When it's necessary to use `defineChain` directly, it's acceptable to disable the rule with `// eslint-disable-next-line no-restricted-syntax`.
Learnt from: MananTank
PR: thirdweb-dev/js#7152
File: apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/analytics/shared-analytics-page.tsx:33-39
Timestamp: 2025-05-26T16:30:24.965Z
Learning: In the thirdweb dashboard codebase, redirectToContractLandingPage function already handles execution termination internally (likely using Next.js redirect() which throws an exception), so no explicit return statement is needed after calling it.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Analytics Events: Never import `posthog-js` in server components
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Import UI primitives from `@/components/ui/*` (Button, Input, Select, Tabs, Card, Sidebar, Badge, Separator) in dashboard and playground apps
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Components that listen to user events, animations or live updates.
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/hooks/**/*.{ts,tsx} : Use React Query (`@tanstack/react-query`) for all client data fetching.
apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx (16)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support for in-app wallets (social/email login) in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Unified `Wallet` and `Account` interfaces in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Support EIP-1193, EIP-5792, EIP-7702 standards in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to src/wallets/**/*.{ts,tsx} : Smart wallets with account abstraction in wallet architecture
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.489Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Client Components: Handle interactive UI with React hooks (`useState`, `useEffect`, React Query, wallet hooks)
Learnt from: MananTank
PR: thirdweb-dev/js#7315
File: apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/nft/launch-nft.tsx:153-226
Timestamp: 2025-06-10T00:50:20.795Z
Learning: In apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/nft/launch-nft.tsx, the updateStatus function correctly expects a complete MultiStepState["status"] object. For pending states, { type: "pending" } is the entire status object. For error states, { type: "error", message: React.ReactNode } is the entire status object. The current code incorrectly spreads the entire step object instead of passing just the status object.
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/**/*.{ts,tsx} : Prefer composable primitives over custom markup: `Button`, `Input`, `Select`, `Tabs`, `Card`, `Sidebar`, `Separator`, `Badge`.
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/*.client.tsx : Interactive UI that relies on hooks (`useState`, `useEffect`, React Query, wallet hooks).
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/**/*.{ts,tsx} : Reuse core UI primitives; avoid re-implementing buttons, cards, modals.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/feature/components/**/*.{tsx,ts} : Group feature-specific components under `feature/components/*` with barrel `index.ts`
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/**/*.{ts,tsx} : Icons come from `lucide-react` or the project-specific `…/icons` exports – never embed raw SVG.
Learnt from: CR
PR: thirdweb-dev/js#0
File: .cursor/rules/dashboard.mdc:0-0
Timestamp: 2025-06-30T10:26:04.389Z
Learning: Applies to dashboard/**/components/**/*.{ts,tsx} : Place the file close to its feature: `feature/components/MyComponent.tsx`.
Learnt from: saminacodes
PR: thirdweb-dev/js#7543
File: apps/portal/src/app/pay/page.mdx:4-4
Timestamp: 2025-07-07T21:21:47.488Z
Learning: In the thirdweb-dev/js repository, lucide-react icons must be imported with the "Icon" suffix (e.g., ExternalLinkIcon, RocketIcon) as required by the new linting rule, contrary to the typical lucide-react convention of importing without the suffix.
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Import UI primitives from `@/components/ui/*` (Button, Input, Select, Tabs, Card, Sidebar, Badge, Separator) in dashboard and playground apps
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Use design system tokens (e.g., `bg-card`, `border-border`, `text-muted-foreground`)
Learnt from: CR
PR: thirdweb-dev/js#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T10:25:29.488Z
Learning: Applies to apps/{dashboard,playground-web}/**/*.{tsx,ts} : Server Components (Node edge): Start files with `import "server-only";`
🪛 LanguageTool
apps/portal/src/app/connect/wallet/ecosystem/set-up/page.mdx

[grammar] ~21-~21: Ensure spelling is correct
Context: ...stem Wallet Ecosystem wallets can span accross multiple apps and games. You can regist...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (8)
  • GitHub Check: E2E Tests (pnpm, esbuild)
  • GitHub Check: E2E Tests (pnpm, webpack)
  • GitHub Check: Unit Tests
  • GitHub Check: Size
  • GitHub Check: Lint Packages
  • GitHub Check: E2E Tests (pnpm, vite)
  • GitHub Check: Build Packages
  • GitHub Check: Analyze (javascript)

@joaquim-verges joaquim-verges merged commit 6e62a3a into main Jul 18, 2025
25 checks passed
@joaquim-verges joaquim-verges deleted the _Connect_Add_Ecosystem_Wallet_to_sidebar_and_update_documentation branch July 18, 2025 04:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Dashboard Involves changes to the Dashboard. packages Portal Involves changes to the Portal (docs) codebase. SDK Involves changes to the thirdweb SDK
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant