Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion apps/docs/src/app/global-error.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ export default function GlobalError({
Error
</h1>
<p className="subtitle">Something went wrong</p>
<a href="/docs">Go to docs</a>
<a href="https://www.prisma.io/docs">Go to docs</a>
</body>
</html>
);
Expand Down
31 changes: 17 additions & 14 deletions apps/docs/src/app/not-found.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import { source } from '@/lib/source';
import { baseOptions, links } from '@/lib/layout.shared';
import { VersionSwitcher } from '@/components/version-switcher';
import type { LinkItemType } from 'fumadocs-ui/layouts/shared';
import { DocsLayout } from '@/components/layout/notebook';
import { DocsBody, DocsPage } from '@/components/layout/notebook/page';
import { LATEST_VERSION } from '@/lib/version';
import { NotFoundTracker } from '@/components/not-found-tracker';
import type { Metadata } from 'next';
import { source } from "@/lib/source";
import { baseOptions, links } from "@/lib/layout.shared";
import { VersionSwitcher } from "@/components/version-switcher";
import type { LinkItemType } from "fumadocs-ui/layouts/shared";
import { DocsLayout } from "@/components/layout/notebook";
import { DocsBody, DocsPage } from "@/components/layout/notebook/page";
import { LATEST_VERSION } from "@/lib/version";
import { NotFoundTracker } from "@/components/not-found-tracker";
import type { Metadata } from "next";

export const metadata: Metadata = {
title: '404 - Page Not Found',
description: 'The page you were looking for could not be found.',
title: "404 - Page Not Found",
description: "The page you were looking for could not be found.",
};

export default function NotFound() {
Expand All @@ -19,7 +19,7 @@ export default function NotFound() {
const navbarLinks: LinkItemType[] = [
...links,
{
type: 'custom',
type: "custom",
children: <VersionSwitcher currentVersion={LATEST_VERSION} />,
},
];
Expand Down Expand Up @@ -51,12 +51,15 @@ export default function NotFound() {
<p className="text-2xl font-semibold text-white">
We could not find the page you were looking for
</p>
<a href="/docs" className="hover:underline transition-colors">
<a
href="https://www.prisma.io/docs"
className="hover:underline transition-colors"
>
Go to docs
</a>
</div>
</DocsBody>
</DocsPage>
</DocsLayout>
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -849,4 +849,4 @@ The Pagination component uses button variants for consistent styling:

- **Breadcrumb** - For showing hierarchical navigation
- **Button** - The underlying component used for links
- **Tabs** - For content organization without pagination
- **Tabs** - For content organization without pagination
20 changes: 0 additions & 20 deletions apps/site/public/icons/technologies/nextjs copy.svg

This file was deleted.

6 changes: 5 additions & 1 deletion apps/site/src/app/(index)/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,11 @@ export default function SiteHome() {
</p>
</div>
<div className="flex flex-col gap-6 md:flex-row">
<Button variant="ppg" size="2xl">
<Button
variant="ppg"
size="2xl"
href="https://console.prisma.io/sign-up?utm_source=website&utm_medium=index&utm_campaign=cta"
>
<span>Create your first Database</span>
<i className="fa-regular fa-arrow-right ml-2" />
</Button>
Expand Down
2 changes: 1 addition & 1 deletion apps/site/src/app/ecosystem/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ export const metadata = createPageMetadata({
export default function SiteHome() {
return (
<main className="flex-1 w-full z-1 bg-background-default">
<div className="hero -mt-24 flex items-end justify-center px-4 relative">
<div className="hero -mt-24 flex items-end justify-center px-4 relative pt-24">
<div className="absolute inset-0 z-0 bg-[linear-gradient(180deg,var(--color-foreground-orm)_0%,var(--color-background-default)_100%)] opacity-20" />
<div className="content pt-31 relative z-2 my-12 flex flex-col gap-8">
<h1 className="text-6xl [font-variation-settings:'wght'_900,'wdth'_125] mb-0 text-center mt-0 font-sans-display text-foreground-neutral max-w-200 mx-auto">
Expand Down
10 changes: 9 additions & 1 deletion apps/site/src/app/enterprise/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -80,34 +80,42 @@ const databases: { title: string; list: DatabaseItem[] } = {
list: [
{
name: "PostgreSQL",
url: "https://www.prisma.io/docs/prisma-orm/quickstart/postgresql",
icon: "/icons/companies/postgres.svg",
},
{
name: "MySQL",
url: "https://www.prisma.io/docs/prisma-orm/quickstart/mysql",
icon: "/icons/technologies/mysqlsimple.svg",
},
{
name: "MariaDB",
icon: "/icons/technologies/mariadb.svg",
url: "https://www.prisma.io/docs/prisma-orm/quickstart/mysql",
},
{
name: "SQLite",
url: "https://www.prisma.io/docs/prisma-orm/quickstart/sqlite",
icon: "/icons/companies/sqlite.svg",
},
{
name: "SQL Server",
url: "https://www.prisma.io/docs/prisma-orm/quickstart/sqlserver",
icon: "/icons/companies/sqlserver.svg",
},
{
name: "CockroachDB",
url: "https://www.prisma.io/docs/prisma-orm/quickstart/cockroachdb",
icon: "/icons/companies/cockroachdb.svg",
},
{
name: "PlanetScale",
url: "https://www.prisma.io/docs/prisma-orm/quickstart/planetscale",
icon: "/icons/companies/planetscale.svg",
},
{
name: "MongoDB",
url: "https://www.prisma.io/docs/prisma-orm/quickstart/mongodb",
icon: "/icons/technologies/mongodbsimple.svg",
},
],
Expand Down Expand Up @@ -346,7 +354,7 @@ export default function EnterprisePage() {
return (
<main className="flex-1 w-full z-1 bg-background-default">
{/* Hero */}
<section className="hero -mt-24 flex items-end justify-center px-4 relative">
<section className="hero -mt-24 flex items-end justify-center px-4 relative pt-24">
<div className="absolute inset-0 z-0 bg-[linear-gradient(180deg,var(--color-foreground-orm)_0%,var(--color-background-default)_100%)] opacity-20" />
<div className="content pt-31 relative z-2 my-12 flex flex-col gap-8">
<div className="flex flex-col gap-1">
Expand Down
23 changes: 17 additions & 6 deletions apps/site/src/app/orm/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -139,14 +139,23 @@ const twoCol_2 = [
<h5 className="font-sans-display text-foreground-orm uppercase stretch-display">
Prisma Benchmarks
</h5>
<h2 className="text-foreground-neutral stretch-display text-3xl font-sans-display mt-0 mb-4">
<h2 className="text-foreground-neutral stretch-display text-3xl font-sans-display">
Prisma vs other ORMs
</h2>
</div>
<p className="text-foreground-neutral-weak! text-base">
A meaningful comparison of database query latencies across database
providers and ORM libraries in the Node.js & TypeScript ecosystem.
</p>
<Button
variant="orm"
size="xl"
href="https://benchmarks.prisma.io"
className="w-fit"
>
<span>Explore Benchmarks</span>
<i className="fa-regular fa-arrow-right ml-2!" />
</Button>
Comment on lines +150 to +158
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

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check how the Button component handles external hrefs
# Looking for target="_blank" or rel handling logic

ast-grep --pattern 'function Button($$$) {
  $$$
}'

# Also search for Button component definition with different patterns
rg -n -A 20 'export.*function Button|export const Button|const Button.*=' --type=tsx --type=ts

# Check if there's automatic external link handling
rg -n -C 5 'target.*_blank|noopener|noreferrer' --type=tsx --type=ts

Repository: prisma/web

Length of output: 109


🏁 Script executed:

fd -t f -i button apps/site/src --extension ts --extension tsx --extension jsx --extension js

Repository: prisma/web

Length of output: 36


🏁 Script executed:

# Search for Button component definition
rg -n 'export.*Button|const Button' apps/site/src --max-count=20

Repository: prisma/web

Length of output: 36


🏁 Script executed:

# Check the orm/page.tsx file to see the actual Button usage
cat -n apps/site/src/app/orm/page.tsx | sed -n '150,160p'

Repository: prisma/web

Length of output: 414


🏁 Script executed:

# Check the imports in orm/page.tsx
head -n 50 apps/site/src/app/orm/page.tsx | grep -i button

Repository: prisma/web

Length of output: 120


🏁 Script executed:

# Search for Button component definition more broadly
rg -n 'Button' apps/site/src --max-count=30 | head -n 30

Repository: prisma/web

Length of output: 2170


🏁 Script executed:

# Look for components directory structure
find apps/site/src -type d -name components -o -name button

Repository: prisma/web

Length of output: 78


🏁 Script executed:

# Search the entire codebase for Button component export
rg 'export.*Button' apps/site --max-count=20

Repository: prisma/web

Length of output: 36


🏁 Script executed:

# Find `@prisma/eclipse` in the codebase
find apps -name 'eclipse' -type d

Repository: prisma/web

Length of output: 66


🏁 Script executed:

# Check if eclipse is a local package
ls -la apps/ | grep -i eclipse

Repository: prisma/web

Length of output: 109


🏁 Script executed:

# Look at package.json to see where `@prisma/eclipse` comes from
rg '@prisma/eclipse' apps/site/package.json

Repository: prisma/web

Length of output: 91


🏁 Script executed:

# Search for other Button usages with external hrefs to see if there's a pattern
rg -n 'href="https://' apps/site/src --max-count=20

Repository: prisma/web

Length of output: 7156


🏁 Script executed:

# Find Button component in eclipse package
find apps/eclipse -type f -name '*.tsx' -o -name '*.ts' | head -20

Repository: prisma/web

Length of output: 1082


🏁 Script executed:

# Search for Button component definition in eclipse
rg -n 'Button' apps/eclipse --max-count=30

Repository: prisma/web

Length of output: 23629


🏁 Script executed:

# Look for the actual Button component implementation
find apps/eclipse -path '*/components/*' -name '*button*' -o -path '*/Button*'

Repository: prisma/web

Length of output: 152


🏁 Script executed:

# Read the Button component implementation
cat apps/eclipse/src/components/ui/button.tsx

Repository: prisma/web

Length of output: 1145


🏁 Script executed:

# Check eclipse package exports
find apps/eclipse -name 'index.ts' -o -name 'index.tsx' -o -name 'package.json' | head -10

Repository: prisma/web

Length of output: 344


🏁 Script executed:

# Look for eclipse's main entry point
cat apps/eclipse/package.json | head -50

Repository: prisma/web

Length of output: 1509


🏁 Script executed:

# Search for Button export in eclipse
rg -n 'export.*Button' apps/eclipse/src

Repository: prisma/web

Length of output: 356


🏁 Script executed:

# Find `@prisma/eclipse` package in monorepo
find apps -maxdepth 1 -type d -name '*eclipse*'

Repository: prisma/web

Length of output: 66


🏁 Script executed:

# Look at root level too
ls -la . | grep -E 'packages|libs'

Repository: prisma/web

Length of output: 113


🏁 Script executed:

# Check if there's a packages directory
find . -maxdepth 2 -type d -name eclipse

Repository: prisma/web

Length of output: 87


🏁 Script executed:

# Search for package.json files that might contain eclipse
rg '"name".*eclipse' --glob='package.json' | head -10

Repository: prisma/web

Length of output: 159


🏁 Script executed:

# Find Button component in packages/eclipse
find packages/eclipse/src -type f \( -name '*button*' -o -name '*Button*' \)

Repository: prisma/web

Length of output: 142


🏁 Script executed:

# Search for Button export in packages/eclipse
rg -n 'export.*Button' packages/eclipse/src | head -20

Repository: prisma/web

Length of output: 545


🏁 Script executed:

# Read the Button component implementation
cat packages/eclipse/src/components/button.tsx

Repository: prisma/web

Length of output: 3198


🏁 Script executed:

# Check other Button usages with external hrefs to see if they have target="_blank"
rg -B2 -A2 'href="https://' apps/site/src/app/orm/page.tsx | grep -A 5 -B 5 "Button"

Repository: prisma/web

Length of output: 608


🏁 Script executed:

# Check broader pattern of Button with external URLs
rg -B 3 'href="https://' packages/eclipse/src --type=tsx --type=ts | grep -A 10 -B 10 Button | head -40

Repository: prisma/web

Length of output: 81


🏁 Script executed:

# Check other files to see if external links typically have target="_blank"
rg 'target="_blank"' apps/site/src --max-count=10

Repository: prisma/web

Length of output: 2680


Add target="_blank" and rel="noopener noreferrer" to the external benchmarks link.

The Button component renders as an <a> tag when given an href, but doesn't automatically handle external links. The link to https://benchmarks.prisma.io should open in a new tab with security attributes to prevent the opened page from accessing window.opener.

Update the Button at line 150
        <Button
          variant="orm"
          size="xl"
          href="https://benchmarks.prisma.io"
+         target="_blank"
+         rel="noopener noreferrer"
          className="w-fit"
        >

This pattern is already established throughout your codebase and aligns with best practices for external links.

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

In `@apps/site/src/app/orm/page.tsx` around lines 150 - 158, The external
benchmarks link rendered with the Button component should open safely in a new
tab—update the Button usage that links to "https://benchmarks.prisma.io" to
include target="_blank" and rel="noopener noreferrer" (pass these props to the
Button so they reach the underlying <a> element); locate the Button invocation
in page.tsx (the Button that currently has href="https://benchmarks.prisma.io")
and add the two attributes to its props.

</div>
),
imageUrl: "/illustrations/orm/orm_1",
Expand All @@ -166,7 +175,7 @@ const twoCol_2 = [
<h5 className="font-sans-display text-foreground-orm uppercase stretch-display">
Prisma Client
</h5>
<h2 className="text-foreground-neutral stretch-display text-3xl font-sans-display mt-0 mb-4">
<h2 className="text-foreground-neutral stretch-display text-3xl font-sans-display">
Type-safe database client
</h2>
</div>
Expand Down Expand Up @@ -243,7 +252,7 @@ const features = [
image: "/illustrations/orm/collaborative",
alt: "Collaborative work",
icon: "fa-light fa-screen-users",
link: "https://console.prisma.io",
link: "https://console.prisma.io/login?utm_source=website&utm_medium=orm&utm_campaign=cta",
},
{
title: "Browse your data",
Expand Down Expand Up @@ -273,13 +282,13 @@ export default function ORM() {
Next-generation Node.js and TypeScript ORM
</h1>
<p className="text-center text-foreground-neutral max-w-2xl mx-auto">
Real Postgres with the developer experience and infrastructure to
ship faster.
Prisma ORM elevates developer experience with intuitive data
modeling, automated migrations, and type-safety.
</p>
<div className="flex flex-col md:flex-row gap-4 items-center justify-center">
<Button
variant="orm"
href={prismaPostgresQuickstartUrl}
href="https://www.prisma.io/docs/prisma-orm/quickstart/prisma-postgres"
size="3xl"
className="font-sans-display! font-[650]"
>
Expand Down Expand Up @@ -428,6 +437,8 @@ export default function ORM() {
<Button
variant="default-stronger"
size="2xl"
target="_blank"
rel="noopener noreferrer"
href="https://www.prisma.io/docs"
>
<span>Read the docs</span>
Expand Down
15 changes: 5 additions & 10 deletions apps/site/src/app/partners/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,9 @@ const twoCol = [
</p>
<p className="text-foreground-neutral-weak! text-base">
You can also let your AI agent take full control through our{" "}
<b>MCP server</b>, automating database creation and management
end-to-end. Choose the approach that works best for your product:
provision directly into users’ existing{" "}
<a href="https://console.prisma.io/" className="underline">
Prisma accounts
</a>{" "}
for instant ownership, or manage the databases yourself until users
are ready to claim them.
<b>MCP server</b>, automating database creation and management for
instant ownership, or manage the databases yourself until users are
ready to claim them.
</p>
<div className="flex gap-4 items-center justify-start mx-auto md:ml-0">
<a href="https://create-db.prisma.io/" className="link-btn orm">
Expand Down Expand Up @@ -196,7 +191,7 @@ export default function Partners() {
</div>
<div className="w-screen px-4 ">
<div className="my-12 flex flex-col gap-8">
<h2 className="text-foreground-neutral stretch-display text-4xl font-black! font-sans-display my-0 mx-auto text-center">
<h2 className="text-foreground-neutral stretch-display text-3xl md:text-4xl font-black! font-sans-display my-0 mx-auto text-center">
Everything you need from data to deployment
</h2>
<p className="text-center text-base text-foreground-neutral-weak max-w-2xl mx-auto -mb-20">
Expand Down Expand Up @@ -295,7 +290,7 @@ export default function Partners() {
</div>
<div className="w-screen px-4">
<div className="my-12 py-12 w-full gap-8 max-w-[1200px] mx-auto flex flex-col">
<h2 className="text-foreground-neutral stretch-display text-4xl font-black! font-sans-display my-0 mx-auto text-center">
<h2 className="text-foreground-neutral stretch-display text-3xl md:text-4xl font-black! font-sans-display my-0 mx-auto text-center">
Get in touch
</h2>
<p className="text-center text-base text-foreground-neutral-weak max-w-2xl mx-auto">
Expand Down
10 changes: 7 additions & 3 deletions apps/site/src/app/postgres/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ export default async function SiteHome() {
<i className="fa-solid fa-chart-pyramid" />
<span>Prisma Postgres</span>
</div>
<h1 className="text-6xl [font-variation-settings:'wght'_900,'wdth'_125] mb-0 mt-0 font-sans-display text-foreground-neutral">
<h1 className="text-5xl md:text-6xl [font-variation-settings:'wght'_900,'wdth'_125] mb-0 mt-0 font-sans-display text-foreground-neutral">
The fastest way <br />
to real Postgres
</h1>
Expand All @@ -152,7 +152,7 @@ export default async function SiteHome() {
</Button>
<Button
variant="default-stronger"
href="/docs/postgres"
href="https://www.prisma.io/docs/postgres"
size="3xl"
className="font-sans-display! font-[650]"
>
Expand Down Expand Up @@ -337,7 +337,11 @@ export default async function SiteHome() {
<span>Create your first Database</span>
<i className="fa-regular fa-arrow-right ml-2" />
</Button>
<Button variant="default-stronger" size="2xl" href="/docs">
<Button
variant="default-stronger"
size="2xl"
href="https://www.prisma.io/docs"
>
<span>Read the docs</span>
<i className="fa-regular fa-arrow-right ml-2" />
</Button>
Expand Down
26 changes: 15 additions & 11 deletions apps/site/src/app/stack/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,19 +24,23 @@ export const metadata = createPageMetadata({
export default function StackPage() {
return (
<main className="flex-1 w-full -mt-24 bg-[linear-gradient(to_bottom,var(--color-background-ppg),var(--color-background-default)_50%)] text-foreground-neutral">
<section className="px-4 pt-60 pb-12 md:px-0 md:pb-16">
<div className="mx-auto flex w-full max-w-[720px] flex-col items-center gap-6 text-center">
<p className="flex items-center justify-center gap-2 font-sans text-base font-semibold uppercase tracking-[1.6px] text-foreground-ppg">
<Layers className="size-3.5 shrink-0" strokeWidth={2} aria-hidden />
Prisma Stack
</p>
<h1 className="m-0 text-foreground-neutral text-5xl font-sans-display [font-variation-settings:'wght'_900]">
Build with your favorite tools
</h1>
<div className="hero -mt-24 pt-64 pb-12 flex items-end justify-center px-4 relative">
<div className="absolute inset-0 pointer-events-none z-1 bg-[linear-gradient(180deg,var(--color-foreground-ppg)_0%,var(--color-background-default)_100%)] opacity-20" />
<div className="content relative z-2 my-12 py-12 flex flex-col gap-8">
<div className="flex flex-col gap-4 items-center text-center">
<div className="flex items-center gap-2 text-foreground-ppg-weak uppercase tracking-widest text-sm font-sans-display font-black">
<i className="fa-regular fa-layer-group" />
<span>Prisma Stack</span>
</div>
<h1 className="text-5xl md:text-6xl [font-variation-settings:'wght'_900,'wdth'_125] mb-0 mt-0 font-sans-display text-foreground-neutral">
Build with
<br /> your favorite tools
</h1>
</div>
</div>
</section>
</div>

<section className="px-4 pb-16 md:px-0 md:pb-20">
<section className="px-4 pb-16 md:pb-20">
<div className="mx-auto flex w-full max-w-[1024px] flex-col gap-12">
{stackCategories.map((category: StackCategory) => (
<div key={category.id} className="flex flex-col gap-4">
Expand Down
2 changes: 1 addition & 1 deletion apps/site/src/app/studio/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ export default function StudioPage() {

<div className="flex flex-col items-center gap-4 sm:flex-row">
<Button
variant="ppg"
variant="orm"
size="2xl"
href={CONSOLE_URL}
target="_blank"
Expand Down
2 changes: 1 addition & 1 deletion apps/site/src/components/ecosystem/grid.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export const EcosystemGrid = () => {
activeFilter === filter ? "orm-reverse" : "default-stronger"
}
size="lg"
className="capitalize"
className="capitalize whitespace-nowrap"
onClick={() => setActiveFilter(filter)}
key={filter}
>
Expand Down
4 changes: 2 additions & 2 deletions apps/site/src/components/enterprise/carousel-item.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,12 @@ export const CarouselItem = ({
className,
)}
>
<div className="flex flex-col gap-4">
<div className="grid grid-rows-[56px_auto] gap-4">
<div className="flex gap-4 items-center">
<Action color={color || "orm"} size="4xl">
<i className={card.icon} />
</Action>
<h3 className="text-foreground-neutral font-sans-display text-md md:text-lg stretch-display mt-0 mb-1 font-bold">
<h3 className="text-foreground-neutral font-sans-display text-md md:text-lg stretch-display mt-0 font-bold">
{card.title}
</h3>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
{
"link": "https://www.prisma.io/docs/guides/nextjs",
"imageUrl": "/icons/technologies/nextjs.svg",
"imageUrlLight": "/icons/technologies/nextjs-light.svg",
"alt": "Next.js"
},
{
Expand Down
4 changes: 2 additions & 2 deletions apps/site/src/components/homepage/card-section/logo-grid.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ const LogoImage = memo(({ logo, size }: { logo: Logo; size: number }) => {
height={size}
className={cn(
"w-full aspect-square rounded-lg object-contain",
imageUrlLight && "hidden dark:block",
imageUrlLight && "block dark:hidden",
)}
/>
{imageUrlLight && (
Expand All @@ -136,7 +136,7 @@ const LogoImage = memo(({ logo, size }: { logo: Logo; size: number }) => {
alt={logo.alt}
width={size}
height={size}
className="w-full aspect-square rounded-lg object-contain block dark:hidden"
className="w-full aspect-square rounded-lg object-contain hidden dark:block"
/>
)}
</>
Expand Down
Loading
Loading