Skip to content

fix: DR-8082 postrelease site#7880

Open
carlagn wants to merge 17 commits intomainfrom
fix/DR-8082-postrelease-site
Open

fix: DR-8082 postrelease site#7880
carlagn wants to merge 17 commits intomainfrom
fix/DR-8082-postrelease-site

Conversation

@carlagn
Copy link
Copy Markdown
Contributor

@carlagn carlagn commented May 8, 2026

Fixes #DR-8082

Summary by CodeRabbit

  • New Features

    • Blog h2 headings are now linkable with hover icons.
  • Documentation

    • Numerous posts updated to refresh tags and add contextual notes or deprecation/alternative guidance.
  • Style

    • Site typography, spacing, and hero/headline styles refreshed; logo appearance updated for light/dark themes; minor CSS border adjustment.
  • Chores

    • Tag taxonomy and redirects reorganized; small UX tweaks to copy-tooltips, pagination, and CTA spacing.

@vercel
Copy link
Copy Markdown

vercel Bot commented May 8, 2026

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

Project Deployment Actions Updated (UTC)
blog Ready Ready Preview, Comment May 8, 2026 4:14pm
docs Ready Ready Preview, Comment May 8, 2026 4:14pm
eclipse Ready Ready Preview, Comment May 8, 2026 4:14pm
site Ready Ready Preview, ✅ 10 resolved May 8, 2026 4:14pm

Request Review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 8, 2026

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

This PR migrates blog frontmatter tags to a new taxonomy, updates site configuration and redirects, adds deterministic anchorable MDX h2 headings, standardizes typography tokens across marketing pages, and refactors several UI components and layout/CSS files.

Changes

Blog Taxonomy Migration and Site Modernization

Layer / File(s) Summary
Configuration and Tag Schema
apps/blog/next.config.mjs, apps/blog/source.config.ts
Update tag enum and redirect generation; refactor npm/package-manager conversion mappings and import formatting.
Blog Post Frontmatter Tags
apps/blog/content/blog/*/index.mdx
Migrate tags across many posts: data-platformplatform, releaseannouncement, user-success-storycase-study, remove serverless, and reorder tag arrays where shown.
Blog Post Content
selected apps/blog/content/blog/*/index.mdx
Add Prisma Accelerate cacheStrategy examples (ttl, swr), add GA note for multi-file schema, add Prisma Data Proxy deprecation/update note and "Modern alternatives", and minor whitespace/formatting edits.
Blog Post Page Rendering
apps/blog/src/app/(blog)/[slug]/page.tsx
Add extractText helper and custom MDX h2 renderer that generates deterministic anchor IDs and renders linkable headings with hover-visible icon; update h1 typography to type-title-5xl.
Blog Home Navigation
apps/blog/src/components/BlogHomeClient.tsx
Refactor pagination/category computation for readability; change CategoryTagFilter alignment from justify-center to justify-start; update pagination href construction calls.
Typography Standardization
multiple apps/site/src/app/* pages and packages/ui/src/components/post-card.tsx
Replace scattered uppercase/letter-spacing/font classes with unified design tokens (type-title-*, type-heading-xl, type-text-sm) across changelog, ORM, Postgres, pricing, studio, support, stack, query-insights, and post-card.
Component Refactoring & Data
apps/site/src/components/homepage/card-section/logo-grid.tsx, apps/site/src/components/homepage/copy-btn.tsx, apps/site/src/components/homepage/card-section/card-section.tsx, apps/site/src/components/homepage/card-section/default-logos.json, apps/site/src/data/postgres.json, packages/ui/src/components/newsletter.tsx, packages/ui/src/components/post-card.tsx
Refactor LogoGrid to support light/dark image variants and memoized Spotlight/Track modes; swap Next.js logo light/dark URLs; adjust CopyCode tooltip lifecycle; refactor newsletter layout/positioning; unify PostCard title styling; refactor card-section image wrapper and scroll calc.
Layout & Theme
apps/site/src/app/(index)/page.tsx, apps/site/src/app/global.css, apps/site/src/app/mcp/_components/mcp-hero-section.tsx, apps/site/src/app/support-policy/page.tsx, packages/ui/src/components/navigation-menu.tsx
Update homepage gradient and footer gaps; remove explicit .box border in favor of pseudo-element; change navigation popup background token from bg-popover to bg-background-default; reflow MCP hero and support-policy JSX for readability.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • prisma/web#7770: Both PRs modify the same site UI/layout files and make overlapping changes to hero headings and gradient overlay/presentation across apps/site pages.
  • prisma/web#7743: Button API/variant refactor that intersects with component styling and usage updates in this PR.

@argos-ci
Copy link
Copy Markdown

argos-ci Bot commented May 8, 2026

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

Build Status Details Updated (UTC)
default (Inspect) ✅ No changes detected - May 8, 2026, 3:35 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: 5

Caution

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

⚠️ Outside diff range comments (2)
apps/blog/content/blog/accelerate-preview-release-ab229e69ed2/index.mdx (1)

51-72: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Remove diff markers from JavaScript snippets.

Line 54, Line 61, Line 68, and Line 69 include leading + characters inside javascript code fences. That makes copy/paste examples invalid for readers.

Proposed fix
 await prisma.user.findMany({
   cacheStrategy: {
-+    ttl: 60,
+    ttl: 60,
   },
 });
await prisma.user.findMany({
  cacheStrategy: {
-+    swr: 30,
+    swr: 30,
  },
});
await prisma.user.findMany({
  cacheStrategy: {
-+    ttl: 60,
-+    swr: 30,
+    ttl: 60,
+    swr: 30,
  },
});
🤖 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/blog/content/blog/accelerate-preview-release-ab229e69ed2/index.mdx`
around lines 51 - 72, The JavaScript examples for prisma.user.findMany include
stray '+' diff markers inside the cacheStrategy object that break copy/paste;
edit the three code blocks containing prisma.user.findMany and cacheStrategy and
remove any leading '+' characters from the property lines (ttl and swr) so the
object keys are plain JavaScript (e.g., change "+    ttl: 60," and "+    swr:
30," to "    ttl: 60," and "    swr: 30,"). Ensure all three snippets
consistently show valid code for cacheStrategy without diff markers.
apps/blog/next.config.mjs (1)

212-239: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Preserve redirects for legacy tag slugs to avoid breaking existing links

This removes compatibility for old tag URLs. Keep explicit legacy-to-new mappings so inbound links keep working after taxonomy migration.

Proposed fix
   async redirects() {
     const tagSlugs = [
       "ai",
       "announcement",
       "platform",
       "education",
       "orm",
       "prisma-postgres",
       "case-study",
     ];
+    const legacyTagRedirects = [
+      { source: "/data-platform", destination: "/?tag=platform" },
+      { source: "/release", destination: "/?tag=announcement" },
+      { source: "/user-success-story", destination: "/?tag=case-study" },
+      { source: "/serverless", destination: "/?tag=case-study" },
+    ];
 
     return [
       {
         source: "/",
         destination: "/blog",
         permanent: false,
         basePath: false,
       },
       {
         source: "/optimize-now-generally-available",
         destination: "/",
         permanent: true,
       },
+      ...legacyTagRedirects.map((r) => ({
+        source: r.source,
+        destination: r.destination,
+        permanent: true,
+      })),
       ...tagSlugs.map((tag) => ({
         source: `/${tag}`,
         destination: `/?tag=${tag}`,
         permanent: true,
       })),
     ];
   },
🤖 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/blog/next.config.mjs` around lines 212 - 239, The current redirect
generation using tagSlugs loses legacy tag mappings; add an explicit legacy list
(e.g., legacyTagSlugs) and map each legacy slug to the new destination
`/?tag=...` with the same redirect properties (permanent: true, basePath: false
if needed), then merge those mappings into the returned redirects array
alongside the existing tagSlugs mapping; update the code around the tagSlugs
constant and the returned array so both legacyTagSlugs.map(...) and
tagSlugs.map(...) are included to preserve old links.
🤖 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/blog/content/blog/how-prisma-and-serverless-fit-together-iaSfcPQVi0/index.mdx`:
- Line 13: Update the post's taxonomy tag by replacing the incorrect
"case-study" value with the correct non-case-study tag (e.g., "platform") in the
article metadata; locate the string "case-study" in the frontmatter of this post
and change it to "platform" so tag-based discovery and related-content
algorithms categorize the article as a platform/architecture explainer.

In `@apps/blog/src/app/`(blog)/[slug]/page.tsx:
- Around line 236-252: The custom h2 renderer currently recomputes heading IDs
via extractText and final_id which can diverge from MDX/TOC IDs and cause
duplicates; update the h2 component to prefer props.id when available (use const
final_id = props.id ?? computedId) and only fall back to the existing
lowercase/replaceAll/regex computation (referencing extractText and final_id) so
anchors match MDX-generated ids and avoid duplicate ids for repeated headings.

In `@apps/site/src/app/global.css`:
- Around line 193-247: The .box::before masking relies on mask-composite and can
fail in older engines, so add a simple fallback border (e.g., a 1px neutral
stroke on .box or .box::before) and then wrap the complex mask rules in a
feature query so the fallback is suppressed when supported; specifically, add a
basic border on .box/.box::before and add an `@supports` (mask-composite: exclude)
block that contains the existing mask rules for .box::before (and removes or
hides the fallback border there), and avoid relying on vendor-prefixed
-webkit-mask-composite in the main rule.

In `@apps/site/src/components/homepage/card-section/logo-grid.tsx`:
- Line 119: Remove the debug console.log from the LogoGrid render—delete the
line that calls console.log(lightImageUrl, darkImageUrl, logo) so the component
(logo-grid.tsx / the LogoGrid component or its render function) no longer logs
logo data on every render; just remove the statement and keep the rest of the
JSX/logic unchanged.

In `@packages/ui/src/components/navigation-menu.tsx`:
- Line 197: The class string still uses the old foreground token
text-popover-foreground while background was migrated to bg-background-default;
update both occurrences of text-popover-foreground (the one inside the group
selector group-data-[viewport=false]/navigation-menu: and the standalone
text-popover-foreground token later in the same class) to the correct foreground
token that pairs with bg-background-default (e.g., text-foreground-neutral or
your design-system equivalent) so the background/foreground token pairing is
consistent.

---

Outside diff comments:
In `@apps/blog/content/blog/accelerate-preview-release-ab229e69ed2/index.mdx`:
- Around line 51-72: The JavaScript examples for prisma.user.findMany include
stray '+' diff markers inside the cacheStrategy object that break copy/paste;
edit the three code blocks containing prisma.user.findMany and cacheStrategy and
remove any leading '+' characters from the property lines (ttl and swr) so the
object keys are plain JavaScript (e.g., change "+    ttl: 60," and "+    swr:
30," to "    ttl: 60," and "    swr: 30,"). Ensure all three snippets
consistently show valid code for cacheStrategy without diff markers.

In `@apps/blog/next.config.mjs`:
- Around line 212-239: The current redirect generation using tagSlugs loses
legacy tag mappings; add an explicit legacy list (e.g., legacyTagSlugs) and map
each legacy slug to the new destination `/?tag=...` with the same redirect
properties (permanent: true, basePath: false if needed), then merge those
mappings into the returned redirects array alongside the existing tagSlugs
mapping; update the code around the tagSlugs constant and the returned array so
both legacyTagSlugs.map(...) and tagSlugs.map(...) are included to preserve old
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

Run ID: dc090ca9-de4e-4033-975b-d49a9c08256a

📥 Commits

Reviewing files that changed from the base of the PR and between 6f3c41d and f242a91.

📒 Files selected for processing (93)
  • apps/blog/content/blog/accelerate-ga-release-I9cQM6bSf2g6/index.mdx
  • apps/blog/content/blog/accelerate-ipv6-first/index.mdx
  • apps/blog/content/blog/accelerate-preview-release-ab229e69ed2/index.mdx
  • apps/blog/content/blog/accelerate-static-ip-support/index.mdx
  • apps/blog/content/blog/amplication-customer-story-nmlkBNlLlxnN/index.mdx
  • apps/blog/content/blog/announcing-accelerate-usrvpi6sfkv4/index.mdx
  • apps/blog/content/blog/announcing-on-demand-cache-invalidation-for-prisma-accelerate/index.mdx
  • apps/blog/content/blog/announcing-prisma-6-18-0/index.mdx
  • apps/blog/content/blog/announcing-prisma-6-19-0/index.mdx
  • apps/blog/content/blog/announcing-typedsql-make-your-raw-sql-queries-type-safe-with-prisma-orm/index.mdx
  • apps/blog/content/blog/bringing-prisma-orm-to-react-native-and-expo/index.mdx
  • apps/blog/content/blog/build-applications-at-the-edge-with-prisma-orm-and-cloudflare-d1-preview/index.mdx
  • apps/blog/content/blog/client-extensions-ga-4g4yIu8eOSbB/index.mdx
  • apps/blog/content/blog/client-extensions-preview-8t3w27xkrxxn/index.mdx
  • apps/blog/content/blog/cockroach-ga-5JrD9XVWQDYL/index.mdx
  • apps/blog/content/blog/data-platform-static-ips/index.mdx
  • apps/blog/content/blog/elsevier-customer-story-SsAASKagMHtN/index.mdx
  • apps/blog/content/blog/formbricks-and-prisma-accelerate-solving-scalability-together/index.mdx
  • apps/blog/content/blog/grover-customer-success-story-nxkWGcGNuvFd/index.mdx
  • apps/blog/content/blog/helping-rapha-access-data-across-platforms-n3jfhtyu6rgn/index.mdx
  • apps/blog/content/blog/how-bucket-uses-prisma-orm/index.mdx
  • apps/blog/content/blog/how-deno-and-prisma-partnered-to-power-per-branch-databases/index.mdx
  • apps/blog/content/blog/how-migrating-from-Sequelize-to-Prisma-allowed-Invisible-to-scale-i4pz2mwu6q/index.mdx
  • apps/blog/content/blog/how-prisma-and-serverless-fit-together-iaSfcPQVi0/index.mdx
  • apps/blog/content/blog/how-solin-uses-prisma-accelerate-to-serve-2-5m-database-queries-per/index.mdx
  • apps/blog/content/blog/how-to-improve-startup-times-kdRB9MjPEv/index.mdx
  • apps/blog/content/blog/introducing-auto-scaling-for-prisma-accelerate/index.mdx
  • apps/blog/content/blog/introducing-platform-environments/index.mdx
  • apps/blog/content/blog/iopool-customer-success-story-uLsCWvaqzXoa/index.mdx
  • apps/blog/content/blog/make-your-applications-fast-globally/index.mdx
  • apps/blog/content/blog/mongodb-general-availability-pixnun6mffmu/index.mdx
  • apps/blog/content/blog/organize-your-prisma-schema-with-multi-file-support/index.mdx
  • apps/blog/content/blog/orm-6-10-0-new-features-for-prisma-postgres-remote-mcp-and-more/index.mdx
  • apps/blog/content/blog/orm-6-12-0-esm-compatible-generator-in-preview-and-new-options-for-prisma-config/index.mdx
  • apps/blog/content/blog/orm-6-15-0-ai-safety-guardrails-for-destructive-commands-and-more/index.mdx
  • apps/blog/content/blog/orm-v6-11-0-embedded-prisma-studio-rust-free-orm-for-mysql-in-preview-and-more/index.mdx
  • apps/blog/content/blog/orm-v6-17-0-new-usage-metrics-and-direct-connections-in-ga-for-prisma-postgres/index.mdx
  • apps/blog/content/blog/overcoming-challenges-in-serverless-and-edge-environments-TQtONA0RVxuW/index.mdx
  • apps/blog/content/blog/panther-customer-story-pdmdrrhtupsl/index.mdx
  • apps/blog/content/blog/pearly-plan-customer-success-pdmdrRhTupve/index.mdx
  • apps/blog/content/blog/poppy-customer-success-story-swnWQcGRRvpd/index.mdx
  • apps/blog/content/blog/prisma-5-f66prwkjx72s/index.mdx
  • apps/blog/content/blog/prisma-6-8-0-release/index.mdx
  • apps/blog/content/blog/prisma-and-serverless-73hbgKnZ6t/index.mdx
  • apps/blog/content/blog/prisma-data-platform-now-generally-available-8D058s1BqOL1/index.mdx
  • apps/blog/content/blog/prisma-data-proxy-xb16ba0p21/index.mdx
  • apps/blog/content/blog/prisma-microsoft-sql-server-azure-sql-production-ga/index.mdx
  • apps/blog/content/blog/prisma-migrate-dx-primitives/index.mdx
  • apps/blog/content/blog/prisma-migrate-ga-b5eno5g08d0b/index.mdx
  • apps/blog/content/blog/prisma-mongodb-preview-release/index.mdx
  • apps/blog/content/blog/prisma-online-data-browser-ejgg5c8p3u4x/index.mdx
  • apps/blog/content/blog/prisma-optimize-early-access/index.mdx
  • apps/blog/content/blog/prisma-orm-6-6-0-esm-support-d1-migrations-and-prisma-mcp-server/index.mdx
  • apps/blog/content/blog/prisma-orm-v6-14-0-relationships-for-sql-views-more-robust-management-api-and-more/index.mdx
  • apps/blog/content/blog/prisma-turso-ea-support-rXGd_Tmy3UXX/index.mdx
  • apps/blog/content/blog/read-replicas-prisma-client-extension-f66prwk56wow/index.mdx
  • apps/blog/content/blog/saving-black-friday-with-connection-pooling/index.mdx
  • apps/blog/content/blog/serverless-database-drivers-KML1ehXORxZV/index.mdx
  • apps/blog/content/blog/studio-for-prisma-postgres-view-and-edit-your-data-online/index.mdx
  • apps/blog/content/blog/tracing-launch-announcement-pmk4rlpc0ll/index.mdx
  • apps/blog/content/blog/tryg-customer-story-pdmdrRhTupvd/index.mdx
  • apps/blog/content/blog/vscode-extension-prisma-rust-webassembly/index.mdx
  • apps/blog/content/blog/whats-new-in-prisma-q1-2021-spjyqp0e2rk1/index.mdx
  • apps/blog/content/blog/whats-new-in-prisma-q2-2021-z70muetl386d/index.mdx
  • apps/blog/content/blog/why-prisma-2024/index.mdx
  • apps/blog/content/blog/wnip-q1-dsk0golh8v/index.mdx
  • apps/blog/content/blog/wnip-q2-2022-pmn7rulcj8x/index.mdx
  • apps/blog/content/blog/wnip-q3-hpk7pyth8v/index.mdx
  • apps/blog/content/blog/wnip-q4-2022-f66prwkjx72s/index.mdx
  • apps/blog/content/blog/wnip-q4-dsk0golh8v/index.mdx
  • apps/blog/next.config.mjs
  • apps/blog/source.config.ts
  • apps/blog/src/app/(blog)/[slug]/page.tsx
  • apps/blog/src/components/BlogHomeClient.tsx
  • apps/site/src/app/(index)/page.tsx
  • apps/site/src/app/changelog/page.tsx
  • apps/site/src/app/global.css
  • apps/site/src/app/mcp/_components/mcp-hero-section.tsx
  • apps/site/src/app/orm/page.tsx
  • apps/site/src/app/postgres/page.tsx
  • apps/site/src/app/pricing/pricing-comparison-table.tsx
  • apps/site/src/app/pricing/pricing-hero-plans.tsx
  • apps/site/src/app/query-insights/page.tsx
  • apps/site/src/app/stack/page.tsx
  • apps/site/src/app/studio/page.tsx
  • apps/site/src/app/support-policy/page.tsx
  • apps/site/src/components/homepage/card-section/card-section.tsx
  • apps/site/src/components/homepage/card-section/logo-grid.tsx
  • apps/site/src/components/homepage/copy-btn.tsx
  • apps/site/src/components/postgres.tsx
  • apps/site/src/data/postgres.json
  • packages/ui/src/components/navigation-menu.tsx
  • packages/ui/src/components/post-card.tsx
💤 Files with no reviewable changes (14)
  • apps/blog/content/blog/client-extensions-ga-4g4yIu8eOSbB/index.mdx
  • apps/blog/content/blog/overcoming-challenges-in-serverless-and-edge-environments-TQtONA0RVxuW/index.mdx
  • apps/blog/content/blog/announcing-typedsql-make-your-raw-sql-queries-type-safe-with-prisma-orm/index.mdx
  • apps/blog/content/blog/orm-v6-11-0-embedded-prisma-studio-rust-free-orm-for-mysql-in-preview-and-more/index.mdx
  • apps/blog/content/blog/prisma-turso-ea-support-rXGd_Tmy3UXX/index.mdx
  • apps/blog/content/blog/orm-6-15-0-ai-safety-guardrails-for-destructive-commands-and-more/index.mdx
  • apps/blog/content/blog/prisma-and-serverless-73hbgKnZ6t/index.mdx
  • apps/blog/content/blog/prisma-5-f66prwkjx72s/index.mdx
  • apps/blog/content/blog/prisma-orm-v6-14-0-relationships-for-sql-views-more-robust-management-api-and-more/index.mdx
  • apps/blog/content/blog/orm-6-10-0-new-features-for-prisma-postgres-remote-mcp-and-more/index.mdx
  • apps/blog/content/blog/cockroach-ga-5JrD9XVWQDYL/index.mdx
  • apps/blog/content/blog/orm-6-12-0-esm-compatible-generator-in-preview-and-new-options-for-prisma-config/index.mdx
  • apps/blog/content/blog/tracing-launch-announcement-pmk4rlpc0ll/index.mdx
  • apps/blog/content/blog/read-replicas-prisma-client-extension-f66prwk56wow/index.mdx

Comment thread apps/blog/src/app/(blog)/[slug]/page.tsx
Comment thread apps/site/src/app/global.css
Comment thread apps/site/src/components/homepage/card-section/logo-grid.tsx Outdated
Comment thread packages/ui/src/components/navigation-menu.tsx
@carlagn carlagn requested a review from Techboidesign May 8, 2026 09:15
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: 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/site/src/components/homepage/card-section/logo-grid.tsx`:
- Around line 103-125: The light-mode image selection is incorrectly falling
back to mobileImageUrl, conflating responsive and theme concerns; update the
logic in logo-grid.tsx so lightImageUrl is derived from logo.imageUrlLight
(e.g., const lightImageUrl = logo.imageUrlLight ?? logo.imageUrl) and keep
darkImageUrl = logo.imageUrl, removing mobileImageUrl from theme selection; if
you need a true mobile-specific asset, implement it in the responsive wrapper
around the LogoImage component (not inside the theme fallback) and adjust the
className/theme branching (the dark:hidden / dark:block usage) to only switch
based on theme.
🪄 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: 53d78c3f-de0c-4c73-ae6b-bce70647bc49

📥 Commits

Reviewing files that changed from the base of the PR and between 9b9954f and f413e47.

📒 Files selected for processing (3)
  • apps/blog/content/blog/how-prisma-and-serverless-fit-together-iaSfcPQVi0/index.mdx
  • apps/blog/src/app/(blog)/[slug]/page.tsx
  • apps/site/src/components/homepage/card-section/logo-grid.tsx
✅ Files skipped from review due to trivial changes (1)
  • apps/blog/content/blog/how-prisma-and-serverless-fit-together-iaSfcPQVi0/index.mdx
🚧 Files skipped from review as they are similar to previous changes (1)
  • apps/blog/src/app/(blog)/[slug]/page.tsx

Comment on lines +103 to +125
const lightImageUrl = logo.mobileImageUrl ?? logo.imageUrlLight;
const darkImageUrl = logo.imageUrl;
const hasThemeVariant = lightImageUrl !== darkImageUrl;
const imageClassName = "w-full aspect-square rounded-lg object-contain";

return (
<>
<Image
src={lightImageUrl}
alt={logo.alt}
width={size}
height={size}
className={cn(imageClassName, hasThemeVariant && "block dark:hidden")}
/>
{hasThemeVariant && (
{lightImageUrl && (
<Image
src={darkImageUrl}
src={lightImageUrl}
alt={logo.alt}
width={size}
height={size}
className={cn(imageClassName, "hidden dark:block")}
className={cn(imageClassName, "block dark:hidden")}
/>
)}
<Image
src={darkImageUrl}
alt={logo.alt}
width={size}
height={size}
className={cn(imageClassName, lightImageUrl && "hidden dark:block")}
/>
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 | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
python - <<'PY'
import json
from pathlib import Path

for rel in [
    "apps/site/src/components/homepage/card-section/default-logos.json",
    "apps/site/src/data/postgres.json",
]:
    path = Path(rel)
    if not path.exists():
        continue

    data = json.loads(path.read_text())

    def walk(node):
        if isinstance(node, dict):
            if "alt" in node and ("mobileImageUrl" in node or "imageUrlLight" in node):
                print(
                    f"{rel}: alt={node.get('alt')!r}, "
                    f"mobileImageUrl={'mobileImageUrl' in node}, "
                    f"imageUrlLight={'imageUrlLight' in node}"
                )
            for value in node.values():
                walk(value)
        elif isinstance(node, list):
            for value in node:
                walk(value)

    walk(data)
PY

Repository: prisma/web

Length of output: 1710


🏁 Script executed:

cat -n apps/site/src/components/homepage/card-section/logo-grid.tsx

Repository: prisma/web

Length of output: 9061


Separate theme selection from responsive variant logic.

Line 103 conflates two concerns: mobileImageUrl (a responsive variant) is being used as a fallback for imageUrlLight (a theme variant). While current data doesn't show logos with both fields, the code structure silently allows one to shadow the other. More importantly, mobileImageUrl gets applied at all viewport widths in light mode because LogoImage contains no viewport branching—only theme-based CSS (dark:hidden / dark:block). This naming is misleading: the "mobile" asset isn't actually mobile-specific; it's used globally in light mode.

Suggested fix
-  const lightImageUrl = logo.mobileImageUrl ?? logo.imageUrlLight;
+  const lightImageUrl = logo.imageUrlLight;
   const darkImageUrl = logo.imageUrl;

This clarifies that imageUrlLight is for light-mode theming. If mobile-specific image selection is needed, it belongs in a separate responsive wrapper around LogoImage, not mixed into theme selection logic.

📝 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 lightImageUrl = logo.mobileImageUrl ?? logo.imageUrlLight;
const darkImageUrl = logo.imageUrl;
const hasThemeVariant = lightImageUrl !== darkImageUrl;
const imageClassName = "w-full aspect-square rounded-lg object-contain";
return (
<>
<Image
src={lightImageUrl}
alt={logo.alt}
width={size}
height={size}
className={cn(imageClassName, hasThemeVariant && "block dark:hidden")}
/>
{hasThemeVariant && (
{lightImageUrl && (
<Image
src={darkImageUrl}
src={lightImageUrl}
alt={logo.alt}
width={size}
height={size}
className={cn(imageClassName, "hidden dark:block")}
className={cn(imageClassName, "block dark:hidden")}
/>
)}
<Image
src={darkImageUrl}
alt={logo.alt}
width={size}
height={size}
className={cn(imageClassName, lightImageUrl && "hidden dark:block")}
/>
const lightImageUrl = logo.imageUrlLight;
const darkImageUrl = logo.imageUrl;
const hasThemeVariant = lightImageUrl !== darkImageUrl;
const imageClassName = "w-full aspect-square rounded-lg object-contain";
return (
<>
{lightImageUrl && (
<Image
src={lightImageUrl}
alt={logo.alt}
width={size}
height={size}
className={cn(imageClassName, "block dark:hidden")}
/>
)}
<Image
src={darkImageUrl}
alt={logo.alt}
width={size}
height={size}
className={cn(imageClassName, lightImageUrl && "hidden dark:block")}
/>
🤖 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/site/src/components/homepage/card-section/logo-grid.tsx` around lines
103 - 125, The light-mode image selection is incorrectly falling back to
mobileImageUrl, conflating responsive and theme concerns; update the logic in
logo-grid.tsx so lightImageUrl is derived from logo.imageUrlLight (e.g., const
lightImageUrl = logo.imageUrlLight ?? logo.imageUrl) and keep darkImageUrl =
logo.imageUrl, removing mobileImageUrl from theme selection; if you need a true
mobile-specific asset, implement it in the responsive wrapper around the
LogoImage component (not inside the theme fallback) and adjust the
className/theme branching (the dark:hidden / dark:block usage) to only switch
based on theme.

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.

🧹 Nitpick comments (1)
apps/site/src/app/pricing/pricing-calculator.tsx (1)

511-511: ⚡ Quick win

Avoid mixing hardcoded size with typography token on the same heading.

Line 511 combines text-[28px] with type-title-xl; keeping only the tokenized class avoids style conflicts and keeps typography standardization consistent.

Proposed diff
-            <h2 className="m-0 text-[28px] text-foreground-neutral type-title-xl">
+            <h2 className="m-0 text-foreground-neutral type-title-xl">
               Pricing Calculator
             </h2>
🤖 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/site/src/app/pricing/pricing-calculator.tsx` at line 511, The h2 in
pricing-calculator.tsx is mixing a hardcoded size class with a typography token;
remove the hardcoded class text-[28px] and rely only on the token class
type-title-xl (or, if a different size is required, replace the token instead of
adding a raw px class) so the heading uses the standardized typography token
consistently; locate the h2 element whose className contains both text-[28px]
and type-title-xl and delete the text-[28px] token.
🤖 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.

Nitpick comments:
In `@apps/site/src/app/pricing/pricing-calculator.tsx`:
- Line 511: The h2 in pricing-calculator.tsx is mixing a hardcoded size class
with a typography token; remove the hardcoded class text-[28px] and rely only on
the token class type-title-xl (or, if a different size is required, replace the
token instead of adding a raw px class) so the heading uses the standardized
typography token consistently; locate the h2 element whose className contains
both text-[28px] and type-title-xl and delete the text-[28px] token.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: eb9cbe49-84dd-4647-b379-87932555ed7f

📥 Commits

Reviewing files that changed from the base of the PR and between 583b41f and ba4772b.

📒 Files selected for processing (7)
  • apps/site/src/app/layout.tsx
  • apps/site/src/app/orm/page.tsx
  • apps/site/src/app/pricing/page.tsx
  • apps/site/src/app/pricing/pricing-calculator.tsx
  • apps/site/src/app/pricing/pricing-page-content.tsx
  • apps/site/src/app/studio/page.tsx
  • packages/ui/src/components/navigation-menu.tsx
✅ Files skipped from review due to trivial changes (4)
  • apps/site/src/app/pricing/page.tsx
  • apps/site/src/app/studio/page.tsx
  • apps/site/src/app/orm/page.tsx
  • packages/ui/src/components/navigation-menu.tsx

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