Skip to content

Polish Agent Orchestrator landing page#2260

Open
codebanditssss wants to merge 18 commits into
mainfrom
landing-page-close-to-final
Open

Polish Agent Orchestrator landing page#2260
codebanditssss wants to merge 18 commits into
mainfrom
landing-page-close-to-final

Conversation

@codebanditssss

@codebanditssss codebanditssss commented Jun 28, 2026

Copy link
Copy Markdown
Collaborator

Preview

landing page demo

Validation

  • npm run build in frontend/src/landing

@github-actions

github-actions Bot commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

React Doctor found 31 issues in 10 files · 31 warnings · score 56 / 100 (Critical) · vs main

31 warnings

app/layout.tsx

  • ⚠️ L29 Plain script can block Next.js rendering nextjs-no-native-script

components/LandingAgentsBar.tsx

  • ⚠️ L28 Static value rebuilt every render prefer-module-scope-static-value
  • ⚠️ L61 Plain img ships unoptimized images nextjs-no-img-element

components/LandingCTA.tsx

  • ⚠️ L74 Plain anchor reloads internal Next.js links nextjs-no-a-element

components/LandingFeatures.tsx

  • ⚠️ L357 Array index used as a key no-array-index-as-key
  • ⚠️ L368 Array index used as a key no-array-index-as-key
  • ⚠️ L396 Array index used as a key no-array-index-as-key
  • ⚠️ L455 Plain img ships unoptimized images nextjs-no-img-element
  • ⚠️ L598 Plain img ships unoptimized images nextjs-no-img-element
  • ⚠️ L658 Plain img ships unoptimized images nextjs-no-img-element
  • ⚠️ L990 Plain img ships unoptimized images nextjs-no-img-element

components/LandingFooter.tsx

  • ⚠️ L47 Plain anchor reloads internal Next.js links nextjs-no-a-element
  • ⚠️ L48 Plain img ships unoptimized images nextjs-no-img-element

components/LandingHero.tsx

  • ⚠️ L310 Plain img ships unoptimized images nextjs-no-img-element
  • ⚠️ L337 Button missing explicit type button-has-type
  • ⚠️ L367 Array index used as a key no-array-index-as-key
  • ⚠️ L430 Button missing explicit type button-has-type
  • ⚠️ L573 Data fetching inside an effect no-fetch-in-effect
  • ⚠️ L661 Plain anchor reloads internal Next.js links nextjs-no-a-element

components/LandingLiveDemo.tsx

  • ⚠️ L78 Pure function rebuilt every render prefer-module-scope-pure-function
  • ⚠️ L145 Missing effect dependencies exhaustive-deps
  • ⚠️ L208 Button missing explicit type button-has-type

components/LandingNav.tsx

  • ⚠️ L92 useEffect setState flashes on mount rendering-hydration-no-flicker
  • ⚠️ L93 State initialized from a mount effect no-initialize-state
  • ⚠️ L144 Plain anchor reloads internal Next.js links nextjs-no-a-element
  • ⚠️ L145 Plain img ships unoptimized images nextjs-no-img-element
  • ⚠️ L187 Plain anchor reloads internal Next.js links nextjs-no-a-element
  • ⚠️ L209 Plain anchor reloads internal Next.js links nextjs-no-a-element

components/LandingSocialProof.tsx

  • ⚠️ L205 Plain img ships unoptimized images nextjs-no-img-element

components/LandingVideo.tsx

  • ⚠️ L31 iframe missing sandbox attribute iframe-missing-sandbox
  • ⚠️ L45 Plain img ships unoptimized images nextjs-no-img-element

Reviewed by React Doctor for commit 89dacdd. See inline comments for fixes.

@codebanditssss codebanditssss force-pushed the landing-page-close-to-final branch from 785500f to 7057753 Compare June 28, 2026 11:34
<body>{children}</body>
<html lang="en" suppressHydrationWarning className={`${inter.variable} ${inter.className}`}>
<head>
<script dangerouslySetInnerHTML={{ __html: themeScript }} />

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

React Doctor · react-doctor/nextjs-no-native-script (warning)

Plain <script> has no Next.js loading strategy, so it can block rendering.

Fix → Use next/script with strategy="afterInteractive" or "lazyOnload" so third-party scripts do not block rendering.

Docs

];

export function LandingAgentsBar() {
const marqueeAgents = [...agents, ...agents];

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

React Doctor · react-doctor/prefer-module-scope-static-value (warning)

marqueeAgents inside LandingAgentsBar uses no local state but is rebuilt every render, so it looks new each time & breaks memoized children. Move it to the top of the file, outside the component.

Fix → Move the value above the component, at the top of the file. It doesn't use local state, so rebuilding it each update is wasted and makes it look new every time.

Docs

className="group flex h-[82px] w-[112px] shrink-0 flex-col items-center justify-end gap-2 px-2 py-2"
>
<div className="agent-logo-tile">
<img src={agent.src} alt="" referrerPolicy="no-referrer" className="agent-logo-image" />

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

React Doctor · react-doctor/nextjs-no-img-element (warning)

Plain ships unoptimized, oversized images.

Fix → Use next/image so users get optimized formats, responsive srcsets, and lazy loading instead of oversized image downloads.

Docs

Star on GitHub · {formatCompactNumber(stars)}
<ArrowRightIcon className="h-4 w-4 transition-transform group-hover:translate-x-0.5" />
</a>
<a

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

React Doctor · react-doctor/nextjs-no-a-element (warning)

Plain reloads the whole page for internal links, so Next.js loses client-side navigation and prefetching.

Fiximport Link from 'next/link' for client-side navigation, prefetching, and preserved scroll position

Docs

<div className="relative min-h-[460px] w-[44%]">
{panels.map((panel, i) => (
<div
key={i}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

React Doctor · react-doctor/no-array-index-as-key (warning)

Your users can see & submit the wrong data when this list reorders or filters, so use a stable id like key={item.id}, not the array index "i".

Fix → Use a stable id from the item, like key={item.id} or key={item.slug}. Index keys break when the list reorders or filters.

Docs

})}
</div>
<div className="mx-1 hidden h-4 w-px bg-[color:var(--border)] lg:block" />
<a

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

React Doctor · react-doctor/nextjs-no-a-element (warning)

Plain reloads the whole page for internal links, so Next.js loses client-side navigation and prefetching.

Fiximport Link from 'next/link' for client-side navigation, prefetching, and preserved scroll position

Docs


{open && (
<div className="absolute inset-x-0 top-full mt-4 flex flex-col gap-1 rounded-2xl border border-[color:var(--border)] bg-[color:var(--bg)]/95 p-4 mx-4 backdrop-blur-xl shadow-2xl md:hidden">
<a

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

React Doctor · react-doctor/nextjs-no-a-element (warning)

Plain reloads the whole page for internal links, so Next.js loses client-side navigation and prefetching.

Fiximport Link from 'next/link' for client-side navigation, prefetching, and preserved scroll position

Docs

}

return (
<img

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

React Doctor · react-doctor/nextjs-no-img-element (warning)

Plain ships unoptimized, oversized images.

Fix → Use next/image so users get optimized formats, responsive srcsets, and lazy loading instead of oversized image downloads.

Docs

className="relative aspect-video overflow-hidden rounded-md border border-[color:var(--border-strong)] bg-black"
>
{muxPlaybackId && isPlaying ? (
<iframe

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

React Doctor · react-doctor/iframe-missing-sandbox (warning)

An <iframe> with no sandbox is a security hole: the embedded page gets full access to your site.

Fix → Add sandbox="" or a curated value so embedded pages cannot get full access to your site by default.

Docs

className="group absolute inset-0 cursor-pointer overflow-hidden text-left"
aria-label={`Play ${videoTitle}`}
>
<img

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

React Doctor · react-doctor/nextjs-no-img-element (warning)

Plain ships unoptimized, oversized images.

Fix → Use next/image so users get optimized formats, responsive srcsets, and lazy loading instead of oversized image downloads.

Docs

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants