Skip to content

Conversation

@MananTank
Copy link
Contributor

@MananTank MananTank commented Jan 24, 2026


PR-Codex overview

This PR focuses on enhancing the ChatButton component and restructuring the Page component by updating its layout and improving the presentation of sections related to documentation and SDKs.

Detailed summary

  • Updated ChatButton to accept a className prop for styling.
  • Replaced LearningResourcesSection with ProductsSection and modified its content.
  • Introduced SectionHeader for consistent section titles.
  • Added new Card and MinimalCard components for better presentation.
  • Updated layout and content for the Hero section, including new CTAs.
  • Improved structure of ReferenceSection and ArchiveSection with new cards.
  • Removed deprecated components and streamlined the code.

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

Summary by CodeRabbit

  • UI/UX Updates
    • Redesigned portal hero to a centered layout with updated badge, title, subtitle, and CTAs.
    • Reordered top-level content into Products, Reference, and Archive sections with improved visual hierarchy.
  • Refactor
    • Consolidated many sections into a unified card-based system for consistent presentation and simplified content flow.
  • Style
    • Chat button accepts custom styling for greater layout flexibility.

✏️ Tip: You can customize this high-level summary in your review settings.

@MananTank MananTank requested review from a team as code owners January 24, 2026 11:00
@vercel
Copy link

vercel bot commented Jan 24, 2026

@MananTank is attempting to deploy a commit to the thirdweb Team on Vercel.

A member of the Team first needs to authorize it.

@changeset-bot
Copy link

changeset-bot bot commented Jan 24, 2026

⚠️ No Changeset found

Latest commit: 6fa3481

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

@github-actions github-actions bot added the Portal Involves changes to the Portal (docs) codebase. label Jan 24, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 24, 2026

Walkthrough

Centralized and simplified the main page: replaced the two-column hero with a centered hero and reorganized content into card-based sections (Card, MinimalCard, SectionHeader, ProductsSection, ReferenceSection, ArchiveSection). Also added an optional className prop to ChatButton for styling.

Changes

Cohort / File(s) Summary
Page Layout & Sections
apps/portal/src/app/page.tsx
Reworked page layout: two-column hero → centered hero (badge, title, subtitle, CTAs). Reordered and replaced prior sections with new SectionHeader-led flow: ProductsSection, ReferenceSection, ArchiveSection. Container padding normalized to pb-24.
Card System & Section Components
apps/portal/src/components/...
Introduced/expanded unified card components and usage: Card and MinimalCard replace previous ArticleCardIndex/SDKCard patterns; sections now render grids of Card/MinimalCard for SDKs, Client libraries, Archive, and Learning resources.
Section Header Helper
apps/portal/src/components/...
Added SectionHeader helper for consistent section titles/subtitles, replacing older SectionTitle usage across page sections.
Chat Button Styling
apps/portal/src/components/AI/chat-button.tsx
ChatButton signature updated to accept props: { className?: string }; merges incoming className with default classes via cn(...). No behavioral changes.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

🚥 Pre-merge checks | ✅ 1 | ❌ 2
❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Description check ⚠️ Warning The description follows the template structure and provides a clear overview of changes, but lacks the required PR title format prefix and does not include testing instructions. Add the required title format '[Portal] Feature: landing page UI improvements' and include specific testing steps (e.g., visual regression testing, component verification).
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (1 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the main change—UI improvements to the portal landing page—and aligns with the primary modifications to the page layout and components.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

Warning

Review ran into problems

🔥 Problems

Errors were encountered while retrieving linked issues.

Errors (1)
  • TEAM-0000: Entity not found: Issue - Could not find referenced Issue.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

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: 2

🤖 Fix all issues with AI agents
In `@apps/portal/src/app/page.tsx`:
- Around line 35-67: In the Hero component, the external Link used inside the
Button (the Link with href="https://playground.thirdweb.com" and
target="_blank") should include rel="noopener noreferrer" to prevent
reverse-tabnabbing; update the Link element in Hero (the Link nested in
Button/asChild) to pass rel="noopener noreferrer" to the underlying anchor.
- Around line 222-274: The external links opened with target="_blank" in the
Card (the first Link block rendering props.icon/props.title/props.description)
and in MinimalCard are missing rel="noopener noreferrer"; update both Link
elements to include rel={props.external ? "noopener noreferrer" : undefined}
(use the existing props.external boolean) so the Link rendering in the Card and
the MinimalCard components sets the rel attribute only for external links.
🧹 Nitpick comments (3)
apps/portal/src/components/AI/chat-button.tsx (1)

3-23: Add explicit return types and a props alias.

Inline prop typing and missing return types make the component less consistent with the TS guidelines; also consider extracting ChatLoading to its own file to keep one stateless function per file.

♻️ Proposed refactor
-import { lazy, Suspense, useCallback, useState } from "react";
+import type React from "react";
+import { lazy, Suspense, useCallback, useState } from "react";

-export function ChatButton(props: { className?: string }) {
+type ChatButtonProps = { className?: string };
+
+export function ChatButton(props: ChatButtonProps): React.JSX.Element {

Apply the same explicit return type pattern to ChatLoading. As per coding guidelines, please add explicit return types and keep one stateless function per file.

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

71-80: Add explicit return types and consider splitting components into separate files.

All components in this file lack explicit return types, and multiple stateless components live in a single file. Consider adding return types and extracting components into separate files to align with the single-function-per-file rule.

♻️ Example adjustment
+type SectionHeaderProps = { title: string; description: string };
 
-function SectionHeader(props: { title: string; description: string }) {
+function SectionHeader(props: SectionHeaderProps): React.JSX.Element {

(You may need a type-only React import if you use React.JSX.Element.) As per coding guidelines, please add explicit return types and keep one stateless function per file.


214-275: Deduplicate card prop types into a shared alias.

Card and MinimalCard share the same prop shape; extracting a shared type (ideally in a local types.ts or @/types) reduces duplication.

♻️ Example refactor
+type BaseCardProps = {
+  title: string;
+  description?: string;
+  href: string;
+  icon: React.FC<{ className?: string }>;
+  external?: boolean;
+};
+
-function Card(props: {
-  title: string;
-  description?: string;
-  href: string;
-  icon: React.FC<{ className?: string }>;
-  external?: boolean;
-}) {
+function Card(props: BaseCardProps) {
   ...
 }
 
-function MinimalCard(props: {
-  title: string;
-  description?: string;
-  href: string;
-  icon: React.FC<{ className?: string }>;
-  external?: boolean;
-}) {
+function MinimalCard(props: BaseCardProps) {
   ...
 }

As per coding guidelines, please re-use shared types via a local types.ts or @/types.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Portal Involves changes to the Portal (docs) codebase.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant