Skip to content

feat: DR-7738 partners page#7709

Open
carlagn wants to merge 5 commits intomainfrom
feat/DR-7738-partners
Open

feat: DR-7738 partners page#7709
carlagn wants to merge 5 commits intomainfrom
feat/DR-7738-partners

Conversation

@carlagn
Copy link
Copy Markdown
Contributor

@carlagn carlagn commented Mar 26, 2026

Summary by CodeRabbit

  • New Features

    • Launched a Partners landing page with partner benefits, capability accordion, testimonials, and contact section.
    • Added partners comparison table with limits, ownership, revenue-share tooltips, and “Get in touch” links.
    • Integrated an embedded contact form and support for initializing the embed.
    • Added quote/testimonial component with author attribution.
  • Style

    • Added new global utilities for gradients, typography scales, and link/button styles.

@vercel
Copy link
Copy Markdown

vercel bot commented Mar 26, 2026

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

Project Deployment Actions Updated (UTC)
blog Ready Ready Preview, Comment Mar 26, 2026 7:23pm
docs Ready Ready Preview, Comment Mar 26, 2026 7:23pm
eclipse Ready Ready Preview, Comment Mar 26, 2026 7:23pm
site Ready Ready Preview, Comment Mar 26, 2026 7:23pm

Request Review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 26, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: bff8b24f-4143-4bd5-a239-93faf0494201

📥 Commits

Reviewing files that changed from the base of the PR and between 3594979 and 4805cfe.

📒 Files selected for processing (1)
  • packages/eclipse/src/styles/globals.css
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/eclipse/src/styles/globals.css

Walkthrough

Adds a Prisma Partners landing page and supporting components: a Tally form embed, partners comparison table with tooltips, Quote and Tooltip UI components, expanded global CSS utilities, and a TypeScript global declaration for window.Tally.

Changes

Cohort / File(s) Summary
Partners Page
apps/site/src/app/partners/page.tsx
New Next.js page component for the Prisma Partners landing. Exports metadata and renders static hero, card section, accordion, testimonials, partners table, and contact form.
Partners Components
apps/site/src/components/partners/form.tsx, apps/site/src/components/partners/partners-table.tsx
Added Form component embedding a Tally iframe and loading the Tally script; added PartnersTable rendering a styled comparison table with revenue-share TooltipInfo and CTAs.
Type Definitions
apps/site/src/types/global.d.ts
Added global augmentation for Window to declare optional Tally with loadEmbeds(), openPopup(formId, options?), and closePopup(formId).
UI Components
packages/ui/src/components/quote.tsx, packages/ui/src/components/tooltip-info.tsx
Added Quote component for testimonial blocks with optional author metadata and color variants; added TooltipInfo component that renders a hover-triggered tooltip.
Global Styling
packages/eclipse/src/styles/globals.css
Reformatted theme variables and added many utility classes: gradient backgrounds, typography scales (title/heading/text/code variants), file input states, and link/button color utilities.packages/eclipse/src/styles/globals.css was heavily expanded.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 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 (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat: DR-7738 partners page' directly corresponds to the main changeset, which implements a complete partners landing page with supporting components and styling.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

@argos-ci
Copy link
Copy Markdown

argos-ci bot commented Mar 26, 2026

The latest updates on your projects. Learn more about Argos notifications ↗︎

Build Status Details Updated (UTC)
default (Inspect) ✅ No changes detected - Mar 26, 2026, 7:29 PM

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 6

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/site/src/app/partners/page.tsx`:
- Around line 161-164: The exported metadata currently reuses SITE_HOME_TITLE
and SITE_HOME_DESCRIPTION causing the /partners route to inherit home-page SEO;
update the exported metadata object (export const metadata: Metadata) to use
partners-specific values—either replace with new constants like PARTNERS_TITLE
and PARTNERS_DESCRIPTION or inline the appropriate strings—and add/update the
corresponding constant definitions or imports so the /partners page has its own
title and description for correct SEO/social snippets.

In `@apps/site/src/components/partners/partners-table.tsx`:
- Around line 102-119: The CTA anchor tags in partners-table.tsx (the <a>
elements with className "link-btn orm") currently use broken placeholders
href="#"—replace each href="#" with the real in-page anchor (e.g. "#contact") or
the appropriate contact URL to point users to the contact section; then add a
matching target id (e.g. id="contact") to the contact section in
apps/site/src/app/partners/page.tsx so the links resolve correctly (update the
four anchor instances in partners-table.tsx and the contact section element in
page.tsx).

In `@packages/eclipse/src/styles/globals.css`:
- Around line 596-607: The hover styles for .link-btn.orm:hover and
.link-btn.ppg:hover currently use reverse/white tokens which reduce readability
on light backgrounds; update those selectors to use the corresponding strong
brand foreground tokens (e.g., use --color-foreground-orm or
--color-foreground-orm-strong for .link-btn.orm:hover and --color-foreground-ppg
or --color-foreground-ppg-strong for .link-btn.ppg:hover) so hover text stays
within brand foreground colors rather than reverse; ensure the selectors
.link-btn.orm:hover and .link-btn.ppg:hover are changed accordingly and keep the
non-italic child underline rule (.link-btn > *:not(i)) intact.

In `@packages/ui/src/components/quote.tsx`:
- Around line 40-43: The separator is currently rendered whenever author.company
is truthy, which can produce a leading separator if author.title is absent;
update the conditional around the Separator (and the surrounding fragment in the
JSX that currently checks author.company) to require both author.title &&
author.company so the Separator and following span are only rendered when both
fields exist (look for the JSX block that references author.company, Separator,
and the span).
- Line 21: The Quote component currently wraps arbitrary children in a <span>
which can cause invalid block-in-inline nesting when callers pass block
elements; change the inline wrapper to a block-level element (replace the <span
className="font-sans-display contents font-bold"> around {children} with a <div>
preserving the same className and styling) inside
packages/ui/src/components/quote.tsx so block children like <p> are valid;
ensure no other layout or styling expectations rely on the element being inline
and adjust styles if needed.

In `@packages/ui/src/components/tooltip-info.tsx`:
- Around line 18-20: The TooltipTrigger currently uses a non-focusable <i>
element in tooltip-info.tsx which breaks keyboard accessibility; replace that
child with a focusable <button> (keep TooltipTrigger asChild) using
type="button" and an accessible label (aria-label or visible
text/visually-hidden span) that describes the tooltip, and move any icon classes
(fa-solid fa-circle-info cursor-help) onto the button so styling/appearance
remain unchanged while ensuring keyboard and screen-reader users can focus and
activate the trigger.
🪄 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

Run ID: b877680a-f671-4255-9b5a-1d0efb64f736

📥 Commits

Reviewing files that changed from the base of the PR and between edda9c3 and 3594979.

⛔ Files ignored due to path filters (6)
  • apps/site/public/illustrations/partners/partners_0.svg is excluded by !**/*.svg
  • apps/site/public/illustrations/partners/partners_0_light.svg is excluded by !**/*.svg
  • apps/site/public/illustrations/partners/partners_1.svg is excluded by !**/*.svg
  • apps/site/public/illustrations/partners/partners_1_light.svg is excluded by !**/*.svg
  • apps/site/public/illustrations/partners/partners_2.svg is excluded by !**/*.svg
  • apps/site/public/illustrations/partners/partners_2_light.svg is excluded by !**/*.svg
📒 Files selected for processing (9)
  • apps/site/public/photos/people/arnau.avif
  • apps/site/public/photos/people/sam-goodwin.avif
  • apps/site/src/app/partners/page.tsx
  • apps/site/src/components/partners/form.tsx
  • apps/site/src/components/partners/partners-table.tsx
  • apps/site/src/types/global.d.ts
  • packages/eclipse/src/styles/globals.css
  • packages/ui/src/components/quote.tsx
  • packages/ui/src/components/tooltip-info.tsx

Comment on lines +161 to +164
export const metadata: Metadata = {
title: SITE_HOME_TITLE,
description: SITE_HOME_DESCRIPTION,
};
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.

⚠️ Potential issue | 🟠 Major

Use partners-specific metadata instead of home-page metadata.

At Lines 162-163, this route inherits home title/description. Set dedicated metadata for /partners to avoid incorrect SEO/social snippets.

Proposed fix
 export const metadata: Metadata = {
-  title: SITE_HOME_TITLE,
-  description: SITE_HOME_DESCRIPTION,
+  title: "Prisma Partners",
+  description:
+    "Embed Prisma Postgres, Studio, and deployment workflows into your platform with partner-ready pricing and integration support.",
 };
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/site/src/app/partners/page.tsx` around lines 161 - 164, The exported
metadata currently reuses SITE_HOME_TITLE and SITE_HOME_DESCRIPTION causing the
/partners route to inherit home-page SEO; update the exported metadata object
(export const metadata: Metadata) to use partners-specific values—either replace
with new constants like PARTNERS_TITLE and PARTNERS_DESCRIPTION or inline the
appropriate strings—and add/update the corresponding constant definitions or
imports so the /partners page has its own title and description for correct
SEO/social snippets.

Comment on lines +102 to +119
<a href="#" className="link-btn orm">
Get in touch
</a>
</TableCell>
<TableCell className="border-r">
<a href="#" className="link-btn orm">
Get in touch
</a>
</TableCell>
<TableCell className="border-r">
<a href="#" className="link-btn orm">
Get in touch
</a>
</TableCell>
<TableCell>
<a href="#" className="link-btn orm">
Get in touch
</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.

⚠️ Potential issue | 🟠 Major

Replace placeholder CTA URLs with a real destination.

At Lines 102/107/112/117, href="#" is a broken CTA path for users. Point these links to the actual contact section.

Proposed fix
-            <a href="#" className="link-btn orm">
+            <a href="#get-in-touch" className="link-btn orm">
               Get in touch
             </a>
...
-            <a href="#" className="link-btn orm">
+            <a href="#get-in-touch" className="link-btn orm">
               Get in touch
             </a>
...
-            <a href="#" className="link-btn orm">
+            <a href="#get-in-touch" className="link-btn orm">
               Get in touch
             </a>
...
-            <a href="#" className="link-btn orm">
+            <a href="#get-in-touch" className="link-btn orm">
               Get in touch
             </a>

Also add a target id in apps/site/src/app/partners/page.tsx:

-      <div className="w-screen px-4">
+      <div id="get-in-touch" className="w-screen px-4">
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/site/src/components/partners/partners-table.tsx` around lines 102 - 119,
The CTA anchor tags in partners-table.tsx (the <a> elements with className
"link-btn orm") currently use broken placeholders href="#"—replace each href="#"
with the real in-page anchor (e.g. "#contact") or the appropriate contact URL to
point users to the contact section; then add a matching target id (e.g.
id="contact") to the contact section in apps/site/src/app/partners/page.tsx so
the links resolve correctly (update the four anchor instances in
partners-table.tsx and the contact section element in page.tsx).

Comment on lines +596 to +607
.link-btn.orm:hover {
color: var(--color-foreground-orm-reverse);
}
.link-btn > *:not(i) {
text-decoration: underline;
text-underline-offset: 3px;
}
.link-btn.ppg {
color: var(--color-background-ppg-reverse-strong);
}
.link-btn.ppg:hover {
color: var(--color-foreground-ppg-reverse);
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.

⚠️ Potential issue | 🟠 Major

Hover colors reduce readability on light backgrounds.

At Lines 596-607, hover text becomes reverse/white, which is hard to read in light sections. Keep hover within strong brand foreground tokens instead.

Proposed fix
 .link-btn.orm:hover {
-    color: var(--color-foreground-orm-reverse);
+    color: var(--color-foreground-orm-strong);
 }
 ...
 .link-btn.ppg:hover {
-    color: var(--color-foreground-ppg-reverse);
+    color: var(--color-foreground-ppg-strong);
 }
📝 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
.link-btn.orm:hover {
color: var(--color-foreground-orm-reverse);
}
.link-btn > *:not(i) {
text-decoration: underline;
text-underline-offset: 3px;
}
.link-btn.ppg {
color: var(--color-background-ppg-reverse-strong);
}
.link-btn.ppg:hover {
color: var(--color-foreground-ppg-reverse);
.link-btn.orm:hover {
color: var(--color-foreground-orm-strong);
}
.link-btn > *:not(i) {
text-decoration: underline;
text-underline-offset: 3px;
}
.link-btn.ppg {
color: var(--color-background-ppg-reverse-strong);
}
.link-btn.ppg:hover {
color: var(--color-foreground-ppg-strong);
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/eclipse/src/styles/globals.css` around lines 596 - 607, The hover
styles for .link-btn.orm:hover and .link-btn.ppg:hover currently use
reverse/white tokens which reduce readability on light backgrounds; update those
selectors to use the corresponding strong brand foreground tokens (e.g., use
--color-foreground-orm or --color-foreground-orm-strong for .link-btn.orm:hover
and --color-foreground-ppg or --color-foreground-ppg-strong for
.link-btn.ppg:hover) so hover text stays within brand foreground colors rather
than reverse; ensure the selectors .link-btn.orm:hover and .link-btn.ppg:hover
are changed accordingly and keep the non-italic child underline rule (.link-btn
> *:not(i)) intact.

className,
)}
>
<span className="font-sans-display contents font-bold">{children}</span>
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.

⚠️ Potential issue | 🟠 Major

Avoid invalid block-in-inline nesting for quote content.

At Line 21, wrapping arbitrary children in <span> is unsafe because callers pass block elements (<p>). Use a block wrapper (div) instead.

Proposed fix
-      <span className="font-sans-display contents font-bold">{children}</span>
+      <div className="font-sans-display font-bold">{children}</div>
📝 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
<span className="font-sans-display contents font-bold">{children}</span>
<div className="font-sans-display font-bold">{children}</div>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/ui/src/components/quote.tsx` at line 21, The Quote component
currently wraps arbitrary children in a <span> which can cause invalid
block-in-inline nesting when callers pass block elements; change the inline
wrapper to a block-level element (replace the <span className="font-sans-display
contents font-bold"> around {children} with a <div> preserving the same
className and styling) inside packages/ui/src/components/quote.tsx so block
children like <p> are valid; ensure no other layout or styling expectations rely
on the element being inline and adjust styles if needed.

Comment on lines +40 to +43
{author.company && (
<>
<Separator orientation="vertical" className="mx-1 h-3.5" />
<span
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.

⚠️ Potential issue | 🟡 Minor

Render the separator only when both title and company exist.

Current logic can show a leading separator when only company is present. Gate the separator with author.title && author.company.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/ui/src/components/quote.tsx` around lines 40 - 43, The separator is
currently rendered whenever author.company is truthy, which can produce a
leading separator if author.title is absent; update the conditional around the
Separator (and the surrounding fragment in the JSX that currently checks
author.company) to require both author.title && author.company so the Separator
and following span are only rendered when both fields exist (look for the JSX
block that references author.company, Separator, and the span).

Comment on lines +18 to +20
<TooltipTrigger asChild>
<i className="fa-solid fa-circle-info cursor-help" />
</TooltipTrigger>
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.

⚠️ Potential issue | 🟠 Major

Use an interactive trigger element for keyboard accessibility.

At Line 19, the tooltip trigger is a plain <i>, so keyboard users can’t focus/activate it. Use a <button> (with an accessible label) as the trigger child.

Proposed fix
 interface TooltipInfoProps {
   text: string;
+  label?: string;
 }
 
-export function TooltipInfo({ text }: TooltipInfoProps) {
+export function TooltipInfo({ text, label = "More information" }: TooltipInfoProps) {
   return (
     <TooltipProvider>
       <Tooltip>
         <TooltipTrigger asChild>
-          <i className="fa-solid fa-circle-info cursor-help" />
+          <button type="button" aria-label={label} className="cursor-help">
+            <i aria-hidden="true" className="fa-solid fa-circle-info" />
+          </button>
         </TooltipTrigger>
         <TooltipContent className="max-w-50 w-full">
           <p>{text}</p>
📝 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
<TooltipTrigger asChild>
<i className="fa-solid fa-circle-info cursor-help" />
</TooltipTrigger>
interface TooltipInfoProps {
text: string;
label?: string;
}
export function TooltipInfo({ text, label = "More information" }: TooltipInfoProps) {
return (
<TooltipProvider>
<Tooltip>
<TooltipTrigger asChild>
<button type="button" aria-label={label} className="cursor-help">
<i aria-hidden="true" className="fa-solid fa-circle-info" />
</button>
</TooltipTrigger>
<TooltipContent className="max-w-50 w-full">
<p>{text}</p>
</TooltipContent>
</Tooltip>
</TooltipProvider>
);
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/ui/src/components/tooltip-info.tsx` around lines 18 - 20, The
TooltipTrigger currently uses a non-focusable <i> element in tooltip-info.tsx
which breaks keyboard accessibility; replace that child with a focusable
<button> (keep TooltipTrigger asChild) using type="button" and an accessible
label (aria-label or visible text/visually-hidden span) that describes the
tooltip, and move any icon classes (fa-solid fa-circle-info cursor-help) onto
the button so styling/appearance remain unchanged while ensuring keyboard and
screen-reader users can focus and activate the trigger.

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.

1 participant