Skip to content

Polish Agent Orchestrator landing page#2260

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

Polish Agent Orchestrator landing page#2260
codebanditssss wants to merge 25 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 41 issues in 11 files · 41 warnings · score 54 / 100 (Critical) · vs main

41 warnings

app/layout.tsx

  • ⚠️ L35 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
  • ⚠️ L58 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

  • ⚠️ L339 Array index used as a key no-array-index-as-key
  • ⚠️ L350 Array index used as a key no-array-index-as-key
  • ⚠️ L378 Array index used as a key no-array-index-as-key
  • ⚠️ L437 Plain img ships unoptimized images nextjs-no-img-element
  • ⚠️ L583 Plain img ships unoptimized images nextjs-no-img-element
  • ⚠️ L643 Plain img ships unoptimized images nextjs-no-img-element
  • ⚠️ L981 Plain img ships unoptimized images nextjs-no-img-element

components/LandingFeaturesScroll.tsx

  • ⚠️ L192 Large component is hard to read and change no-giant-component
  • ⚠️ L432 Array index used as a key no-array-index-as-key
  • ⚠️ L448 Array index used as a key no-array-index-as-key
  • ⚠️ L487 Array index used as a key no-array-index-as-key
  • ⚠️ L546 Plain img ships unoptimized images nextjs-no-img-element
  • ⚠️ L692 Plain img ships unoptimized images nextjs-no-img-element
  • ⚠️ L752 Plain img ships unoptimized images nextjs-no-img-element
  • ⚠️ L1090 Plain img ships unoptimized images nextjs-no-img-element

components/LandingFooter.tsx

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

components/LandingHero.tsx

  • ⚠️ L346 Large component is hard to read and change no-giant-component
  • ⚠️ L438 Plain img ships unoptimized images nextjs-no-img-element
  • ⚠️ L502 Array index used as a key no-array-index-as-key
  • ⚠️ L911 Label missing associated control label-has-associated-control
  • ⚠️ L912 Control missing accessible label control-has-associated-label
  • ⚠️ L1012 Control missing accessible label control-has-associated-label
  • ⚠️ L1072 Data fetching inside an effect no-fetch-in-effect
  • ⚠️ L1163 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
⚠️ Warning: .github/workflows/react-doctor.yml is configured incorrectly. See below to fix.

React Doctor compares against main to report only the issues this pull request introduces. This run couldn't complete that comparison (usually a shallow CI checkout with no merge base), so it listed every issue in the changed files, including ones that already existed on main.

Add fetch-depth: 0 to the actions/checkout step in .github/workflows/react-doctor.yml so the checkout includes the history React Doctor needs:

 jobs:
   react-doctor:
     steps:
       - uses: actions/checkout@v5
+        with:
+          fetch-depth: 0

       - uses: millionco/react-doctor@v2

To silence this warning, set silence-missing-baseline-warning: true on the React Doctor action.

Reviewed by React Doctor for commit 7727a02. 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
codebanditssss and others added 24 commits June 29, 2026 03:41
* feat(landing): replace features section with GSAP scroll-driven showcase

Add LandingFeaturesScroll, a pinned scroll section that walks through four
product pillars with interactive mockups: agent harness, worktree isolation,
review routing, and the local daemon.
On desktop, the mockup starts centered and shifts right as copy fades in,
then snaps through each feature with crossfade transitions. Mobile falls
back to a stacked layout with scaled mockups.
Swap LandingFeatures for LandingFeaturesScroll on the landing page and add
gsap as a dependency for ScrollTrigger animations.

* fix(landing): polish spacing and accent styling across sections

Tighten vertical rhythm on the landing page and align a hero CTA with the
theme accent color.

- Increase agents bar bottom padding and drop the trailing period in its subtitle
- changed bg color for the hero mockup "Spawn Orchestrator" button
- Add bottom padding to the social proof description
style={{ colorScheme: "dark" }}
>
<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="agent-logo-pill group flex h-14 shrink-0 items-center gap-3 px-4"
>
<div className="agent-logo-pill-icon">
<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

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.

3 participants