Skip to content

Replace composability demo with agent anatomy walkthrough - #249

Open
TommyBez wants to merge 22 commits into
mainfrom
claude/outname-landing-refactor-zh1m9b
Open

Replace composability demo with agent anatomy walkthrough#249
TommyBez wants to merge 22 commits into
mainfrom
claude/outname-landing-refactor-zh1m9b

Conversation

@TommyBez

@TommyBez TommyBez commented Jun 26, 2026

Copy link
Copy Markdown
Owner

Summary

This PR replaces the composability demo section with a new agent anatomy walkthrough that grounds agents as concrete, readable directory structures. The new section highlights each core capability (memory, model, tools, channels, subagents, heartbeat, skills, budget) as a file or folder node in an agent's filesystem, paired with code snippets and the platform primitives that power each feature.

Key changes:

  • Added agent-anatomy.ts data file defining the agent directory tree structure and 8-step walkthrough
  • Added primitives.ts data file for the "built on primitives" grid section
  • Created new agent-anatomy/ component directory with:
    • anatomy-pinned.tsx - Desktop scroll-driven walkthrough with sticky file tree
    • anatomy-stacked.tsx - Mobile/reduced-motion stacked card layout
    • agent-file-tree.tsx - Reusable file tree visualization
    • anatomy-step-detail.tsx - Step content with code block and metadata
    • constants.ts - Icon mappings for each anatomy step
  • Added landing-primitives.tsx component for the platform primitives grid
  • Removed entire composable-workbench/ directory (composability demo components)
  • Updated landing page imports and routing to use new anatomy section
  • Moved use-is-desktop-viewport.ts hook to shared landing utilities

The new anatomy section uses the same scroll-driven interaction pattern as the previous demo but reframes the narrative around agent structure and capabilities rather than assembly/composition.

Validation

  • pnpm check passes
  • Components render correctly in both desktop (pinned) and mobile (stacked) layouts
  • Scroll-driven progress tracking works as expected
  • File tree highlights correct node based on active step

Release notes

  • No new environment variables
  • No database migration
  • No deployment follow-up required

https://claude.ai/code/session_01PtmdimwWXKdRL7vhL4EcV3

Summary by CodeRabbit

  • New Features
    • Added an “agent anatomy” section with scroll-synced steps, an interactive file tree, and a sticky code-style panel.
    • Added “Bindings,” “Built on primitives,” and “Production” sections, plus an updated final CTA.
    • Added a hero “artifact view” (human/agent) and a copyable command pill.
  • UI Updates
    • Reworked the landing page section flow and updated large-screen navigation anchors.
    • Updated the hero demo layout and expanded the footer into multi-column links.
    • Updated heartbeat content/labels and terminology in the landing panel.
  • Accessibility & Motion
    • Improved tab semantics and added reduced-motion-aware animations.

…arrative

Take vercel.com/eve as a strong structural reference while keeping the
existing Geist/Vercel design system untouched.

- Hero: pair the thesis with a concrete artifact — a readable agent
  directory (MEMORY.md, tools/, channels/, schedule.cron, budget.json).
- New signature section "An agent is a folder you can read": a sticky
  file-tree walkthrough that advances on scroll through 8 numbered steps
  (memory, model, tools, channels, sub-agents, heartbeat, skills, budget),
  each with a snippet and the platform primitive that backs it. Replaces
  the composable workbench.
- New "Built on primitives" grid surfacing the open-source / self-host
  stack (Next.js, Workflow, Sandbox, AI Gateway, Neon, Upstash, Better
  Auth, Chat SDK).
- Reframe the chat showcase as the live payoff of the directory.
- Reuse the existing scroll-pinning + reveal motion primitives; share the
  desktop-viewport hook; carry the design-lint waivers to the new section.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PtmdimwWXKdRL7vhL4EcV3
@vercel

vercel Bot commented Jun 26, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
outname Ready Ready Preview, Comment, Open in v0 Jun 26, 2026 6:32pm
outname-api Ready Ready Preview, Comment Jun 26, 2026 6:32pm
outname-app Ready Ready Preview, Comment Jun 26, 2026 6:32pm

Request Review

@coderabbitai

coderabbitai Bot commented Jun 26, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

The landing page is reorganized around new anatomy, bindings, primitives, and production sections. The hero now shows an artifact tab view, while the navigation, footer, heartbeat content, and page order are updated and the composable workbench modules are removed.

Changes

Landing page refresh

Layer / File(s) Summary
Shared data and code rendering
packages/shared/marketing/data/agent-anatomy.ts, packages/shared/marketing/data/heartbeat-demo.ts, packages/shared/marketing/components/landing/code-block.tsx, packages/shared/doctor.config.json
Agent anatomy and heartbeat data, the shared code-line renderer, and the doctor override scope are added or updated.
Anatomy viewer UI
packages/shared/marketing/components/landing/agent-anatomy/*
The anatomy viewer uses step icons, a file tree, and scroll position to keep the active step in sync with desktop and mobile code panels.
Hero artifact and layout
packages/shared/marketing/components/landing/hero-artifact.tsx, packages/shared/marketing/components/landing/landing-hero-demo.tsx
The hero adds the artifact tab switcher and a two-column layout with the clone command block and artifact panel.
Bindings and primitives
packages/shared/marketing/components/landing/landing-bindings.tsx, packages/shared/marketing/data/primitives.ts, packages/shared/marketing/components/landing/landing-primitives.tsx
Bindings cards and primitive cards are rendered from the new landing datasets with motion-triggered section reveals.
Production, heartbeat, and CTA
packages/shared/marketing/components/landing/landing-production.tsx, packages/shared/marketing/components/landing/landing-heartbeat-closer.tsx, packages/shared/marketing/components/landing/landing-final-cta.tsx
The production pillars, heartbeat panel, and final call-to-action sections add their new motion-wrapped content and updated labels.
Shell wiring and cleanup
packages/shared/marketing/components/landing-home-page.tsx, packages/shared/marketing/components/landing/landing-nav.tsx, packages/shared/marketing/components/landing/landing-footer.tsx, packages/shared/marketing/components/landing/composable-workbench/composability-pinned.tsx, packages/shared/marketing/components/landing/composable-workbench/*
The landing page order, navigation anchors, footer grid, and removed composability workbench module are updated together.

Sequence Diagram(s)

Scroll-synced anatomy

sequenceDiagram
  participant Window
  participant LandingAgentAnatomy
  participant StepBlock
  participant CodePanel
  Window->>LandingAgentAnatomy: scrollY changes
  LandingAgentAnatomy->>LandingAgentAnatomy: compute active step from refs
  LandingAgentAnatomy->>StepBlock: render active and inactive states
  LandingAgentAnatomy->>CodePanel: render the current step code
Loading

Artifact tab switch

sequenceDiagram
  participant Visitor
  participant HeroArtifact
  participant AgentFileTree
  participant CodeLines
  Visitor->>HeroArtifact: click a tab
  HeroArtifact->>HeroArtifact: update the active view
  alt For you
    HeroArtifact->>AgentFileTree: render the tree view
  else For the agent
    HeroArtifact->>CodeLines: render the AGENTS.md excerpt
  end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • TommyBez/outname#197: Overlaps with the removed landing-chat-showcase.tsx module that is no longer used in the landing composition.
  • TommyBez/outname#234: Touches the composable-workbench landing modules that are deleted in this PR.
  • TommyBez/outname#242: Updates landing-page component signatures that are also part of the landing shell reshaping here.

Suggested labels

codex

Poem

🐰 I hopped from tree to tab to link,
And sniffed the code in carrot pink.
New sections bloom, the old bits skedaddle,
The footer now wears a tidy saddle.
I twitch my nose at “Start building” — click!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 2.94% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: replacing the composability demo with the new agent anatomy walkthrough.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/outname-landing-refactor-zh1m9b

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.

…ucture

Restructure the page itself — not just one section — to mirror the
information architecture of vercel.com/eve, keeping the Geist design
system untouched. New top-to-bottom flow:

1. Hero — positioning + concrete directory artifact
2. The mental model — "An agent is a directory." (new concept beat:
   readable memory / bound capabilities / its own heartbeat)
3. The capability tour — sticky directory walkthrough
4. Built on primitives — the open-source / self-host stack
5. Production agents — new readiness-cards beat (observability, durable
   execution, human-in-the-loop, budgets, traced sub-agents, compounding
   memory), then proven live by the chat showcase and the autonomous-day
   heartbeat
6. Final CTA — dedicated, extracted out of the heartbeat closer
7. Footer — expanded into a multi-column sitemap

Also: nav gains section anchors; heartbeat closer is reframed as a
production proof (its buried CTA removed); anatomy header retitled so it
no longer duplicates the new concept statement.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PtmdimwWXKdRL7vhL4EcV3
…s beat

Replace invented artifacts with what actually exists in the runtime, and
push the eve-shaped structure further.

Truthfulness (no invented references):
- Anatomy walks the real sandbox: the nine canonical markdown files
  (AGENTS/IDENTITY/SOUL/USER/MEMORY/TASKS/CALENDAR/GOALS/DREAMS) + logs/,
  with real ownership (you author AGENTS/IDENTITY/SOUL; the agent writes
  the rest) and snippets that match each file's documented conventions.
- Drop the fabricated agent.config.ts / schedule.cron / budget.json files
  and the fake delegate() API.
- Concept facets now reference only real files.
- Chat showcase uses real file tools (grepFiles/readFile/writeFile), a real
  model id (openai/gpt-5.4-mini), the real Slack channel, and the Resend
  connector — no more slack.search_threads / gmail.* / cal.* / claude-*.
- Heartbeat day-in-the-life uses real event kinds (heartbeat, Slack channel,
  sandbox file writes, sub-agent, Resend, dreaming); drop the fake
  `outname watch` CLI line.
- Production cards corrected to real capabilities (agent events, durable
  Workflows, step limits, USD budgets, sub-agent tools, dreaming).

New "What you bind to it" beat: model (AI Gateway/LLM Gateway/OpenRouter),
heartbeat, dreaming, budget, channels, tools (GitHub/Cal.com/Resend/…),
sub-agents, and Agent Skills — every value drawn from the codebase.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PtmdimwWXKdRL7vhL4EcV3
Push the layout much closer to vercel.com/eve while keeping the design
system and the real-product grounding.

- Hero is now two-column like eve: headline + positioning line + a real
  self-host terminal (git clone / pnpm dev:app) + CTAs on the left, and a
  "For you / For the agent" toggle on the right that flips the artifact
  between the sandbox file tree and the raw AGENTS.md the agent reads.
- "An agent is a directory" merges the old concept beat: a directory
  overview (file tree + numbered 01–09 index) followed by eve's signature
  alternating walkthrough — each canonical file is a row whose text and
  markdown code block swap sides, with an ownership badge and the real
  runtime convention as a tag.
- Replace the sticky-pinned anatomy with the alternating rows; drop the
  now-unused concept, pinned, stacked, and viewport-hook modules.
- Nav/footer anchors updated for the merged section.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PtmdimwWXKdRL7vhL4EcV3

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/shared/marketing/components/landing/landing-chat-showcase.tsx (1)

220-279: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Make the digest scenario match the trace it renders.

This copy says the run writes the digest and sends it via Resend, but the actual tool sequence now only shows writes to DREAMS.md and logs/2026-05-12.md. In a “live agent” walkthrough, that mismatch makes the transcript read like it skipped steps.

Either add explicit digest/send tool parts back, or trim the narrative so it only claims the two file writes that are actually shown.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/shared/marketing/components/landing/landing-chat-showcase.tsx`
around lines 220 - 279, The digest scenario narrative in landing-chat-showcase
is out of sync with the rendered tool trace, since it claims the run sends via
Resend while the visible parts only show writes to DREAMS.md and the daily log.
Update the Weekly digest example in landing-chat-showcase to either restore
explicit digest/send tool parts in the digest-assistant message sequence or
revise the surrounding copy so it only describes the actions actually
represented by the dynamic-tool entries and final assistant text.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/shared/marketing/components/landing/hero-artifact.tsx`:
- Around line 32-74: The view switcher in HeroArtifact is using tab semantics
without the required panel association, so the current
`role="tablist"`/`role="tab"` setup in `HeroArtifact` is incomplete. Either
implement the full tabs pattern by adding matching `id`, `aria-controls`,
`aria-labelledby`, and `role="tabpanel"` wiring between the tab buttons and the
content region, plus keyboard arrow navigation for the tabs, or simplify the
component by removing the tab roles and keeping plain toggle buttons. Use the
existing `view`, `setView`, and `views` logic to locate and update both the
button group and the content block.

In `@packages/shared/marketing/components/landing/landing-heartbeat-closer.tsx`:
- Around line 102-105: The kindLabel mapping in landing-heartbeat-closer.tsx is
incomplete, so HeartbeatKind values like slack and subagent resolve to undefined
and render empty badges. Update the kindLabel Record<HeartbeatKind, string> used
by the landing heartbeat closer component to include every union member,
specifically adding labels for slack and subagent alongside the existing
dreaming, file, heartbeat, and resend entries, so entry.kind always maps to a
display string.

In `@packages/shared/marketing/components/landing/landing-hero-demo.tsx`:
- Around line 17-21: The terminal snippet in terminalLines uses an invalid git
clone target, so update the clone command to a real HTTPS or SSH repository URL
that can be run as written; keep the rest of the demo steps unchanged and make
the fix in landing-hero-demo.tsx where terminalLines is defined.

---

Outside diff comments:
In `@packages/shared/marketing/components/landing/landing-chat-showcase.tsx`:
- Around line 220-279: The digest scenario narrative in landing-chat-showcase is
out of sync with the rendered tool trace, since it claims the run sends via
Resend while the visible parts only show writes to DREAMS.md and the daily log.
Update the Weekly digest example in landing-chat-showcase to either restore
explicit digest/send tool parts in the digest-assistant message sequence or
revise the surrounding copy so it only describes the actions actually
represented by the dynamic-tool entries and final assistant text.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 31df5541-4506-49e6-8b18-b4c969b9ebea

📥 Commits

Reviewing files that changed from the base of the PR and between 52f673b and fe9d3e2.

📒 Files selected for processing (35)
  • packages/shared/doctor.config.json
  • packages/shared/marketing/components/landing-home-page.tsx
  • packages/shared/marketing/components/landing/agent-anatomy/agent-file-tree.tsx
  • packages/shared/marketing/components/landing/agent-anatomy/anatomy-step-detail.tsx
  • packages/shared/marketing/components/landing/agent-anatomy/constants.ts
  • packages/shared/marketing/components/landing/agent-anatomy/landing-agent-anatomy.tsx
  • packages/shared/marketing/components/landing/composable-workbench/agent-shell-card.tsx
  • packages/shared/marketing/components/landing/composable-workbench/assembly-visual.tsx
  • packages/shared/marketing/components/landing/composable-workbench/caption-rail.tsx
  • packages/shared/marketing/components/landing/composable-workbench/composability-mobile-story.tsx
  • packages/shared/marketing/components/landing/composable-workbench/composability-pinned.tsx
  • packages/shared/marketing/components/landing/composable-workbench/composability-stacked.tsx
  • packages/shared/marketing/components/landing/composable-workbench/constants.ts
  • packages/shared/marketing/components/landing/composable-workbench/flying-chip.tsx
  • packages/shared/marketing/components/landing/composable-workbench/landing-composable-workbench.tsx
  • packages/shared/marketing/components/landing/composable-workbench/mobile-stage-card.tsx
  • packages/shared/marketing/components/landing/composable-workbench/mobile-stage-flight.tsx
  • packages/shared/marketing/components/landing/composable-workbench/use-element-size.ts
  • packages/shared/marketing/components/landing/composable-workbench/use-is-desktop-viewport.ts
  • packages/shared/marketing/components/landing/composable-workbench/use-mobile-stage-active-index.ts
  • packages/shared/marketing/components/landing/composable-workbench/utils.ts
  • packages/shared/marketing/components/landing/hero-artifact.tsx
  • packages/shared/marketing/components/landing/landing-bindings.tsx
  • packages/shared/marketing/components/landing/landing-chat-showcase.tsx
  • packages/shared/marketing/components/landing/landing-final-cta.tsx
  • packages/shared/marketing/components/landing/landing-footer.tsx
  • packages/shared/marketing/components/landing/landing-heartbeat-closer.tsx
  • packages/shared/marketing/components/landing/landing-hero-demo.tsx
  • packages/shared/marketing/components/landing/landing-nav.tsx
  • packages/shared/marketing/components/landing/landing-primitives.tsx
  • packages/shared/marketing/components/landing/landing-production-intro.tsx
  • packages/shared/marketing/data/agent-anatomy.ts
  • packages/shared/marketing/data/composability-demo.ts
  • packages/shared/marketing/data/heartbeat-demo.ts
  • packages/shared/marketing/data/primitives.ts
💤 Files with no reviewable changes (16)
  • packages/shared/marketing/components/landing/composable-workbench/utils.ts
  • packages/shared/marketing/data/composability-demo.ts
  • packages/shared/marketing/components/landing/composable-workbench/agent-shell-card.tsx
  • packages/shared/marketing/components/landing/composable-workbench/landing-composable-workbench.tsx
  • packages/shared/marketing/components/landing/composable-workbench/use-is-desktop-viewport.ts
  • packages/shared/marketing/components/landing/composable-workbench/composability-pinned.tsx
  • packages/shared/marketing/components/landing/composable-workbench/mobile-stage-flight.tsx
  • packages/shared/marketing/components/landing/composable-workbench/use-element-size.ts
  • packages/shared/marketing/components/landing/composable-workbench/composability-mobile-story.tsx
  • packages/shared/marketing/components/landing/composable-workbench/flying-chip.tsx
  • packages/shared/marketing/components/landing/composable-workbench/mobile-stage-card.tsx
  • packages/shared/marketing/components/landing/composable-workbench/use-mobile-stage-active-index.ts
  • packages/shared/marketing/components/landing/composable-workbench/constants.ts
  • packages/shared/marketing/components/landing/composable-workbench/assembly-visual.tsx
  • packages/shared/marketing/components/landing/composable-workbench/composability-stacked.tsx
  • packages/shared/marketing/components/landing/composable-workbench/caption-rail.tsx

Comment thread packages/shared/marketing/components/landing/hero-artifact.tsx Outdated
Comment thread packages/shared/marketing/components/landing/landing-heartbeat-closer.tsx Outdated
Comment thread packages/shared/marketing/components/landing/landing-hero-demo.tsx Outdated
…ives

- Production is now a single section with eve's stacked full-width cards:
  each pairs a text header (number + title + blurb) with a live visual.
  Card 01 embeds the chat showcase, card 02 the autonomous-day heartbeat
  log, card 03 the guardrail grid (observability, durable execution, step
  limits, budgets, sub-agents, dreaming). Chat showcase and heartbeat are
  refactored into headless panels (ChatShowcasePanel / HeartbeatPanel) and
  the old standalone sections + production-intro are removed.
- Primitives switches from a 4-up grid to eve's two-column rows
  (number + icon + name + meta | description), followed by a real
  channels & connectors chip row (Slack, in-app chat, GitHub, Cal.com,
  Resend, …) drawn from the channel types and connection registry.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PtmdimwWXKdRL7vhL4EcV3
…ile explorer

The alternating full-width rows looked bad: short 2–4 line markdown snippets
floating in huge half-empty cells, repeated nine times, stretching the page
to ~9700px. Replace it with a single-screen, app-like file explorer that
mirrors the real agent-files UI: a clickable sandbox tree on the left and a
file viewer on the right that crossfades between files (auto-cycling until you
click). Same real files and content, far denser and calmer. Page height drops
to ~7100px.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PtmdimwWXKdRL7vhL4EcV3
Raise detail quality toward eve. Replace the flat gray code boxes with a
proper CodeWindow: dark surface, window chrome (traffic-light dots + filename
tab + optional label), line numbers, and light markdown syntax highlighting
(headers, additions in brand, muted citations). Used in the hero "for the
agent" view and the file explorer. The hero command block now types itself out
character by character with a blinking cursor (respects reduced motion).
Drop the old AnatomyCodeBlock; simplify the anatomy auto-cycle to a timer ref.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PtmdimwWXKdRL7vhL4EcV3

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🧹 Nitpick comments (1)
packages/shared/marketing/components/landing/landing-primitives.tsx (1)

134-142: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Extract the featured-pill cutoff into a named constant.

index < 2 hides why the first two integrations get different styling. A named constant makes the intent obvious and keeps this presentation rule easier to change later.

As per coding guidelines, "Use meaningful variable names instead of magic numbers; extract constants with descriptive names."

Proposed refactor
 const integrations = [
   'in-app chat',
   'Slack',
   'GitHub',
@@
   'Vercel',
   'Context7',
 ] as const
+
+const FEATURED_INTEGRATION_COUNT = 2
@@
-                      index < 2
+                      index < FEATURED_INTEGRATION_COUNT
                         ? 'bg-foreground text-background'
                         : 'bg-background text-muted-foreground'
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/shared/marketing/components/landing/landing-primitives.tsx` around
lines 134 - 142, The featured-pill styling in the integrations list uses a
hardcoded cutoff in the landing-primitives component, which hides the intent of
the first two items being styled differently. In the integrations.map render
inside landing-primitives.tsx, extract the `index < 2` threshold into a
descriptive named constant and use that constant in the conditional so the rule
is easy to read and adjust later.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@packages/shared/marketing/components/landing/agent-anatomy/agent-file-tree.tsx`:
- Around line 72-80: The clickable row in agent-file-tree.tsx only indicates the
active file visually, so the current selection is not exposed to assistive tech.
Update the button rendered in the node.stepId && onSelectStep branch to include
a selected/current-state accessibility attribute for the active row, such as
aria-current when active, or apply appropriate listbox/tab semantics if that
better matches the component behavior. Use the existing active flag and
rowClasses logic in AgentFileTree to keep the visual and accessible state in
sync.

In
`@packages/shared/marketing/components/landing/agent-anatomy/landing-agent-anatomy.tsx`:
- Around line 92-115: The auto-rotating viewer in landing-agent-anatomy.tsx
currently only stops on reduced-motion or when a file is clicked, so add an
explicit pause/stop control or pause-on-hover/focus behavior for the interval
managed by useEffect and handleSelect. Update the active rotation logic so users
can intentionally pause/resume the cycling, and make the control accessible with
semantic HTML and appropriate ARIA attributes. Keep the existing
timerRef/setInterval cleanup behavior in sync with the new pause state so
rotation can be reliably stopped and restarted.

In `@packages/shared/marketing/components/landing/hero-terminal.tsx`:
- Around line 16-25: The typing state in HeroTerminal is only initialized once,
so it can become stale when props change. Update the HeroTerminal component’s
count state in response to shouldReduceMotion and text/lines changes, likely
with a syncing effect that resets count to the full length when reduced motion
is enabled and resets/restarts typing when a new text payload arrives. Keep the
existing useEffect timer logic, but ensure the count state is rederived whenever
those props change.

In `@packages/shared/marketing/components/landing/landing-chat-showcase.tsx`:
- Around line 608-631: The scenario selector in landing-chat-showcase.tsx only
indicates the active item through styling, so assistive tech cannot detect the
selected state. Update the Button used in the scenario list to include an ARIA
state attribute such as aria-pressed, using the activeScenario.id ===
scenario.id check so the active scenario is announced consistently while keeping
the existing label content unchanged.

---

Nitpick comments:
In `@packages/shared/marketing/components/landing/landing-primitives.tsx`:
- Around line 134-142: The featured-pill styling in the integrations list uses a
hardcoded cutoff in the landing-primitives component, which hides the intent of
the first two items being styled differently. In the integrations.map render
inside landing-primitives.tsx, extract the `index < 2` threshold into a
descriptive named constant and use that constant in the conditional so the rule
is easy to read and adjust later.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: f9552432-b16c-4047-9ecf-d3935c88ef03

📥 Commits

Reviewing files that changed from the base of the PR and between fe9d3e2 and 5518ee8.

📒 Files selected for processing (12)
  • packages/shared/marketing/components/landing-home-page.tsx
  • packages/shared/marketing/components/landing/agent-anatomy/agent-file-tree.tsx
  • packages/shared/marketing/components/landing/agent-anatomy/landing-agent-anatomy.tsx
  • packages/shared/marketing/components/landing/code-window.tsx
  • packages/shared/marketing/components/landing/hero-artifact.tsx
  • packages/shared/marketing/components/landing/hero-terminal.tsx
  • packages/shared/marketing/components/landing/landing-chat-showcase.tsx
  • packages/shared/marketing/components/landing/landing-heartbeat-closer.tsx
  • packages/shared/marketing/components/landing/landing-hero-demo.tsx
  • packages/shared/marketing/components/landing/landing-primitives.tsx
  • packages/shared/marketing/components/landing/landing-production.tsx
  • packages/shared/marketing/components/landing/production-card.tsx
🚧 Files skipped from review as they are similar to previous changes (2)
  • packages/shared/marketing/components/landing/hero-artifact.tsx
  • packages/shared/marketing/components/landing/landing-hero-demo.tsx

Comment on lines +72 to +80
{node.stepId && onSelectStep ? (
<button
className={rowClasses(active, true)}
onClick={() => onSelectStep(node.stepId as AnatomyStepId)}
style={{ paddingLeft }}
type="button"
>
{inner}
</button>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Expose the selected row to assistive tech.

These buttons drive the active detail pane, but the current selection is only styled visually. Add a selected/current-state attribute here (for example aria-current on the active row, or full tab/listbox semantics) so screen-reader users can tell which file is open.

As per coding guidelines, **/*.{jsx,tsx}: "Use semantic HTML and ARIA attributes for accessibility".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@packages/shared/marketing/components/landing/agent-anatomy/agent-file-tree.tsx`
around lines 72 - 80, The clickable row in agent-file-tree.tsx only indicates
the active file visually, so the current selection is not exposed to assistive
tech. Update the button rendered in the node.stepId && onSelectStep branch to
include a selected/current-state accessibility attribute for the active row,
such as aria-current when active, or apply appropriate listbox/tab semantics if
that better matches the component behavior. Use the existing active flag and
rowClasses logic in AgentFileTree to keep the visual and accessible state in
sync.

Source: Coding guidelines

Comment thread packages/shared/marketing/components/landing/hero-terminal.tsx Outdated
Comment thread packages/shared/marketing/components/landing/landing-chat-showcase.tsx Outdated
After capturing the actual vercel.com/eve page (curl the SSR HTML + real CSS,
serve locally, screenshot) I could finally match it instead of guessing.

- Walkthrough is now eve's signature: a tall left column of nine numbered
  steps that dim until active and brighten on scroll, paired with a sticky
  light "file browser" code panel on the right (breadcrumb, highlighted file
  row with ownership tag, line-numbered markdown). Replaces the click explorer
  and the dark code windows.
- Hero matches eve: text-tab "For you / For the agent" toggle (not boxed
  buttons), a light inline command pill with a copy affordance (not a dark
  terminal box), bigger headline, more generous spacing.
- New shared light CodeLines renderer; drop the dark CodeWindow and the typed
  HeroTerminal. Light micro-interactions (hover, per-card stagger) on the
  bindings, primitives, and production cards.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PtmdimwWXKdRL7vhL4EcV3
- The hero "For the agent" panel showed a 7-line excerpt in a tall card. Expand
  it to the full AGENTS.md body (manual + conventions + user instructions) so it
  fills the panel instead of floating in empty space.
- Production columns had inconsistent structure — different mock heights left the
  three labels misaligned. Split it like eve: one shared visual panel of three
  equal-height mock cells, then a separate aligned row of label + description per
  column, so the text lines up across all three.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PtmdimwWXKdRL7vhL4EcV3
Final polish pass on the eve-inspired landing:

- Walkthrough: last step no longer reserves 32vh, removing the dead
  scroll gap after step 09; code panels only enforce min-height on lg,
  so mobile stacks compactly.
- Mobile: section padding trimmed from py-20 to py-14 across the
  anatomy, bindings, primitives, and production sections.
- Hero: left column is top-aligned with the artifact and gains an
  "Open source · MIT licensed · bring your own keys" footnote so it
  balances the file-tree height.
- Production: sandboxed-compute rows drop their per-row border and
  adopt the same label + thin-divider rhythm as the durable mock, so
  all three panels read as one visual family.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PtmdimwWXKdRL7vhL4EcV3
Content audit pass — every product name, status, and label now matches
the actual runtime, not an approximation:

- Rename "Vercel Chat SDK" to "Chat SDK". The repo depends on the
  `chat` / `@chat-adapter/slack` packages and refers to them as
  "Chat SDK" throughout; the "Vercel" qualifier was unverified.
- Production durable mock used a fake status "done". The real
  agent-event vocabulary is queued/starting/running/completed/…, so
  the checkpointed phases now read "completed", matching the compute
  mock beside them.
- The hero file tree marks USER.md as "shared" (a distinct gray dot),
  but its legend only explained "you author" and "agent writes". Added
  the missing "shared" entry so the legend matches the data and the
  three-owner model the anatomy section already teaches.

Verified the rest against the codebase and left it unchanged: the nine
canonical sandbox files, heartbeat range (5 min–daily, default 30),
dreaming cadence, budget periods, the 12-connector registry, the
inference providers, and the foundation stack are all accurate.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PtmdimwWXKdRL7vhL4EcV3
Narrative/redundancy audit follow-up. The three middle sections
(Bindings, Built-on, Production) were circling the same four concepts,
sometimes verbatim. Fixes:

- Differentiate Production from Built-on. Production no longer restates
  the runtime/sandbox/connector list; it now shows the three things you
  only get in production: Durable execution (a crash resumes mid-step),
  Observable by default (the Events log — type, status, duration), and
  Bounded spend (USD budgets + per-run step limit). New BudgetMock
  replaces the connector chip-cloud, which already lived in Built-on.
  Sub-headline reframed to "durability, observability, governance".

- Unify terminology on outname's own vocabulary, not eve's:
  "surfaces" -> "channels" (the real module), "connectors" ->
  "connections" (the /connections page), "Agent Skills" -> "Skills"
  (the Skills tab), and the observability copy now says "Events" (the
  Events tab) instead of an invented label.

- Thin the repetition: "bring your own keys" appeared four times; it now
  stays only in the hero footnote and the Built-on intro. The verbatim
  "checkpointed and resumable" / "persistent isolated filesystem" lines
  no longer appear in both Built-on and Production.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PtmdimwWXKdRL7vhL4EcV3
Connections, channels, and inference providers now show their logos
instead of plain text chips, so the integration surface is scannable at
a glance.

- New BrandGlyph component resolves a brand name to its monochrome
  Simple Icon (rendered in currentColor so it stays inside the
  monochrome + red system — never the brand's own color). The 12
  available marks cover GitHub, Cal.com, Resend, PostHog, X, Supabase,
  v0, Vercel, OpenRouter, Next.js, Upstash, and Better Auth.
- Brands Simple Icons doesn't ship (Slack — pulled for trademark — plus
  Firecrawl, Parallel, Typefully, Context7) and the conceptual ones
  (LLM Gateway, Neon, Chat SDK) fall back to a clean two-letter
  monogram in the same square; in-app chat uses a Lucide chat glyph.
- Wired into Built-on (every product row, the Channels and Connections
  chip clouds) and into the Bindings Model and Tools cards.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PtmdimwWXKdRL7vhL4EcV3
…ations

Replaces the remaining monogram fallbacks with faithful logos:

- Neon now uses the PostgreSQL elephant (Simple Icons), since Neon is
  Postgres.
- Slack, Firecrawl, Parallel, Typefully, and Context7 — none shipped by
  Simple Icons — get hand-built marks sourced from each project's
  official assets (svgl.app and brand kits), reduced to a single
  monochrome path set rendered in currentColor so they stay inside the
  monochrome + red system. Context7 keeps its rounded badge with the C7
  knocked out so it reads at chip size.

Only LLM Gateway and Chat SDK remain two-letter monograms — neither is a
real brand with an iconic mark.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PtmdimwWXKdRL7vhL4EcV3

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/shared/marketing/components/landing/brand-glyph.tsx`:
- Around line 103-107: The icon rendering branch in brand-glyph.tsx is missing
the same decorative accessibility treatment as the MONOGRAMS path, which can
cause duplicate announcements like “Slack Slack”. Update the Icon return path in
the brand glyph component so it is hidden from assistive tech as decorative,
keeping it consistent with the existing aria-hidden handling used for monograms.
Use the brandKey, ICONS/LUCIDE lookup, and Icon render branch to locate the
change.

In `@packages/shared/marketing/components/landing/landing-production.tsx`:
- Around line 107-117: The event rows in landing-production currently
communicate state only through the colored dot, so add accessible text for
event.status in the row rendering. Update the markup in the event item UI to
include either visible status text or an sr-only label/aria-label on the status
indicator (or its containing row) that exposes completed/running/queued, while
keeping the existing cn/statusTone mapping intact. Use semantic HTML where
possible and ensure the unique event.status value is announced by assistive
tech.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 6d758ed0-ff7e-484f-b21a-8cb7feb2e8ab

📥 Commits

Reviewing files that changed from the base of the PR and between 9e3be64 and c8fe80e.

📒 Files selected for processing (6)
  • packages/shared/marketing/components/landing/brand-glyph.tsx
  • packages/shared/marketing/components/landing/brand-icons.tsx
  • packages/shared/marketing/components/landing/landing-bindings.tsx
  • packages/shared/marketing/components/landing/landing-primitives.tsx
  • packages/shared/marketing/components/landing/landing-production.tsx
  • packages/shared/marketing/data/primitives.ts
✅ Files skipped from review due to trivial changes (1)
  • packages/shared/marketing/data/primitives.ts
🚧 Files skipped from review as they are similar to previous changes (2)
  • packages/shared/marketing/components/landing/landing-bindings.tsx
  • packages/shared/marketing/components/landing/landing-primitives.tsx

Comment on lines +103 to +107
const key = brandKey(name)
const Icon = ICONS[key] ?? LUCIDE[key]

if (Icon) {
return <Icon className={cn('shrink-0', className)} />

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Hide the icon branch from assistive tech too.

MONOGRAMS already render with aria-hidden, but the icon path does not, so bindings/primitives can be announced as duplicate labels like “Slack Slack”. Make the icon branch decorative as well to keep both rendering paths consistent.

Suggested fix
   if (Icon) {
-    return <Icon className={cn('shrink-0', className)} />
+    return (
+      <span aria-hidden>
+        <Icon className={cn('shrink-0', className)} />
+      </span>
+    )
   }

As per coding guidelines, use semantic HTML and ARIA attributes for accessibility; the current bindings/primitives callers already render the brand name beside the glyph.

📝 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
const key = brandKey(name)
const Icon = ICONS[key] ?? LUCIDE[key]
if (Icon) {
return <Icon className={cn('shrink-0', className)} />
const key = brandKey(name)
const Icon = ICONS[key] ?? LUCIDE[key]
if (Icon) {
return (
<span aria-hidden>
<Icon className={cn('shrink-0', className)} />
</span>
)
}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/shared/marketing/components/landing/brand-glyph.tsx` around lines
103 - 107, The icon rendering branch in brand-glyph.tsx is missing the same
decorative accessibility treatment as the MONOGRAMS path, which can cause
duplicate announcements like “Slack Slack”. Update the Icon return path in the
brand glyph component so it is hidden from assistive tech as decorative, keeping
it consistent with the existing aria-hidden handling used for monograms. Use the
brandKey, ICONS/LUCIDE lookup, and Icon render branch to locate the change.

Source: Coding guidelines

Comment on lines +107 to +117
<div className="flex items-center justify-between gap-3 font-mono text-[11px] tracking-normal">
<span className="flex min-w-0 items-center gap-2">
<span
className={cn(
'size-2 shrink-0 rounded-full',
statusTone[event.status]
)}
/>
<span className="truncate text-foreground">{event.id}</span>
</span>
<span className="shrink-0 text-muted-foreground">{event.meta}</span>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Expose event status as text, not only color.

Each row’s state lives only in the colored dot, so assistive tech never gets completed / running / queued. Add visible status text or at least an sr-only label/aria-label that includes event.status.

Suggested fix
             <span className="flex min-w-0 items-center gap-2">
               <span
                 className={cn(
                   'size-2 shrink-0 rounded-full',
                   statusTone[event.status]
                 )}
               />
               <span className="truncate text-foreground">{event.id}</span>
+              <span className="sr-only">{event.status}</span>
             </span>

As per coding guidelines, use semantic HTML and ARIA attributes for accessibility.

📝 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
<div className="flex items-center justify-between gap-3 font-mono text-[11px] tracking-normal">
<span className="flex min-w-0 items-center gap-2">
<span
className={cn(
'size-2 shrink-0 rounded-full',
statusTone[event.status]
)}
/>
<span className="truncate text-foreground">{event.id}</span>
</span>
<span className="shrink-0 text-muted-foreground">{event.meta}</span>
<div className="flex items-center justify-between gap-3 font-mono text-[11px] tracking-normal">
<span className="flex min-w-0 items-center gap-2">
<span
className={cn(
'size-2 shrink-0 rounded-full',
statusTone[event.status]
)}
/>
<span className="truncate text-foreground">{event.id}</span>
<span className="sr-only">{event.status}</span>
</span>
<span className="shrink-0 text-muted-foreground">{event.meta}</span>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/shared/marketing/components/landing/landing-production.tsx` around
lines 107 - 117, The event rows in landing-production currently communicate
state only through the colored dot, so add accessible text for event.status in
the row rendering. Update the markup in the event item UI to include either
visible status text or an sr-only label/aria-label on the status indicator (or
its containing row) that exposes completed/running/queued, while keeping the
existing cn/statusTone mapping intact. Use semantic HTML where possible and
ensure the unique event.status value is announced by assistive tech.

Source: Coding guidelines

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