Skip to content

Conversation

@lukasz-hycom
Copy link
Collaborator

@lukasz-hycom lukasz-hycom commented Nov 19, 2025

What does this PR do?

  • adding links to available integrations

Key Changes

  • Make integration cards with link field clickable links, add hover darkening effect and arrow icon, update integration data with documentation links

Summary by CodeRabbit

  • New Features
    • Integration cards can be clickable with direct navigation and now display a right-arrow icon.
    • Many site links now use framework-native navigation components for smoother internal routing.
  • Bug Fixes
    • Enterprise integration links now go to the contact page instead of opening email prompts.
  • Style
    • Adjusted sizing, heading line-height, and hover/overlay behavior for cards and header buttons.
  • Documentation
    • Minor formatting and layout tweaks; added scroll-anchor behavior for two starter sections.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link

coderabbitai bot commented Nov 19, 2025

Walkthrough

Replaces many plain anchor tags with Docusaurus Link components across docs UI, adds optional link?: string to integration items and conditional Link-wrapped rendering with visual affordances for clickable integration cards, plus minor formatting and class tweaks in docs/content.

Changes

Cohort / File(s) Summary
Link migration in multiple components
apps/docs/src/components/DXPIntegrationsSection/index.tsx, apps/docs/src/components/FooterSection/index.tsx, apps/docs/src/components/HomepageArchitectureSection/index.tsx, apps/docs/src/components/HomepageFeaturesSection/index.tsx, apps/docs/src/components/HomepageStartersSection/index.tsx, apps/docs/src/components/HeroBannerSection/index.tsx, apps/docs/src/components/HoverCard/index.tsx
Added Link import from @docusaurus/Link and replaced <a> with <Link> for internal navigation; preserved styling and behavior. Minor utility-class tweaks (e.g., flex-shrink-0shrink-0, leading-[1.5]leading-normal). No API/signature changes.
IntegrationsBlocks: optional link + UI/behavior changes
apps/docs/src/components/IntegrationsBlocks/index.tsx
Added optional link?: string on integration items, imported Link and ArrowRightIcon. Cards render as a Link when link exists (adds hover overlay and arrow icon) or as a static div otherwise; conditional class and interaction logic added.
Product pages and data updates
apps/docs/src/pages/product/integrations.tsx, apps/docs/src/pages/product/features.tsx, apps/docs/src/pages/product/starters.tsx
Replaced anchors with Link components; INTEGRATION_SECTIONS items now accept link?: string. Added scroll-m-24 to two starter sections.
Docs content formatting and link targets
apps/docs/docs/integrations/overview.md
Minor formatting: added blank line after intro list and compacted DocLinkTiles item formatting. Changed enterprise integration hrefs from mailto: targets to internal /contact links.

Sequence Diagram(s)

%%{init: {"themeVariables": {"actorBkg":"#f8fafc","actorBorder":"#94a3b8","signalColor":"#2563eb"}}}%%
sequenceDiagram
  participant User
  participant UI as IntegrationsBlocks
  participant Router as Docusaurus Router

  Note over UI: Card rendering decision
  User->>UI: Click card
  alt card has `link`
    UI->>Router: Docusaurus Link navigates to card.link
    Router-->>User: Load target page
  else card has no `link`
    UI-->>User: Card is static (no navigation)
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • Pay attention to IntegrationsBlocks conditional rendering, hover overlay pseudo-element, and added arrow icon.
  • Verify Link replacements preserve target/rel attributes and accessibility semantics.
  • Ensure consumers of INTEGRATION_SECTIONS handle optional link without runtime errors.

Possibly related PRs

Suggested reviewers

  • marcinkrasowski

Poem

🐰 I hopped through anchors, found new trails,

Links that guide with subtle rails.
Cards that point with little arrows,
Docs now hum with clearer sparrows.
A joyful hop — the rabbit smiles!

Pre-merge checks and finishing touches

❌ Failed checks (2 warnings, 1 inconclusive)
Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description is incomplete, missing critical sections from the template including Related Ticket(s), detailed How to test steps, and Media sections required for proper review. Add the missing template sections: Related Ticket(s) with Notion ticket reference, detailed How to test steps with setup and verification instructions, and any Media/Loom links if applicable.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
Title check ❓ Inconclusive The title 'docs: integrations page update' is vague and generic, using non-descriptive terms that don't convey the specific nature of the changes (adding clickable integration cards with links). Consider a more specific title like 'docs: make integration cards clickable with links and hover effects' to better describe the primary change.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch docs/integrations-page-update

Tip

📝 Customizable high-level summaries are now available in beta!

You can now customize how CodeRabbit generates the high-level summary in your pull requests — including its content, structure, tone, and formatting.

  • Provide your own instructions using the high_level_summary_instructions setting.
  • Format the summary however you like (bullet lists, tables, multi-section layouts, contributor stats, etc.).
  • Use high_level_summary_in_walkthrough to move the summary from the description to the walkthrough section.

Example instruction:

"Divide the high-level summary into five sections:

  1. 📝 Description — Summarize the main change in 50–60 words, explaining what was done.
  2. 📓 References — List relevant issues, discussions, documentation, or related PRs.
  3. 📦 Dependencies & Requirements — Mention any new/updated dependencies, environment variable changes, or configuration updates.
  4. 📊 Contributor Summary — Include a Markdown table showing contributions:
    | Contributor | Lines Added | Lines Removed | Files Changed |
  5. ✔️ Additional Notes — Add any extra reviewer context.
    Keep each section concise (under 200 words) and use bullet or numbered lists for clarity."

Note: This feature is currently in beta for Pro-tier users, and pricing will be announced later.


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

Copy link

@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: 0

🧹 Nitpick comments (2)
apps/docs/src/components/IntegrationsBlocks/index.tsx (2)

4-6: Link integration and optional link prop look good; consider a tiny conditional simplification

The introduction of the optional link?: string plus isLinkable and the Link wrapper is consistent with Docusaurus usage, and keeping link optional avoids breaking existing callers. The reuse of cardClassName inside linkClassName is also a nice way to keep visual parity between linked and non‑linked cards.

You could simplify the branching slightly by relying directly on integration.link instead of both isLinkable and integration.link in the if:

- const isLinkable = !!integration.link;
+ const isLinkable = !!integration.link;- if (isLinkable && integration.link) {
+ if (integration.link) {
     return (
       <Link key={integrationIndex} to={integration.link} className={linkClassName}>
         {cardContent}
       </Link>
     );
  }

This keeps the styling logic (isLinkable) intact while avoiding redundant checks in the conditional.

Please quickly verify in the browser that both internal (/docs/...) and external (https://...) URLs passed via link behave as expected with @docusaurus/Link in your current version.

Also applies to: 20-21, 65-66, 94-106


67-85: Arrow icon is a nice affordance; consider marking it decorative for screen readers

The shared cardContent block and conditional rendering of <ArrowRightIcon> for linkable cards is a clean way to keep layouts consistent and give users a visual cue when a card is clickable.

If the arrow is purely decorative (no extra meaning beyond “this is a link”), it’s worth marking it as hidden from assistive tech to avoid noisy announcements:

- {isLinkable && <ArrowRightIcon className="w-4 h-4 *:stroke-white shrink-0" />}
+ {isLinkable && (
+   <ArrowRightIcon
+     className="w-4 h-4 *:stroke-white shrink-0"
+     aria-hidden="true"
+     focusable="false"
+   />
+ )}

This keeps the visual behavior while improving a11y.

Also applies to: 76-83

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between cbaf262 and 5efa109.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (9)
  • apps/docs/docs/integrations/overview.md (2 hunks)
  • apps/docs/src/components/DXPIntegrationsSection/index.tsx (3 hunks)
  • apps/docs/src/components/FooterSection/index.tsx (3 hunks)
  • apps/docs/src/components/HomepageArchitectureSection/index.tsx (2 hunks)
  • apps/docs/src/components/HomepageFeaturesSection/index.tsx (2 hunks)
  • apps/docs/src/components/HomepageStartersSection/index.tsx (2 hunks)
  • apps/docs/src/components/IntegrationsBlocks/index.tsx (3 hunks)
  • apps/docs/src/pages/product/features.tsx (3 hunks)
  • apps/docs/src/pages/product/integrations.tsx (10 hunks)
🧰 Additional context used
🧬 Code graph analysis (2)
apps/docs/src/components/IntegrationsBlocks/index.tsx (1)
apps/docs/src/components/Typography/index.tsx (2)
  • H3 (17-19)
  • BodySmall (33-35)
apps/docs/src/components/DXPIntegrationsSection/index.tsx (1)
apps/docs/src/components/Typography/index.tsx (1)
  • H3 (17-19)
🔇 Additional comments (14)
apps/docs/src/components/HomepageFeaturesSection/index.tsx (1)

3-3: LGTM!

The migration from anchor to Docusaurus Link component is correct and maintains the existing styling and behavior.

Also applies to: 128-130

apps/docs/src/components/HomepageArchitectureSection/index.tsx (1)

3-3: LGTM!

The anchor-to-Link migration is clean and correctly simplifies the markup by removing the unnecessary inner span wrapper.

Also applies to: 25-27

apps/docs/src/components/HomepageStartersSection/index.tsx (1)

3-4: LGTM!

Consistent migration to Docusaurus Link component for internal navigation.

Also applies to: 62-64

apps/docs/src/components/DXPIntegrationsSection/index.tsx (3)

15-15: Good Tailwind shorthand usage.

The change from flex-shrink-0 to shrink-0 uses the more concise Tailwind utility while maintaining identical behavior.


67-69: LGTM!

The migration to Link component with shrink-0 utility prevents the button from shrinking in the flex layout.


64-64: Verify that the leading-normal override actually applies to the rendered output.

The H3 component (apps/docs/src/components/Typography/index.tsx) defines leading-9 as a base style without an !important flag. Your override adds leading-normal (also without !important). Both utilities have equal CSS specificity, so the actual applied value depends on Tailwind's CSS generation order. Confirm the rendered line-height is 1.5 (not 2.25) and matches the intended design.

apps/docs/src/pages/product/features.tsx (2)

4-5: LGTM!

Clean migration to Link component that maintains all styling and attributes.

Also applies to: 350-358


379-380: LGTM!

Inline Link usage in the footer description is correct and idiomatic for Docusaurus.

apps/docs/src/components/FooterSection/index.tsx (1)

3-4: LGTM!

The FooterSection component correctly migrates both primary and secondary buttons to use Link components while preserving all props and behavior. The use of href prop with Link is valid for Docusaurus.

Also applies to: 39-43, 46-57

apps/docs/docs/integrations/overview.md (2)

22-29: LGTM!

The single-line formatting for DocLinkTiles items is more concise and maintains the same data structure.


37-41: The /contact route exists and is properly configured.

Verification confirms the contact page is available at apps/docs/src/pages/contact/index.tsx. In the Docusaurus structure, this file automatically maps to the /contact route. The page is fully functional with a contact form and layout configuration. The navigation change to internal /contact links is valid.

apps/docs/src/pages/product/integrations.tsx (2)

37-37: LGTM!

The optional link field is correctly typed and allows integration items to specify documentation or contact links.


50-50: Verification confirmed: IntegrationsBlocks properly implements link handling and hover effects.

The IntegrationsBlocks component fully supports the link field additions:

  • Link support: The component interface includes link?: string and conditionally renders cards as clickable <Link> elements when a link is present
  • Hover darkening: Implemented via pseudo-element with bg-black/20 opacity-0 hover:opacity-100 transition on linkable cards
  • Arrow icon: Conditionally rendered for cards with links
  • Non-interactive fallback: Cards without links render as plain <div> elements without hover effects

All PR requirements are properly implemented. No changes needed.

apps/docs/src/components/IntegrationsBlocks/index.tsx (1)

87-99: Card and focus styling are robust and accessible

The cardClassName composition with the before: overlay and the dedicated linkClassName that adds no-underline plus focus-visible outlines provides good hover affordances while maintaining an accessible focus state for keyboard users.

No changes needed here; this is a solid implementation.

Please confirm in your docs preview that keyboard tab focus on linkable cards shows the expected outline and that the hover overlay doesn’t interfere with clicking (it shouldn’t, thanks to before:pointer-events-none).

Copy link

@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: 1

🧹 Nitpick comments (1)
apps/docs/src/components/HeroBannerSection/index.tsx (1)

112-123: Consider adding "noreferrer" to rel attribute for enhanced privacy.

While rel="noopener" prevents the tabnapping attack, adding rel="noopener noreferrer" also prevents the Referer header from being sent to the target page, improving user privacy.

Apply this diff to enhance privacy:

 <Link
     href={secondaryLink.url}
     className={clsx('button button-ultra', cliCommand && 'w-1/2')}
     target={secondaryLink.target}
-    rel="noopener"
+    rel="noopener noreferrer"
 >
     <span className="label flex items-center justify-center gap-2">
         {secondaryLink.iconLeft}
         {secondaryLink.text}
         {secondaryLink.iconRight}
     </span>
 </Link>

Apply the same change to tertiaryLink:

 <Link
     href={tertiaryLink.url}
     className={clsx('button button-special', cliCommand && 'w-1/2')}
     target={tertiaryLink.target}
-    rel="noopener"
+    rel="noopener noreferrer"
 >
     <span className="label flex items-center justify-center gap-2">
         {tertiaryLink.iconLeft}
         {tertiaryLink.text}
         {tertiaryLink.iconRight}
     </span>
 </Link>

Also applies to: 127-138

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5efa109 and 17edd32.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (3)
  • apps/docs/src/components/HeroBannerSection/index.tsx (4 hunks)
  • apps/docs/src/components/HoverCard/index.tsx (2 hunks)
  • apps/docs/src/pages/product/starters.tsx (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
apps/docs/src/pages/product/starters.tsx (1)
apps/docs/src/components/StarterInfoSection/index.tsx (1)
  • StarterInfoSection (29-68)
🔇 Additional comments (3)
apps/docs/src/components/HoverCard/index.tsx (1)

3-3: LGTM: Clean migration to Docusaurus Link component.

The replacement of the anchor tag with Docusaurus Link aligns with the framework's best practices for internal navigation and client-side routing. The component correctly preserves all necessary props.

Note: Since HoverCardProps doesn't include a target property, all links will open in the same tab, which reduces the need for rel attributes. However, if you plan to support external links opening in new tabs in the future, ensure you add rel="noopener noreferrer" for security.

Also applies to: 74-82

apps/docs/src/pages/product/starters.tsx (1)

346-346: LGTM: Improves anchor navigation UX.

Adding scroll-m-24 (6rem scroll margin) to both starter sections ensures that when users navigate via anchor links (e.g., #customer-portal-starter), the content won't be hidden behind a fixed header. This is a good accessibility and UX improvement.

Also applies to: 349-349

apps/docs/src/components/HeroBannerSection/index.tsx (1)

4-4: No action needed — Docusaurus Link already handles external link security attributes.

Docusaurus Link automatically adds rel="noopener noreferrer" for external links with target="_blank", so this import and its usage are secure as-is.

Copy link

@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: 0

Caution

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

⚠️ Outside diff range comments (1)
apps/docs/src/pages/product/integrations.tsx (1)

79-83: Add missing link for Zendesk integration.

Zendesk is marked as 'available' but has no link field, making it inconsistent with other available integrations like SurveyJS (line 76) and the second Zendesk entry (lines 149-153, marked as 'planned').

Consider adding an appropriate link:

 {
     name: 'Zendesk',
     status: 'available',
     description: 'External ticketing and support knowledge base system.',
     icon: <ZendeskIcon />,
+    link: '/docs/integrations/customer-support/zendesk', // or '/contact' if docs aren't ready
 },
🧹 Nitpick comments (1)
apps/docs/src/pages/product/integrations.tsx (1)

53-58: Consider clarifying integration status or link target.

Contentful is marked as 'available' but links to /contact rather than documentation. This differs from the pattern where other 'available' integrations link to their docs. If documentation isn't ready yet, consider either:

  • Using status 'internal' to match other contact-linked integrations, or
  • Adding a comment explaining the link choice

This helps maintain user expectations about what "available" means.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 17edd32 and 34fd8ca.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (1)
  • apps/docs/src/pages/product/integrations.tsx (10 hunks)
🔇 Additional comments (2)
apps/docs/src/pages/product/integrations.tsx (2)

29-38: LGTM!

The addition of the optional link field to the integration item type is clean and maintains backward compatibility.


45-243: All documentation paths have been verified and exist:

  • /docs/integrations/cms/strapi/overview → apps/docs/docs/integrations/cms/strapi/overview.md
  • /docs/integrations/forms/surveyjs → apps/docs/docs/integrations/forms/surveyjs.md
  • /docs/main-components/frontend-app/authentication → apps/docs/docs/main-components/frontend-app/authentication.md
  • /docs/integrations/commerce/medusa-js → apps/docs/docs/integrations/commerce/medusa-js.md
  • /docs/integrations/search/algolia → apps/docs/docs/integrations/search/algolia.md
  • /docs/integrations/cache/redis → apps/docs/docs/integrations/cache/redis.md
  • /contact → apps/docs/src/pages/contact/index.tsx (routed via Docusaurus config)

No broken links detected. The code is ready to merge.

@vercel
Copy link

vercel bot commented Nov 21, 2025

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

1 Skipped Deployment
Project Deployment Preview Comments Updated (UTC)
o2s-docs Skipped Skipped Nov 21, 2025 10:04am

@vercel vercel bot temporarily deployed to Preview – o2s-docs November 21, 2025 10:04 Inactive
@lukasz-hycom lukasz-hycom merged commit f9a5a01 into main Nov 21, 2025
9 checks passed
@lukasz-hycom lukasz-hycom deleted the docs/integrations-page-update branch November 21, 2025 10:15
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.

4 participants