Skip to content
Draft
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
6 changes: 3 additions & 3 deletions .github/workflows/lychee.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:
with:
# prisma.io/extensions ships with PR #8232; drop this exclude once it is live.
# /compare/neon, /compare/planetscale, and /compare/supabase ship with PR #8516; drop that exclude once they are live.
# /compare/vercel-neon-drizzle is not live yet; drop that exclude once it is.
# /compare/vercel and /compare/vercel-neon-drizzle are not live yet; drop those excludes once they are.
# dashboard.clerk.com/~/<page> resolves to the signed-in user's application and returns 404 to anonymous requests.
args: >-
--cache
Expand All @@ -59,7 +59,7 @@ jobs:
--exclude 'https://pris.ly/vercel-app-demo-live'
--exclude 'https://app-deploy-demo.prisma.io'
--exclude '^https://www\.prisma\.io/extensions'
--exclude '^https://www\.prisma\.io/compare/(neon|planetscale|supabase|vercel-neon-drizzle)$'
--exclude '^https://www\.prisma\.io/compare/(neon|planetscale|supabase|vercel|vercel-neon-drizzle)$'
--exclude '^https://dashboard\.clerk\.com/~/'
--accept 200,201,204,301,302,303,307,308,403,429
${{ steps.changed-docs.outputs.all_changed_files }}
Expand Down Expand Up @@ -95,7 +95,7 @@ jobs:
--exclude 'https://pris.ly/vercel-app-demo-live'
--exclude 'https://app-deploy-demo.prisma.io'
--exclude '^https://www\.prisma\.io/extensions'
--exclude '^https://www\.prisma\.io/compare/(neon|planetscale|supabase|vercel-neon-drizzle)$'
--exclude '^https://www\.prisma\.io/compare/(neon|planetscale|supabase|vercel|vercel-neon-drizzle)$'
--exclude '^https://dashboard\.clerk\.com/~/'
--accept 200,201,204,301,302,303,307,308,403,429
${{ steps.changed-docs.outputs.all_changed_files }}
Expand Down
1 change: 1 addition & 0 deletions apps/site/next.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,7 @@ const agentMarkdownPaths = [
"/compare/neon",
"/compare/planetscale",
"/compare/supabase",
"/compare/vercel",
"/compare/vercel-neon-drizzle",
];

Expand Down
13 changes: 13 additions & 0 deletions apps/site/src/app/compare/article.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ const AI_MARKDOWN: Partial<Record<ComparisonSlug, string>> = {
neon: "/compare/neon.md",
planetscale: "/compare/planetscale.md",
supabase: "/compare/supabase.md",
vercel: "/compare/vercel.md",
"vercel-neon-drizzle": "/compare/vercel-neon-drizzle.md",
};

Expand Down Expand Up @@ -113,6 +114,18 @@ const TOC: Record<ComparisonSlug, readonly TocItem[]> = {
{ id: "faq", label: "FAQ", also: ["next"] },
{ id: "sources", label: "Sources" },
],
vercel: [
{ id: "choose", label: "When to choose" },
{ id: "feature-table", label: "Features" },
{ id: "where-each", label: "Where each fits" },
{ id: "apart", label: "Why Prisma" },
{ id: "pricing", label: "Pricing" },
{ id: "wrong-choice", label: "When it is the wrong choice" },
{ id: "migrate", label: "Switching", also: ["migrate-back"] },
{ id: "proof", label: "What teams say" },
{ id: "faq", label: "FAQ", also: ["next"] },
{ id: "sources", label: "Sources" },
],
"vercel-neon-drizzle": [
{ id: "choose", label: "When to choose" },
{ id: "feature-table", label: "Features" },
Expand Down
8 changes: 8 additions & 0 deletions apps/site/src/app/compare/comparisons.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { MONGOOSE_DESCRIPTION, MONGOOSE_TITLE } from "./mongoose/_content";
import { NEON_DESCRIPTION, NEON_TITLE } from "./neon/_content";
import { PLANETSCALE_DESCRIPTION, PLANETSCALE_TITLE } from "./planetscale/_content";
import { SUPABASE_DESCRIPTION, SUPABASE_TITLE } from "./supabase/_content";
import { VERCEL_DESCRIPTION, VERCEL_TITLE } from "./vercel/_content";
import {
VERCEL_NEON_DRIZZLE_DESCRIPTION,
VERCEL_NEON_DRIZZLE_TITLE,
Expand Down Expand Up @@ -88,6 +89,13 @@ export const COMPARISONS = [
title: SUPABASE_TITLE,
description: SUPABASE_DESCRIPTION,
},
{
slug: "vercel",
category: "compute",
competitor: "Vercel",
title: VERCEL_TITLE,
description: VERCEL_DESCRIPTION,
},
{
slug: "vercel-neon-drizzle",
category: "platform",
Expand Down
32 changes: 21 additions & 11 deletions apps/site/src/app/compare/page-ai-actions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,14 @@ const SUPABASE_PROMPT = `I am choosing between Prisma Postgres and Supabase for

Ask me up to three short questions if I need Auth/Storage/Realtime out of the box, whether I want the TypeScript app hosted next to Postgres, or whether HIPAA/SOC 2/ISO 27001 matter.`;

const VERCEL_PROMPT = `I am choosing between Prisma Compute and Vercel for hosting a TypeScript app. Using only what the article states, plus my answers:

1. Tell me which fits if I want Prisma Compute, Prisma Postgres, and Prisma ORM in one first-party platform vs if I want Vercel hosting and a Marketplace database.
2. Call out the real tradeoffs (app next to the database vs Marketplace placement, preview branches vs Vercel previews, operations vs Pro credit plus usage, CDN vs TypeScript HTTP hosting) without selling.
3. Give me the first steps to try the one you recommend.

Ask me up to three short questions if I already use Vercel, whether I want the TypeScript app hosted next to Postgres, or whether I need a global CDN.`;

const VERCEL_NEON_DRIZZLE_PROMPT = `I am choosing between the Prisma platform and Vercel + Neon + Drizzle for a TypeScript backend. Using only what the article states, plus my answers:

1. Tell me which fits if I want Prisma ORM, Prisma Postgres, and Prisma Compute in one platform vs if I want to wire Drizzle, Neon, and Vercel myself.
Expand All @@ -73,17 +81,19 @@ Ask me up to three short questions if I need a copy of production data on previe
export function choosePrompt(pageMdUrl: string) {
const body = pageMdUrl.includes("/compare/vercel-neon-drizzle.md")
? VERCEL_NEON_DRIZZLE_PROMPT
: pageMdUrl.includes("/compare/planetscale.md")
? PLANETSCALE_PROMPT
: pageMdUrl.includes("/compare/supabase.md")
? SUPABASE_PROMPT
: pageMdUrl.includes("/compare/neon.md")
? NEON_PROMPT
: pageMdUrl.includes("/compare/convex.md")
? CONVEX_PROMPT
: pageMdUrl.includes("/compare/mongoose.md")
? MONGOOSE_PROMPT
: KYSELY_PROMPT;
: pageMdUrl.includes("/compare/vercel.md")
? VERCEL_PROMPT
: pageMdUrl.includes("/compare/planetscale.md")
? PLANETSCALE_PROMPT
: pageMdUrl.includes("/compare/supabase.md")
? SUPABASE_PROMPT
: pageMdUrl.includes("/compare/neon.md")
? NEON_PROMPT
: pageMdUrl.includes("/compare/convex.md")
? CONVEX_PROMPT
: pageMdUrl.includes("/compare/mongoose.md")
? MONGOOSE_PROMPT
: KYSELY_PROMPT;
return `Read this article and treat it as the source of truth:

${pageMdUrl}
Expand Down
11 changes: 11 additions & 0 deletions apps/site/src/app/compare/vercel.json/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { NextResponse } from "next/server";
import { getVercelFacts } from "../vercel/facts";

/** Machine-readable comparison facts, each value with a source URL and dateChecked. */
export function GET() {
return NextResponse.json(getVercelFacts(), {
headers: {
"Cache-Control": "public, max-age=300, s-maxage=3600",
},
});
}
Loading
Loading