Add enterprise landing page - #36
Conversation
📝 WalkthroughWalkthroughChangesEnterprise marketing page
Estimated code review effort: 4 (Complex) | ~45 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
|
Preview deployed!
This is a Cloudflare Workers preview version of this PR's build. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5982175863
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| import { FadeIn } from '../../components/FadeIn'; | ||
| import { SiteFooter } from '../../components/SiteFooter'; | ||
| import { SiteNav } from '../../components/SiteNav'; | ||
| import { ScribbleUnderline } from '../../components/home/icons'; |
There was a problem hiding this comment.
Keep the homepage stylesheet out of this route
Importing ScribbleUnderline from components/home/icons also imports landing.module.css, because that component obtains its SVG class from the homepage CSS module. Consequently, a visitor loading /enterprise must download the entire 131 KB unminified homepage stylesheet in addition to the new enterprise CSS just to render one underline. Move the underline and its small style set into a standalone component/module, or let this page supply the class, to avoid bloating this new landing route.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
web/app/enterprise/page.tsx (1)
334-345: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value
s.engagementItemContentisn't defined inenterprise.module.css.This resolves to
undefined, so the wrapping<div>renders without any class. Functionally harmless today because.engagementItem h3/.engagementItem pare descendant selectors, but it's a dangling reference — either add the missing rule if a layout tweak was intended, or drop the unused class.🤖 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 `@web/app/enterprise/page.tsx` around lines 334 - 345, Resolve the undefined s.engagementItemContent reference in the engagement.map markup by either adding the intended engagementItemContent rule to enterprise.module.css or removing the className from its wrapping div; keep the existing engagementItem descendant styling intact.
🤖 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 `@web/app/enterprise/enterprise.module.css`:
- Around line 1-15: Insert a blank line in the .page rule between the
custom-property declarations and the min-height declaration, preserving all
existing styles.
In `@web/app/enterprise/page.tsx`:
- Around line 210-229: Update the hero markup in the enterprise page to render
the existing eyebrow badge with the label “Enterprise” above the headline,
matching the OG image route and using the defined s.eyebrow styling. If the
badge is intentionally not part of the page, remove the unused .eyebrow rule
from enterprise.module.css instead.
---
Nitpick comments:
In `@web/app/enterprise/page.tsx`:
- Around line 334-345: Resolve the undefined s.engagementItemContent reference
in the engagement.map markup by either adding the intended engagementItemContent
rule to enterprise.module.css or removing the className from its wrapping div;
keep the existing engagementItem descendant styling intact.
🪄 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 Plus
Run ID: 8b6224c7-f15a-439f-98cd-770eff704d2a
📒 Files selected for processing (5)
web/app/enterprise/enterprise.module.cssweb/app/enterprise/og.png/route.tsxweb/app/enterprise/page.tsxweb/app/sitemap.tsweb/components/SiteFooter.tsx
| .page { | ||
| --enterprise-bg: #0d2638; | ||
| --enterprise-surface: #0b1c2a; | ||
| --enterprise-surface-strong: #152e44; | ||
| --enterprise-line: rgba(116, 184, 226, 0.2); | ||
| --enterprise-line-strong: rgba(116, 184, 226, 0.34); | ||
| --enterprise-text: #edf4fb; | ||
| --enterprise-muted: #a8b8c8; | ||
| --enterprise-faint: #77879a; | ||
| --enterprise-accent: #74b8e2; | ||
| min-height: 100vh; | ||
| overflow-x: clip; | ||
| background: var(--enterprise-bg); | ||
| color: var(--enterprise-text); | ||
| } |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Missing empty line before declaration (stylelint).
Line 11 (min-height: 100vh;) directly follows the custom-property block without a blank line, which the repo's declaration-empty-line-before rule flags.
🎨 Proposed fix
--enterprise-accent: `#74b8e2`;
+
min-height: 100vh;📝 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.
| .page { | |
| --enterprise-bg: #0d2638; | |
| --enterprise-surface: #0b1c2a; | |
| --enterprise-surface-strong: #152e44; | |
| --enterprise-line: rgba(116, 184, 226, 0.2); | |
| --enterprise-line-strong: rgba(116, 184, 226, 0.34); | |
| --enterprise-text: #edf4fb; | |
| --enterprise-muted: #a8b8c8; | |
| --enterprise-faint: #77879a; | |
| --enterprise-accent: #74b8e2; | |
| min-height: 100vh; | |
| overflow-x: clip; | |
| background: var(--enterprise-bg); | |
| color: var(--enterprise-text); | |
| } | |
| .page { | |
| --enterprise-bg: `#0d2638`; | |
| --enterprise-surface: `#0b1c2a`; | |
| --enterprise-surface-strong: `#152e44`; | |
| --enterprise-line: rgba(116, 184, 226, 0.2); | |
| --enterprise-line-strong: rgba(116, 184, 226, 0.34); | |
| --enterprise-text: `#edf4fb`; | |
| --enterprise-muted: `#a8b8c8`; | |
| --enterprise-faint: `#77879a`; | |
| --enterprise-accent: `#74b8e2`; | |
| min-height: 100vh; | |
| overflow-x: clip; | |
| background: var(--enterprise-bg); | |
| color: var(--enterprise-text); | |
| } |
🧰 Tools
🪛 Stylelint (17.14.1)
[error] 11-11: Expected empty line before declaration (declaration-empty-line-before)
(declaration-empty-line-before)
🤖 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 `@web/app/enterprise/enterprise.module.css` around lines 1 - 15, Insert a blank
line in the .page rule between the custom-property declarations and the
min-height declaration, preserving all existing styles.
Source: Linters/SAST tools
| <section className={s.hero}> | ||
| <div className={s.heroGrid}> | ||
| <div className={s.heroCopy}> | ||
| <h1> | ||
| We'll build you a team of agents that deliver{' '} | ||
| <span className={s.outcomesWord}> | ||
| outcomes | ||
| <ScribbleUnderline /> | ||
| </span> | ||
| </h1> | ||
| <p className={s.heroLead}> | ||
| We connect the models, tools, data, and guardrails, then help your organization take the system from its | ||
| first workflow to production. | ||
| </p> | ||
| <div className={s.heroActions}> | ||
| <SalesButton href={exploratoryCallHref} label="Book Exploratory Call" /> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </section> |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Hero may be missing the "Enterprise" eyebrow badge.
enterprise.module.css defines a .eyebrow class (styled as an uppercase pill label, lines 39-51) that isn't referenced anywhere in this file. The OG image route (web/app/enterprise/og.png/route.tsx) explicitly renders eyebrow="Enterprise" above the same headline, suggesting the hero was meant to show a matching "Enterprise" label but the markup got dropped. If intentional, the unused CSS rule should be removed instead.
💡 Possible fix if the badge was intended
<div className={s.heroCopy}>
+ <span className={s.eyebrow}>Enterprise</span>
<h1>📝 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.
| <section className={s.hero}> | |
| <div className={s.heroGrid}> | |
| <div className={s.heroCopy}> | |
| <h1> | |
| We'll build you a team of agents that deliver{' '} | |
| <span className={s.outcomesWord}> | |
| outcomes | |
| <ScribbleUnderline /> | |
| </span> | |
| </h1> | |
| <p className={s.heroLead}> | |
| We connect the models, tools, data, and guardrails, then help your organization take the system from its | |
| first workflow to production. | |
| </p> | |
| <div className={s.heroActions}> | |
| <SalesButton href={exploratoryCallHref} label="Book Exploratory Call" /> | |
| </div> | |
| </div> | |
| </div> | |
| </section> | |
| <section className={s.hero}> | |
| <div className={s.heroGrid}> | |
| <div className={s.heroCopy}> | |
| <span className={s.eyebrow}>Enterprise</span> | |
| <h1> | |
| We'll build you a team of agents that deliver{' '} | |
| <span className={s.outcomesWord}> | |
| outcomes | |
| <ScribbleUnderline /> | |
| </span> | |
| </h1> | |
| <p className={s.heroLead}> | |
| We connect the models, tools, data, and guardrails, then help your organization take the system from its | |
| first workflow to production. | |
| </p> | |
| <div className={s.heroActions}> | |
| <SalesButton href={exploratoryCallHref} label="Book Exploratory Call" /> | |
| </div> | |
| </div> | |
| </div> | |
| </section> |
🤖 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 `@web/app/enterprise/page.tsx` around lines 210 - 229, Update the hero markup
in the enterprise page to render the existing eyebrow badge with the label
“Enterprise” above the headline, matching the OG image route and using the
defined s.eyebrow styling. If the badge is intentionally not part of the page,
remove the unused .eyebrow rule from enterprise.module.css instead.
What changed
/enterpriselanding page aligned with the Agent Relay homepageagentrelay.com/willWhy
Agent Relay needs a focused enterprise destination that explains how teams can deploy coordinated agents around their systems, security requirements, data boundaries, and operating model.
User impact
Enterprise visitors now have a clear path from the value proposition through deployment choices and governance considerations to a 30-minute exploratory call.
Validation
npm test(22 tests passed)npm run build/enterpriseand/enterprise/og.pngprerender successfullySummary by cubic
Adds a dedicated
/enterpriselanding page that explains deployment options, security/governance, and our engagement process. Creates a clear path for enterprise visitors to book a 30-minute call and improves SEO for enterprise traffic./enterprisepage with foundations, deployment choices (Relay Cloud, private cloud, self-managed), security controls, engagement stages, and a blended hero background.agentrelay.com/will.og.pngroute.Written for commit e49d292. Summary will update on new commits.