Skip to content

Reposition Caplets around whole-stack agent capabilities - #248

Open
ian-pascoe wants to merge 5 commits into
mainfrom
worktree/rapid-river-8e06
Open

Reposition Caplets around whole-stack agent capabilities#248
ian-pascoe wants to merge 5 commits into
mainfrom
worktree/rapid-river-8e06

Conversation

@ian-pascoe

@ian-pascoe ian-pascoe commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Summary

  • reposition Caplets as the capability layer that lets coding agents work across the user’s intentionally exposed whole stack
  • rebuild the landing journey around backend breadth, capability composition, portability, sharing, and issue-to-production work
  • align docs, README, catalog, blog, metadata, strategy, domain language, and CTA observability with the new positioning
  • preserve trust boundaries, explicit authorization, catalog safety warnings, and benchmarked efficiency as technical proof

Verification

  • pnpm verify
  • focused landing tests, typechecks, and landing/docs/catalog builds
  • desktop and mobile browser smoke tests
  • accessibility audit: 0 violations
  • two-axis standards and specification review, with findings addressed

Closes #244

Summary by CodeRabbit

  • New Features / Updates
    • Added a “Supported connection model” map and an end-to-end “whole job” workflow section.
    • Updated the activation experience with a new install/activation flow, copyable setup steps, and a “Caplet Activation” call-to-action.
    • Reframed Caplets sitewide as a whole-stack capability layer for coding agents (including clearer Code Mode messaging).
  • SEO & Sharing
    • Improved catalog and caplet detail page metadata, including “unavailable” handling.
  • Accessibility & Tracking
    • Added accessibility landmarks and enhanced CTA click tracking using explicit CTA categories.
  • Tests
    • Expanded semantic-judge tests to ensure extension-free judging behavior.

@ian-pascoe ian-pascoe added the no changeset No package changeset required label Jul 27, 2026
@coderabbitai

coderabbitai Bot commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

Caplets’ positioning is rewritten around a whole-stack capability layer. Documentation, catalog pages, landing sections, activation flows, navigation, metadata, accessibility semantics, CTA observability, and semantic-judge isolation are updated.

Changes

Whole Stack positioning

Layer / File(s) Summary
Language and strategy definitions
CONTEXT.md, PRODUCT.md, README.md, STRATEGY.md, apps/docs/..., apps/landing/src/content/blog/...
Defines capability-layer terminology and aligns product, documentation, README, strategy, and blog messaging.
Catalog positioning and metadata
apps/catalog/src/pages/..., apps/catalog/src/styles/catalog.css
Updates catalog SEO metadata, positioning content, access wording, and layout styles.
Landing narrative and capability sections
apps/landing/src/components/landing/..., apps/landing/src/data/landing.ts, apps/landing/src/pages/index.astro, apps/landing/src/styles/global.css
Adds breadth and whole-job sections and revises problem, portability, proof, sharing, landing data, composition, and styling.
Landing shell, activation, and CTA measurement
apps/landing/src/components/landing/..., apps/landing/src/layouts/..., apps/landing/src/scripts/..., apps/landing/test/...
Reworks navigation, setup activation, metadata, accessibility landmarks, CTA categorization, and related tests.
Semantic judge extension isolation
packages/benchmarks/lib/pi-eval/semantic-judge.ts, packages/benchmarks/test/benchmark.test.ts
Adds --no-extensions to Pi semantic-judge commands and tests the generated invocation.

Estimated code review effort: 3 (Moderate) | ~30 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Visitor
  participant LandingPage
  participant Activation
  participant Observability
  participant PostHog
  Visitor->>LandingPage: Open whole-stack landing page
  LandingPage->>Activation: Render setup options and activation CTA
  Visitor->>Activation: Copy setup command or connect capability
  Visitor->>Observability: Click categorized CTA
  Observability->>PostHog: Capture caplets_site_intent with CTA category
Loading

Possibly related PRs

Poem

A rabbit hops through stacks so wide,
Caplets gather paths side by side.
Copy, connect, and share with care,
No secrets scattered in the air.
“Whole stack!” we cheer, then leap.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
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 (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and accurately reflects the PR's main shift to whole-stack agent positioning.
Linked Issues check ✅ Passed The changes align with the linked issue by updating messaging, activation flow, docs, metadata, and benchmark isolation to match whole-stack positioning.
Out of Scope Changes check ✅ Passed No clear out-of-scope code changes are evident; the edits support the stated positioning and preserve the requested boundaries.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch worktree/rapid-river-8e06

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.

@greptile-apps

greptile-apps Bot commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

Repositions Caplets as a controlled, reusable whole-stack capability layer for coding agents.

  • Rebuilds the landing-page journey, navigation, activation flow, capability examples, and benchmark presentation.
  • Aligns catalog, documentation, README, blog, strategy, terminology, metadata, and CTA analytics with the new positioning.
  • Adds catalog social metadata and expands landing observability tests for explicitly categorized CTAs.

Confidence Score: 4/5

The PR appears safe to merge, with a non-blocking catalog metadata issue that should be corrected to keep shared detail URLs canonical.

The landing interactions and analytics contract remain coherent, while catalog detail pages can emit request-specific Open Graph URLs on preview hosts or requests containing query parameters.

Files Needing Attention: apps/catalog/src/pages/caplets/[entryKey].astro

Important Files Changed

Filename Overview
apps/landing/src/pages/index.astro Reorders the landing journey and adds the breadth and issue-to-production sections without an identified functional issue.
apps/landing/src/components/landing/Activation.astro Moves setup and copy controls into the activation section while preserving working tab and copy initialization.
apps/landing/src/scripts/observability.ts Captures explicitly categorized internal CTAs; the emitted categorical values satisfy the shared event contract.
apps/catalog/src/pages/caplets/[entryKey].astro Adds social metadata, but derives og:url from the request and can publish noncanonical preview or query-bearing URLs.
apps/landing/src/data/landing.ts Updates capability, portability, benchmark, and activation content used throughout the redesigned landing page.

Fix All in Codex

Reviews (1): Last reviewed commit: "fix(marketing): align whole-stack public..." | Re-trigger Greptile

<meta property="og:title" content={`${pageTitle} — Caplets Catalog`} />
<meta property="og:description" content={pageDescription} />
<meta property="og:type" content="website" />
<meta property="og:url" content={Astro.url.href} />

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.

P2 Request-derived social URL

Using Astro.url.href publishes the incoming hostname and query string as og:url, so shares made through preview hosts or tracking URLs advertise a request-specific address instead of the stable production catalog entry. Build this value from the configured catalog site and entry path, consistent with the catalog index metadata.

Knowledge Base Used: Dashboard and Catalog Apps

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Fix in Codex

@coderabbitai coderabbitai Bot left a comment

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.

Actionable comments posted: 2

🧹 Nitpick comments (1)
apps/landing/test/activation-links.test.ts (1)

8-16: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Test rendered behavior instead of component-source literals.

These checks couple to raw Astro markup and data-* strings. Cover the rendered CTA destination/category and setup-tab behavior through the landing test surface instead.

As per coding guidelines, “avoid tests that merely restate implementation literals or superficial metadata/copy/export details.”

Also applies to: 18-20

🤖 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 `@apps/landing/test/activation-links.test.ts` around lines 8 - 16, Replace the
source-text assertions in the activation-links test with landing-surface
behavior tests that render or exercise Hero.astro and verify the secondary
shared-Caplets CTA resolves to the public catalog and exposes the secondary
category. Also cover the setup-tab interaction and its resulting rendered
behavior through the landing test surface, without reading component source or
asserting raw implementation literals.

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 `@apps/docs/src/content/docs/index.mdx`:
- Line 15: Update the Code Mode description to say that each configured Caplet
becomes a typed caplets.<id> handle, replacing the inaccurate reference to each
configured backend while preserving the rest of the explanation.

In `@STRATEGY.md`:
- Around line 22-23: Update the “Caplet Activation” definition in STRATEGY.md to
require both the first successful Caplet backend operation and a subsequent
connection of a capability from the user’s own stack. Alternatively, split first
execution and activation into distinct events, ensuring retention and activation
cohorts use the milestone that includes the follow-up connection.

---

Nitpick comments:
In `@apps/landing/test/activation-links.test.ts`:
- Around line 8-16: Replace the source-text assertions in the activation-links
test with landing-surface behavior tests that render or exercise Hero.astro and
verify the secondary shared-Caplets CTA resolves to the public catalog and
exposes the secondary category. Also cover the setup-tab interaction and its
resulting rendered behavior through the landing test surface, without reading
component source or asserting raw implementation literals.
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 6718a552-0756-4e7d-bd5b-3784aeb08aca

📥 Commits

Reviewing files that changed from the base of the PR and between 76f55bb and 7ded03f.

📒 Files selected for processing (29)
  • CONTEXT.md
  • PRODUCT.md
  • README.md
  • STRATEGY.md
  • apps/catalog/src/pages/caplets/[entryKey].astro
  • apps/catalog/src/pages/index.astro
  • apps/catalog/src/styles/catalog.css
  • apps/docs/src/content/docs/index.mdx
  • apps/landing/src/components/landing/Activation.astro
  • apps/landing/src/components/landing/AgentTrace.astro
  • apps/landing/src/components/landing/BlogCta.astro
  • apps/landing/src/components/landing/Breadth.astro
  • apps/landing/src/components/landing/CommandBlock.astro
  • apps/landing/src/components/landing/Footer.astro
  • apps/landing/src/components/landing/Header.astro
  • apps/landing/src/components/landing/Hero.astro
  • apps/landing/src/components/landing/Proof.astro
  • apps/landing/src/components/landing/RemoteStory.astro
  • apps/landing/src/components/landing/WholeJob.astro
  • apps/landing/src/components/landing/WhyCaplets.astro
  • apps/landing/src/content/blog/why-giant-mcp-tool-walls-dont-scale.md
  • apps/landing/src/data/landing.ts
  • apps/landing/src/layouts/LandingLayout.astro
  • apps/landing/src/pages/blog/index.astro
  • apps/landing/src/pages/index.astro
  • apps/landing/src/scripts/observability.ts
  • apps/landing/test/activation-links.test.ts
  • apps/landing/test/blog-navigation.test.ts
  • apps/landing/test/observability.test.ts
💤 Files with no reviewable changes (1)
  • apps/landing/test/blog-navigation.test.ts

Codex, Claude, OpenCode, Pi, and supported MCP clients while each host independently
supplies and authorizes access.

Code Mode is the default surface: each configured backend becomes a typed `caplets.<id>` handle that an agent can inspect, search, call, filter, and summarize in one workflow. Direct and progressive exposure remain available for clients and tasks that need them.

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.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Document Caplet handles, not backend handles.

The Code Mode declaration generator creates caplets.<id> properties from configured Caplets and their caplet.id values, not directly from backend instances. Change “each configured backend” to “each configured Caplet” so users do not infer a one-to-one backend/handle mapping.

Proposed wording
-Code Mode is the default surface: each configured backend becomes a typed `caplets.<id>` handle
+Code Mode is the default surface: each configured Caplet becomes a typed `caplets.<id>` handle
📝 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
Code Mode is the default surface: each configured backend becomes a typed `caplets.<id>` handle that an agent can inspect, search, call, filter, and summarize in one workflow. Direct and progressive exposure remain available for clients and tasks that need them.
Code Mode is the default surface: each configured Caplet becomes a typed `caplets.<id>` handle that an agent can inspect, search, call, filter, and summarize in one workflow. Direct and progressive exposure remain available for clients and tasks that need them.
🤖 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 `@apps/docs/src/content/docs/index.mdx` at line 15, Update the Code Mode
description to say that each configured Caplet becomes a typed caplets.<id>
handle, replacing the inaccurate reference to each configured backend while
preserving the rest of the explanation.

Comment thread STRATEGY.md
Comment on lines +22 to +23
- **Caplet Activation** - The first successful backend operation executed through a configured Caplet. Landing clicks, catalog views, installation, and setup completion are funnel diagnostics, not activation.
- **Whole Stack retention** - Repeat successful Caplet executions across backend families, indicating that users expanded beyond the first no-auth capability into personally relevant work.

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.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Align “Caplet Activation” with the intended activation milestone.

This currently counts only the first successful backend operation, but the PR objective defines activation as that success followed by connecting a capability from the user’s own stack. Define the follow-up connection in this metric, or split first execution and activation into separate events; otherwise retention and activation reporting will use the wrong cohort.

Proposed wording
-- **Caplet Activation** - The first successful backend operation executed through a configured Caplet.
+- **Caplet Activation** - A first successful backend operation followed by connecting a capability from the user's own stack.
📝 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
- **Caplet Activation** - The first successful backend operation executed through a configured Caplet. Landing clicks, catalog views, installation, and setup completion are funnel diagnostics, not activation.
- **Whole Stack retention** - Repeat successful Caplet executions across backend families, indicating that users expanded beyond the first no-auth capability into personally relevant work.
- **Caplet Activation** - The first successful backend operation executed through a configured Caplet. Landing clicks, catalog views, installation, and setup completion are funnel diagnostics, not activation.
**Caplet Activation** - A first successful backend operation followed by connecting a capability from the user's own stack.
- **Whole Stack retention** - Repeat successful Caplet executions across backend families, indicating that users expanded beyond the first no-auth capability into personally relevant work.
🤖 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 `@STRATEGY.md` around lines 22 - 23, Update the “Caplet Activation” definition
in STRATEGY.md to require both the first successful Caplet backend operation and
a subsequent connection of a capability from the user’s own stack.
Alternatively, split first execution and activation into distinct events,
ensuring retention and activation cohorts use the milestone that includes the
follow-up connection.

@github-actions

github-actions Bot commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

@ian-pascoe
ian-pascoe force-pushed the worktree/rapid-river-8e06 branch from 7ded03f to aac5cde Compare July 28, 2026 10:59

@coderabbitai coderabbitai Bot left a comment

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.

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 `@apps/landing/src/components/landing/Header.astro`:
- Line 23: Update the desktop Workflow link in Header.astro and the mobile Issue
to production link in Header.astro to use the same scroll-offset behavior as the
other anchored section links targeting `#work`, ensuring the destination heading
remains visible below the sticky header.
- Line 36: Update the site-header__actions wrapper in Header.astro so it does
not use the “Project links” aria-label when it contains only the mobile “Open
navigation menu” control; keep the wrapper layout-only or move the label to the
container that exclusively contains the GitHub/npm links.
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 05eb1dd5-4627-44de-8a6d-508fa37587ff

📥 Commits

Reviewing files that changed from the base of the PR and between 7ded03f and aac5cde.

📒 Files selected for processing (29)
  • CONTEXT.md
  • PRODUCT.md
  • README.md
  • STRATEGY.md
  • apps/catalog/src/pages/caplets/[entryKey].astro
  • apps/catalog/src/pages/index.astro
  • apps/catalog/src/styles/catalog.css
  • apps/docs/src/content/docs/index.mdx
  • apps/landing/src/components/landing/Activation.astro
  • apps/landing/src/components/landing/AgentTrace.astro
  • apps/landing/src/components/landing/BlogCta.astro
  • apps/landing/src/components/landing/Breadth.astro
  • apps/landing/src/components/landing/CommandBlock.astro
  • apps/landing/src/components/landing/Footer.astro
  • apps/landing/src/components/landing/Header.astro
  • apps/landing/src/components/landing/Hero.astro
  • apps/landing/src/components/landing/Proof.astro
  • apps/landing/src/components/landing/RemoteStory.astro
  • apps/landing/src/components/landing/WholeJob.astro
  • apps/landing/src/components/landing/WhyCaplets.astro
  • apps/landing/src/content/blog/why-giant-mcp-tool-walls-dont-scale.md
  • apps/landing/src/data/landing.ts
  • apps/landing/src/layouts/LandingLayout.astro
  • apps/landing/src/pages/blog/index.astro
  • apps/landing/src/pages/index.astro
  • apps/landing/src/scripts/observability.ts
  • apps/landing/test/activation-links.test.ts
  • apps/landing/test/blog-navigation.test.ts
  • apps/landing/test/observability.test.ts
💤 Files with no reviewable changes (1)
  • apps/landing/test/blog-navigation.test.ts
🚧 Files skipped from review as they are similar to previous changes (25)
  • apps/landing/src/pages/blog/index.astro
  • apps/landing/src/components/landing/Footer.astro
  • apps/landing/src/pages/index.astro
  • CONTEXT.md
  • apps/landing/src/components/landing/CommandBlock.astro
  • apps/landing/src/layouts/LandingLayout.astro
  • apps/landing/src/components/landing/Breadth.astro
  • apps/landing/src/components/landing/AgentTrace.astro
  • apps/landing/src/components/landing/Proof.astro
  • apps/catalog/src/pages/index.astro
  • apps/landing/src/components/landing/WholeJob.astro
  • apps/landing/src/components/landing/Activation.astro
  • apps/landing/test/activation-links.test.ts
  • README.md
  • apps/catalog/src/styles/catalog.css
  • apps/landing/src/components/landing/RemoteStory.astro
  • apps/landing/src/data/landing.ts
  • apps/catalog/src/pages/caplets/[entryKey].astro
  • apps/landing/src/components/landing/WhyCaplets.astro
  • apps/landing/src/components/landing/BlogCta.astro
  • PRODUCT.md
  • apps/docs/src/content/docs/index.mdx
  • apps/landing/src/scripts/observability.ts
  • STRATEGY.md
  • apps/landing/src/components/landing/Hero.astro

<a class="site-header__section-link inline-flex min-h-11 items-center rounded-md px-3 py-2 transition hover:bg-muted hover:text-foreground focus-visible:ring-3 focus-visible:ring-outline/50 focus-visible:outline-none" href="#remote">Remote</a>
<a class="site-header__section-link inline-flex min-h-11 items-center rounded-md px-3 py-2 transition hover:bg-muted hover:text-foreground focus-visible:ring-3 focus-visible:ring-outline/50 focus-visible:outline-none" href="#breadth">Backends</a>
<a class="site-header__section-link inline-flex min-h-11 items-center rounded-md px-3 py-2 transition hover:bg-muted hover:text-foreground focus-visible:ring-3 focus-visible:ring-outline/50 focus-visible:outline-none" href="#portable">Agents</a>
<a class="site-header__section-link inline-flex min-h-11 items-center rounded-md px-3 py-2 transition hover:bg-muted hover:text-foreground focus-visible:ring-3 focus-visible:ring-outline/50 focus-visible:outline-none" href="#work">Workflow</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.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Add a scroll offset to the shared #work target.

The target in apps/landing/src/components/landing/WholeJob.astro lacks the offset used by the other anchored sections, so both links can hide the destination heading beneath the sticky header.

  • apps/landing/src/components/landing/Header.astro#L23-L23: update the desktop Workflow destination behavior.
  • apps/landing/src/components/landing/Header.astro#L64-L64: update the mobile Issue to production destination behavior.
📍 Affects 1 file
  • apps/landing/src/components/landing/Header.astro#L23-L23 (this comment)
  • apps/landing/src/components/landing/Header.astro#L64-L64
🤖 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 `@apps/landing/src/components/landing/Header.astro` at line 23, Update the
desktop Workflow link in Header.astro and the mobile Issue to production link in
Header.astro to use the same scroll-offset behavior as the other anchored
section links targeting `#work`, ensuring the destination heading remains visible
below the sticky header.

</nav>

<div class="site-header__actions flex items-center gap-2" aria-label="Project links">
<div class="site-header__actions flex items-center gap-2" role="group" aria-label="Project links">

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.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Do not label the menu trigger as “Project links”.

On mobile, the GitHub/npm links are hidden and this group contains only the “Open navigation menu” control. Keep the wrapper layout-only, or apply the group label only to a container containing the project links.

🤖 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 `@apps/landing/src/components/landing/Header.astro` at line 36, Update the
site-header__actions wrapper in Header.astro so it does not use the “Project
links” aria-label when it contains only the mobile “Open navigation menu”
control; keep the wrapper layout-only or move the label to the container that
exclusively contains the GitHub/npm links.

@coderabbitai coderabbitai Bot left a comment

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.

Actionable comments posted: 1

🤖 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 `@apps/landing/src/components/landing/RemoteStory.astro`:
- Line 15: The RemoteStory “Create and share a Caplet” CTA is categorized as
“docs” instead of the intended secondary CTA. Add an explicit
data-cta-category="secondary" attribute to that link in
apps/landing/src/components/landing/RemoteStory.astro; the related CTA in
apps/landing/src/components/landing/Proof.astro requires no direct change.
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 2b62414b-4f74-4c18-aff6-fd90ee9c9fee

📥 Commits

Reviewing files that changed from the base of the PR and between aac5cde and 863ebc6.

📒 Files selected for processing (12)
  • apps/landing/src/components/landing/Activation.astro
  • apps/landing/src/components/landing/AgentTrace.astro
  • apps/landing/src/components/landing/CommandBlock.astro
  • apps/landing/src/components/landing/Proof.astro
  • apps/landing/src/components/landing/RemoteStory.astro
  • apps/landing/src/components/landing/WhyCaplets.astro
  • apps/landing/src/data/landing.ts
  • apps/landing/src/pages/index.astro
  • apps/landing/src/scripts/agent-trace.ts
  • apps/landing/src/styles/global.css
  • packages/benchmarks/lib/pi-eval/semantic-judge.ts
  • packages/benchmarks/test/benchmark.test.ts
💤 Files with no reviewable changes (4)
  • apps/landing/src/scripts/agent-trace.ts
  • apps/landing/src/components/landing/AgentTrace.astro
  • apps/landing/src/components/landing/CommandBlock.astro
  • apps/landing/src/pages/index.astro

</div>
</CardContent>
</Card>
<a class="mt-6 inline-flex min-h-11 items-center font-medium text-primary-accent hover:underline focus-visible:ring-3 focus-visible:ring-outline/50 focus-visible:outline-none" href="https://docs.caplets.dev/capabilities/">Create and share a Caplet</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.

🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Inspect how ctaCategory() infers a category when data-cta-category is absent
rg -n -A10 "function ctaCategory|parseExplicitCtaCategory" apps/landing/src/scripts/observability.ts

Repository: spiritledsoftware/caplets

Length of output: 1476


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Candidate files =="
fd -a 'RemoteStory\.astro|Proof\.astro|Activation\.astro|observability\.ts' apps/landing/src | sed 's#^\./##'

echo
echo "== Observability full relevant section =="
sed -n '1,230p' apps/landing/src/scripts/observability.ts | cat -n

echo
echo "== Landing components snippets =="
for f in apps/landing/src/components/landing/RemoteStory.astro apps/landing/src/components/landing/Proof.astro apps/landing/src/components/landing/Activation.astro; do
  if [ -f "$f" ]; then
    echo "--- $f ---"
    cat -n "$f" | sed -n '1,120p'
  fi
done

echo
echo "== All data-cta-category occurrences in landing components/scripts =="
rg -n --hidden --glob '!*node_modules*' --glob '*.{astro,ts,tsx,js,jsx}' 'data-cta-category|ctaCategory\(' apps/landing/src || true

Repository: spiritledsoftware/caplets

Length of output: 19484


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Button implementation =="
fd -a 'button.tsx|button.jsx|button.ts' apps/landing/src/components/starwind | sed 's#^\./##'
for f in $(fd -a 'button.tsx|button.jsx|button.ts' apps/landing/src/components/starwind); do
  echo "--- $f ---"
  cat -n "$f" | sed -n '1,220p'
done

echo
echo "== Astro render output for Button with dataset attribute =="
python3 - <<'PY'
import re
from pathlib import Path

p = Path("apps/landing/src/components/starwind/button.tsx")
src = p.read_text() if p.exists() else ""
m = re.search(r"data-cta-category|data-cta-category", src)
print("data-cta-category present in button.tsx:", bool(m))

for file in ["apps/landing/src/components/landing/Button.astro","apps/landing/src/components/starwind/button.tsx"]:
    p = Path(file)
    print(f"exists {file}:", p.exists())
PY

Repository: spiritledsoftware/caplets

Length of output: 424


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Button component filenames =="
fd -i -a '^button' apps/landing/src/components/starwind apps/landing/src/components/landing 2>/dev/null | sed 's#^\./##' | head -20

echo
echo "== Search Button definition and dataset spread usage =="
rg -n -C6 'function Button|const Button|export \* from .*button|data-\{|data-cta-category|<button' apps/landing/src/components/starwind apps/landing/src/components/landing 2>/dev/null || true

Repository: spiritledsoftware/caplets

Length of output: 13201


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Button.astro =="
cat -n apps/landing/src/components/starwind/button/Button.astro | sed -n '1,220p'

echo
echo "== Behavioral probe: ctaCategory inference for current untagged CTAs =="
python3 - <<'PY'
from pathlib import Path
src = Path("apps/landing/src/scripts/observability.ts").read_text()
start = src.find("function ctaCategory")
end = src.find("\n}", start)
print(src[start:end+2])

cases = [
    ("Create and share a Caplet", "inside main", "<a href>"),
    ("Review the benchmark", "inside main", "<Button>"),
    ("Connect your own backend", "inside main", "<Button data-cta-category=\"secondary\">"),
]
for text, location, markup in cases:
    text_lower = text.lower()
    explicit = None
    inferred = None
    if text_lower.strip() == "connect your own backend":
        explicit = "secondary"
    elif text_lower.strip() == "create and share a caplet":
        inferred = "docs"
    elif text_lower.strip() == "review the benchmark":
        inferred = "secondary"
    print({"text": text, "markup": markup, "explicit": explicit, "inferred": inferred})
PY

Repository: spiritledsoftware/caplets

Length of output: 1902


Tag the docs CTA so analytics report it consistently. ctaCategory() already falls back to "secondary" for "Review the benchmark" because it is in <main>, but "Create and share a Caplet" includes "docs" and gets reported as "docs" unless explicitly categorized. Add data-cta-category="secondary" (or whichever explicit category is desired) to the RemoteStory link.

📍 Affects 2 files
  • apps/landing/src/components/landing/RemoteStory.astro#L15-L15 (this comment)
  • apps/landing/src/components/landing/Proof.astro#L20-L23
🤖 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 `@apps/landing/src/components/landing/RemoteStory.astro` at line 15, The
RemoteStory “Create and share a Caplet” CTA is categorized as “docs” instead of
the intended secondary CTA. Add an explicit data-cta-category="secondary"
attribute to that link in apps/landing/src/components/landing/RemoteStory.astro;
the related CTA in apps/landing/src/components/landing/Proof.astro requires no
direct change.

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

Labels

no changeset No package changeset required

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Reposition Caplets around Whole Stack agent capabilities

1 participant