From 718e31f2fadf1d6bf426da93253ab5a1cbd805cf Mon Sep 17 00:00:00 2001 From: Shane Neubauer Date: Tue, 25 Aug 2026 18:53:00 +1000 Subject: [PATCH] site: rename /templates route to /apps Moves the template gallery from /templates to /apps and adds a permanent redirect for the old URL. Page headings, the footer resources link, and the /compute hero tour's fourth stop follow the new naming. Internal identifiers that mirror the external manifest (prisma-examples/compute/templates.json) keep their names, as does the console deploy URL and the existing analytics labels, so the metric history stays continuous. --- apps/site/next.config.mjs | 2 ++ apps/site/src/app/{templates => apps}/page.tsx | 18 +++++++++--------- .../src/components/product/content/compute.ts | 7 +++---- .../components/product/illustrations/index.ts | 4 ++-- .../{run-templates.tsx => run-apps.tsx} | 16 ++++++++-------- apps/site/src/lib/config.ts | 2 +- 6 files changed, 25 insertions(+), 24 deletions(-) rename apps/site/src/app/{templates => apps}/page.tsx (93%) rename apps/site/src/components/product/illustrations/{run-templates.tsx => run-apps.tsx} (84%) diff --git a/apps/site/next.config.mjs b/apps/site/next.config.mjs index 6b80f2da13..74ee6f7ee3 100644 --- a/apps/site/next.config.mjs +++ b/apps/site/next.config.mjs @@ -278,6 +278,8 @@ const config = { { source: "/startups", destination: "/programs/startups", permanent: true }, { source: "/partners", destination: "/programs/partners", permanent: true }, { source: "/oss-friends", destination: "/programs/oss-friends", permanent: true }, + // Template gallery renamed to /apps. + { source: "/templates", destination: "/apps", permanent: true }, // ORM feature marketing absorbed by the new /orm product page. { source: "/client", destination: "/orm", permanent: true }, { source: "/typedsql", destination: "/orm", permanent: true }, diff --git a/apps/site/src/app/templates/page.tsx b/apps/site/src/app/apps/page.tsx similarity index 93% rename from apps/site/src/app/templates/page.tsx rename to apps/site/src/app/apps/page.tsx index 964a35ade4..203983520b 100644 --- a/apps/site/src/app/templates/page.tsx +++ b/apps/site/src/app/apps/page.tsx @@ -23,10 +23,10 @@ const templateManifestSchema = z.object({ type Template = z.infer["templates"][number]; export const metadata = createPageMetadata({ - title: "Prisma Compute templates", + title: "Prisma Compute apps", description: "Browse open-source TypeScript starters and deploy one with Prisma Postgres and Prisma Compute.", - path: "/templates", + path: "/apps", }); async function getTemplates() { @@ -59,7 +59,7 @@ function TemplateCard({ template }: { template: Template }) { className="w-full" ctaLocation="templates-card" > - Use template + Use this app
- {/* compute-red wash — templates deploy to Prisma Compute, so the + {/* compute-red wash — these apps deploy to Prisma Compute, so the hero carries its accent (same treatment as /ecosystem's cyan) */}
- Templates + Apps

- Start from a template + Start from an app

Open-source TypeScript starters. Review the code, then deploy with Prisma Postgres @@ -130,10 +130,10 @@ export default async function TemplatesPage() { ) : (

- Templates are unavailable + Apps are unavailable

- We could not load the template directory. Please try again in a few minutes. + We could not load the app directory. Please try again in a few minutes.

)} diff --git a/apps/site/src/components/product/content/compute.ts b/apps/site/src/components/product/content/compute.ts index 1a7da904e2..56002e2841 100644 --- a/apps/site/src/components/product/content/compute.ts +++ b/apps/site/src/components/product/content/compute.ts @@ -59,10 +59,9 @@ export const computeContent: ProductPageContent = { illustration: "deployments", }, { - label: "Templates", - caption: - "Start from a template — Next.js, Hono, an API, an agent — and deploy it as it is.", - illustration: "runTemplates", + label: "Apps", + caption: "Start from an app — Next.js, Hono, an API, an agent — and deploy it as it is.", + illustration: "runApps", }, ], }, diff --git a/apps/site/src/components/product/illustrations/index.ts b/apps/site/src/components/product/illustrations/index.ts index 2a9d21b860..47641779d6 100644 --- a/apps/site/src/components/product/illustrations/index.ts +++ b/apps/site/src/components/product/illustrations/index.ts @@ -17,7 +17,7 @@ import { NoLockIn } from "./no-lock-in"; import { ObjectStore } from "./object-store"; import { QueryInsights } from "./query-insights"; import { RepoConnect } from "./repo-connect"; -import { RunTemplates } from "./run-templates"; +import { RunApps } from "./run-apps"; import { SchemaFile } from "./schema-file"; import { SpendLimits } from "./spend-limits"; import { StudioTable } from "./studio-table"; @@ -51,7 +51,7 @@ export const PRODUCT_ILLUSTRATIONS = { objectStore: ObjectStore, queryInsights: QueryInsights, repoConnect: RepoConnect, - runTemplates: RunTemplates, + runApps: RunApps, schemaFile: SchemaFile, spendLimits: SpendLimits, studioTable: StudioTable, diff --git a/apps/site/src/components/product/illustrations/run-templates.tsx b/apps/site/src/components/product/illustrations/run-apps.tsx similarity index 84% rename from apps/site/src/components/product/illustrations/run-templates.tsx rename to apps/site/src/components/product/illustrations/run-apps.tsx index c781a4527e..3ecad42166 100644 --- a/apps/site/src/components/product/illustrations/run-templates.tsx +++ b/apps/site/src/components/product/illustrations/run-apps.tsx @@ -11,13 +11,13 @@ import { } from "@/components/icons/forma"; import { CardChrome, HeroPanel, SectionLabel } from "./parts"; -// Stop four of the /compute hero tour — "Templates". Answers the two questions -// the abstraction otherwise leaves open: what you start from, and what actually +// Stop four of the /compute hero tour — "Apps". Answers the two questions the +// abstraction otherwise leaves open: what you start from, and what actually // runs here. Real: the framework and workload names. No logos — we hold no // marks for these projects, so every framework is a text label and a shared // icon. Nothing here claims a performance characteristic. -const TEMPLATES = [ +const STARTERS = [ { icon: Code, name: "Hono", descriptor: "lightweight" }, { icon: Server, name: "Express", descriptor: "classic" }, { icon: Layers, name: "tRPC API", descriptor: "typed" }, @@ -32,17 +32,17 @@ const WORKLOADS = [ { icon: Swap, label: "WebSockets" }, ]; -export function RunTemplates() { +export function RunApps() { return ( - + 5 starters} />
- Start from a template + Start from an app {/* the pick most people want, already one click from being deployed */}
@@ -62,7 +62,7 @@ export function RunTemplates() {
- {TEMPLATES.map(({ icon: Icon, name, descriptor }) => ( + {STARTERS.map(({ icon: Icon, name, descriptor }) => (