diff --git a/.claude/launch.json b/.claude/launch.json
index 89f9681413..75e2d44c79 100644
--- a/.claude/launch.json
+++ b/.claude/launch.json
@@ -7,6 +7,12 @@
"runtimeArgs": ["--filter", "docs", "exec", "next", "dev", "--port", "3105"],
"port": 3105
},
+ {
+ "name": "blog",
+ "runtimeExecutable": "pnpm",
+ "runtimeArgs": ["--filter", "blog", "exec", "next", "dev", "--port", "3002"],
+ "port": 3002
+ },
{
"name": "site",
"runtimeExecutable": "pnpm",
diff --git a/.claude/skills/content-create-hero-image/SKILL.md b/.claude/skills/content-create-hero-image/SKILL.md
index d4a904a62d..db15223a96 100644
--- a/.claude/skills/content-create-hero-image/SKILL.md
+++ b/.claude/skills/content-create-hero-image/SKILL.md
@@ -1,16 +1,17 @@
---
name: content-create-hero-image
-description: Use when the operator wants a hero or meta image for a Prisma blog post; asks to create or generate a blog hero, cover, social card, Open Graph, or YouTube image; mentions cover art, a blog thumbnail, cover.svg/hero.svg/meta.png; references content-create-hero-image; or wants to interactively design cover imagery in Prisma's Eclipse house style. Produces an editable SVG hero plus a pixel-exact PNG meta image, and includes an interactive mode and a built-in design-review pass.
+description: Use when the operator wants a hero or meta image for a Prisma blog post; asks to create or generate a blog hero, cover, social card, Open Graph, or YouTube image; mentions cover art, a blog thumbnail, cover.svg/hero.svg/meta.png; references content-create-hero-image; or wants to interactively design cover imagery in Prisma's 2026 brand (light paper, prism accents, Sora). Produces an editable SVG hero plus a pixel-exact PNG meta image, and includes an interactive mode and a built-in design-review pass.
metadata:
author: Prisma
- version: "2026.6.23"
+ version: "2026.8.11"
---
# Create blog hero & meta images
-Produce the **hero** and **meta** (Open Graph) images for a Prisma blog post in the Eclipse
-house style, styled from the bundled reference assets and from the most recent posts in the
-operator's checkout, then wire them into the post's frontmatter.
+Produce the **hero** and **meta** (Open Graph) images for a Prisma blog post in the **2026
+brand** — light paper surfaces, the prism accent family (cyan/yellow/red), Sora display type —
+styled from the bundled reference assets and from the most recent posts in the operator's
+checkout, then wire them into the post's frontmatter.
The hero is a hand-authored, layered **SVG** — the editable source of truth — rendered to a
**pixel-exact PNG**. The meta image is **raster (PNG)** because social platforms do not render
@@ -32,8 +33,8 @@ Use [`README.md`](README.md) for usage and sample prompts; this `SKILL.md` is th
- [`assets/logos/`](assets/logos/) — official Prisma logo/symbol, Prisma 8 mark + lockup, Postgres/Compute icons (`README.md`).
- [`assets/fonts/`](assets/fonts/) — bundled brand fonts (Mona Sans, Inter, Geist Mono); used by the scripts.
- [`assets/templates/cover.svg`](assets/templates/cover.svg) — parameterized starting template.
-- [`assets/examples/`](assets/examples/) — one worked hero/meta pair per house content module; the quality bar for new work.
-- [`assets/hero1.svg`](assets/hero1.svg)–[`hero4.svg`](assets/hero4.svg) — abstract reference heroes in the house style; study for palette, type, and motif alongside the worked examples.
+- [`assets/examples/`](assets/examples/) — worked hero/meta pairs per content module. **Pre-rebrand (dark Eclipse era): study for composition and module structure ONLY — their palette, fonts, and surfaces are retired.** The current quality bar is the newest committed covers in `apps/blog/public/*/imgs/`.
+- [`assets/hero1.svg`](assets/hero1.svg)–[`hero4.svg`](assets/hero4.svg) — abstract reference heroes, also pre-rebrand; same structure-only caveat.
- [`scripts/embed-fonts.py`](scripts/embed-fonts.py) — inline the brand fonts into the SVG as base64 `@font-face`. **Run first.**
- [`scripts/export-png.sh`](scripts/export-png.sh) — render the font-embedded SVG to PNG via headless Chrome so the PNG matches the SVG in a browser exactly. **Run second.**
@@ -42,6 +43,25 @@ Use [`README.md`](README.md) for usage and sample prompts; this `SKILL.md` is th
Two images: a `hero` shown on the post itself, and a `meta` image for Open Graph and social
cards. A single design may serve both files.
+**Contexts of use — design for all three.** A cover lives as (1) a **grid thumbnail** in the
+blog index, cropped to ~16:9 by `object-cover` and rendered ~400px wide **directly beside the
+post's real title**, on light AND dark card surfaces; (2) the full-size social/OG card; (3) the
+in-post hero. The thumbnail-next-to-title context drives the hardest rules:
+
+- **Headline**: a compressed thesis of ≤6 words, or no copy at all — never a restatement of the
+ post title it will sit beside. Across a batch, vary composition (no-copy graphic-led,
+ corner-stripe brand moment, headline+module) so adjacent covers don't read as one template.
+- **Kicker**: ≥20px with a ≥5.5px dot, or omit it — a 17px kicker is noise at thumbnail scale.
+- **Sign-off**: prefer the **full-color lockup** (`assets/logos/prisma-lockup-color.svg`,
+ ~112px wide, inlined as a group) over the plain-text wordmark; the mark carries at thumbnail
+ scale where small grey type disappears.
+- **Crop-safe zone**: every critical element (lockup, kicker, headline, module edges) stays
+ ≥72px from every canvas edge and must survive a centered 16:9 crop of the 1200×630 frame.
+- **Dual-surface**: the artwork never theme-switches; it must read as an intentional object on
+ both white and ink (#1a1a1a) surrounds. Avoid vast empty pure-white regions — washes on
+ covers run a step stronger than page washes (~0.18–0.28 per stop) so the piece carries color
+ at small sizes and on dark.
+
1. **Format.**
- **hero: SVG by default** — the prisma.io/blog standard, and it suits the typographic,
geometric heroes the blog favours. The SVG is the editable source of truth; always export
@@ -57,10 +77,14 @@ cards. A single design may serve both files.
- Other canvases (in-post hero `844×474`, YouTube `1280×720`, custom) are produced on request
— change `width`/`height`/`viewBox` and scale font sizes proportionally (≈ ×0.70 for the
844-wide hero).
-3. **Size budget.** Keep the meta PNG **under 1 MB** (1x normally lands ~200–500 KB; re-export
- at 1x if a denser export overshoots). Keep the SVG lean: **subset, embedded fonts** (see step
- 6) land each hero around ~20–30 KB. Prefer vector paths over embedded raster; flag any SVG
- over ~1 MB.
+3. **Size budget.** Keep the meta PNG **under 1 MB**. A 1x export normally lands ~200–500 KB;
+ a cover whose art is mostly smooth wash gradients can overshoot (one landed at 1.4 MB), so
+ check the file and re-export at 1x, or flatten a redundant wash layer, if it does. Keep the
+ SVG lean with **subset, embedded fonts** (step 6): a typographic cover lands ~30–55 KB, and
+ a code/terminal-heavy one ~55–75 KB because the mono glyph subset is larger. Above ~120 KB,
+ check that fonts actually subset (the venv python needs `fonttools` + `brotli`; without them
+ `embed-fonts.py` silently falls back to embedding whole WOFF2 files). Prefer vector paths
+ over embedded raster; flag any SVG over ~1 MB.
4. **Naming.** Base names `hero` and `meta`, extension following the format: `hero.svg` (or
`hero.png` when raster) and `meta.png`. **No content hashes, no dimensions** in filenames.
For N explored directions, suffix the base name (`hero-a.svg`/`meta-a.png`, …).
@@ -141,8 +165,8 @@ the Workflow'"_.
| 3 | **Custom copy** (if text) | quote the post's own thesis as the suggestion | the post's thesis verbatim; blank = no text |
| 4 | **What should the graphic symbolise?** | restate the post's core idea in concrete terms | the literal mechanism from the post |
| 5 | **Isometric skew on the graphic?** | "Default yes for card/table modules; flow/loop diagrams usually read best **flat**." | yes for cards/tables, flat for flows |
-| 6 | **Background family** | name the product's surface | teal (Postgres/Compute/Next/platform); indigo only for ORM |
-| 7 | **Mood** | launch / educational / conceptual / editorial / technical | educational, dark |
+| 6 | **Accent color** | name the owning product | cyan (ORM / Prisma 8 / platform); yellow (Postgres); red (Compute) |
+| 7 | **Mood** | launch / educational / conceptual / editorial / technical | educational, light paper |
| 8 | **Product logo** | which mark, if any | the post's product mark when it clarifies; else just the `Prisma` wordmark |
| 9 | **How many directions to explore?** | 1–4 distinct concepts | 1 (offer up to 4) |
@@ -154,8 +178,8 @@ obeys the anti-patterns and the design-review bar — creative ≠ slop.
### 3. Choose a visual direction
-Decide a concept that's literal-but-elegant, never generic. Pick: surface (dark default / light
-editorial), product accent, eyebrow label, the **content module** that fits the content (see
+Decide a concept that's literal-but-elegant, never generic. Pick: surface (light paper default /
+ink dark only with a stated reason), product accent, kicker label, the **content module** that fits the content (see
`design-system.md` → _Content modules_: pipeline/flow, data/log panel, terminal, code card,
comparison card), and whether a product lockup belongs in the composition. Anchor every choice in
`design-system.md`. One accent, one idea, strong hierarchy, generous space.
@@ -185,9 +209,10 @@ the message (e.g. a chart) — keep the layer groups (`background`, `badge`, `he
chars). Set the eyebrow/badge pill width to roughly `(label length × 14) + 48`. Include the
`
`/`` metadata.
-**Fonts (avoid the #1 off-brand bug):** the brand faces are **Mona Sans** (headings/display, 800),
-**Inter** (body, 400), and **Geist Mono** (data/code, 500), bundled in `assets/fonts/`. Do **not**
-use Barlow — it is the legacy docs face and reads off-brand. A wrong family/weight falls back to a
+**Fonts (avoid the #1 off-brand bug):** the brand faces are **Sora** (headings/display, weight
+500, emphasis 600 — never 700+), **Inter** (body 400, kicker labels 600), and **Mona Sans Mono**
+(data/code, 500), bundled in `assets/fonts/`. Do **not** use Mona Sans display, Geist Mono, or
+Barlow — those are the retired pre-rebrand faces. A wrong family/weight falls back to a
generic sans. For emphasis, change colour or size, **not** weight. When the graphic _is_ the
message, let it own the canvas — center it, drop competing chrome, use the standalone product logo
as the brand mark, and label data with real numbers.
@@ -208,8 +233,14 @@ Tie any header number to the data it labels, and highlight the "live"/current el
- **Whitespace between ``s is stripped.** With the default `xml:space`, librsvg trims
whitespace on each `tspan`, so `export default` + ` defineComputeConfig` renders as
`export defaultdefineComputeConfig`. For any multi-`tspan` line that needs internal spaces (code
- snippets especially), put **`xml:space="preserve"`** on the parent ``/``, and keep the
+ snippets especially), put **`xml:space="preserve"` on each `` element itself**, and keep the
text content on a single source line so `preserve` doesn't pull in indentation.
+ **Put it on the ``, never only on a wrapping ``:** Chrome does not inherit
+ `xml:space` from a group, so a `` around code `` nodes **fails
+ silently** — the SVG looks right in source and every leading space and column alignment
+ vanishes in the exported PNG. This is the single most expensive gotcha in the pipeline because
+ nothing errors; it is only visible by opening the raster. Grep your finished SVG for
+ `]*xml:space` and move any hit down onto the individual `` elements.
- **Long words don't wrap.** SVG `` has no auto-wrap — hand-split into `` lines with
explicit `x`/`dy`.
- **Centering: avoid `text-anchor="middle"` + `dx`.** For a bold-name + quiet-label pair (e.g.
@@ -226,7 +257,7 @@ python3 scripts/embed-fonts.py # 1. inline b
bash scripts/export-png.sh 1200 630 # 2. render PNG (Chrome)
```
-`embed-fonts.py` inlines Mona Sans/Inter/Geist Mono as base64 `@font-face` — subsetting to the
+`embed-fonts.py` inlines Sora/Inter/Mona Sans Mono as base64 `@font-face` — subsetting to the
glyphs the SVG uses (with `fonttools` + `brotli`, ~20–30 KB) or embedding the whole WOFF2 when
those are unavailable (larger, still self-contained). `export-png.sh` renders with **headless
Chrome/Chromium**, which honors `@font-face`, so the PNG looks exactly like the SVG in a
@@ -281,8 +312,9 @@ product, why the metaphor fits). Example:
```text
hero: apps/blog/public/query-insights-ga/imgs/hero.svg
meta: apps/blog/public/query-insights-ga/imgs/meta.png
-Direction: Dark Eclipse surface with the Postgres teal accent; Query Insights framed as a GA
-launch via the pill eyebrow; restraint keeps it premium and thumbnail-legible.
+Direction: Paper surface with a bottom spectral wash and the Postgres yellow accent; Query
+Insights framed as a GA launch via the kicker dot; one white metric card carries the idea and
+restraint keeps it premium and thumbnail-legible.
```
## Validation — must pass before finalizing
@@ -293,9 +325,11 @@ Visually inspect the rendered PNG, then verify:
preserved). SVG declares `viewBox="0 0 1200 630"` with matching `width`/`height`.
- [ ] The meta image is **PNG**; the hero is **SVG** (raster hero only on an explicit photographic
request). Each asset is self-contained — the SVG resolves with no external references.
-- [ ] Colors and gradient match `tokens.json` exactly — no off-system values.
-- [ ] Fonts render in real Mona Sans/Inter/Geist Mono (not a fallback sans, and **not Barlow**);
- heed the export warning. The committed SVG has embedded `@font-face` (ran `embed-fonts.py`).
+- [ ] Colors match `tokens.json` exactly — no off-system values, and **no retired dark-aurora
+ teal/navy surfaces**. The surface is light paper unless a dark cover was explicitly chosen.
+- [ ] Fonts render in real Sora/Inter/Mona Sans Mono (not a fallback sans; **not Mona Sans
+ display, Geist Mono, or Barlow** — all retired); heed the export warning. The committed SVG
+ has embedded `@font-face` (ran `embed-fonts.py`). Headlines are Sora **500**, sentence case.
- [ ] One accent, one idea. Clear hierarchy; generous negative space. If a graphic is the message,
it is centered and uncluttered.
- [ ] Diagram cards sit ≥ 48px off the canvas edge; arrows are full-length; no node is jammed
@@ -303,6 +337,11 @@ Visually inspect the rendered PNG, then verify:
- [ ] Code/snippet text renders its spaces correctly (multi-`tspan` lines carry
`xml:space="preserve"`).
- [ ] Title text is legible as a small thumbnail **and** at full 1200px social-preview size.
+- [ ] The cover reads as intentional artwork on BOTH white and ink (#1a1a1a) surrounds (render
+ the PNG onto each and look); no vast empty pure-white regions; critical elements are ≥72px
+ from every edge and survive a centered 16:9 crop.
+- [ ] The headline (if any) is ≤6 words and does not restate the post title; the kicker (if any)
+ is ≥20px; the sign-off is the full-color lockup unless there's a reason for text.
- [ ] Any logo/lockup is intentional, correctly colored, not stretched, and not paired with extra
label text. The `Prisma` wordmark, if used, sits bottom-left with no mark beside it.
- [ ] Any data/chart uses real numbers and the framing the prompt asked for.
@@ -322,13 +361,17 @@ creative and brand traps a checklist can't catch.)
filenames, and frontmatter fields from recent posts; the documented standard is a fallback.
- **Generic AI look.** Glows everywhere, faux-3D blobs, busy gradients, literal robots. Prisma
covers are restrained and typographic. When in doubt, remove an element.
-- **Off-system styling.** Inventing colors, or swapping the Mona Sans + Inter pairing (Barlow is
- off-brand).
+- **Off-system styling.** Inventing colors, or swapping the Sora + Inter pairing (Mona Sans
+ display, Geist Mono, and Barlow are all retired/off-brand).
+- **Reaching for the retired look.** The dark teal aurora surface, Mona Sans 800 headlines,
+ uppercase dash eyebrows, and glow-heavy cards are the pre-2026 style — old committed covers and
+ `assets/examples/` show it; do not reproduce their skin.
- **Decorative logos.** Marks are a footer sign-off or the subject — never wallpaper.
- **Centering text-only layouts.** Default covers are left-anchored with right-side breathing room.
Center only a single graphic-led composition.
-- **Fabricating product palettes.** Postgres = teal, ORM = indigo. Compute/Next have no official
- tokens yet — use the platform teal and say so; don't invent a brand color.
+- **Fabricating product palettes.** ORM / Prisma 8 = prism cyan, Postgres = prism yellow,
+ Compute = prism red (see `tokens.json → products`). One accent per cover; don't invent hues or
+ revive the old teal/indigo mapping.
- **Tagline filler.** Avoid lines like `Resize. Encode. Cache.` If a secondary line is needed,
make it concrete and informational.
- **Copying a single reference.** Synthesise the house style from across the examples and recent
diff --git a/.claude/skills/content-create-hero-image/assets/fonts/Inter-VF.woff2 b/.claude/skills/content-create-hero-image/assets/fonts/Inter-VF.woff2
new file mode 100644
index 0000000000..5a8d3e72ad
Binary files /dev/null and b/.claude/skills/content-create-hero-image/assets/fonts/Inter-VF.woff2 differ
diff --git a/.claude/skills/content-create-hero-image/assets/fonts/MonaSansMono-VF.woff2 b/.claude/skills/content-create-hero-image/assets/fonts/MonaSansMono-VF.woff2
new file mode 100644
index 0000000000..f4ccd616f1
Binary files /dev/null and b/.claude/skills/content-create-hero-image/assets/fonts/MonaSansMono-VF.woff2 differ
diff --git a/.claude/skills/content-create-hero-image/assets/fonts/README.md b/.claude/skills/content-create-hero-image/assets/fonts/README.md
index d200a6db7c..88911f0854 100644
--- a/.claude/skills/content-create-hero-image/assets/fonts/README.md
+++ b/.claude/skills/content-create-hero-image/assets/fonts/README.md
@@ -1,16 +1,24 @@
# Brand fonts
-Static instances of the Eclipse brand fonts, bundled so covers render on-brand without a
-`prisma/web` checkout. `scripts/export-png.sh` points fontconfig here automatically, and
-`scripts/embed-fonts.py` subsets these into committed SVGs.
+The 2026-brand faces, bundled so covers render on-brand without a `prisma/web` checkout.
+`scripts/export-png.sh` points fontconfig here automatically, and `scripts/embed-fonts.py`
+subsets these into committed SVGs.
-| File | Family | Weight | Role | License |
-| --------------------- | ---------- | ------ | ------------------------------------------------ | ------------------------------ |
-| `MonaSans.woff2` | Mona Sans | 800 | Headings, display, product wordmark, big numbers | SIL OFL 1.1 (GitHub Mona Sans) |
-| `Inter-Regular.woff2` | Inter | 400 | Body, subtitles, UI/category labels | SIL OFL 1.1 |
-| `GeistMono.woff2` | Geist Mono | 500 | Data values, code, technical labels | SIL OFL 1.1 (Vercel Geist) |
+## Current brand (use these)
-`MonaSans.woff2` is a static instance (weight 800, extended width) cut from Mona Sans VF
-(`prisma/web` → `packages/eclipse/src/static/fonts/MonaSansVF[wdth,wght,opsz,ital].woff2`).
-To regenerate at a different weight/width, instance the VF with `fonttools` and rename the
-family to `Mona Sans`. All three families are open-source (OFL) and safe to redistribute.
+| File | Family | Weights used | Role | License |
+| ----------------------- | -------------- | ------------ | ------------------------------------------- | ----------- |
+| `Sora-VF.woff2` | Sora | 500, 600 | Headlines, big numbers, `Prisma` wordmark | SIL OFL 1.1 |
+| `Inter-VF.woff2` | Inter | 400, 600 | Body, subtitles, kicker labels | SIL OFL 1.1 |
+| `MonaSansMono-VF.woff2` | Mona Sans Mono | 500 | Code, data values, paths | SIL OFL 1.1 |
+
+All three are variable fonts copied from `prisma/web` →
+`packages/eclipse/src/static/fonts/` (`SoraVF-latin.woff2`, `InterVariable.woff2`,
+`MonaSansMonoVF[wght].woff2`). One `@font-face` with a weight range serves every weight.
+
+## Legacy (pre-rebrand — keep only to re-render old covers)
+
+`MonaSans.woff2` (Mona Sans 800 display), `Inter-Regular.woff2` (static Inter 400), and
+`GeistMono.woff2` are the retired Eclipse-era faces. Do not use them on new covers.
+
+All families are open-source (OFL) and safe to redistribute.
diff --git a/.claude/skills/content-create-hero-image/assets/fonts/Sora-VF.woff2 b/.claude/skills/content-create-hero-image/assets/fonts/Sora-VF.woff2
new file mode 100644
index 0000000000..6a4dd1072a
Binary files /dev/null and b/.claude/skills/content-create-hero-image/assets/fonts/Sora-VF.woff2 differ
diff --git a/.claude/skills/content-create-hero-image/assets/logos/README.md b/.claude/skills/content-create-hero-image/assets/logos/README.md
index 0837ca9c22..65a79ef549 100644
--- a/.claude/skills/content-create-hero-image/assets/logos/README.md
+++ b/.claude/skills/content-create-hero-image/assets/logos/README.md
@@ -2,35 +2,31 @@
Official, reusable brand marks for covers. Prefer these over re-extracting each time.
-## Sources
-
-- **Prisma logo + symbol** — official press kit [`prisma/presskit`](https://github.com/prisma/presskit).
-- **Prisma 8 mark** — the layered-prism brand mark, vectorized to white/dark.
-- **Prisma Postgres icon** — FontAwesome [`chart-pyramid`](https://fontawesome.com/icons/chart-pyramid) (solid).
-- **Prisma Compute icon** — FontAwesome [`microchip`](https://fontawesome.com/icons/microchip) (solid).
-
-## Inventory
-
-| File | What | Use |
-| ---------------------------- | --------------------------------------------- | ------------------------------ |
-| `prisma-logo-white.svg` | Official Prisma logo (mark + wordmark), white | Brand sign-off on dark covers |
-| `prisma-logo-dark.svg` | Official Prisma logo, dark | Brand sign-off on light covers |
-| `prisma-logo-indigo.svg` | Official Prisma logo, brand indigo | Indigo-on-light contexts |
-| `prisma-symbol-white.svg` | Prisma prism symbol, white | Brand mark, dark covers |
-| `prisma-symbol-indigo.svg` | Prisma prism symbol, indigo | Brand mark, light contexts |
-| `prisma-8-mark-white.svg` | Prisma 8 layered-prism mark, white | Prisma 8 mark on dark |
-| `prisma-8-mark-dark.svg` | Prisma 8 mark, dark | Prisma 8 mark on light |
-| `prisma-8-logo.svg` | Prisma 8 mark + "Prisma 8" (Mona Sans) | Prisma 8 lockup |
-| `prisma-postgres-icon.svg` | Chart-pyramid, teal `#71e8df` | Prisma Postgres covers |
-| `prisma-compute-icon.svg` | Microchip, teal `#71e8df` | Prisma Compute covers |
+## Current brand (2026 — use these)
+
+| File | What | Use |
+| -------------------------- | ----------------------------------------------------------------- | -------------------------------------------------- |
+| `prisma-lockup-color.svg` | Full-color lockup: prism-stripe mark + ink wordmark (304×77) | Brand sign-off on light covers (~110px wide) |
+| `prisma-lockup-white.svg` | Full-color mark + white wordmark | Brand sign-off on the rare dark cover |
+| `prisma-mark-prism.svg` | The square prism mark alone (45° cyan/red/yellow stripes, 76×76) | Standalone brand mark; favicon-style corner glyph |
+
+Sourced from `prisma/web` → `apps/blog/public/logo/` and the marketing site app's icon. These
+carry the prism colors (`#01d7e4` cyan, red `#f34a60` family, yellow `#f3c306` family) — never
+recolor, stretch, or add effects. The plain-text alternative sign-off is the word `Prisma` set
+in Sora 600 ink (no mark beside it).
+
+## Legacy (pre-rebrand — do not use on new covers)
+
+`prisma-logo-white/dark/indigo.svg` and `prisma-symbol-white/indigo.svg` are the old
+triangle-logo era marks. `prisma-8-mark-*.svg` / `prisma-8-logo.svg` are the interim Prisma 8
+launch marks (Mona Sans lockup). `prisma-postgres-icon.svg` / `prisma-compute-icon.svg` are the
+old teal FontAwesome product chips. Kept only so legacy covers can be re-rendered faithfully.
## Rules
-- **Intentional, not decorative.** One brand mark per cover. Product icons/lockups are for
- product-focused covers where the product is the subject.
-- Use the official `prisma-logo-*` / `prisma-symbol-*` and the Prisma 8 mark as-is — do not
- recolor (beyond the white/dark variants), stretch, rotate, or add effects.
-- Product accents: Postgres = teal `#71e8df`, Compute = teal, Prisma 8 pairs the white mark with
- a Mona Sans wordmark, ORM = indigo `#4f46e5`.
-- The lockup uses live Mona Sans text; render/commit it with the brand fonts embedded
- (`scripts/embed-fonts.py`) so it stays correct standalone.
+- **Intentional, not decorative.** One brand mark per cover — the lockup as sign-off or the
+ prism mark as a deliberate subject; never wallpaper.
+- Product accents on the new brand: ORM / Prisma 8 = prism cyan `#01d7e4`, Postgres = prism
+ yellow `#eaa700`/`#f3c306`, Compute = prism red `#f34a60`. There are no per-product icons in
+ the new system — the kicker dot in the product's accent does that work.
+- Never pair a mark with extra "Prisma" text, and never place `prisma.io/blog` on the canvas.
diff --git a/.claude/skills/content-create-hero-image/assets/logos/prisma-lockup-color.svg b/.claude/skills/content-create-hero-image/assets/logos/prisma-lockup-color.svg
new file mode 100644
index 0000000000..19c4f1c037
--- /dev/null
+++ b/.claude/skills/content-create-hero-image/assets/logos/prisma-lockup-color.svg
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.claude/skills/content-create-hero-image/assets/logos/prisma-lockup-white.svg b/.claude/skills/content-create-hero-image/assets/logos/prisma-lockup-white.svg
new file mode 100644
index 0000000000..19e803de05
--- /dev/null
+++ b/.claude/skills/content-create-hero-image/assets/logos/prisma-lockup-white.svg
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.claude/skills/content-create-hero-image/assets/logos/prisma-mark-prism.svg b/.claude/skills/content-create-hero-image/assets/logos/prisma-mark-prism.svg
new file mode 100644
index 0000000000..8bfb36cafe
--- /dev/null
+++ b/.claude/skills/content-create-hero-image/assets/logos/prisma-mark-prism.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.claude/skills/content-create-hero-image/assets/templates/cover.svg b/.claude/skills/content-create-hero-image/assets/templates/cover.svg
index 4a142aacbd..a5c7be1e30 100644
--- a/.claude/skills/content-create-hero-image/assets/templates/cover.svg
+++ b/.claude/skills/content-create-hero-image/assets/templates/cover.svg
@@ -1,59 +1,70 @@
-
-
-
- {{TITLE_LINE_1}} {{TITLE_LINE_2}}
- Prisma blog cover. {{SUBTITLE}}
-
+
+ {{POST_TITLE}}
+ {{ONE_LINE_DESCRIPTION}} — Prisma blog cover, 2026 brand: light paper surface, spectral prism wash, {{ACCENT_NAME}} accent.
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
-
-
-
- {{BADGE}}
+
+
+
+ {{KICKER_LABEL}}
-
- {{TITLE_LINE_1}}
- {{TITLE_LINE_2}}
- {{TITLE_LINE_3}}
+
+
+ {{TITLE_LINE_1}}
+ {{TITLE_LINE_2}}
- {{SUBTITLE}}
+
+ {{SUBTITLE}}
+
+
+
+
+
+
+
+ {{MODULE_LABEL}}
+
-
-
+
+
+ Prisma
diff --git a/.claude/skills/content-create-hero-image/assets/tokens.json b/.claude/skills/content-create-hero-image/assets/tokens.json
index fbae4e91b0..73dd5c4400 100644
--- a/.claude/skills/content-create-hero-image/assets/tokens.json
+++ b/.claude/skills/content-create-hero-image/assets/tokens.json
@@ -1,154 +1,136 @@
{
- "$comment": "Prisma blog/social cover design tokens. Color values are sourced from the Eclipse design system (prisma/web: packages/eclipse/src/styles/globals.css) and the canonical OG generator (apps/docs/src/app/og/[...slug]/route.tsx). Fonts and cover formats are cross-referenced with SOCIALS.fig. Treat this file as the single source of truth for generated covers; update it when Eclipse tokens change.",
+ "$comment": "Prisma blog/social cover design tokens — 2026 rebrand ('prism' brand). Values are sourced from the rebranded eclipse package (prisma/web: packages/eclipse/src/styles/globals.css) and the marketing site app's globals.css @theme block + product accent map (the app currently named apps/site-redesign; it replaces apps/site at cutover — check apps/site if that name is gone). Treat this file as the single source of truth for generated covers; update it when the brand tokens change. The pre-rebrand dark 'aurora' palette is retired — do not reach for it.",
"cover": {
"background": {
- "$comment": "Signature Eclipse cover surface — a teal-green 'aurora': peak teal-green at the top (strongest top-left) fading through dark navy to near-black at the bottom. Built from a vertical base gradient PLUS a soft radial glow biased to the top-left, with a barely-there slate grid. This luminous teal top is the brand signature — never flatten it to a solid/near-flat dark. Layer order: bg gradient → aurora radial → grid.",
- "gradientDirection": "vertical base (top → bottom) + top-left radial aurora",
- "gradientTop": "#0C3B35",
- "gradientUpperMid": "#0A1F23",
- "gradientLowerMid": "#050E18",
- "gradientBottom": "#03070D",
- "aurora": { "type": "radial", "center": "cx 0.28, cy 0 (top, left-of-center)", "radius": 0.95, "stops": ["#1B6056 @0% opacity 0.6", "#0E433C @45% opacity 0.16", "transparent @100%"] },
- "grid": { "color": "#94A3B8", "opacity": 0.03, "cell": 48 },
- "lightAlt": "#ffffff"
+ "$comment": "Signature surface — LIGHT paper. A white (#ffffff) or paper (#f9faf5) canvas with (1) a subtle grain texture (SVG feTurbulence, multiply, ~0.05 opacity) and (2) an optional 'spectral wash': two-to-three soft radial gradients of the prism colors (cyan/yellow/red at 14-26% via color-mix) pooling along one edge or corner and dissolving to white. This luminous paper-plus-prism-wash is the brand signature. Dark covers are the exception (see inverse).",
+ "default": "#ffffff",
+ "paper": "#f9faf5",
+ "wash": {
+ "type": "2-3 radial gradients along one edge, dissolving to the surface color",
+ "cyan": "rgba(1, 215, 228, 0.20)",
+ "yellow": "rgba(243, 195, 6, 0.16)",
+ "red": "rgba(255, 118, 130, 0.17)",
+ "note": "positions vary per cover; a bottom-edge pool (like the site heroes) is the house default"
+ },
+ "grain": { "how": "feTurbulence fractalNoise baseFrequency 0.9, opacity ~0.05, blend multiply", "note": "atmosphere, not decoration — barely visible" },
+ "inverse": { "$comment": "Dark variant for the rare cover that needs it: brand ink surface, paper text, same prism accents.", "surface": "#151515", "surfaceAlt": "#0f0f0f", "text": "#f9faf5" }
},
- "accent": {
- "$comment": "Mint teal #5EEAD4 (Eclipse teal-300) is the cover accent: eyebrows, headline highlight, hero numbers, hairlines. #71e8df is an accepted near-equivalent (docs OG).",
- "teal": "#5EEAD4",
- "altCyan": "#71e8df",
- "glow": "rgba(45, 212, 191, 0.55)"
+ "accents": {
+ "$comment": "The three prism colors. Use ONE as the cover's accent (dot, highlight, hero element), chosen by product (see products) or topic; the other two may appear only inside the spectral wash or a deliberate three-stripe prism motif. Never introduce other hues.",
+ "cyan": { "400": "#01d7e4", "500": "#00bbcb", "600": "#009aaa", "700": "#007f8d", "300": "#7be7f0", "200": "#b3f4f9", "100": "#dcfdff", "50": "#eeffff", "950": "#00353c" },
+ "red": { "400": "#ff7682", "500": "#f34a60", "600": "#d02344", "300": "#ff9fa4", "200": "#ffc2c4", "100": "#ffdfdf", "50": "#ffeeee" },
+ "yellow": { "300": "#f3c306", "400": "#eaa700", "500": "#d48700", "200": "#f8da85", "100": "#fcedc2", "50": "#fff7e0" }
},
- "bars": {
- "$comment": "Horizontal/vertical data bars. Neutral/reference (the 100% ceiling) = slate gradient; hero/product = teal gradient with glow; track behind = #1F2937.",
- "track": "#1F2937",
- "neutral": ["#64748B", "#CBD5E1"],
- "hero": ["#14B8A6", "#5EEAD4"],
- "heroGlow": "#2DD4BF"
+ "text": {
+ "ink": "#151515",
+ "title": "#151515",
+ "body": "#3a3b3c",
+ "muted": "#646567",
+ "titleOnDark": "#f9faf5",
+ "bodyOnDark": "#a5a5a6"
},
"card": {
- "$comment": "Translucent panel (code block, log, terminal, comparison bars). A dark navy fill at ~0.74-0.8 opacity so the aurora shows faintly through; a hairline light border. Inner chips/boxes use #0B1220 @ ~0.7. Keep cards ≥48px off the canvas edge.",
- "fill": "#0A1622",
- "fillOpacity": 0.74,
- "border": "rgba(255,255,255,0.10)",
- "radius": 24,
- "innerFill": "#0B1220"
+ "$comment": "Cards sit ON the light surface: white fill, hairline ink border, soft shadow, generous radius. Inner wash surface for chips/rows uses the card-wash tint. Keep cards ≥48px off the canvas edge.",
+ "fill": "#ffffff",
+ "border": "rgba(0,0,0,0.06)",
+ "borderStrong": "rgba(0,0,0,0.12)",
+ "radius": 20,
+ "shadow": "0 10px 30px rgba(21,21,21,0.08)",
+ "wash": "#eef4f3",
+ "washComment": "≈ color-mix(prism-cyan-50 18%, neutral #f5f5f4) — the site's card-wash",
+ "codeInk": { "$comment": "Code/terminal cards may invert to ink for contrast on the light canvas — the ONE sanctioned dark element per cover.", "fill": "#151515", "text": "#f9faf5", "muted": "#a5a5a6", "radius": 20 }
},
- "text": {
- "title": "#f7fafc",
- "titleOnLight": "#111827",
- "body": "#9CA3AF",
- "muted": "#6b7280"
+ "kicker": {
+ "$comment": "The brand eyebrow = a small colored DOT + a sentence-case semibold label. NOT uppercase, NOT letter-spaced, NO dash — those are the retired style. Dot color = the cover's accent.",
+ "dotDiameter": 9,
+ "gap": 10,
+ "fontSize": 17,
+ "font": "Inter 600",
+ "labelColor": "rgba(21,21,21,0.70)"
+ },
+ "prismMotif": {
+ "$comment": "Optional brand device: 45° diagonal bands in cyan/red/yellow (the logo's anatomy), used as a corner glyph, an edge bleed, or a divider. One motif max; keep it geometric and crisp, never a blurred rainbow.",
+ "angle": 45,
+ "order": ["cyan #01d7e4", "red #f34a60", "yellow #f3c306"]
}
},
"fonts": {
- "$comment": "The Eclipse brand fonts (see prisma/web eclipse typography tokens). Headings/titles use Mona Sans VF (display); body uses Inter; data/code uses a mono. The skill bundles static instances in assets/fonts/ (Mona Sans 800, Inter 400, Geist Mono 500) so covers render on-brand without a prisma/web checkout. Do NOT use Barlow — that was the old docs OG face and reads off-brand. For an SVG that renders outside this repo, embed the faces with scripts/embed-fonts.py.",
+ "$comment": "The 2026 brand pairing: Sora (display, weight 500-600 — NOT 800), Inter (body 400, labels 600), Mona Sans Mono (code/data 500). All bundled as variable fonts in assets/fonts/. Mona Sans display and Geist Mono are RETIRED for covers; Barlow was never on-brand.",
"display": {
- "family": "Mona Sans",
- "role": "Titles, headings, product wordmark, big numbers",
- "weight": 800,
- "note": "Mona Sans VF; Eclipse titles run weight 800-900 with extended width (110-125). The bundled static instance is wght 800.",
- "file": "MonaSans.woff2"
+ "family": "Sora",
+ "role": "Titles, headlines, big numbers, the Prisma wordmark sign-off",
+ "weight": 500,
+ "weightEmphasis": 600,
+ "note": "Sora VF (bundled). Headlines are weight 500, sentence case, tight leading (~1.06-1.1). Weight 600 only for small emphasis (wordmark, stat callouts). Never 700+.",
+ "file": "Sora-VF.woff2",
+ "cssWeightRange": "100 800"
},
"body": {
"family": "Inter",
- "role": "Subtitles, descriptions, UI/category labels",
+ "role": "Subtitles, descriptions, kicker labels (600), UI text",
"weight": 400,
- "file": "Inter-Regular.woff2"
+ "file": "Inter-VF.woff2",
+ "cssWeightRange": "100 900"
},
"mono": {
- "family": "Geist Mono",
- "alt": "Mona Sans Mono / JetBrains Mono",
- "role": "Data values, code snippets, technical labels",
+ "family": "Mona Sans Mono",
+ "role": "Code snippets, data values, file paths, terminal text",
"weight": 500,
- "file": "GeistMono.woff2"
+ "file": "MonaSansMono-VF.woff2",
+ "cssWeightRange": "200 900"
}
},
"fontsDir": "assets/fonts",
"typeScale": {
- "$comment": "px values used by the canonical 1200x630 OG layout; scale proportionally for other formats.",
- "title": 80,
- "titleLong": 56,
+ "$comment": "px values for the canonical 1200x630 canvas; scale proportionally for other formats.",
+ "title": 68,
+ "titleLong": 54,
"titleLongThreshold": 30,
- "titleLineHeight": 1.2,
- "description": 32,
- "descriptionLineHeight": 1.5,
- "badge": 24,
- "wordmark": 22
+ "titleLineHeight": 1.08,
+ "description": 26,
+ "descriptionLineHeight": 1.45,
+ "kicker": 17,
+ "wordmark": 24
},
"layout": {
"padding": 72,
- "eyebrow": {
- "$comment": "Brand eyebrow = a short teal hairline dash + uppercase letter-spaced label. Mona Sans 800, ~16px, letter-spacing ~2.4, teal #5EEAD4. The dash is a ~30px rounded line preceding the text.",
- "dashLength": 30,
- "gap": 14,
- "fontSize": 16,
- "letterSpacing": 2.4,
- "uppercase": true
- },
+ "kicker": { "see": "cover.kicker" },
"wordmark": {
- "$comment": "Brand sign-off = the word 'Prisma' in Mona Sans 800, white, ~22px, in whichever bottom corner is clear of content (bottom-left when the diagram is right-side; bottom-right or top-right when content fills the bottom). NEVER the URL prisma.io/blog, and never an icon paired with extra text.",
+ "$comment": "Brand sign-off. PREFERRED: the small full-color lockup (assets/logos/prisma-lockup-color.svg) inlined at ~112px wide — the mark carries at grid-thumbnail scale where small grey type disappears. Fallback: the word 'Prisma' in Sora 600 ink ~24px. In whichever bottom corner is clear of content, inside the 72px crop-safe margin (lockup right edge ≤1128 on a 1200 canvas). Never the URL prisma.io/blog; never an icon paired with extra 'Prisma' text.",
+ "lockup": "logos/prisma-lockup-color.svg",
+ "lockupWidth": 112,
"text": "Prisma",
- "font": "Mona Sans 800",
- "fontSize": 22,
- "color": "#FFFFFF",
- "position": "a bottom corner clear of content"
+ "font": "Sora 600",
+ "fontSize": 24,
+ "color": "#151515",
+ "colorOnDark": "#f9faf5",
+ "position": "a bottom corner clear of content, ≥72px from edges"
+ },
+ "safeZone": {
+ "$comment": "Blog cards crop covers to ~16:9 via object-cover and render them ~400px wide beside the post title, on light AND dark surfaces. Critical elements stay ≥72px from every edge and survive a centered 16:9 crop; kicker ≥20px or omitted; headline ≤6 words, never the post title restated; cover washes run stronger than page washes (~0.18–0.28 per stop) so the piece holds on dark.",
+ "margin": 72
}
},
"products": {
- "$comment": "Per-product accent palettes from Eclipse. Postgres (ppg) and ORM have official token sets. Compute and Next are 2026 platform products without dedicated color tokens yet; they inherit the neutral/platform treatment (white label + teal accent). Update when official tokens ship.",
- "postgres": {
- "label": "Prisma Postgres",
- "badge": "PRISMA POSTGRES",
- "foreground": "#0d9488",
- "foregroundStrong": "#0f766e",
- "foregroundWeak": "#14b8a6",
- "background": "#f0fdfa",
- "backgroundStrong": "#ccfbf1",
- "backgroundReverse": "#14b8a6",
- "backgroundReverseStrong": "#0d9488",
- "stroke": "#0d9488",
- "reverseWeak": "#99f6e4",
- "coverAccent": "#71e8df",
- "icon": "logos/prisma-postgres-icon.svg"
- },
- "orm": {
- "label": "Prisma ORM",
- "badge": "PRISMA ORM",
- "foreground": "#4f46e5",
- "foregroundStrong": "#4338ca",
- "foregroundWeak": "#6366f1",
- "background": "#eef2ff",
- "backgroundStrong": "#e0e7ff",
- "backgroundReverse": "#6366f1",
- "backgroundReverseStrong": "#4f46e5",
- "stroke": "#4f46e5",
- "coverAccent": "#818cf8"
- },
- "compute": {
- "label": "Prisma Compute",
- "badge": "PRISMA COMPUTE",
- "$comment": "No official Eclipse color-token set yet; uses the brand chip icon and platform teal accent.",
- "coverAccent": "#71e8df",
- "icon": "logos/prisma-compute-icon.svg"
- },
- "next": {
- "label": "Prisma 8",
- "badge": "PRISMA 8",
- "$comment": "No official Eclipse color-token set yet; lockup sets Prisma 8 in white per the announcement treatment.",
- "coverAccent": "#71e8df",
- "lockup": "logos/prisma-8-logo.svg"
- }
+ "$comment": "Per-product accent from the redesigned site (PLATFORM_PRODUCT_ACCENTS). One accent per cover. The old teal-Postgres / indigo-ORM mapping is retired.",
+ "orm": { "label": "Prisma ORM", "kicker": "Prisma ORM", "accent": "#01d7e4", "accentName": "prism-cyan-400", "deep": "#007f8d", "tint": "#dcfdff" },
+ "postgres": { "label": "Prisma Postgres", "kicker": "Prisma Postgres", "accent": "#eaa700", "accentName": "prism-yellow-400", "deep": "#965100", "tint": "#fcedc2", "note": "the kicker dot may use #f3c306 (yellow-300) for pop on white, as the site does" },
+ "compute": { "label": "Prisma Compute", "kicker": "Prisma Compute", "accent": "#f34a60", "accentName": "prism-red-500", "deep": "#af0a33", "tint": "#ffdfdf" },
+ "prisma8": { "label": "Prisma 8", "kicker": "Prisma 8", "accent": "#01d7e4", "accentName": "prism-cyan-400", "deep": "#007f8d", "tint": "#dcfdff", "note": "Prisma 8 (the ORM's next major, release candidate) rides the ORM cyan" },
+ "platform": { "label": "Prisma", "kicker": "sentence-case topic label", "accent": "#01d7e4", "note": "topic posts with no single product owner default to cyan, or pick the accent that matches the post's subject" }
},
"neutral": {
- "foreground": "#111827",
- "foregroundWeak": "#6b7280",
- "foregroundWeaker": "#9ca3af",
+ "ink": "#151515",
+ "foreground": "#3a3b3c",
+ "foregroundWeak": "#646567",
+ "foregroundWeaker": "#a5a5a6",
"backgroundDefault": "#ffffff",
- "background": "#f3f4f6",
- "backgroundReverse": "#1f2937",
- "backgroundReverseStrong": "#111827",
- "stroke": "#e5e7eb",
- "strokeStrong": "#d1d5db"
+ "paper": "#f9faf5",
+ "backgroundNeutral": "#f5f5f4",
+ "stroke": "#e5e5e4",
+ "hairline": "rgba(0,0,0,0.06)",
+ "inkSurface": "#151515",
+ "inkSurfaceDeep": "#0f0f0f"
},
"formats": {
"$comment": "Dimensions verified against prisma/web. 'hero' is the in-post image (heroImagePath). 'social' is the OG/preview image (metaImagePath). Filenames follow the blog repo convention: hero.(svg|jpg) and meta.png under /imgs/.",
diff --git a/.claude/skills/content-create-hero-image/references/design-system.md b/.claude/skills/content-create-hero-image/references/design-system.md
index 2a764acea1..70287238c9 100644
--- a/.claude/skills/content-create-hero-image/references/design-system.md
+++ b/.claude/skills/content-create-hero-image/references/design-system.md
@@ -1,161 +1,134 @@
-# Prisma cover design system
+# Prisma cover design system — 2026 brand
-The visual language for Prisma blog and social covers, distilled from the Eclipse
-design system, the canonical OG generator, and `SOCIALS.fig`. Machine-readable
-values live in [`../assets/tokens.json`](../assets/tokens.json) — that file is the
-source of truth; this document explains intent.
+The visual language for Prisma blog and social covers under the 2026 rebrand: light paper
+surfaces, the three-color prism accent family, Sora display type. Machine-readable values live
+in [`../assets/tokens.json`](../assets/tokens.json) — that file is the source of truth; this
+document explains intent.
-## Sources
+> **The pre-2026 style is retired.** The dark teal "aurora" surface, Mona Sans 800 headlines,
+> uppercase dash eyebrows, and Geist Mono labels are the OLD look. The worked examples in
+> `assets/examples/` and `assets/hero1–4.svg` predate the rebrand — study them for *composition
+> and module structure only*, never for palette, type, or surface.
-| What | Where (in `prisma/web`) |
-| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| Color tokens (hex) | `packages/eclipse/src/styles/globals.css` |
-| Type tokens (font + scale) | `apps/eclipse/content/design-system/tokens/typography.mdx` |
-| Layout composition recipe | `apps/docs/src/app/og/[...slug]/route.tsx` (layout only — it uses Barlow, which is **off-brand**; covers use Mona Sans) |
-| Brand fonts | `packages/eclipse/src/static/fonts/` (Mona Sans VF, Mona Sans Mono VF); bundled static instances in [`../assets/fonts/`](../assets/fonts/) |
-| Logos / marks | Official press kit [`prisma/presskit`](https://github.com/prisma/presskit); product icons in [`../assets/logos/`](../assets/logos/) (`README.md`) |
-| Blog cover conventions | `apps/blog/content/blog//index.mdx` + `apps/blog/public//imgs/` |
-| Hand-designed cover library | `SOCIALS.fig` (see [`figma-source.md`](./figma-source.md)) |
+## Sources
-The skill bundles its brand fonts in `assets/fonts/`, so it renders on-brand without extra setup.
-This skill lives in the `prisma/web` repo, so the live Eclipse tokens in `packages/eclipse/` are
-available to reconcile against.
+The durable sources are the **eclipse package** and the **marketing site app**. The marketing
+site currently lives at `apps/site-redesign` (a temporary app name — it replaces `apps/site` at
+cutover); if that path is gone, look for the same files under `apps/site`. `tokens.json` bundles
+every needed value, so a missing path never blocks a cover.
+
+| What | Where (in `prisma/web`) |
+| -------------------------- | --------------------------------------------------------------------------------------------------------------- |
+| Eclipse (docs/blog) tokens | `packages/eclipse/src/styles/globals.css` (ink/paper neutrals, Sora/Inter wiring) — durable |
+| Brand fonts | `packages/eclipse/src/static/fonts/` — durable; bundled copies in [`../assets/fonts/`](../assets/fonts/) |
+| Brand color tokens | the marketing site's `src/app/globals.css` `@theme` block (prism-cyan/red/yellow ramps, paper, card-wash) |
+| Product accent map | the marketing site's `src/components/product/icons.ts` (`PLATFORM_PRODUCT_ACCENTS`) |
+| Logos / marks | `apps/blog/public/logo/` (full-color lockup) and the prism mark; bundled in [`../assets/logos/`](../assets/logos/) |
+| Live brand reference | the marketing site's heroes and cards (`src/components/sections/`, `/brand` route) |
+| Blog cover conventions | `apps/blog/content/blog//index.mdx` + `apps/blog/public//imgs/` |
## The look in one paragraph
-A premium **teal-green "aurora" surface** — a luminous teal glow at the top (strongest top-left)
-fading through dark navy to near-black at the bottom — with a single mint-teal accent (`#5EEAD4`).
-A **dash-prefixed eyebrow** (a short teal hairline + uppercase label) names the topic; a bold,
-**large** Mona Sans headline with its key phrase in teal carries the message; and one **content
-module** does the showing — a row of icon tiles, a comparison card of bars, a log/data panel, a
-terminal, or a code card. The word **`Prisma`** signs off in a clear bottom corner. Nothing else:
-no stock illustration, no random gradient, no decorative noise. Restraint is the brand, and the
-diagram is minimal — favour a few clean boxes and one hero glyph over arrows, chips, and pills.
-(See the worked examples in `assets/examples/`, which mirror the brand reference frames.)
+A **light paper canvas** — white or `#f9faf5` — with barely-there grain and, usually, a soft
+**spectral wash**: two or three radial pools of the prism colors (cyan, yellow, red at ~15–25%)
+dissolving into the surface along one edge, exactly like the site's hero panels. **One prism
+accent** (chosen by product) carries the cover: a small **kicker dot** beside a sentence-case
+label names the topic, a **Sora 500** headline in ink carries the message, and one **content
+module** — a white hairline-bordered card, an ink code card, a flow of rounded tiles — does the
+showing. The **`Prisma`** wordmark (Sora 600 ink) or the small full-color lockup signs off in a
+clear bottom corner. Nothing else: no dark aurora, no uppercase eyebrows, no glows, no stock
+decoration. Restraint is still the brand; the surface just turned to daylight.
## Color
-- **Cover surface (default, dark):** a **vertical** gradient — teal-green `#163535` (top) → `#0A1018` → near-black `#03060E` (bottom). The lighter top carries the eyebrow + headline; the bottom anchors the content module. This visible top-to-bottom shift is part of the look — do not flatten it.
-- **Accent (signature):** mint teal **`#5EEAD4`** (Eclipse teal-300) for eyebrows, headline highlight, hero numbers, hairlines (`#71e8df` is an accepted near-equivalent). Use exactly one accent per cover.
-- **Title text:** `#f7fafc`/white on dark, `#111827` on light.
-- **Body / subtitle / muted:** `#9CA3AF` (`#a0aec0` ok).
-- **Background texture:** a faint slate grid (`#94A3B8` @ ~4.5%, 48px cells) plus a soft teal radial glow (`rgba(45,212,191,0.16)`), positioned to complement the composition. Both barely-there — atmosphere, not decoration.
-- **Bar / data fills:** neutral/reference bars = slate gradient `#64748B → #CBD5E1`; the hero/product bar = teal gradient `#14B8A6 → #5EEAD4` with a `#2DD4BF` glow. Track behind bars = `#1F2937`.
-- **Card surface:** `#111827` at ~92% opacity, `1.5px` border `#FFFFFF` @ 8%, radius ~22.
-- **Product palettes** (semantic, from Eclipse): Postgres = teal (`#0d9488` / cover accent `#5EEAD4`), ORM = indigo (`#4f46e5`). Compute and Next inherit the platform teal. See `tokens.json → products`.
-
-Light covers are allowed for editorial/educational pieces: white background, `#111827`
-title, product-colored accent. Dark is the default and the launch/announcement standard.
+- **Cover surface (default, light):** `#ffffff` or paper `#f9faf5`. Add the **grain** (SVG
+ `feTurbulence`, multiply, ~5% opacity) and usually a **spectral wash** — 2–3 soft radial
+ gradients (`cyan rgba(1,215,228,.20)`, `yellow rgba(243,195,6,.16)`, `red rgba(255,118,130,.17)`)
+ pooling along the bottom or a corner and fading to the surface. The wash is atmosphere; type and
+ modules must sit on calm areas.
+- **Accent (one per cover, by product):** ORM / Prisma 8 → **cyan `#01d7e4`**; Postgres →
+ **yellow `#eaa700`** (dot may use `#f3c306`); Compute → **red `#f34a60`**. Deep variants for
+ small text on white: cyan `#007f8d`, yellow `#965100`, red `#af0a33`. The other two prisms may
+ appear only inside the wash or a deliberate prism-stripe motif.
+- **Text:** ink `#151515` for titles, `#3a3b3c` body, `#646567` muted. On the rare dark cover:
+ paper `#f9faf5` titles, `#a5a5a6` muted.
+- **Cards:** white fill, hairline border `rgba(0,0,0,0.06)` (strong: `0.12`), radius ~20, soft
+ shadow `0 10px 30px rgba(21,21,21,0.08)`. Inner chip/row surface: card-wash `#eef4f3`.
+- **Code/terminal cards invert to ink** (`#151515` fill, paper text) — the one sanctioned dark
+ element on a light cover, and it reads as the site's code blocks do.
+- **Prism motif (optional):** 45° diagonal bands cyan → red → yellow (the logo's anatomy) as a
+ corner glyph, edge bleed, or divider. Crisp and geometric — never a blurred rainbow.
+- **Dark covers are the exception**, for genuinely nocturnal subjects: ink `#151515`/`#0f0f0f`
+ surface, paper text, same accents. Say why when you choose it.
## Typography
-| Role | Family | Weight | Notes |
-| ------------------ | ------------------------------------ | ------ | ------------------------------------------------------------- |
-| Title / headline | **Mona Sans** | 800 | Eclipse titles run 800–900, extended width; line-height ~1.1 |
-| Eyebrow (kicker) | **Geist Mono** | 600 | UPPERCASE, letter-spacing ~2.7, accent teal, leading `—` rule |
-| Subtitle / body | **Inter** | 400 | line-height 1.5 |
-| Data values / code | **Geist Mono** (alt: Mona Sans Mono) | 500 | benchmark numbers, req/s, snippets, API paths |
-| Big numbers | **Mona Sans** | 800 | hero stats and percentages |
+| Role | Family | Weight | Notes |
+| ------------------ | ------------------ | ------ | ---------------------------------------------------------------- |
+| Title / headline | **Sora** | 500 | sentence case, line-height ~1.08, tracking ~-0.5 to -1; never 700+ |
+| Kicker label | **Inter** | 600 | sentence case beside the accent dot; `rgba(21,21,21,.7)` |
+| Subtitle / body | **Inter** | 400 | line-height ~1.45 |
+| Data values / code | **Mona Sans Mono** | 500 | snippets, paths, numbers inside modules |
+| Big numbers | **Sora** | 600 | hero stats; 600 is the ceiling |
+| Wordmark sign-off | **Sora** | 600 | the word `Prisma`, ~24px ink |
-Never substitute a different display face. **Mona Sans + Inter** is the pairing — **not Barlow**.
-Barlow is the legacy docs-OG face and reads off-brand; do not use it on covers.
+**Sora + Inter is the pairing.** Mona Sans display (the old 800 headlines), Geist Mono, and
+Barlow are all off-brand on covers now. Headlines are **sentence case** — never all-caps, never
+letter-spaced.
-### Fonts & rendering (important)
+### Fonts & rendering (unchanged mechanics)
-The brand faces are **Mona Sans** (headings/display, weight 800), **Inter** (body, 400), and
-**Geist Mono** (data/code, 500). The skill bundles static instances in
-[`../assets/fonts/`](../assets/fonts/) (Mona Sans is a variable font; the bundled instance is the
-weight-800 display cut). Use those families/weights — an arbitrary weight or a different family
-makes renderers fall back to a generic sans, the #1 cause of an off-brand cover.
+The bundled faces are variable fonts: `Sora-VF.woff2`, `Inter-VF.woff2`,
+`MonaSansMono-VF.woff2`. A cover that only *names* the families renders with fallbacks wherever
+they aren't installed, and librsvg ignores `@font-face` entirely. So the pipeline is still:
-**One source of truth: embed the fonts, then render.** A cover that only _names_ the families
-renders with fallback fonts wherever they are not installed. Two renderers disagree about
-fonts, which is the #1 cause of "the PNG and SVG look different":
+1. **`scripts/embed-fonts.py `** — subsets and inlines the three faces as base64
+ `@font-face` (self-contained SVG).
+2. **`scripts/export-png.sh`** — renders the PNG with headless Chrome, which honors the embedded
+ faces, making the PNG pixel-identical to the SVG in a browser.
-- A **browser/Figma** renders the SVG's embedded `@font-face` (correct brand fonts).
-- **librsvg/`rsvg-convert`** _ignores_ `@font-face`, and since fontconfig does not index the
- bundled `.woff2`, it falls back to a generic sans (e.g. Verdana) — wrong.
-
-So the pipeline is: **(1) `scripts/embed-fonts.py `** inlines the faces as base64
-`@font-face` (self-contained SVG), then **(2) `scripts/export-png.sh`** renders the PNG with
-**headless Chrome/Chromium**, which honors the embedded faces — making the PNG pixel-identical
-to the SVG-in-browser. Always embed before exporting or sharing. (rsvg/magick remain only as
-fallbacks and warn that fonts may not match.)
+Always embed before exporting or sharing.
## Layout (canonical 1200×630)
-- Uniform **72px** padding on all edges; nothing touches the canvas edge.
-- **Headline block:** top-left; eyebrow, then title (1–3 hand-wrapped lines), optional one-line
- subtitle (~20px gap). Large type — title ~62–72px.
-- **`Prisma` wordmark:** the brand sign-off — the word `Prisma` in Mona Sans 800, white, ~22px,
- in whichever **bottom corner is clear of content** (bottom-left when the module is right-side;
- bottom/top-right when content fills the bottom). Never the URL `prisma.io/blog`; never an icon
- paired with extra text.
-- Strong left alignment and generous negative space on the right. Do not center everything.
-
-### Spacing & breathing room (coherence)
+- Uniform **72px** padding; nothing touches the canvas edge.
+- **Kicker** top-left: accent dot (9px) + sentence-case Inter 600 label (~17px). No dash, no caps.
+- **Headline** below: Sora 500, ~56–68px, 1–3 hand-wrapped lines, ink. Emphasis inside a headline
+ is the accent color (deep variant if the phrase is small), not a weight change.
+- Optional **one-line subtitle**: Inter 400 ~26px, `#646567`.
+- **Content module** lower/right; **wordmark** in a clear bottom corner.
+- Left-anchored, generous negative space. Center only a single graphic-led composition.
-Cramped elements read as "off". Hold these minimums and keep them consistent across a set:
+### Spacing minimums (unchanged)
-- **≥ 48px** between any card/diagram and the canvas edge.
-- **≥ 40px** between sibling tiles/boxes in a row (equal gaps; symmetric about their center).
-- **≥ 24px** padding inside a card before its content; **≥ 28px** between stacked rows of content.
-- Eyebrow → headline → subtitle → module each get clear air; never let two text blocks crowd.
-- Verify spacing on the **rendered PNG**, by measurement, not by eye (see `design-review.md`).
+- ≥ 48px between any card and the canvas edge; ≥ 40px between sibling tiles; ≥ 24px padding
+ inside cards; ≥ 28px between stacked rows. Verify on the rendered PNG, by measurement.
### Shared anatomy (every cover)
-The house style is one frame with a few fixed parts and a swappable **content module**:
-
-1. **Eyebrow** top-left — a short teal **hairline dash** (~30px) + uppercase label in **Mona Sans
- 800** ~16px, letter-spacing ~2.4, accent teal (`— LABEL`). Names the topic (e.g.
- `REQUEST-TIME IMAGE PIPELINE`, `THROUGHPUT VS RAW PG`).
-2. **Headline** below it — **Mona Sans 800**, **~62–72px** (go large), tight tracking (about -1.8),
- 1–3 lines, white with the **key phrase in accent teal** (e.g. "Image transforms / **as app
- logic**").
-3. **Content module** in the lower/right area — the visual that carries the idea (see catalog).
- Keep it **minimal**: a few clean tiles/rows and one hero element beat a busy diagram.
-4. **`Prisma` wordmark** — Mona Sans 800, white, ~22px, in a clear bottom corner. Always present.
-5. **Base** — the teal-green **aurora** surface (bright teal top, strongest top-left → near-black
- bottom) + a barely-there slate grid. Always. Never a flat/near-solid dark fill.
-
-Left-anchored, generous space, one accent, no decoration beyond the base aurora.
+1. **Surface** — white/paper + grain, usually a spectral wash on one edge. Never the old dark
+ aurora; never a flat grey.
+2. **Kicker** — accent dot + sentence-case label naming product or topic.
+3. **Headline** — Sora 500 ink; short and declarative. (No-copy covers stay first-class: the
+ module + wordmark carry it, kicker optional.)
+4. **One content module** — the visual that carries the idea (catalog below).
+5. **Sign-off** — `Prisma` in Sora 600 ink, or the small full-color lockup, in a clear corner.
### Content modules (pick one per cover)
-Each example folder in [`../assets/examples/`](../assets/examples/) is a worked instance:
-
-| Module | When | Looks like | Example |
-| -------------------- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- |
-| **Pipeline / flow** | a sequence or transform (A → B → C) | a row of rounded **square tiles**, equal size and equal gaps, a mono label under each; the key tile gets a teal-glow border and holds the hero logo/glyph (e.g. the Bun mark). Keep it minimal — the tiles + labels read as a flow; skip arrows, param chips, and pills | `image-transformations-with-bun-on-prisma-compute` |
-| **Comparison card** | "X vs Y", "% of", benchmarks | rounded `#111827`@92% card of **horizontal bars** — each row = prism icon + label, big right-aligned number + unit; reference row fills 100% (slate), hero row fills its true ratio (teal + glow). Bar width _is_ the comparison | `prisma-next-benchmark` |
-| **Data / log panel** | streams, logs, events, real-time | a dark panel of monospace **rows** (timestamp + label + mini-bar), optionally a small flow beneath (`source → client`) | `building-open-chat` |
-| **Terminal card** | CLI, scaffolding, getting-started | a terminal-style card with a `$ command` and a short ✓ checklist | `create-prisma-deploy-prisma-compute` |
-| **Code card** | config, schema, API shape | a code-editor card (filename tab + syntax-tinted lines), optional target nodes beneath | `prisma-compute-config-file` |
-
-Tiles/cards: rounded ~22–24px, **translucent** fill `#0A1622` @ ~0.74 (so the aurora shows
-faintly through), hairline border `#FFFFFF` @ ~10%; inner chips/boxes `#0B1220` @ ~0.7; the hero
-element uses a teal border + `#2DD4BF` glow. Labels and code/data are **Geist Mono**; headings and
-big numbers are **Mona Sans**; prose is **Inter**.
-
-**No-copy covers (common).** Most Prisma blog images carry **no headline at all** — the content
-module plus the `Prisma` wordmark do the work. Default to no-copy unless the post has a short,
-punchy thesis worth setting as a headline. A no-copy cover centres/enlarges the module and keeps
-the eyebrow optional.
-
-**Isometric skew (optional hero treatment).** For card/table/grid modules, a subtle isometric
-skew (e.g. `transform="matrix(1,0.18,-0.18,1,…)"` or a ~15–25° rotate + scale) gives the hero a
-premium 3-D plane. Use it for **cards and tables**; keep **flow/loop/pipeline and "→ bill"
-diagrams flat** (skew muddies a left-to-right read). One skewed plane per cover, never the whole
-canvas.
+The module *structures* survive the rebrand; their *skin* is new. Reskin rules:
-**Multiple directions.** When asked for N directions (1–4), produce N independent
-`cover-.svg`/`.png` pairs exploring distinct modules or framings (e.g. literal diagram vs
-typographic thesis vs comparison), each fully on-brand, and present them together for selection.
+| Module | When | New-brand skin |
+| -------------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| **Pipeline / flow** | a sequence or transform (A → B → C) | white rounded tiles with hairline borders on the light surface; equal gaps; the hero tile gets the accent border + accent tint fill; mono labels below |
+| **Comparison card** | "X vs Y", "% of", benchmarks | one white card; bars in card-wash track; reference bar `#e5e5e4`→`#a5a5a6`; hero bar in the accent; ink numbers right-aligned |
+| **Data / log panel** | streams, logs, events, real-time | white card of mono rows (`#3a3b3c`), accent-tinted highlight row; or an ink code-card variant |
+| **Terminal card** | CLI, scaffolding, getting-started | **ink card** (`#151515`, paper text) with a `$ command` and short ✓ checklist (✓ in the accent) |
+| **Code card** | config, schema, API shape | ink card with a filename tab; syntax tints drawn from the prism ramps (cyan for keywords, yellow strings, red flags) — subtle, 2–3 tints max |
+| **Prism stripe** | brand/launch moments | the 45° three-band motif as the graphic itself, with the lockup or a single stat |
-**Graphic-led variant.** When a single chart/diagram is the whole message, you can drop the
-headline and **center the module**, with the standalone product logo (e.g. `prisma-8-logo.svg`)
-centered on top as the only brand mark.
+**Isometric skew** stays available for card/table modules (one skewed plane max; flows stay
+flat). **Multiple directions** (1–4) and **graphic-led no-copy variants** work as before.
## Formats
@@ -166,4 +139,4 @@ centered on top as the only brand mark.
| YouTube thumbnail | 1280×720 | video | `youtube-thumbnail.png` |
| Generic blog cover | 1200×630 | alias of social | `blog-cover.svg/.png` |
-Scale font sizes proportionally when the frame changes (e.g. ×0.70 for the 844-wide hero).
+Scale font sizes proportionally when the frame changes (×0.70 for the 844-wide hero).
diff --git a/.claude/skills/content-create-hero-image/scripts/embed-fonts.py b/.claude/skills/content-create-hero-image/scripts/embed-fonts.py
index 3a068eca25..7b845911c1 100644
--- a/.claude/skills/content-create-hero-image/scripts/embed-fonts.py
+++ b/.claude/skills/content-create-hero-image/scripts/embed-fonts.py
@@ -3,7 +3,7 @@
A cover SVG that only references the brand families by name renders with fallback
fonts wherever they are not installed (browsers, Figma, GitHub preview). This subsets
-Mona Sans (800), Inter (400) and Geist Mono (500) to just the glyphs the SVG uses,
+Sora, Inter and Mona Sans Mono (variable fonts) to just the glyphs the SVG uses,
then injects them as base64 @font-face rules. If fonttools/brotli are unavailable,
it embeds the bundled WOFF2 files whole. The fallback is larger but keeps the SVG
self-contained without a Python dependency install. The PNG export does not need
@@ -24,10 +24,14 @@
import sys
from pathlib import Path
+# 2026 brand faces. All three are variable fonts, so the @font-face rule carries
+# a weight RANGE and one embed serves every weight the SVG uses (Sora 500/600,
+# Inter 400/600, Mona Sans Mono 500). The old static faces (Mona Sans 800,
+# Geist Mono) are retired but their files remain for re-rendering legacy covers.
FACES = [
- ("Mona Sans", 800, "MonaSans.woff2"),
- ("Inter", 400, "Inter-Regular.woff2"),
- ("Geist Mono", 500, "GeistMono.woff2"),
+ ("Sora", "100 800", "Sora-VF.woff2"),
+ ("Inter", "100 900", "Inter-VF.woff2"),
+ ("Mona Sans Mono", "200 900", "MonaSansMono-VF.woff2"),
]
diff --git a/apps/blog/content/blog/agentic-engineering-at-prisma/index.mdx b/apps/blog/content/blog/agentic-engineering-at-prisma/index.mdx
index ae9ca0e2be..59810fbe2a 100644
--- a/apps/blog/content/blog/agentic-engineering-at-prisma/index.mdx
+++ b/apps/blog/content/blog/agentic-engineering-at-prisma/index.mdx
@@ -6,7 +6,8 @@ authors:
- "Tyler Hogarth"
metaTitle: "Agentic Engineering at Prisma"
metaDescription: "Part of Prisma's agentic software development series on how it ships software with AI agents, covering the process, roles, and documentation layer that make cross-repo agent work possible."
-heroImagePath: "/agentic-engineering-at-prisma/imgs/hero.png"
+heroImagePath: "/agentic-engineering-at-prisma/imgs/hero.svg"
+heroImageAlt: "The five Drive lifecycle stages as a rail, Plan, Execute, Review, Ship, and Delivery review, with the agent-owned Execute stage highlighted"
metaImagePath: "/agentic-engineering-at-prisma/imgs/meta.png"
tags: ["ai"]
series: agentic-engineering
diff --git a/apps/blog/content/blog/agents-md-for-databases/index.mdx b/apps/blog/content/blog/agents-md-for-databases/index.mdx
index 920acc65ae..333d233424 100644
--- a/apps/blog/content/blog/agents-md-for-databases/index.mdx
+++ b/apps/blog/content/blog/agents-md-for-databases/index.mdx
@@ -7,7 +7,7 @@ authors:
metaTitle: "AGENTS.md for Databases: Rules for Safe, Fast Coding Agents"
metaDescription: "A copy-pasteable AGENTS.md section for database work: ephemeral Postgres via npx create-db, safe migrations, and JSON output for Claude Code, Cursor, and Codex."
heroImagePath: "/agents-md-for-databases/imgs/hero.svg"
-heroImageAlt: "An AGENTS.md file open in an editor, with database rules highlighted"
+heroImageAlt: "An ink code card with an AGENTS.md filename tab holding the five database rules, with the npx create-db@latest --json line marked in yellow"
metaImagePath: "/agents-md-for-databases/imgs/meta.png"
tags:
- "ai"
diff --git a/apps/blog/content/blog/announcing-query-insights-for-prisma-postgres/index.mdx b/apps/blog/content/blog/announcing-query-insights-for-prisma-postgres/index.mdx
index 6bd0e3bab6..0395618c60 100644
--- a/apps/blog/content/blog/announcing-query-insights-for-prisma-postgres/index.mdx
+++ b/apps/blog/content/blog/announcing-query-insights-for-prisma-postgres/index.mdx
@@ -7,8 +7,9 @@ authors:
- "Aidan McAlister"
metaTitle: "Announcing Query Insights For Prisma Postgres"
metaDescription: "Query Insights gives you built-in visibility into how your database queries behave in production. It is included in Prisma Postgres and works out of the box without any setup."
-metaImagePath: "/announcing-query-insights-for-prisma-postgres/announcing-query-insights-for-prisma-postgres-og.png"
-heroImagePath: "/announcing-query-insights-for-prisma-postgres/announcing-query-insights-for-prisma-postgres-og.png"
+metaImagePath: "/announcing-query-insights-for-prisma-postgres/imgs/meta.png"
+heroImagePath: "/announcing-query-insights-for-prisma-postgres/imgs/hero.svg"
+heroImageAlt: "The Queries tab of a Prisma Postgres database: average latency, queries per second, a latency chart, and grouped query shapes with the slowest one highlighted"
---
Query Insights gives you built-in visibility into how your database queries behave in production. It is included in Prisma Postgres and works out of the box without any setup.
diff --git a/apps/blog/content/blog/app-hosting-compute-platforms-for-ai-agents-2026/index.mdx b/apps/blog/content/blog/app-hosting-compute-platforms-for-ai-agents-2026/index.mdx
index a771e73b15..55bf3c2cb0 100644
--- a/apps/blog/content/blog/app-hosting-compute-platforms-for-ai-agents-2026/index.mdx
+++ b/apps/blog/content/blog/app-hosting-compute-platforms-for-ai-agents-2026/index.mdx
@@ -7,7 +7,7 @@ authors:
metaTitle: "App Hosting and Compute Platforms for AI Agents in 2026"
metaDescription: "A field guide to the 2026 wave of app-hosting and compute platforms (Prisma Compute, Neon, Cloudflare Containers, Hosting.com, Unkey, and Insforge) and how close each gets to one coherent stack for agents."
heroImagePath: "/app-hosting-compute-platforms-for-ai-agents-2026/imgs/hero.svg"
-heroImageAlt: "Field guide, 2026: app hosting and compute for AI agents. Prisma Compute, Hosting.com, Cloudflare Containers, Unkey Deploy, Neon Compute, and Insforge."
+heroImageAlt: "An evaluation matrix of six platforms, Prisma Compute, Neon Compute, Cloudflare Containers, Hosting.com, Unkey Deploy and Insforge, scored on when they shipped, whether a database is included, and whether the stack is integrated"
metaImagePath: "/app-hosting-compute-platforms-for-ai-agents-2026/imgs/meta.png"
tags:
- "platform"
diff --git a/apps/blog/content/blog/building-open-chat/index.mdx b/apps/blog/content/blog/building-open-chat/index.mdx
index 9c9c1aa95d..c0a958c78e 100644
--- a/apps/blog/content/blog/building-open-chat/index.mdx
+++ b/apps/blog/content/blog/building-open-chat/index.mdx
@@ -8,7 +8,7 @@ metaTitle: "How I Built a Chat App That Never Drops a Token"
metaDescription: "A personal walkthrough of building Open Chat (oss.chat): durable, resumable AI chat on Durable Streams, Prisma Streams, TanStack DB, and Prisma Compute. How each piece works and what it enables."
excerpt: "How I built Open Chat: durable, resumable AI chat where the answer is safe the instant it exists. It runs on Durable Streams, Prisma Streams, TanStack DB, and Prisma Compute."
heroImagePath: "/building-open-chat/imgs/hero.svg"
-heroImageAlt: "Open Chat: a durable log of message.created and message.delta events, with an SSE tail that resumes from offset 412. Chat that never drops a token, durable-log-backed streaming."
+heroImageAlt: "An append-only event log for one chat: message.created, message.delta and message.completed rows on a durable stream, with the live delta highlighted"
metaImagePath: "/building-open-chat/imgs/meta.png"
tags:
- "platform"
diff --git a/apps/blog/content/blog/bun-rust-rewrite-prisma-compute/index.mdx b/apps/blog/content/blog/bun-rust-rewrite-prisma-compute/index.mdx
index 9676a95cee..c849525b73 100644
--- a/apps/blog/content/blog/bun-rust-rewrite-prisma-compute/index.mdx
+++ b/apps/blog/content/blog/bun-rust-rewrite-prisma-compute/index.mdx
@@ -6,8 +6,8 @@ authors:
- "Alexey Orlenko"
metaTitle: "We put Bun's Rust rewrite in production on Prisma Compute"
metaDescription: "Why Prisma Compute's public beta runs on Bun's Rust rewrite canary: the memory and connection-pool failures we hit on stable Bun, and what changed."
-heroImagePath: "/bun-rust-rewrite-prisma-compute/imgs/hero.png"
-heroImageAlt: "Bun, Rust, and Prisma Compute"
+heroImagePath: "/bun-rust-rewrite-prisma-compute/imgs/hero.svg"
+heroImageAlt: "Peak resident memory in the Bun.S3File.arrayBuffer() loop inside a 1 GiB container: stable 1.3.14 runs past 900 MiB and is OOM-killed at iteration 96, while the Rust rewrite canary stays flat at 118 MiB to 4096 iterations"
metaImagePath: "/bun-rust-rewrite-prisma-compute/imgs/meta.png"
tags:
- "platform"
diff --git a/apps/blog/content/blog/claude-generated-50-websites-overnight-prisma-compute/index.mdx b/apps/blog/content/blog/claude-generated-50-websites-overnight-prisma-compute/index.mdx
index 8102ea7c2f..46206c4c9b 100644
--- a/apps/blog/content/blog/claude-generated-50-websites-overnight-prisma-compute/index.mdx
+++ b/apps/blog/content/blog/claude-generated-50-websites-overnight-prisma-compute/index.mdx
@@ -7,7 +7,7 @@ authors:
metaTitle: "Claude Generated 50 Websites Overnight with Prisma Compute"
metaDescription: "Ali Fatemi gave Claude the Prisma docs and CLI, then used Prisma Compute to turn AI-generated websites into working URLs."
heroImagePath: "/claude-generated-50-websites-overnight-prisma-compute/imgs/hero.svg"
-heroImageAlt: "A dark pipeline showing claude, Prisma Compute, and live URLs under the headline 50 websites overnight."
+heroImageAlt: "Fifty small deployment tiles in a dense grid with one picked out in red, standing for the roughly 50 sites an agent generated overnight and deployed inside one Prisma app"
metaImagePath: "/claude-generated-50-websites-overnight-prisma-compute/imgs/meta.png"
excerpt: "Ali Fatemi gave Claude the Prisma docs and CLI, then used Prisma Compute to turn generated websites into working URLs."
tags:
diff --git a/apps/blog/content/blog/create-prisma-deploy-prisma-compute/index.mdx b/apps/blog/content/blog/create-prisma-deploy-prisma-compute/index.mdx
index 84e7b9ae0c..5d30ba5bec 100644
--- a/apps/blog/content/blog/create-prisma-deploy-prisma-compute/index.mdx
+++ b/apps/blog/content/blog/create-prisma-deploy-prisma-compute/index.mdx
@@ -7,7 +7,7 @@ authors:
metaTitle: "Deploy Prisma Apps with create-prisma"
metaDescription: "create-prisma now scaffolds Compute-ready Prisma apps with prisma.compute.ts, compute:deploy, Prisma Postgres, and Prisma Skills add-ons."
heroImagePath: "/create-prisma-deploy-prisma-compute/imgs/hero.svg"
-heroImageAlt: "Scaffold a deploy-ready app with create-prisma: bun create prisma@latest, then choose a template, generate a typed config, and add Postgres and Skills."
+heroImageAlt: "An ink terminal card running bun create prisma@latest, with a checklist of what the scaffold writes: prisma.compute.ts, Prisma Postgres, Prisma Skills, and a compute:deploy script"
metaImagePath: "/create-prisma-deploy-prisma-compute/imgs/meta.png"
excerpt: "create-prisma now scaffolds Compute-ready Prisma apps with prisma.compute.ts, compute:deploy, Prisma Postgres, and Prisma Skills add-ons."
series: prisma-compute
diff --git a/apps/blog/content/blog/data-migrations-in-prisma-next/index.mdx b/apps/blog/content/blog/data-migrations-in-prisma-next/index.mdx
index fe4327f865..f437e0130b 100644
--- a/apps/blog/content/blog/data-migrations-in-prisma-next/index.mdx
+++ b/apps/blog/content/blog/data-migrations-in-prisma-next/index.mdx
@@ -8,7 +8,7 @@ authors:
metaTitle: "Data migrations in Prisma 8"
metaDescription: "Write data migrations in TypeScript with Prisma 8. Backfill columns and transform data alongside schema changes using a type-safe query builder."
heroImagePath: "/data-migrations-in-prisma-next/imgs/hero.svg"
-heroImageAlt: "Data migrations in Prisma 8"
+heroImageAlt: "A migration flow: addColumn leaves displayName nullable, a highlighted dataTransform step backfills it to Anonymous, then setNotNull makes the column required"
metaImagePath: "/data-migrations-in-prisma-next/imgs/meta.png"
tags:
- "orm"
diff --git a/apps/blog/content/blog/drive-and-the-maker/index.mdx b/apps/blog/content/blog/drive-and-the-maker/index.mdx
index c64da60e81..252a284e8f 100644
--- a/apps/blog/content/blog/drive-and-the-maker/index.mdx
+++ b/apps/blog/content/blog/drive-and-the-maker/index.mdx
@@ -6,7 +6,8 @@ authors:
- "Tyler Hogarth"
metaTitle: "Drive and the Maker"
metaDescription: "Part of Prisma's agentic software development series on how it ships software with AI agents, going deep on Drive, the development process, and the Maker role."
-heroImagePath: "/drive-and-the-maker/imgs/hero.png"
+heroImagePath: "/drive-and-the-maker/imgs/hero.svg"
+heroImageAlt: "A line pulled from the essay set in large type on paper with a soft prism wash: when routine implementation is cheap, coordination and ritual become the expensive things."
metaImagePath: "/drive-and-the-maker/imgs/meta.png"
tags: ["ai"]
series: agentic-engineering
diff --git a/apps/blog/content/blog/evaluating-object-storage-providers-for-prisma-compute/index.mdx b/apps/blog/content/blog/evaluating-object-storage-providers-for-prisma-compute/index.mdx
index 731e0d598d..c6c3df1919 100644
--- a/apps/blog/content/blog/evaluating-object-storage-providers-for-prisma-compute/index.mdx
+++ b/apps/blog/content/blog/evaluating-object-storage-providers-for-prisma-compute/index.mdx
@@ -7,7 +7,7 @@ authors:
metaTitle: "Evaluating Object Storage Providers for Prisma Compute"
metaDescription: "We benchmarked Tigris and Cloudflare R2 from six Prisma Compute regions using a latency-sensitive virtual filesystem workload, with AWS S3 and S3 Express as a baseline."
heroImagePath: "/evaluating-object-storage-providers-for-prisma-compute/imgs/hero.svg"
-heroImageAlt: "Tigris finished about 3x faster than Cloudflare R2 on the mixed read/write phase across six Prisma Compute regions"
+heroImageAlt: "An evaluation matrix of three object stores on the criteria that separated them: egress price, bucket model, and read median for 10 KiB reads from Frankfurt, with Tigris the highlighted row"
metaImagePath: "/evaluating-object-storage-providers-for-prisma-compute/imgs/meta.png"
tags:
- "platform"
diff --git a/apps/blog/content/blog/evolving-agentic-engineering-at-prisma/index.mdx b/apps/blog/content/blog/evolving-agentic-engineering-at-prisma/index.mdx
index aa8f7919db..d1c467211c 100644
--- a/apps/blog/content/blog/evolving-agentic-engineering-at-prisma/index.mdx
+++ b/apps/blog/content/blog/evolving-agentic-engineering-at-prisma/index.mdx
@@ -7,6 +7,7 @@ authors:
metaTitle: "Evolving Agentic Engineering at Prisma"
metaDescription: "A follow-up on what we learned after putting Drive into practice: where an opinionated process helped, where it became too heavy, and why we are moving toward leaner skills, stronger plans, and cheaper execution as models and harnesses improve."
heroImagePath: "/evolving-agentic-engineering-at-prisma/imgs/hero.svg"
+heroImageAlt: "A before and after drawing: seven items an encoded process makes you own, beside three lean skill contracts, spec to plan, plan to milestone, and diff to review"
metaImagePath: "/evolving-agentic-engineering-at-prisma/imgs/meta.png"
tags: ["ai"]
series: agentic-engineering
diff --git a/apps/blog/content/blog/give-your-agent-a-database/index.mdx b/apps/blog/content/blog/give-your-agent-a-database/index.mdx
index e9af22459b..2518976d7e 100644
--- a/apps/blog/content/blog/give-your-agent-a-database/index.mdx
+++ b/apps/blog/content/blog/give-your-agent-a-database/index.mdx
@@ -7,7 +7,7 @@ authors:
metaTitle: "npx create-db: Instant Postgres for Your Coding Agent"
metaDescription: "npx create-db gives coding agents a temporary Postgres database in seconds, no sign-up. JSON output lets Cursor, Claude Code, and Codex test on real Postgres."
heroImagePath: "/give-your-agent-a-database/imgs/hero.svg"
-heroImageAlt: "A terminal running npx create-db --json and returning a Postgres connection string"
+heroImageAlt: "A three step flow: a coding agent runs npx create-db@latest --json and gets a real Prisma Postgres database at db.prisma.io that deletes itself after 24 hours"
metaImagePath: "/give-your-agent-a-database/imgs/meta.png"
tags:
- "ai"
diff --git a/apps/blog/content/blog/gremlin-turning-open-tasks-into-pull-requests/index.mdx b/apps/blog/content/blog/gremlin-turning-open-tasks-into-pull-requests/index.mdx
index d4b8596fa0..31c41dd8d2 100644
--- a/apps/blog/content/blog/gremlin-turning-open-tasks-into-pull-requests/index.mdx
+++ b/apps/blog/content/blog/gremlin-turning-open-tasks-into-pull-requests/index.mdx
@@ -6,8 +6,9 @@ authors:
- "Tyler Hogarth"
metaTitle: "Gremlin: turning open tasks into pull requests"
metaDescription: "Gremlin is an autonomous engineering agent for small, well-scoped tasks. It uses Mastra for orchestration and OpenCode in a sandbox to turn Sentry issues, Linear tasks, and Slack instructions into reviewable pull requests."
-heroImagePath: "/gremlin-turning-open-tasks-into-pull-requests/imgs/hero.png"
-heroImageAlt: "Gremlin Cloud Agent illustration with infrastructure icons, terminal output, and deployment status panels"
+heroImagePath: "/gremlin-turning-open-tasks-into-pull-requests/imgs/hero.svg"
+heroImageAlt: "A pipeline where Sentry issues, Linear tasks, and Slack threads fan into one chain, gather context, sandbox, validate, and end in an Open PR tile"
+metaImagePath: "/gremlin-turning-open-tasks-into-pull-requests/imgs/meta.png"
tags: ["ai"]
---
diff --git a/apps/blog/content/blog/how-prisma-build-with-agentic-ai/index.mdx b/apps/blog/content/blog/how-prisma-build-with-agentic-ai/index.mdx
index 38a293e13f..b44587bc04 100644
--- a/apps/blog/content/blog/how-prisma-build-with-agentic-ai/index.mdx
+++ b/apps/blog/content/blog/how-prisma-build-with-agentic-ai/index.mdx
@@ -7,7 +7,8 @@ authors:
metaTitle: "Agentic Engineering: How Prisma Builds with AI"
metaDescription: "In three months, Prisma fundamentally changed how it builds software by rethinking the relationship between engineers and AI agents. Here's what we learned building Prisma 8 with agentic engineering."
metaImagePath: "/how-prisma-build-with-agentic-ai/imgs/meta.png"
-heroImagePath: "/how-prisma-build-with-agentic-ai/imgs/meta.png"
+heroImagePath: "/how-prisma-build-with-agentic-ai/imgs/hero.svg"
+heroImageAlt: "An ink prompt card holding the three questions engineers ask of an agent, with how can I set it up to succeed marked in cyan"
tags: ["ai", "education"]
series: agentic-engineering
seriesIndex: 1
diff --git a/apps/blog/content/blog/how-to-use-ai-safely-and-responsibly/index.mdx b/apps/blog/content/blog/how-to-use-ai-safely-and-responsibly/index.mdx
index 843ec473ae..a8eeefee04 100644
--- a/apps/blog/content/blog/how-to-use-ai-safely-and-responsibly/index.mdx
+++ b/apps/blog/content/blog/how-to-use-ai-safely-and-responsibly/index.mdx
@@ -7,8 +7,9 @@ authors:
- "Matthias Oertel"
metaTitle: "How to use AI coding tools safely and responsibly"
metaDescription: "Practical security guidelines for developers using AI coding assistants — token scopes, secrets management, sandboxing, prompt injection, and reviewing generated code."
-metaImagePath: "/how-to-use-ai-safely-and-responsibly/imgs/hero.png"
-heroImagePath: "/how-to-use-ai-safely-and-responsibly/imgs/hero.png"
+metaImagePath: "/how-to-use-ai-safely-and-responsibly/imgs/meta.png"
+heroImagePath: "/how-to-use-ai-safely-and-responsibly/imgs/hero.svg"
+heroImageAlt: "A policy card pairing the scoped permissions the post allows, bash(npm test), repo:read, and /sandbox, against the broad grants it refuses"
tags:
- "ai"
---
diff --git a/apps/blog/content/blog/how-xeito-builds-features-not-database-infrastructure-with-prisma/index.mdx b/apps/blog/content/blog/how-xeito-builds-features-not-database-infrastructure-with-prisma/index.mdx
index ce7a29a6c9..1e6620c8f2 100644
--- a/apps/blog/content/blog/how-xeito-builds-features-not-database-infrastructure-with-prisma/index.mdx
+++ b/apps/blog/content/blog/how-xeito-builds-features-not-database-infrastructure-with-prisma/index.mdx
@@ -8,7 +8,7 @@ metaTitle: "How One Founder Builds a Live Sports Platform with Prisma"
metaDescription: "How Xeito uses Prisma ORM and Prisma Postgres to ship live scoring, leagues, payments, and player workflows without a database team."
excerpt: "Gabriel Gil Graña is building Xeito, a live sports platform, without turning database infrastructure into the work."
heroImagePath: "/how-xeito-builds-features-not-database-infrastructure-with-prisma/imgs/hero.svg"
-heroImageAlt: "Build features, not database infrastructure."
+heroImageAlt: "A quote card: Gabriel Gil Graña of Xeito on wanting to spend his time creating features instead of managing memory, pool connections, storage limits, replicas and backups"
metaImagePath: "/how-xeito-builds-features-not-database-infrastructure-with-prisma/imgs/meta.png"
tags:
- "case-study"
diff --git a/apps/blog/content/blog/image-transformations-with-bun-on-prisma-compute/index.mdx b/apps/blog/content/blog/image-transformations-with-bun-on-prisma-compute/index.mdx
index 845de8c8e2..50c548231e 100644
--- a/apps/blog/content/blog/image-transformations-with-bun-on-prisma-compute/index.mdx
+++ b/apps/blog/content/blog/image-transformations-with-bun-on-prisma-compute/index.mdx
@@ -7,7 +7,7 @@ authors:
metaTitle: "Image Transformations with Bun on Prisma Compute"
metaDescription: "Bun includes native image transformations, and Prisma Compute runs on Bun. Build image resize and format routes as ordinary app requests instead of paying for a separate image transformation service."
heroImagePath: "/image-transformations-with-bun-on-prisma-compute/imgs/hero.svg"
-heroImageAlt: "Request-time image pipeline on Prisma Compute: source to Bun.Image to webp. Image transforms as app logic."
+heroImageAlt: "A three-tile request-time pipeline: chair.jpg requested with w=640 and q=75, transformed by Bun.Image, returned as chair.webp cached immutable for a year"
metaImagePath: "/image-transformations-with-bun-on-prisma-compute/imgs/meta.png"
excerpt: "Bun ships native image transformations, and Prisma Compute runs on Bun, so you build image resize and format routes as ordinary app requests, with no separate image service to pay for or manage."
tags:
diff --git a/apps/blog/content/blog/introducing-create-prisma/index.mdx b/apps/blog/content/blog/introducing-create-prisma/index.mdx
index 2c99b1af42..50800b72db 100644
--- a/apps/blog/content/blog/introducing-create-prisma/index.mdx
+++ b/apps/blog/content/blog/introducing-create-prisma/index.mdx
@@ -7,8 +7,8 @@ authors:
metaTitle: "Introducing Create-Prisma: Start a Prisma App With One Command"
metaDescription: "create-prisma is a new CLI that creates an app with Prisma set up, a starter schema, seed data, database scripts, and optional Prisma Postgres setup."
excerpt: "create-prisma is a new CLI that creates an app with Prisma set up, including a starter schema, seed data, database scripts, and optional Prisma Postgres setup."
-heroImagePath: "/introducing-create-prisma/imgs/hero.png"
-heroImageAlt: "Introducing create-prisma — a new CLI for starting Prisma apps"
+heroImagePath: "/introducing-create-prisma/imgs/hero.svg"
+heroImageAlt: "An ink terminal card running npm create prisma@latest, with a checklist of what the CLI generates: prisma/schema.prisma, prisma/seed.ts, prisma.config.ts, a .env file with DATABASE_URL, and the db:generate, db:migrate and db:seed scripts."
metaImagePath: "/introducing-create-prisma/imgs/meta.png"
tags:
- "announcement"
diff --git a/apps/blog/content/blog/launching-prisma-compute-public-beta/index.mdx b/apps/blog/content/blog/launching-prisma-compute-public-beta/index.mdx
index 408f6ddc17..3d6b465534 100644
--- a/apps/blog/content/blog/launching-prisma-compute-public-beta/index.mdx
+++ b/apps/blog/content/blog/launching-prisma-compute-public-beta/index.mdx
@@ -6,7 +6,7 @@ authors:
- "Shane Neubauer"
metaTitle: "Launching Prisma Compute in Public Beta"
metaDescription: "Prisma Compute is now in public beta: TypeScript app hosting that runs on the same infrastructure as your database. Point your agent at your project and tell it to deploy."
-heroImagePath: "/launching-prisma-compute-public-beta/imgs/hero.png"
+heroImagePath: "/launching-prisma-compute-public-beta/imgs/hero.svg"
heroImageAlt: "Prisma Compute, now in public beta"
metaImagePath: "/launching-prisma-compute-public-beta/imgs/meta.png"
pinned: true
diff --git a/apps/blog/content/blog/make-your-docs-agent-ready/index.mdx b/apps/blog/content/blog/make-your-docs-agent-ready/index.mdx
index 2751f2a81c..7726f9fd7c 100644
--- a/apps/blog/content/blog/make-your-docs-agent-ready/index.mdx
+++ b/apps/blog/content/blog/make-your-docs-agent-ready/index.mdx
@@ -8,7 +8,7 @@ metaTitle: "How to Make Your Docs Agent-Ready: llms.txt, Parity, MCP"
metaDescription: "Coding agents fail silently on truncated indexes, broken links, and missing metadata. What we fixed in the Prisma docs, and how to audit yours."
heroImagePath: "/make-your-docs-agent-ready/imgs/hero.svg"
metaImagePath: "/make-your-docs-agent-ready/imgs/meta.png"
-heroImageAlt: "A documentation site restructured so a coding agent can discover, fetch, and parse it"
+heroImageAlt: "An ink panel listing the docs endpoints an agent fetches: llms.txt at 7 KB, the per-area indexes, llms-full.txt at 4.5 MB, skill.md, and the MCP discovery document"
tags:
- "ai"
- "education"
diff --git a/apps/blog/content/blog/mongodb-without-compromise/index.mdx b/apps/blog/content/blog/mongodb-without-compromise/index.mdx
index e0f7f20954..3588aff607 100644
--- a/apps/blog/content/blog/mongodb-without-compromise/index.mdx
+++ b/apps/blog/content/blog/mongodb-without-compromise/index.mdx
@@ -7,7 +7,7 @@ authors:
metaTitle: "MongoDB Without Compromise"
metaDescription: "Prisma 8 brings a MongoDB-native experience to TypeScript with type-safe queries, real migrations, polymorphic models, embedded collections, and typed aggregation pipelines."
heroImagePath: "/mongodb-without-compromise/imgs/hero.svg"
-heroImageAlt: "Prisma 8 and MongoDB"
+heroImageAlt: "An untyped MongoDB document beside the Prisma 8 contract that types it, including the embedded Address type."
metaImagePath: "/mongodb-without-compromise/imgs/meta.png"
tags:
- "orm"
diff --git a/apps/blog/content/blog/postgres-bloom-index-the-overlooked-postgres-feature/index.mdx b/apps/blog/content/blog/postgres-bloom-index-the-overlooked-postgres-feature/index.mdx
index 95b4e72961..68cf923247 100644
--- a/apps/blog/content/blog/postgres-bloom-index-the-overlooked-postgres-feature/index.mdx
+++ b/apps/blog/content/blog/postgres-bloom-index-the-overlooked-postgres-feature/index.mdx
@@ -6,9 +6,9 @@ authors:
- "Ankur Datta"
metaTitle: "Bloom Filters in Postgres: The Index Type Most Developers Overlook"
metaDescription: "One bloom index can replace a stack of B-trees on wide tables with many filter combinations. A tour of the concept, the Postgres extension, and a benchmark you can run yourself."
-heroImagePath: "/postgres-bloom-index-the-overlooked-postgres-feature/imgs/bloom-filters-in-postgres.png"
-metaImagePath: "/postgres-bloom-index-the-overlooked-postgres-feature/imgs/bloom-filters-in-postgres.png"
-heroImageAlt: "Bloom Filters in Postgres"
+heroImagePath: "/postgres-bloom-index-the-overlooked-postgres-feature/imgs/hero.svg"
+metaImagePath: "/postgres-bloom-index-the-overlooked-postgres-feature/imgs/meta.png"
+heroImageAlt: "The item alice hashed by fnv1a, djb2 and murmur3, setting bits 2, 7 and 11 of a sixteen bit array, captioned one bloom signature per row."
tags:
- "prisma-postgres"
- "education"
diff --git a/apps/blog/content/blog/price-the-work-not-the-workflow/index.mdx b/apps/blog/content/blog/price-the-work-not-the-workflow/index.mdx
index 14d0b71b04..9a8ba9cabb 100644
--- a/apps/blog/content/blog/price-the-work-not-the-workflow/index.mdx
+++ b/apps/blog/content/blog/price-the-work-not-the-workflow/index.mdx
@@ -6,9 +6,9 @@ authors:
- "Luan van der Westhuizen"
metaTitle: "Price the Work, Not the Workflow"
metaDescription: "Agents can ship, preview, test, and retry in loops. Infrastructure pricing should charge for the work an app performs, not the workflow around it."
-heroImagePath: "/price-the-work-not-the-workflow/imgs/hero.png"
-metaImagePath: "/price-the-work-not-the-workflow/imgs/hero.png"
-heroImageAlt: "Agent-assisted development loop showing workflow activity around a small metered bill."
+heroImagePath: "/price-the-work-not-the-workflow/imgs/hero.svg"
+metaImagePath: "/price-the-work-not-the-workflow/imgs/meta.png"
+heroImageAlt: "Four separately priced meters, requests, provisioned memory, active CPU and outbound bandwidth, with deploys, previews, retries, seats and idle time struck out as not billed"
series: prisma-compute
seriesIndex: 8
tags:
diff --git a/apps/blog/content/blog/prisma-7-ama-clearing-up-the-why-behind-the-changes/index.mdx b/apps/blog/content/blog/prisma-7-ama-clearing-up-the-why-behind-the-changes/index.mdx
index 855331c319..7bf355073f 100644
--- a/apps/blog/content/blog/prisma-7-ama-clearing-up-the-why-behind-the-changes/index.mdx
+++ b/apps/blog/content/blog/prisma-7-ama-clearing-up-the-why-behind-the-changes/index.mdx
@@ -6,9 +6,9 @@ authors:
- "Ankur Datta"
metaTitle: "Prisma 7 Explained: Performance, Architecture, and AMA Answers"
metaDescription: "Prisma 7 introduces major architectural changes. We answer community AMA questions on performance, database support, the new client generator, and what’s next."
-metaImagePath: "/prisma-7-ama-clearing-up-the-why-behind-the-changes/imgs/meta-64c44281ee8d3e0fe5e7e9bbd309603e5496945d-1266x711-26d35e93c9.png"
-heroImagePath: "/prisma-7-ama-clearing-up-the-why-behind-the-changes/imgs/hero-fed37f83921ceeba6d0395d774c48ae9d5b68dcc-844x474-7cca11ee09.png"
-heroImageAlt: "Prisma 7 is a structural release focused on long-term architecture rather than surface-level features. Some things improved, others became stricter. This post answers questions from our recent AMA on X and explains where Prisma 7 stands today and where it’s headed."
+metaImagePath: "/prisma-7-ama-clearing-up-the-why-behind-the-changes/imgs/meta.png"
+heroImagePath: "/prisma-7-ama-clearing-up-the-why-behind-the-changes/imgs/hero.svg"
+heroImageAlt: "A question and answer from the Prisma 7 AMA set in large type: Prisma 7 vs Prisma 6 performance, is it faster or slower, answered with the line that it depends heavily on how you measure performance, with that phrase in cyan."
tags:
- "orm"
---
diff --git a/apps/blog/content/blog/prisma-compute-config-file/index.mdx b/apps/blog/content/blog/prisma-compute-config-file/index.mdx
index 8cdcc2dd06..2e8568836e 100644
--- a/apps/blog/content/blog/prisma-compute-config-file/index.mdx
+++ b/apps/blog/content/blog/prisma-compute-config-file/index.mdx
@@ -7,7 +7,7 @@ authors:
metaTitle: "Configure Prisma Compute deploys in TypeScript"
metaDescription: "Prisma Compute now reads a typed TypeScript config file, so deploys are reproducible and monorepos work: declare one app or several, then ship the whole system with one command."
heroImagePath: "/prisma-compute-config-file/imgs/hero.svg"
-heroImageAlt: "One typed file for every app target: a prisma.compute.ts declaring an api app on Hono and a web app on Next.js"
+heroImageAlt: "An ink prisma.compute.ts code card declaring a monorepo config: an api app rooted at apps/api on Hono and a web app rooted at apps/web on Next.js"
metaImagePath: "/prisma-compute-config-file/imgs/meta.png"
excerpt: "Prisma Compute now reads a typed prisma.compute.ts, so deploys are reproducible and monorepos work: declare one app or several, then ship the whole system with one command."
series: prisma-compute
diff --git a/apps/blog/content/blog/prisma-compute-custom-domains/index.mdx b/apps/blog/content/blog/prisma-compute-custom-domains/index.mdx
index fb486f5763..fcea9a9676 100644
--- a/apps/blog/content/blog/prisma-compute-custom-domains/index.mdx
+++ b/apps/blog/content/blog/prisma-compute-custom-domains/index.mdx
@@ -6,8 +6,9 @@ authors:
- "Tyler Benfield"
metaTitle: "We Launched Prisma Compute with Custom Domains"
metaDescription: "Prisma Compute launched with custom domain support. Here's how we made the setup one DNS record while handling TLS certificate provisioning, storage, and routing behind the scenes."
-heroImagePath: "/prisma-compute-custom-domains/imgs/hero.png"
-heroImageAlt: "Custom domain in browser address bar"
+heroImagePath: "/prisma-compute-custom-domains/imgs/hero.svg"
+heroImageAlt: "The one DNS record a custom domain needs: a CNAME for shop.acme.com pointing at switchboard.cdg.prisma.build with a TTL of 300, and a status row reading active"
+metaImagePath: "/prisma-compute-custom-domains/imgs/meta.png"
tags:
- "platform"
series: prisma-compute
diff --git a/apps/blog/content/blog/prisma-compute-time-synchronization/index.mdx b/apps/blog/content/blog/prisma-compute-time-synchronization/index.mdx
index af83ff717c..14250bf53f 100644
--- a/apps/blog/content/blog/prisma-compute-time-synchronization/index.mdx
+++ b/apps/blog/content/blog/prisma-compute-time-synchronization/index.mdx
@@ -7,7 +7,7 @@ authors:
metaTitle: "How Prisma Compute Keeps Time Accurate in Long-Running Applications"
metaDescription: "How Prisma Compute keeps wall-clock time accurate in long-running Firecracker microVMs, using the host-paired KVM PTP clock instead of an in-guest NTP daemon."
heroImagePath: "/prisma-compute-time-synchronization/imgs/hero.svg"
-heroImageAlt: "Average clock skew on an awake VM, drifting about 13.75 ms/h (3.82 ppm): -13.8 ms at one hour, -27.5 ms at two, -55 ms at four, -82.5 ms at six"
+heroImageAlt: "A drift drawing: the host paired clock read from /dev/ptp0 holds flat while an awake microVM's guest CLOCK_REALTIME falls away at 13.75 ms per hour (3.82 ppm), reaching about -82.5 ms after six hours"
metaImagePath: "/prisma-compute-time-synchronization/imgs/meta.png"
series: prisma-compute
seriesIndex: 9
diff --git a/apps/blog/content/blog/prisma-compute-vs-vercel-pricing/index.mdx b/apps/blog/content/blog/prisma-compute-vs-vercel-pricing/index.mdx
index 910bb8302e..b9fa6a978e 100644
--- a/apps/blog/content/blog/prisma-compute-vs-vercel-pricing/index.mdx
+++ b/apps/blog/content/blog/prisma-compute-vs-vercel-pricing/index.mdx
@@ -5,7 +5,7 @@ date: "2026-07-01"
authors:
- "Martin Janse van Rensburg"
heroImagePath: "/prisma-compute-vs-vercel-pricing/imgs/hero.svg"
-heroImageAlt: "The same 20M-request month costs about $98 on Prisma Compute at planned rates versus about $236 on Vercel (Pro), saving about $138 or 58% every month."
+heroImageAlt: "A line by line table of the same 20M-request month: about $98 total on Prisma Compute at planned rates against about $236 on Vercel (Pro)"
metaImagePath: "/prisma-compute-vs-vercel-pricing/imgs/meta.png"
series: prisma-compute
tags:
diff --git a/apps/blog/content/blog/prisma-next-call-for-extension-authors/index.mdx b/apps/blog/content/blog/prisma-next-call-for-extension-authors/index.mdx
index dba06fc47b..2a619b11c9 100644
--- a/apps/blog/content/blog/prisma-next-call-for-extension-authors/index.mdx
+++ b/apps/blog/content/blog/prisma-next-call-for-extension-authors/index.mdx
@@ -8,7 +8,7 @@ authors:
metaTitle: "Prisma 8: A Call for Extension Authors"
metaDescription: "Prisma 8 has a tiny core that knows nothing about specific databases. Postgres, vector search, and JSON-with-schema are extensions, on the same surface that's open to you. An invitation to build."
heroImagePath: "/prisma-next-call-for-extension-authors/imgs/hero.svg"
-heroImageAlt: "Prisma 8: A Call for Extension Authors"
+heroImageAlt: "A dark manifest card for an extension package listing the four layers it can contribute: contract, query, runtime and migration, over the line that registers it"
metaImagePath: "/prisma-next-call-for-extension-authors/imgs/meta.png"
tags:
- "orm"
diff --git a/apps/blog/content/blog/prisma-next-early-access-write-your-contract-prompt-your-agent-ship-your-app/index.mdx b/apps/blog/content/blog/prisma-next-early-access-write-your-contract-prompt-your-agent-ship-your-app/index.mdx
index 1b2451e5fc..f3275ef70d 100644
--- a/apps/blog/content/blog/prisma-next-early-access-write-your-contract-prompt-your-agent-ship-your-app/index.mdx
+++ b/apps/blog/content/blog/prisma-next-early-access-write-your-contract-prompt-your-agent-ship-your-app/index.mdx
@@ -7,8 +7,8 @@ authors:
- "Will Madden"
metaTitle: "Prisma 8 Early Access: Write Your Contract, Prompt Your Agent, Ship Your App"
metaDescription: "Prisma 8 is open for Early Access. Define your data layer as a contract and the framework handles migrations, type-safe queries, and continuous upgrades, safe to delegate to your agent."
-heroImagePath: "/prisma-next-early-access-write-your-contract-prompt-your-agent-ship-your-app/imgs/meta.png"
-heroImageAlt: "Prisma 8 Early Access"
+heroImagePath: "/prisma-next-early-access-write-your-contract-prompt-your-agent-ship-your-app/imgs/hero.svg"
+heroImageAlt: "A three-step pipeline of cards: write your contract in contract.prisma, prompt your agent to run prisma-next migration plan, then ship your app with prisma-next migrate"
metaImagePath: "/prisma-next-early-access-write-your-contract-prompt-your-agent-ship-your-app/imgs/meta.png"
tags:
- "orm"
diff --git a/apps/blog/content/blog/prisma-next-ltree-extension/index.mdx b/apps/blog/content/blog/prisma-next-ltree-extension/index.mdx
index 536cf3b603..687af85210 100644
--- a/apps/blog/content/blog/prisma-next-ltree-extension/index.mdx
+++ b/apps/blog/content/blog/prisma-next-ltree-extension/index.mdx
@@ -7,7 +7,7 @@ authors:
metaTitle: "Extending Prisma 8 with Typed Postgres ltree"
metaDescription: "Use PostgreSQL ltree in Prisma 8 with prisma-ltree: typed path columns plus ancestor and descendant queries."
heroImagePath: "/prisma-next-ltree-extension/imgs/hero.svg"
-heroImageAlt: "Typed ltree for Prisma 8: the prisma-ltree extension pack shown as a hierarchical path tree"
+heroImageAlt: "A typed ltree path tree on a light card: essays branches into essays.drafts and essays.published, each with a chapter leaf, above the isDescendantOf operator"
metaImagePath: "/prisma-next-ltree-extension/imgs/meta.png"
tags:
- "orm"
diff --git a/apps/blog/content/blog/prisma-next-performance-benchmark/index.mdx b/apps/blog/content/blog/prisma-next-performance-benchmark/index.mdx
index 065c57172a..e633bcf321 100644
--- a/apps/blog/content/blog/prisma-next-performance-benchmark/index.mdx
+++ b/apps/blog/content/blog/prisma-next-performance-benchmark/index.mdx
@@ -7,7 +7,7 @@ authors:
metaTitle: "Prisma 8 Is ~90% As Fast as Raw PG"
metaDescription: "Prisma 8 performance benchmarks achieves ~90% of the raw pg driver's peak throughput, holds latency low under load, and ships as a 148.5 KB gzipped bundle for serverless and edge workloads."
heroImagePath: "/prisma-next-performance-benchmark/imgs/hero.svg"
-heroImageAlt: "Bar chart showing Prisma 8 outperforming Prisma 7 in throughput benchmarks"
+heroImageAlt: "Peak sustained throughput bars on the same Postgres workload: the raw pg driver at 14,350 requests per second, Prisma 8 at 12,500, Prisma 7 at 8,300"
metaImagePath: "/prisma-next-performance-benchmark/imgs/meta.png"
tags:
- "orm"
diff --git a/apps/blog/content/blog/prisma-next-roadmap-april-milestone/index.mdx b/apps/blog/content/blog/prisma-next-roadmap-april-milestone/index.mdx
index 6857ef5249..d925f6ddf0 100644
--- a/apps/blog/content/blog/prisma-next-roadmap-april-milestone/index.mdx
+++ b/apps/blog/content/blog/prisma-next-roadmap-april-milestone/index.mdx
@@ -7,6 +7,7 @@ authors:
metaTitle: "Prisma 8: April milestone complete, the extension API is open"
metaDescription: "April shipped the first four extensions on the new Prisma 8 extension API: pgvector, arktype-json, ParadeDB, and CipherStash. The extension API is open to outside authors. May shifts to Early Access."
heroImagePath: "/prisma-next-roadmap-april-milestone/imgs/hero.svg"
+heroImageAlt: "A milestone panel: pgvector, arktype-json, ParadeDB and CipherStash checked off as shipped in April, with streaming subscriptions in a dashed card carried into May"
metaImagePath: "/prisma-next-roadmap-april-milestone/imgs/meta.png"
tags:
- "orm"
diff --git a/apps/blog/content/blog/prisma-next-roadmap/index.mdx b/apps/blog/content/blog/prisma-next-roadmap/index.mdx
index 2d3c5705ee..14b2e32933 100644
--- a/apps/blog/content/blog/prisma-next-roadmap/index.mdx
+++ b/apps/blog/content/blog/prisma-next-roadmap/index.mdx
@@ -6,7 +6,8 @@ authors:
- "Will Madden"
metaTitle: "Prisma 8 Roadmap"
metaDescription: "Have you been wondering when you can start using Prisma 8 in your app? Take a look at our roadmap to find out."
-heroImagePath: "/prisma-next-roadmap/imgs/hero.png"
+heroImagePath: "/prisma-next-roadmap/imgs/hero.svg"
+heroImageAlt: "A horizontal milestone track with three nodes: April for external contributions, May for early access, and June to July for Postgres general availability"
metaImagePath: "/prisma-next-roadmap/imgs/meta.png"
tags:
- "orm"
diff --git a/apps/blog/content/blog/prisma-orm-7-3-0/index.mdx b/apps/blog/content/blog/prisma-orm-7-3-0/index.mdx
index 7e70cbdef0..c683d6dba5 100644
--- a/apps/blog/content/blog/prisma-orm-7-3-0/index.mdx
+++ b/apps/blog/content/blog/prisma-orm-7-3-0/index.mdx
@@ -6,7 +6,9 @@ authors:
- "Mike Hartington"
metaTitle: "Prisma ORM 7.3.0: Faster Query Compilation, Safer BigInt JSON, Better Adapters"
metaDescription: "Prisma ORM 7.3.0 adds a new compilerBuild option (fast or small), speeds up raw queries by bypassing compilation, improves MSSQL and better-sqlite3 stability, reverts mapped enum behavior, and preserves BigInt precision in relationJoins JSON aggregation."
-heroImagePath: "/prisma-orm-7-3-0/imgs/hero-e84b7eb35dc73daddb55d22bb7a24b71f40d3d5d-844x474-552f491d83.svg"
+metaImagePath: "/prisma-orm-7-3-0/imgs/meta.png"
+heroImagePath: "/prisma-orm-7-3-0/imgs/hero.svg"
+heroImageAlt: "A Prisma ORM 7.3.0 version badge beside four changelog items: the new compilerBuild generator option, raw queries skipping the compiler, the MSSQL adapter on version 12.2.0, and BigInt precision preserved in relationJoins JSON aggregation."
tags:
- "orm"
---
diff --git a/apps/blog/content/blog/prisma-orm-v7-4-query-caching-partial-indexes-and-major-performance-improvements/index.mdx b/apps/blog/content/blog/prisma-orm-v7-4-query-caching-partial-indexes-and-major-performance-improvements/index.mdx
index b0cbf869f0..6697909b9c 100644
--- a/apps/blog/content/blog/prisma-orm-v7-4-query-caching-partial-indexes-and-major-performance-improvements/index.mdx
+++ b/apps/blog/content/blog/prisma-orm-v7-4-query-caching-partial-indexes-and-major-performance-improvements/index.mdx
@@ -6,8 +6,9 @@ authors:
- "Mike Hartington"
metaTitle: "Prisma ORM v7.4: Query Caching & Performance Boost"
metaDescription: "Prisma ORM v7.4 introduces query caching, partial indexes, and BigInt precision fixes—delivering significant performance improvements under load."
-metaImagePath: "/prisma-orm-v7-4-query-caching-partial-indexes-and-major-performance-improvements/imgs/meta-e94d09878c3f2ac3e105a920dea3556ac0f9917a-1688x948-a991da7a72.png"
-heroImagePath: "/prisma-orm-v7-4-query-caching-partial-indexes-and-major-performance-improvements/imgs/hero-fef1bbb68459cebeece803f612fd0b95571d3d57-844x474-c0e399ac58.png"
+metaImagePath: "/prisma-orm-v7-4-query-caching-partial-indexes-and-major-performance-improvements/imgs/meta.png"
+heroImagePath: "/prisma-orm-v7-4-query-caching-partial-indexes-and-major-performance-improvements/imgs/hero.svg"
+heroImageAlt: "A Prisma ORM 7.4 release card with three named rows: query caching highlighted in cyan, with per-query compilation cost falling from 0.1-1ms to 1-10 microseconds, partial indexes behind the partialIndexes preview feature, and a typical cache hit rate near 100 percent."
tags:
- "orm"
---
diff --git a/apps/blog/content/blog/prisma-postgres-on-stripe-projects/index.mdx b/apps/blog/content/blog/prisma-postgres-on-stripe-projects/index.mdx
index 82f2e81f4d..c47e405f1f 100644
--- a/apps/blog/content/blog/prisma-postgres-on-stripe-projects/index.mdx
+++ b/apps/blog/content/blog/prisma-postgres-on-stripe-projects/index.mdx
@@ -6,8 +6,8 @@ authors:
- "Sampo Lahtinen"
metaTitle: "Prisma Postgres on Stripe Projects"
metaDescription: "Add a Prisma Postgres database to your Stripe project with one command: spending limits out of the box, plan changes from the CLI you already use."
-heroImagePath: "/prisma-postgres-on-stripe-projects/imgs/hero.png"
-heroImageAlt: "Prisma Postgres on Stripe Projects"
+heroImagePath: "/prisma-postgres-on-stripe-projects/imgs/hero.svg"
+heroImageAlt: "A Stripe Projects provider card for prisma/database, provisioned and ready on the free plan, beside the starter, pro and business plan prices"
metaImagePath: "/prisma-postgres-on-stripe-projects/imgs/meta.png"
tags:
- "announcement"
diff --git a/apps/blog/content/blog/prisma-postgres-vs-neon-pricing-2026/index.mdx b/apps/blog/content/blog/prisma-postgres-vs-neon-pricing-2026/index.mdx
index 8b414a3a3f..2d42d76b32 100644
--- a/apps/blog/content/blog/prisma-postgres-vs-neon-pricing-2026/index.mdx
+++ b/apps/blog/content/blog/prisma-postgres-vs-neon-pricing-2026/index.mdx
@@ -9,7 +9,7 @@ metaTitle: "Prisma Postgres vs Neon Pricing 2026: Tables + Worked Examples"
metaDescription: "Prisma Postgres vs Neon pricing side by side: per-plan tables with exact unit prices, five worked cost examples with reproducible math, and a worksheet for your own workload."
heroImagePath: "/prisma-postgres-vs-neon-pricing-2026/imgs/hero.svg"
metaImagePath: "/prisma-postgres-vs-neon-pricing-2026/imgs/meta.png"
-heroImageAlt: "Prisma Postgres vs Neon Pricing 2026"
+heroImageAlt: "A table comparing Prisma Postgres and Neon on billing unit, free tier, paid entry and top plan, using the published plan prices from the post."
tags:
- "education"
---
diff --git a/apps/blog/content/blog/prisma-schema-as-llm-context/index.mdx b/apps/blog/content/blog/prisma-schema-as-llm-context/index.mdx
index 34d08e4d4f..7f8d1fb279 100644
--- a/apps/blog/content/blog/prisma-schema-as-llm-context/index.mdx
+++ b/apps/blog/content/blog/prisma-schema-as-llm-context/index.mdx
@@ -102,9 +102,9 @@ You can test the qualitative half on your own project in five minutes. Give your
All three are answerable from the schema plus the ORM's documented defaults, including the trap in the first: `Invoice.organization` declares no `onDelete`, and Prisma's default for a required relation is `Restrict`, so an organization with invoices cannot be deleted at all. To be clear about what this test shows: a single-file Drizzle schema passes it too. It separates agents that have the data model in context from agents reconstructing it from application code; the sections above are about what that context costs.
-## Prisma Next treats schema-as-context as a feature
+## Prisma 8 treats schema-as-context as a feature
-[Prisma Next](https://www.prisma.io/docs/orm/next), the next generation of the ORM currently in early access, makes this a design goal rather than a side effect: the schema stays small, dense, and machine-readable, treated as first-class LLM context rather than an implementation detail, and errors are structured for agent consumption, carrying documentation URLs that resolve to a stable reference for the exact error.
+[Prisma 8](https://www.prisma.io/docs/orm/v8), the next generation of the ORM currently in release candidate, makes this a design goal rather than a side effect: the schema stays small, dense, and machine-readable, treated as first-class LLM context rather than an implementation detail, and errors are structured for agent consumption, carrying documentation URLs that resolve to a stable reference for the exact error.
The schema answers "what is the data model." The other half, "how do we change it safely here," belongs in your agent rules file; we covered a copy-pasteable version in [What to Put in Your AGENTS.md](/agents-md-for-databases).
diff --git a/apps/blog/content/blog/prisma-studio-migrations-view/index.mdx b/apps/blog/content/blog/prisma-studio-migrations-view/index.mdx
index 32fdb43759..aece0777b4 100644
--- a/apps/blog/content/blog/prisma-studio-migrations-view/index.mdx
+++ b/apps/blog/content/blog/prisma-studio-migrations-view/index.mdx
@@ -9,7 +9,7 @@ metaTitle: "Prisma Studio Migrations View: See Your Migration History"
metaDescription: "The Prisma Studio Migrations view shows every applied Prisma 8 migration as a timeline with a visual diff, the executed SQL, and a schema diff."
heroImagePath: "/prisma-studio-migrations-view/imgs/hero.svg"
metaImagePath: "/prisma-studio-migrations-view/imgs/meta.png"
-heroImageAlt: "The Prisma Studio Migrations view: a timeline of applied migrations beside a visual diff canvas"
+heroImageAlt: "The Prisma Studio Migrations panel listing six applied migrations newest first, with the destructive Drop Legacy Username entry selected"
tags:
- "announcement"
- "orm"
diff --git a/apps/blog/content/blog/rebuilding-the-prisma-docs/index.mdx b/apps/blog/content/blog/rebuilding-the-prisma-docs/index.mdx
index 3b005cfcc7..ce81f70186 100644
--- a/apps/blog/content/blog/rebuilding-the-prisma-docs/index.mdx
+++ b/apps/blog/content/blog/rebuilding-the-prisma-docs/index.mdx
@@ -8,8 +8,8 @@ authors:
metaTitle: "Rebuilding the Prisma Docs: A New Framework, Design, and Structure"
metaDescription: "Learn how the Prisma team rebuilt their docs from scratch using Fumadocs, improved search with Mixedbread, and launched without disrupting day-to-day work."
metaImagePath: "/rebuilding-the-prisma-docs/imgs/meta.png"
-heroImagePath: "/rebuilding-the-prisma-docs/imgs/hero.png"
-heroImageAlt: "Image of the new Prisma documentation site showing the redesigned navigation and layout"
+heroImagePath: "/rebuilding-the-prisma-docs/imgs/hero.svg"
+heroImageAlt: "An information architecture drawing of the rebuilt Prisma docs: a versioned entry point serving /docs and /docs/v6, branching into the four top-level sections Getting Started, ORM, Prisma Postgres, and Guides."
tags:
- "education"
- "announcement"
diff --git a/apps/blog/content/blog/rethinking-database-migrations/index.mdx b/apps/blog/content/blog/rethinking-database-migrations/index.mdx
index b4cc5dc62b..848ebd728f 100644
--- a/apps/blog/content/blog/rethinking-database-migrations/index.mdx
+++ b/apps/blog/content/blog/rethinking-database-migrations/index.mdx
@@ -9,7 +9,7 @@ metaTitle: "Rethinking Database Migrations"
metaDescription: "Database migrations are brittle and they break when you're most vulnerable; when you're deploying to production. Prisma 8 migrations make them explicit, verifiable and safe to retry."
metaImagePath: "/rethinking-database-migrations/imgs/meta.png"
heroImagePath: "/rethinking-database-migrations/imgs/hero.svg"
-heroImageAlt: "Rethinking Database Migrations"
+heroImageAlt: "A migration history graph: an empty database leads to abc123 createTable(user), which branches to def456 addColumn(user.email) and on to the ghi789 target"
tags:
- "orm"
series: prisma-next
diff --git a/apps/blog/content/blog/search-prisma-docs-from-your-coding-agent/index.mdx b/apps/blog/content/blog/search-prisma-docs-from-your-coding-agent/index.mdx
index 43cfbc9e1a..27fca707e1 100644
--- a/apps/blog/content/blog/search-prisma-docs-from-your-coding-agent/index.mdx
+++ b/apps/blog/content/blog/search-prisma-docs-from-your-coding-agent/index.mdx
@@ -6,8 +6,8 @@ authors:
- "Ankur Datta"
metaTitle: "Search the Prisma Docs Using Your Coding Agent"
metaDescription: "The Prisma MCP server now answers documentation questions in your editor. Ask about ORM, Postgres, or Compute and get a cited answer, no tab-switching, no extra setup."
-heroImagePath: "/search-prisma-docs-from-your-coding-agent/imgs/hero.png"
-heroImageAlt: "Your coding agent can now search the Prisma docs"
+heroImagePath: "/search-prisma-docs-from-your-coding-agent/imgs/hero.svg"
+heroImageAlt: "A docs search panel for the search_prisma_documentation tool: one question about deploying to Prisma Compute, and the docs pages its cited answer comes from"
metaImagePath: "/search-prisma-docs-from-your-coding-agent/imgs/meta.png"
tags:
- "ai"
diff --git a/apps/blog/content/blog/serverless-postgres/index.mdx b/apps/blog/content/blog/serverless-postgres/index.mdx
index 252e65558a..a01692736a 100644
--- a/apps/blog/content/blog/serverless-postgres/index.mdx
+++ b/apps/blog/content/blog/serverless-postgres/index.mdx
@@ -11,7 +11,7 @@ metaTitle: "Serverless Postgres: How It Works and Who Offers It (2026)"
metaDescription: "Serverless Postgres separates compute from storage and bills for usage instead of provisioned servers. How scale-to-zero, cold starts, and the three pricing models compare across Neon, Prisma Postgres, Supabase, Aurora, and PlanetScale."
metaImagePath: "/serverless-postgres/imgs/meta.png"
heroImagePath: "/serverless-postgres/imgs/hero.svg"
-heroImageAlt: "Serverless Postgres providers compared: logos for Prisma Postgres, Neon, Aurora, Supabase, and PlanetScale grouped by the three pricing models — operations, compute-time, and instances. Prisma wordmark top-right."
+heroImageAlt: "A compute usage curve that suspends after five minutes idle and wakes a few hundred milliseconds later, drawn under a flat always ready line."
---
Serverless Postgres is PostgreSQL you never provision or manage: the platform allocates compute on demand and bills you for usage, not for a server size you picked up front. One label, though, covers very different products, and they differ on two things that decide your cost and your latency: **what they bill for**, and **whether compute sleeps when idle**.
diff --git a/apps/blog/content/blog/ship-risky-schema-changes-without-a-shared-staging-database/index.mdx b/apps/blog/content/blog/ship-risky-schema-changes-without-a-shared-staging-database/index.mdx
index f483c942f6..67b49a5a16 100644
--- a/apps/blog/content/blog/ship-risky-schema-changes-without-a-shared-staging-database/index.mdx
+++ b/apps/blog/content/blog/ship-risky-schema-changes-without-a-shared-staging-database/index.mdx
@@ -9,7 +9,7 @@ draft: true
metaTitle: "Ship risky schema changes with per-branch databases"
metaDescription: "Prisma Compute gives every branch its own Prisma Postgres database. Rehearse expand-and-contract migrations in isolation before they touch production."
heroImagePath: "/ship-risky-schema-changes-without-a-shared-staging-database/imgs/hero.svg"
-heroImageAlt: "Per-branch databases let each pull request run its own migrations in isolation"
+heroImageAlt: "Two branches fork off main into separate branch databases, one adding the displayName column and one dropping the legacy name column"
metaImagePath: "/ship-risky-schema-changes-without-a-shared-staging-database/imgs/meta.png"
tags:
- "platform"
diff --git a/apps/blog/content/blog/sunsetting-prisma-optimize/index.mdx b/apps/blog/content/blog/sunsetting-prisma-optimize/index.mdx
index ba39fec3c8..d6ca4ed3a6 100644
--- a/apps/blog/content/blog/sunsetting-prisma-optimize/index.mdx
+++ b/apps/blog/content/blog/sunsetting-prisma-optimize/index.mdx
@@ -6,8 +6,9 @@ authors:
- "Mike Hartington"
metaTitle: "Sunsetting Prisma Optimize"
metaDescription: "Prisma Optimize is being sunset as we move query observability directly into Prisma Postgres through Query Insights."
-heroImagePath: "/sunsetting-prisma-optimize/imgs/optimize-sunset.svg"
-metaImagePath: "/sunsetting-prisma-optimize/imgs/optimize-sunset@2x.png"
+heroImagePath: "/sunsetting-prisma-optimize/imgs/hero.svg"
+metaImagePath: "/sunsetting-prisma-optimize/imgs/meta.png"
+heroImageAlt: "A dated wind-down notice: the Prisma Optimize client extension gives way to Query Insights in Prisma Postgres, with the command that removes the old package"
tags:
- "announcement"
- "prisma-postgres"
diff --git a/apps/blog/content/blog/the-next-evolution-of-prisma-orm/index.mdx b/apps/blog/content/blog/the-next-evolution-of-prisma-orm/index.mdx
index 700c380908..91b763c14f 100644
--- a/apps/blog/content/blog/the-next-evolution-of-prisma-orm/index.mdx
+++ b/apps/blog/content/blog/the-next-evolution-of-prisma-orm/index.mdx
@@ -7,9 +7,9 @@ authors:
- "Ankur Datta"
metaTitle: "The Next Evolution of Prisma ORM"
metaDescription: "A look at Prisma 8, a ground-up rethink of Prisma that improves queries, extensibility, migrations, and AI-friendly workflows while keeping Prisma’s schema-first approach."
-metaImagePath: "/the-next-evolution-of-prisma-orm/imgs/meta-558fe7eccfd12d3b52c325d62e5fa463a1b5f619-1200x640-3212708663.png"
-heroImagePath: "/the-next-evolution-of-prisma-orm/imgs/hero-61773d2cc286213d32b63e59605b0f5e0df4fe52-844x474-cb41e2fab7.svg"
-heroImageAlt: "The Next Evolution of Prisma ORM"
+metaImagePath: "/the-next-evolution-of-prisma-orm/imgs/meta.png"
+heroImagePath: "/the-next-evolution-of-prisma-orm/imgs/hero.svg"
+heroImageAlt: "A lineage of three Prisma ORM generations: Prisma 6 shipping Rust native binaries, Prisma 7 with the query system rewritten, and Prisma 8 stepped up and outlined in cyan, rebuilt in TypeScript and extensible by default."
tags:
- "orm"
series: prisma-next
diff --git a/apps/blog/content/blog/typescript-7-native-compiler-faster-type-checking/index.mdx b/apps/blog/content/blog/typescript-7-native-compiler-faster-type-checking/index.mdx
index b114ddac35..f2827b33be 100644
--- a/apps/blog/content/blog/typescript-7-native-compiler-faster-type-checking/index.mdx
+++ b/apps/blog/content/blog/typescript-7-native-compiler-faster-type-checking/index.mdx
@@ -9,7 +9,7 @@ metaTitle: "TypeScript 7 Native Compiler: 3x Faster Type Checks in a Real Monore
metaDescription: "TypeScript 7 ships the compiler as a native Go port. We migrated a large TypeScript monorepo to it: whole-repo type checking went from ~74s to ~24s with no memory tuning. Here are the numbers, the exact config diffs, the sharp edges, and who should migrate now."
metaImagePath: "/typescript-7-native-compiler-faster-type-checking/imgs/meta.png"
heroImagePath: "/typescript-7-native-compiler-faster-type-checking/imgs/hero.svg"
-heroImageAlt: "Headline 'Type checking, 3x faster' beside a before/after bar chart: a tall slate bar labeled TS 5.x at 74 seconds and a short glowing blue bar labeled TS 7 at 24 seconds, with a '3x faster' callout. TypeScript logo top-left, Prisma wordmark top-right."
+heroImageAlt: "Two proportional bars comparing a whole-repo type check: tsc 5.8.2, the classic compiler, at about 74 seconds in grey, and tsc 7.0.2, the native Go compiler, at about 24 seconds in cyan with a 3x faster pill, above a note that the Node heap flag went from 8 GB to none."
tags:
- "education"
- "platform"
diff --git a/apps/blog/content/blog/typescript-migrations-in-prisma-next/index.mdx b/apps/blog/content/blog/typescript-migrations-in-prisma-next/index.mdx
index 95521cbf15..563df8fb04 100644
--- a/apps/blog/content/blog/typescript-migrations-in-prisma-next/index.mdx
+++ b/apps/blog/content/blog/typescript-migrations-in-prisma-next/index.mdx
@@ -7,9 +7,9 @@ authors:
- "Ankur Datta"
metaTitle: "TypeScript Migrations in Prisma 8"
metaDescription: "In Prisma 8, migrations are TypeScript files you can read, edit, and re-run with confidence. Every step is verified before it runs and again after, and every failure points directly at the operation that caused it."
-heroImagePath: "/typescript-migrations-in-prisma-next/imgs/typescript-migrations-in-prisma-next.png"
-metaImagePath: "/typescript-migrations-in-prisma-next/imgs/typescript-migrations-in-prisma-next.png"
-heroImageAlt: "TypeScript Migrations In Prisma 8"
+heroImagePath: "/typescript-migrations-in-prisma-next/imgs/hero.svg"
+metaImagePath: "/typescript-migrations-in-prisma-next/imgs/meta.png"
+heroImageAlt: "A dark migration.ts code card showing the createTable, addUnique and createIndex operation factories that a Prisma 8 migration is built from"
tags:
- "orm"
- "education"
diff --git a/apps/blog/content/blog/you-dont-need-a-job-queue-postgres-already-has-skip-locked/index.mdx b/apps/blog/content/blog/you-dont-need-a-job-queue-postgres-already-has-skip-locked/index.mdx
index 3c4b056460..87c4b812e5 100644
--- a/apps/blog/content/blog/you-dont-need-a-job-queue-postgres-already-has-skip-locked/index.mdx
+++ b/apps/blog/content/blog/you-dont-need-a-job-queue-postgres-already-has-skip-locked/index.mdx
@@ -7,7 +7,7 @@ authors:
metaTitle: "Build a Postgres Job Queue with SKIP LOCKED, No Redis"
metaDescription: "Postgres can run a reliable background job queue with FOR UPDATE SKIP LOCKED. Build a worker queue with retries using pg and Prisma Postgres, no broker required."
heroImagePath: "/you-dont-need-a-job-queue-postgres-already-has-skip-locked/imgs/hero.svg"
-heroImageAlt: "You Don't Need a Job Queue, Postgres Already Has SKIP LOCKED"
+heroImageAlt: "A dark SQL card holding the post's claim query, with FOR UPDATE SKIP LOCKED highlighted in yellow, beside the line 'The job queue is a table'."
metaImagePath: "/you-dont-need-a-job-queue-postgres-already-has-skip-locked/imgs/meta.png"
tags:
- "prisma-postgres"
diff --git a/apps/blog/content/blog/you-dont-need-a-vector-database-postgres-already-has-pgvector/index.mdx b/apps/blog/content/blog/you-dont-need-a-vector-database-postgres-already-has-pgvector/index.mdx
index 4e40b595a9..5174ed0971 100644
--- a/apps/blog/content/blog/you-dont-need-a-vector-database-postgres-already-has-pgvector/index.mdx
+++ b/apps/blog/content/blog/you-dont-need-a-vector-database-postgres-already-has-pgvector/index.mdx
@@ -8,7 +8,7 @@ metaTitle: "You Don't Need a Vector Database, Postgres Already Has pgvector"
metaDescription: "pgvector turns Postgres into a vector store; Prisma 8 makes it type-safe. Build working semantic search on a temporary Prisma Postgres database in minutes."
heroImagePath: "/you-dont-need-a-vector-database-postgres-already-has-pgvector/imgs/hero.svg"
metaImagePath: "/you-dont-need-a-vector-database-postgres-already-has-pgvector/imgs/meta.png"
-heroImageAlt: "You Don't Need a Vector Database, Postgres Already Has pgvector"
+heroImageAlt: "The post's movie vectors plotted on the action and scifi axes, with The Terminator highlighted and lines drawn to its nearest neighbours."
tags:
- "prisma-postgres"
- "education"
diff --git a/apps/blog/content/blog/you-dont-need-elasticsearch-postgres-already-has-full-text-search/index.mdx b/apps/blog/content/blog/you-dont-need-elasticsearch-postgres-already-has-full-text-search/index.mdx
index 1f699a2250..b5347c091d 100644
--- a/apps/blog/content/blog/you-dont-need-elasticsearch-postgres-already-has-full-text-search/index.mdx
+++ b/apps/blog/content/blog/you-dont-need-elasticsearch-postgres-already-has-full-text-search/index.mdx
@@ -7,7 +7,7 @@ authors:
metaTitle: "Postgres Full-Text Search Instead of Elasticsearch"
metaDescription: "Build full-text search with tsvector, GIN indexes, and pg_trgm typo tolerance on Prisma Postgres. For most apps, no Elasticsearch cluster required."
heroImagePath: "/you-dont-need-elasticsearch-postgres-already-has-full-text-search/imgs/hero.svg"
-heroImageAlt: "You Don't Need Elasticsearch, Postgres Already Has Full-Text Search"
+heroImageAlt: "A struck-out Elasticsearch tile above a highlighted Postgres tile labelled tsvector plus GIN index, beside the line 'The search index is a column'."
metaImagePath: "/you-dont-need-elasticsearch-postgres-already-has-full-text-search/imgs/meta.png"
tags:
- "prisma-postgres"
diff --git a/apps/blog/content/blog/you-dont-need-redis-postgres-already-has-pub-sub/index.mdx b/apps/blog/content/blog/you-dont-need-redis-postgres-already-has-pub-sub/index.mdx
index 6bae207c84..4798534bb6 100644
--- a/apps/blog/content/blog/you-dont-need-redis-postgres-already-has-pub-sub/index.mdx
+++ b/apps/blog/content/blog/you-dont-need-redis-postgres-already-has-pub-sub/index.mdx
@@ -6,9 +6,9 @@ authors:
- "Ankur Datta"
metaTitle: "You Don't Need Redis, Postgres Already Has Pub/Sub"
metaDescription: "Postgres includes a lightweight Pub/Sub mechanism through LISTEN and NOTIFY. In this post, you'll build a small real-time Pub/Sub app with Bun, pg, and Prisma Postgres."
-heroImagePath: "/you-dont-need-redis-postgres-already-has-pub-sub/imgs/you-dont-need-redis-postgres-already-has-pub-sub.png"
-metaImagePath: "/you-dont-need-redis-postgres-already-has-pub-sub/imgs/you-dont-need-redis-postgres-already-has-pub-sub.png"
-heroImageAlt: "You Don't Need Redis, Postgres Already Has Pub/Sub"
+heroImagePath: "/you-dont-need-redis-postgres-already-has-pub-sub/imgs/hero.svg"
+metaImagePath: "/you-dont-need-redis-postgres-already-has-pub-sub/imgs/meta.png"
+heroImageAlt: "A publisher running NOTIFY app_events, fanning out through the app_events channel to two subscribers running LISTEN app_events."
tags:
- "education"
series: postgres-features
diff --git a/apps/blog/content/blog/your-database-might-not-be-the-bottleneck/index.mdx b/apps/blog/content/blog/your-database-might-not-be-the-bottleneck/index.mdx
index 9deaf79726..89d09efdac 100644
--- a/apps/blog/content/blog/your-database-might-not-be-the-bottleneck/index.mdx
+++ b/apps/blog/content/blog/your-database-might-not-be-the-bottleneck/index.mdx
@@ -7,7 +7,8 @@ authors:
metaTitle: "Your Database Might Not Be the Bottleneck"
metaDescription: "Slow APIs are not always a database problem. Here’s how request parsing, middleware, and repeated object work can become the real bottleneck before Postgres is even involved."
metaImagePath: "/your-database-might-not-be-the-bottleneck/imgs/meta.png"
-heroImagePath: "/your-database-might-not-be-the-bottleneck/imgs/hero.jpg"
+heroImagePath: "/your-database-might-not-be-the-bottleneck/imgs/hero.svg"
+heroImageAlt: "Request composition bars for the post's slow and fast apps: the query segment is the same size in both, while the slow bar fills with middleware, URL parsing and serialization."
---
When an API feels slow, the database is usually the first thing people blame. That makes sense because databases often do the most expensive work in the stack: filtering, joins, sorting, counts, pagination, and serialization. If a route suddenly takes 400ms, most people immediately start looking for missing indexes.
diff --git a/apps/blog/next.config.mjs b/apps/blog/next.config.mjs
index 87446f7dc1..a6a338b178 100644
--- a/apps/blog/next.config.mjs
+++ b/apps/blog/next.config.mjs
@@ -201,9 +201,7 @@ const securityHeaders = [
},
];
-const allowedDevOrigins = (
- process.env.ALLOWED_DEV_ORIGINS ?? "localhost,127.0.0.1,192.168.1.48"
-)
+const allowedDevOrigins = (process.env.ALLOWED_DEV_ORIGINS ?? "localhost,127.0.0.1,192.168.1.48")
.split(",")
.map((origin) => origin.trim())
.filter(Boolean);
diff --git a/apps/blog/public/agentic-engineering-at-prisma/imgs/hero.png b/apps/blog/public/agentic-engineering-at-prisma/imgs/hero.png
deleted file mode 100644
index 621f47d8fb..0000000000
Binary files a/apps/blog/public/agentic-engineering-at-prisma/imgs/hero.png and /dev/null differ
diff --git a/apps/blog/public/agentic-engineering-at-prisma/imgs/hero.svg b/apps/blog/public/agentic-engineering-at-prisma/imgs/hero.svg
new file mode 100644
index 0000000000..2a4e87919a
--- /dev/null
+++ b/apps/blog/public/agentic-engineering-at-prisma/imgs/hero.svg
@@ -0,0 +1,79 @@
+
+ Agentic Engineering at Prisma
+ The five Drive hand-off stages as a rail: Plan, Execute, Review, Ship and Delivery review, with the agent-owned Execute stage marked in prism cyan. Prisma blog cover, 2026 brand.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Drive, the project lifecycle
+
+
+
+
+ Not the code,
+ everything around it
+
+
+
+
+
+
+ Plan
+
+ Execute
+
+ Review
+
+ Ship
+
+ Delivery review
+
+
+
+
+
+
+
+ Engineers direct, agents execute, engineers validate.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/agentic-engineering-at-prisma/imgs/meta.png b/apps/blog/public/agentic-engineering-at-prisma/imgs/meta.png
index 4350e3dff9..f1b054d89e 100644
Binary files a/apps/blog/public/agentic-engineering-at-prisma/imgs/meta.png and b/apps/blog/public/agentic-engineering-at-prisma/imgs/meta.png differ
diff --git a/apps/blog/public/agents-md-for-databases/imgs/hero.svg b/apps/blog/public/agents-md-for-databases/imgs/hero.svg
index ecc56918bc..4be82439e6 100644
--- a/apps/blog/public/agents-md-for-databases/imgs/hero.svg
+++ b/apps/blog/public/agents-md-for-databases/imgs/hero.svg
@@ -1,69 +1,63 @@
-
-
-
- What to Put in Your AGENTS.md So Your Agent Handles the Database Right
- An AGENTS.md file card listing five database rules, feeding Claude Code, Cursor, and Codex.
+
+ What to Put in Your AGENTS.md So Your Agent Handles the Database Right
+ An ink code card with an AGENTS.md filename tab holding the post's five database rules, with the npx create-db@latest --json line marked in prism yellow. Prisma blog cover, 2026 brand.
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
- AGENTS.MD
-
- Database rules
- for your
- coding agent
-
+
+
+
+
-
-
- AGENTS.md
-
- ## Database rules
- - scratch work: npx create-db --json
- - never migrate reset without asking
- - rehearse migrations on a throwaway db
- - prefer --json output, parse the fields
- - DATABASE_URL from env, never committed
-
+
+
+ Agent rules for database work
-
-
-
-
-
-
-
- Claude Code
- via @AGENTS.md
- Cursor
- native
- Codex
- native
+
+
+
+ AGENTS.md
+ ## Database rules
+ - Scratch work gets a throwaway database:
+ npx create-db@latest --json
+ - Never reset or drop without my confirmation.
+ - Rehearse migrations on a throwaway first.
+ - Prefer --json output when a CLI offers it.
+ - Keep connection strings in the environment.
-
- Prisma
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/agents-md-for-databases/imgs/meta.png b/apps/blog/public/agents-md-for-databases/imgs/meta.png
index da9388df59..c774d2996f 100644
Binary files a/apps/blog/public/agents-md-for-databases/imgs/meta.png and b/apps/blog/public/agents-md-for-databases/imgs/meta.png differ
diff --git a/apps/blog/public/announcing-query-insights-for-prisma-postgres/announcing-query-insights-for-prisma-postgres-og.png b/apps/blog/public/announcing-query-insights-for-prisma-postgres/announcing-query-insights-for-prisma-postgres-og.png
deleted file mode 100644
index fc0adc707e..0000000000
Binary files a/apps/blog/public/announcing-query-insights-for-prisma-postgres/announcing-query-insights-for-prisma-postgres-og.png and /dev/null differ
diff --git a/apps/blog/public/announcing-query-insights-for-prisma-postgres/imgs/hero.svg b/apps/blog/public/announcing-query-insights-for-prisma-postgres/imgs/hero.svg
new file mode 100644
index 0000000000..b9db22be60
--- /dev/null
+++ b/apps/blog/public/announcing-query-insights-for-prisma-postgres/imgs/hero.svg
@@ -0,0 +1,149 @@
+
+ Announcing Query Insights For Prisma Postgres
+ The Queries tab of a Prisma Postgres database as a full width panel: average latency and queries per second, a latency chart, and four grouped query shapes with their execution and read counts, the expensive aggregate highlighted. Prisma blog cover, 2026 brand, prism yellow accent.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Average latency
+ 391
+ ms
+
+ Queries per second
+ 43.3
+
+
+ Queries
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Latency
+ Executions
+ Reads
+
+
+
+
+
+
+
+
+ 0ms
+ SELECT name, species, age FROM pets ORDER BY age DESC LIMIT $1
+ 156
+ 156
+
+
+ slow
+ SELECT COUNT(*)::int AS rows_scanned, AVG(p.age + n)::numeric(10,2)…
+ 156
+ 156
+
+
+ 0ms
+ INSERT INTO pets (name, species, age) VALUES ($1, $2, $3), ($4, $5…
+ 1
+ 55
+
+
+ 0ms
+ SELECT name, species, age FROM pets WHERE age > (SELECT AVG(age)…
+ 13
+ 26
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/announcing-query-insights-for-prisma-postgres/imgs/meta.png b/apps/blog/public/announcing-query-insights-for-prisma-postgres/imgs/meta.png
new file mode 100644
index 0000000000..b732c16149
Binary files /dev/null and b/apps/blog/public/announcing-query-insights-for-prisma-postgres/imgs/meta.png differ
diff --git a/apps/blog/public/app-hosting-compute-platforms-for-ai-agents-2026/imgs/hero.svg b/apps/blog/public/app-hosting-compute-platforms-for-ai-agents-2026/imgs/hero.svg
index bd01b36652..086570dc33 100644
--- a/apps/blog/public/app-hosting-compute-platforms-for-ai-agents-2026/imgs/hero.svg
+++ b/apps/blog/public/app-hosting-compute-platforms-for-ai-agents-2026/imgs/hero.svg
@@ -1,498 +1,119 @@
-
-Field Guide · 2026
App hosting & compute for AI agents
Prisma Compute
TypeScript hosting next to Postgres
Public beta · Jun 2026
H
Hosting.com
One-click AI app hosting
Mar 2026
C
Cloudflare Containers
Docker on the global edge
GA · Apr 2026
U
Unkey Deploy
Dockerfile → production API
Apr 2026
N
Neon Compute
Instant, branchable backend
Jun 2026
I
Insforge
Agent-native open-source backend
Early-stage
\ No newline at end of file
+
+ App Hosting and Compute Platforms for AI Agents in 2026
+ An evaluation matrix of the six platforms in the field guide, set as printed index rows: when each shipped, whether a database comes with it, and whether the stack is integrated. Prisma blog cover, 2026 brand, prism cyan accent.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Field guide, 2026
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Prisma Compute
+ Neon Compute
+ Cloudflare Containers
+ Hosting.com
+ Unkey Deploy
+ Insforge
+
+
+
+ June 2026
+ June 2026
+ 13 April 2026
+ March 2026
+ April 2026
+ 2026, early stage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/app-hosting-compute-platforms-for-ai-agents-2026/imgs/meta.png b/apps/blog/public/app-hosting-compute-platforms-for-ai-agents-2026/imgs/meta.png
index 296ebc2573..320779ece9 100644
Binary files a/apps/blog/public/app-hosting-compute-platforms-for-ai-agents-2026/imgs/meta.png and b/apps/blog/public/app-hosting-compute-platforms-for-ai-agents-2026/imgs/meta.png differ
diff --git a/apps/blog/public/building-open-chat/imgs/hero.svg b/apps/blog/public/building-open-chat/imgs/hero.svg
index 589b83a741..bd3033d102 100644
--- a/apps/blog/public/building-open-chat/imgs/hero.svg
+++ b/apps/blog/public/building-open-chat/imgs/hero.svg
@@ -1,471 +1,84 @@
-
-Open Chat / Durable Streaming
Chat that never drops a token Durable log backed streaming
DURABLE LOG head · offset 412
\ No newline at end of file
+
+ How I Built a Chat App That Never Drops a Token
+ An append-only event log for one chat: message.created, message.delta and message.completed rows on a durable stream, with the live delta highlighted in prism red. Prisma blog cover, 2026 brand, prism red Compute accent.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Durable, resumable chat
+
+
+
+ Nothing on screen that isn’t durable
+
+
+
+
+
+ POST /v1/stream/u_3f9c…_messages
+ stream-key: chat:chat_38eb…
+
+
+
+
+
+ message.created role: user "Tell me about cows!"
+ message.created role: assistant ""
+ message.delta role: assistant "Cows are"
+ message.delta role: assistant " fascinating"
+ message.completed outputTokens: 312 costMicroUsd: 9
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/building-open-chat/imgs/meta.png b/apps/blog/public/building-open-chat/imgs/meta.png
index 5cfe94ff0f..93485db87d 100644
Binary files a/apps/blog/public/building-open-chat/imgs/meta.png and b/apps/blog/public/building-open-chat/imgs/meta.png differ
diff --git a/apps/blog/public/bun-rust-rewrite-prisma-compute/imgs/hero.png b/apps/blog/public/bun-rust-rewrite-prisma-compute/imgs/hero.png
deleted file mode 100644
index 57e6f427c2..0000000000
Binary files a/apps/blog/public/bun-rust-rewrite-prisma-compute/imgs/hero.png and /dev/null differ
diff --git a/apps/blog/public/bun-rust-rewrite-prisma-compute/imgs/hero.svg b/apps/blog/public/bun-rust-rewrite-prisma-compute/imgs/hero.svg
new file mode 100644
index 0000000000..8855f5265c
--- /dev/null
+++ b/apps/blog/public/bun-rust-rewrite-prisma-compute/imgs/hero.svg
@@ -0,0 +1,90 @@
+
+ We put Bun's Rust rewrite in production on Prisma Compute
+ Peak resident memory in the Bun.S3File.arrayBuffer() loop inside a 1 GiB container: stable 1.3.14 runs past the 900 MiB threshold and is OOM-killed, while the Rust rewrite canary stays flat at 118 MiB to 4096 iterations. Prisma blog cover, 2026 brand, prism red Compute accent.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Bun canary in production
+
+
+
+ The build that passed our tests
+
+
+
+
+
+ Peak RSS · Bun.S3File.arrayBuffer() loop in a 1 GiB container
+
+
+ 1.3.14+0d9b296af
+ stable · OOM-killed at iteration 96
+ over 900 MiB
+
+
+
+ 1.3.14-canary.1+172afa532
+ Rust rewrite · flat to 4096 iterations
+ 118 MiB
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/bun-rust-rewrite-prisma-compute/imgs/meta.png b/apps/blog/public/bun-rust-rewrite-prisma-compute/imgs/meta.png
index f4acd8333c..0975182e97 100644
Binary files a/apps/blog/public/bun-rust-rewrite-prisma-compute/imgs/meta.png and b/apps/blog/public/bun-rust-rewrite-prisma-compute/imgs/meta.png differ
diff --git a/apps/blog/public/claude-generated-50-websites-overnight-prisma-compute/imgs/hero.svg b/apps/blog/public/claude-generated-50-websites-overnight-prisma-compute/imgs/hero.svg
index 14e7c8cae3..77ccfa0e94 100644
--- a/apps/blog/public/claude-generated-50-websites-overnight-prisma-compute/imgs/hero.svg
+++ b/apps/blog/public/claude-generated-50-websites-overnight-prisma-compute/imgs/hero.svg
@@ -1,55 +1,184 @@
-
-
-
- Claude Generated 50 Websites Overnight. Prisma Compute Helped Ship Them.
- A three-step pipeline: claude, then Prisma Compute, ending in live URLs, under the headline 50 websites overnight.
+
+ Claude Generated 50 Websites Overnight. Prisma Compute Helped Ship Them.
+ Fifty small deployment tiles in a dense grid, one picked out in prism red, standing for the roughly 50 sites an agent generated overnight and deployed inside one Prisma app. Prisma blog cover, 2026 brand, prism red Compute accent.
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+ Deployed by an agent
-
- PRISMA COMPUTE CUSTOMER STORY
-
- 50 websites
- overnight
+
+ From generated code
+ to live URLs
- Claude generated them. Prisma Compute helped ship them.
+ spas in Vancouver, overnight
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+ ~50 sites · one Prisma app
- claude
- Prisma Compute
- live URLs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- Prisma
diff --git a/apps/blog/public/claude-generated-50-websites-overnight-prisma-compute/imgs/meta.png b/apps/blog/public/claude-generated-50-websites-overnight-prisma-compute/imgs/meta.png
index b027d5519c..c714a51846 100644
Binary files a/apps/blog/public/claude-generated-50-websites-overnight-prisma-compute/imgs/meta.png and b/apps/blog/public/claude-generated-50-websites-overnight-prisma-compute/imgs/meta.png differ
diff --git a/apps/blog/public/create-prisma-deploy-prisma-compute/imgs/hero.svg b/apps/blog/public/create-prisma-deploy-prisma-compute/imgs/hero.svg
index 045df4b584..d35a222f4f 100644
--- a/apps/blog/public/create-prisma-deploy-prisma-compute/imgs/hero.svg
+++ b/apps/blog/public/create-prisma-deploy-prisma-compute/imgs/hero.svg
@@ -1,498 +1,86 @@
-
-create-prisma
Scaffold a deploy-ready app
$ bun create prisma@latest
\ No newline at end of file
+
+ Deploy Prisma Apps with create-prisma
+ An ink terminal card running bun create prisma@latest with a checklist of what the scaffold writes: prisma.compute.ts, Prisma Postgres, Prisma Skills, and a compute:deploy script. Prisma blog cover, 2026 brand, prism red Compute accent.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Scaffolding with create-prisma
+
+
+
+
+ From nothing to
+ a live URL
+
+
+ One command scaffolds the app,
+ the database, and the deploy config.
+
+
+
+
+
+
+ $ bun create prisma@latest
+
+
+ ✓ prisma.compute.ts
+ ✓ Prisma Postgres
+ ✓ Prisma Skills
+ ✓ compute:deploy script
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/create-prisma-deploy-prisma-compute/imgs/meta.png b/apps/blog/public/create-prisma-deploy-prisma-compute/imgs/meta.png
index 76de40e8fa..f04472f8b7 100644
Binary files a/apps/blog/public/create-prisma-deploy-prisma-compute/imgs/meta.png and b/apps/blog/public/create-prisma-deploy-prisma-compute/imgs/meta.png differ
diff --git a/apps/blog/public/data-migrations-in-prisma-next/imgs/hero.svg b/apps/blog/public/data-migrations-in-prisma-next/imgs/hero.svg
index 6b37e31639..533abdf4b6 100644
--- a/apps/blog/public/data-migrations-in-prisma-next/imgs/hero.svg
+++ b/apps/blog/public/data-migrations-in-prisma-next/imgs/hero.svg
@@ -1 +1,84 @@
-PRISMA 8 DataMigrations in Prisma 8
\ No newline at end of file
+
+ Data Migrations in Prisma 8
+ A migration flow with a dataTransform step between two schema states: addColumn leaves displayName nullable, the transform backfills it, then setNotNull makes it required. Prisma blog cover, 2026 brand, prism cyan accent.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Prisma 8 data migrations
+
+
+
+
+ Backfill inside
+ the migration
+
+
+
+
+
+
+ addColumn
+ displayName nullable
+
+
+
+
+ dataTransform
+ check: displayName is null
+ run: set "Anonymous"
+
+
+
+
+ setNotNull
+ displayName NOT NULL
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/data-migrations-in-prisma-next/imgs/meta.png b/apps/blog/public/data-migrations-in-prisma-next/imgs/meta.png
index a8b6953841..0a62fbf235 100644
Binary files a/apps/blog/public/data-migrations-in-prisma-next/imgs/meta.png and b/apps/blog/public/data-migrations-in-prisma-next/imgs/meta.png differ
diff --git a/apps/blog/public/drive-and-the-maker/imgs/hero.png b/apps/blog/public/drive-and-the-maker/imgs/hero.png
deleted file mode 100644
index 059a2ed904..0000000000
Binary files a/apps/blog/public/drive-and-the-maker/imgs/hero.png and /dev/null differ
diff --git a/apps/blog/public/drive-and-the-maker/imgs/hero.svg b/apps/blog/public/drive-and-the-maker/imgs/hero.svg
new file mode 100644
index 0000000000..11e6c2f380
--- /dev/null
+++ b/apps/blog/public/drive-and-the-maker/imgs/hero.svg
@@ -0,0 +1,70 @@
+
+ Drive and the Maker
+ An editorial cover: a pulled line from the essay, that when routine implementation is cheap, coordination and ritual become the expensive things, set in large type on paper with a soft three color prism wash. Prisma blog cover, 2026 brand, prism cyan accent.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Agentic engineering
+
+
+
+
+
+ When routine implementation is cheap,
+ coordination and ritual become
+ the expensive things.
+
+ Drive, a development process where AI agents execute alongside people.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/drive-and-the-maker/imgs/meta.png b/apps/blog/public/drive-and-the-maker/imgs/meta.png
index f29e20b6ed..f2243e7829 100644
Binary files a/apps/blog/public/drive-and-the-maker/imgs/meta.png and b/apps/blog/public/drive-and-the-maker/imgs/meta.png differ
diff --git a/apps/blog/public/evaluating-object-storage-providers-for-prisma-compute/imgs/hero.svg b/apps/blog/public/evaluating-object-storage-providers-for-prisma-compute/imgs/hero.svg
index 4809ddd038..b9154e25a6 100644
--- a/apps/blog/public/evaluating-object-storage-providers-for-prisma-compute/imgs/hero.svg
+++ b/apps/blog/public/evaluating-object-storage-providers-for-prisma-compute/imgs/hero.svg
@@ -1,59 +1,85 @@
-
-
-
- Tigris finished about 3x faster than Cloudflare R2 on the accelerated-fs workload
- Mixed read/write phase, 5 GiB dataset, averaged across six Prisma Compute regions. Cloudflare R2 finished in 861 seconds; Tigris finished in 266 seconds, about 3x faster. Lower is faster.
+
+ Evaluating Object Storage Providers for Prisma Compute
+ An evaluation matrix of three object stores on the criteria that separated them: egress price, bucket model, and read median for 10 KiB reads from Frankfurt. Tigris is the highlighted row. Prisma blog cover, 2026 brand, prism red Compute accent, no headline.
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
-
diff --git a/apps/blog/public/evaluating-object-storage-providers-for-prisma-compute/imgs/meta.png b/apps/blog/public/evaluating-object-storage-providers-for-prisma-compute/imgs/meta.png
index 70ca9fdf2d..2621fae91e 100644
Binary files a/apps/blog/public/evaluating-object-storage-providers-for-prisma-compute/imgs/meta.png and b/apps/blog/public/evaluating-object-storage-providers-for-prisma-compute/imgs/meta.png differ
diff --git a/apps/blog/public/evolving-agentic-engineering-at-prisma/imgs/hero.svg b/apps/blog/public/evolving-agentic-engineering-at-prisma/imgs/hero.svg
index 8884508dbe..abf8e054f4 100644
--- a/apps/blog/public/evolving-agentic-engineering-at-prisma/imgs/hero.svg
+++ b/apps/blog/public/evolving-agentic-engineering-at-prisma/imgs/hero.svg
@@ -1,3 +1,96 @@
-
-
+
+ Evolving Agentic Engineering at Prisma
+ A before and after drawing: seven anonymous rows standing for the verbose skill layer a team ends up owning, beside three named contracts, spec, plan and execute, in prism cyan. Prisma blog cover, 2026 brand.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Agentic engineering, revisited
+
+
+
+
+ Not more process, more precise
+
+
+
+
+ A skill should define a contract, not narrate a process.
+
+
+
+
+ Opinionated skills
+
+ process design
+
+ skill wording
+
+ model assumptions
+
+ harness assumptions
+
+ evaluation surface
+
+ ongoing maintenance
+
+ obsolescence risk
+
+ Skills as interfaces
+
+ spec
+
+
+ plan
+
+ plan
+
+
+ milestone
+
+ diff
+
+
+ review
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/evolving-agentic-engineering-at-prisma/imgs/meta.png b/apps/blog/public/evolving-agentic-engineering-at-prisma/imgs/meta.png
index 762fb57976..57bdfc34a1 100644
Binary files a/apps/blog/public/evolving-agentic-engineering-at-prisma/imgs/meta.png and b/apps/blog/public/evolving-agentic-engineering-at-prisma/imgs/meta.png differ
diff --git a/apps/blog/public/from-local-to-production-with-prisma-postgres/imgs/hero.svg b/apps/blog/public/from-local-to-production-with-prisma-postgres/imgs/hero.svg
index dfb1c4d8bc..0b037c0762 100644
--- a/apps/blog/public/from-local-to-production-with-prisma-postgres/imgs/hero.svg
+++ b/apps/blog/public/from-local-to-production-with-prisma-postgres/imgs/hero.svg
@@ -1,74 +1,71 @@
-
-
-
- From Local Development to Production with Prisma Postgres
- A .env file swaps a local Postgres connection string for a hosted Prisma Postgres one; the app moves from local to production.
+
+ From Local Development to Production with Prisma Postgres
+ One env swap takes a Prisma app from local Postgres to hosted Prisma Postgres. Prisma blog cover, 2026 brand, prism yellow accent.
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+ Prisma Postgres
-
- PRISMA POSTGRES
-
- Local to
- production,
- one env swap
+
+ Local to production,
+ one env swap
-
-
- .env
-
-
- # local
- DATABASE_URL = "postgres://…@localhost:51214"
- # production
- DATABASE_URL = "postgres://…@pooled.db.prisma.io"
- DIRECT_URL = "postgres://…@db.prisma.io"
-
+
+
+
+ .env
+ # local
+ DATABASE_URL="postgres://…@localhost:51214"
+ # production
+ DATABASE_URL="postgres://…@db.prisma.io:5432"
-
-
-
-
-
-
-
- $_
- local
- prisma dev · Docker
-
-
-
-
- production
- Prisma Postgres
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- Prisma
-
diff --git a/apps/blog/public/from-local-to-production-with-prisma-postgres/imgs/meta.png b/apps/blog/public/from-local-to-production-with-prisma-postgres/imgs/meta.png
index e465c56a18..4652b4cc19 100644
Binary files a/apps/blog/public/from-local-to-production-with-prisma-postgres/imgs/meta.png and b/apps/blog/public/from-local-to-production-with-prisma-postgres/imgs/meta.png differ
diff --git a/apps/blog/public/give-your-agent-a-database/imgs/hero.svg b/apps/blog/public/give-your-agent-a-database/imgs/hero.svg
index 347535f50d..b35a1ede33 100644
--- a/apps/blog/public/give-your-agent-a-database/imgs/hero.svg
+++ b/apps/blog/public/give-your-agent-a-database/imgs/hero.svg
@@ -1,60 +1,75 @@
-
-
-
- Your AI Agent Needs a Database. Give It One in Five Seconds
- A terminal runs npx create-db --json and returns a Postgres connection string an agent can use immediately.
+
+ Your AI Agent Needs a Database. Give It One in Five Seconds
+ A flat three step provisioning flow: a coding agent runs npx create-db@latest --json and gets a real Prisma Postgres database at db.prisma.io that deletes itself after 24 hours. Prisma blog cover, 2026 brand, prism yellow accent, no headline.
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
-
-
- NPX CREATE-DB
-
- Give your agent
- a database
-
+
+
+ Ephemeral Prisma Postgres
-
-
-
-
-
-
- $ npx create-db --json
-
-
- {
- "success": true ,
- "connectionString":
- "postgres://…@db.prisma.io:5432",
- "deletionDate": "2026-07-10T08:22Z" ,
- "region": "us-east-1"
- }
-
-
-
- ready in 5 seconds, deletes itself in 24 hours
+
+
+
+ coding agent
+ Cursor, Codex, Claude Code
+ wants a clean database
+
+ npx create-db@latest --json
+ real PostgreSQL, no account
+ no Docker, no sign-up
+
+ db.prisma.io:5432
+ deletes itself after 24 hours
+ claim it to keep it, free
+
+
+
+
- Prisma
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/give-your-agent-a-database/imgs/meta.png b/apps/blog/public/give-your-agent-a-database/imgs/meta.png
index 4c4d63be57..123f758474 100644
Binary files a/apps/blog/public/give-your-agent-a-database/imgs/meta.png and b/apps/blog/public/give-your-agent-a-database/imgs/meta.png differ
diff --git a/apps/blog/public/gremlin-turning-open-tasks-into-pull-requests/imgs/hero.png b/apps/blog/public/gremlin-turning-open-tasks-into-pull-requests/imgs/hero.png
deleted file mode 100644
index 482d820190..0000000000
Binary files a/apps/blog/public/gremlin-turning-open-tasks-into-pull-requests/imgs/hero.png and /dev/null differ
diff --git a/apps/blog/public/gremlin-turning-open-tasks-into-pull-requests/imgs/hero.svg b/apps/blog/public/gremlin-turning-open-tasks-into-pull-requests/imgs/hero.svg
new file mode 100644
index 0000000000..23736eebec
--- /dev/null
+++ b/apps/blog/public/gremlin-turning-open-tasks-into-pull-requests/imgs/hero.svg
@@ -0,0 +1,86 @@
+
+ Gremlin: turning open tasks into pull requests
+ A pipeline: Sentry issues, Linear tasks and Slack threads fan into one chain, gather context, sandbox, validate, and end in an Open PR tile marked in prism cyan. Prisma blog cover, 2026 brand.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Gremlin, an autonomous agent
+
+
+
+
+ The pull request is the interface
+
+
+
+
+
+
+ Sentry issue
+
+ Linear task
+
+ Slack thread
+
+
+
+
+
+
+
+ Gather context
+
+ Sandbox
+
+ Validate
+
+ Open PR
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/gremlin-turning-open-tasks-into-pull-requests/imgs/meta.png b/apps/blog/public/gremlin-turning-open-tasks-into-pull-requests/imgs/meta.png
new file mode 100644
index 0000000000..9f27f60b7f
Binary files /dev/null and b/apps/blog/public/gremlin-turning-open-tasks-into-pull-requests/imgs/meta.png differ
diff --git a/apps/blog/public/how-prisma-build-with-agentic-ai/imgs/hero.svg b/apps/blog/public/how-prisma-build-with-agentic-ai/imgs/hero.svg
new file mode 100644
index 0000000000..e3e9ac61a2
--- /dev/null
+++ b/apps/blog/public/how-prisma-build-with-agentic-ai/imgs/hero.svg
@@ -0,0 +1,68 @@
+
+ Agentic Engineering: How Prisma Builds with AI
+ An ink prompt card holding the three questions the post says engineers ask of an agent, with the operative line, how can I set it up to succeed, marked in prism cyan. Prisma blog cover, 2026 brand.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Agentic engineering
+
+
+
+
+
+ >
+ what can this do
+ >
+ where does it fail
+ >
+ how can I set it up to succeed
+
+
+
+
+ A failure is signal,
+ not proof
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/how-prisma-build-with-agentic-ai/imgs/meta.png b/apps/blog/public/how-prisma-build-with-agentic-ai/imgs/meta.png
index 59b88b9ad0..08894dd5d4 100644
Binary files a/apps/blog/public/how-prisma-build-with-agentic-ai/imgs/meta.png and b/apps/blog/public/how-prisma-build-with-agentic-ai/imgs/meta.png differ
diff --git a/apps/blog/public/how-to-use-ai-safely-and-responsibly/imgs/hero.png b/apps/blog/public/how-to-use-ai-safely-and-responsibly/imgs/hero.png
deleted file mode 100644
index 18e14b770a..0000000000
Binary files a/apps/blog/public/how-to-use-ai-safely-and-responsibly/imgs/hero.png and /dev/null differ
diff --git a/apps/blog/public/how-to-use-ai-safely-and-responsibly/imgs/hero.svg b/apps/blog/public/how-to-use-ai-safely-and-responsibly/imgs/hero.svg
new file mode 100644
index 0000000000..782135bb27
--- /dev/null
+++ b/apps/blog/public/how-to-use-ai-safely-and-responsibly/imgs/hero.svg
@@ -0,0 +1,80 @@
+
+ How to Use AI Safely and Responsibly
+ A guardrail policy card pairing scoped permissions the post allows, bash(npm test), repo:read and /sandbox, against the broad grants it refuses, bash(*), admin:org and skipping permissions. Prisma blog cover, 2026 brand, prism cyan accent.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Security baseline
+
+
+
+
+ Your agent runs with
+ your permissions
+
+
+
+
+
+
+
+ allowed
+ refused
+
+ bash(npm test)
+
+ bash(*)
+
+ repo:read
+
+ admin:org
+
+ /sandbox
+
+ --dangerously-skip-permissions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/how-to-use-ai-safely-and-responsibly/imgs/meta.png b/apps/blog/public/how-to-use-ai-safely-and-responsibly/imgs/meta.png
new file mode 100644
index 0000000000..45b4f9bd8f
Binary files /dev/null and b/apps/blog/public/how-to-use-ai-safely-and-responsibly/imgs/meta.png differ
diff --git a/apps/blog/public/how-xeito-builds-features-not-database-infrastructure-with-prisma/imgs/hero.svg b/apps/blog/public/how-xeito-builds-features-not-database-infrastructure-with-prisma/imgs/hero.svg
index b4db9e4638..1f6561346d 100644
--- a/apps/blog/public/how-xeito-builds-features-not-database-infrastructure-with-prisma/imgs/hero.svg
+++ b/apps/blog/public/how-xeito-builds-features-not-database-infrastructure-with-prisma/imgs/hero.svg
@@ -1,74 +1,74 @@
How One Founder Builds a Live Sports Platform Without a Database Team
- A Prisma customer story cover for Xeito, showing one founder building a live sports platform while Prisma handles database defaults.
+ A typographic quote card: Gabriel Gil Graña of Xeito on wanting to spend his time creating features instead of managing memory, pool connections, storage limits, replicas and backups. Prisma blog cover, 2026 brand, prism yellow accent.
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
- CUSTOMER STORY
- One founder.
- Live sports
- platform.
- Xeito keeps shipping product work.
- Prisma handles database defaults.
+
+
+
+
+
-
-
- Xeito product work
+
+
+ Xeito, live sports platform
+
-
-
-
- Features
- leagues.live
- payments
- standings
- ai.coach
-
+
+
+
-
-
- Prisma defaults
- schema → migrations → types
-
+ “
+ I really wanted to spend time creating features
+
+ and not having to deal with memory, pool connections,
+ storage limits, replicas, backups.”
+
-
-
+
+ Gabriel Gil Graña
+ Founder, Xeito
- Prisma
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/how-xeito-builds-features-not-database-infrastructure-with-prisma/imgs/meta.png b/apps/blog/public/how-xeito-builds-features-not-database-infrastructure-with-prisma/imgs/meta.png
index 02d50a113f..89ed0fa553 100644
Binary files a/apps/blog/public/how-xeito-builds-features-not-database-infrastructure-with-prisma/imgs/meta.png and b/apps/blog/public/how-xeito-builds-features-not-database-infrastructure-with-prisma/imgs/meta.png differ
diff --git a/apps/blog/public/image-transformations-with-bun-on-prisma-compute/imgs/hero.svg b/apps/blog/public/image-transformations-with-bun-on-prisma-compute/imgs/hero.svg
index 38a03648c1..0df3214ab4 100644
--- a/apps/blog/public/image-transformations-with-bun-on-prisma-compute/imgs/hero.svg
+++ b/apps/blog/public/image-transformations-with-bun-on-prisma-compute/imgs/hero.svg
@@ -1 +1,94 @@
-Image Transformations with Bun on Prisma Compute Request-time image pipeline from source to Bun.Image to WebP on Prisma Compute. PRISMA COMPUTE Image transforms as app logic Request-time image pipeline input source native Bun.Image output webp Prisma
\ No newline at end of file
+
+ Image Transformations with Bun on Prisma Compute
+ A request-time pipeline of three tiles: chair.jpg requested with w=640 and q=75, transformed by Bun.Image into webp, and returned as chair.webp cached immutable for a year. Prisma blog cover, 2026 brand, prism red Compute accent.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Image transforms on Bun
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ chair.jpg
+ Bun.Image
+ chair.webp
+ ?w=640&q=75
+ resize · webp
+ immutable, 1 year
+
+
+
+
+
+ Image transforms are
+ just app logic
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/image-transformations-with-bun-on-prisma-compute/imgs/meta.png b/apps/blog/public/image-transformations-with-bun-on-prisma-compute/imgs/meta.png
index 11528e0698..aae98af52a 100644
Binary files a/apps/blog/public/image-transformations-with-bun-on-prisma-compute/imgs/meta.png and b/apps/blog/public/image-transformations-with-bun-on-prisma-compute/imgs/meta.png differ
diff --git a/apps/blog/public/infraslopture-and-other-paradoxes/imgs/hero.svg b/apps/blog/public/infraslopture-and-other-paradoxes/imgs/hero.svg
index aa6fd74cb3..6ab7611df0 100644
--- a/apps/blog/public/infraslopture-and-other-paradoxes/imgs/hero.svg
+++ b/apps/blog/public/infraslopture-and-other-paradoxes/imgs/hero.svg
@@ -1,59 +1,74 @@
-
-
- Infraslopture and Other Paradoxes
- A terminal where a prompt asking for reproducible server configurations resolves into a checklist of NixOS, colmena, sops-nix, Incus, and Tailscale.
+
+ Infraslopture and Other Paradoxes
+ Untrustable agents meeting production infrastructure: a reproducible-config checklist. Prisma blog cover, 2026 brand, prism red accent.
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+ Agentic engineering
-
- AGENTIC ENGINEERING
-
- Infraslopture
- and other paradoxes
+
+ Infraslopture,
+ and other paradoxes
+ Untrustable agents, production infrastructure, no burned-down servers.
-
-
-
-
-
- > i need reproducible server configs
-
-
-
-
- NixOS + flakes
-
-
-
- colmena + sops-nix
-
-
-
- Incus + Tailscale
-
+
+
+
+ > i need reproducible server configs
+ ✓
+ NixOS + flakes
+ ✓
+ colmena + sops-nix
+ ✓
+ Incus + Tailscale
- Prisma
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/infraslopture-and-other-paradoxes/imgs/meta.png b/apps/blog/public/infraslopture-and-other-paradoxes/imgs/meta.png
index 07f25dc6da..b0ae05df68 100644
Binary files a/apps/blog/public/infraslopture-and-other-paradoxes/imgs/meta.png and b/apps/blog/public/infraslopture-and-other-paradoxes/imgs/meta.png differ
diff --git a/apps/blog/public/introducing-create-prisma/imgs/hero.png b/apps/blog/public/introducing-create-prisma/imgs/hero.png
deleted file mode 100644
index 2e48d60706..0000000000
Binary files a/apps/blog/public/introducing-create-prisma/imgs/hero.png and /dev/null differ
diff --git a/apps/blog/public/introducing-create-prisma/imgs/hero.svg b/apps/blog/public/introducing-create-prisma/imgs/hero.svg
new file mode 100644
index 0000000000..275ffa9fd7
--- /dev/null
+++ b/apps/blog/public/introducing-create-prisma/imgs/hero.svg
@@ -0,0 +1,83 @@
+
+ Introducing Create-Prisma: Start a Prisma App With One Command
+ An ink terminal card running npm create prisma at latest, with a checklist of what the CLI generates: a Prisma schema, a seed file, prisma.config.ts, a dotenv file with DATABASE_URL, and the database scripts. Prisma blog cover, 2026 brand, prism cyan accent.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ create-prisma
+
+
+
+
+ Every framework,
+ the same setup
+
+ Templates for Next.js, Nuxt, Hono, and more.
+
+
+
+
+
+ $ npm create prisma@latest
+
+
+
+ ✓
+ prisma/schema.prisma
+ ✓
+ prisma/seed.ts
+ ✓
+ prisma.config.ts
+ ✓
+ .env with DATABASE_URL
+ ✓
+ db:generate, db:migrate, db:seed
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/introducing-create-prisma/imgs/meta.png b/apps/blog/public/introducing-create-prisma/imgs/meta.png
index 457abfe666..90bfdc0d2b 100644
Binary files a/apps/blog/public/introducing-create-prisma/imgs/meta.png and b/apps/blog/public/introducing-create-prisma/imgs/meta.png differ
diff --git a/apps/blog/public/launching-prisma-compute-public-beta/imgs/hero.png b/apps/blog/public/launching-prisma-compute-public-beta/imgs/hero.png
index 33d382d51c..fdc68fa8db 100644
Binary files a/apps/blog/public/launching-prisma-compute-public-beta/imgs/hero.png and b/apps/blog/public/launching-prisma-compute-public-beta/imgs/hero.png differ
diff --git a/apps/blog/public/launching-prisma-compute-public-beta/imgs/hero.svg b/apps/blog/public/launching-prisma-compute-public-beta/imgs/hero.svg
new file mode 100644
index 0000000000..dc1211171f
--- /dev/null
+++ b/apps/blog/public/launching-prisma-compute-public-beta/imgs/hero.svg
@@ -0,0 +1,80 @@
+
+ Launching Prisma Compute in Public Beta
+ Prisma Compute public beta: TypeScript app hosting on the same infrastructure as your database. Prisma blog cover, 2026 brand, prism red accent with the prism-stripe launch motif.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Prisma Compute · Public beta
+
+
+
+
+ Your app, hosted
+ next to its database
+
+ TypeScript app hosting on the same infrastructure as your data.
+
+
+
+
+
+ $ prisma app deploy
+ ✓ build · 12s
+ ✓ database connected
+ → live
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/launching-prisma-compute-public-beta/imgs/meta.png b/apps/blog/public/launching-prisma-compute-public-beta/imgs/meta.png
index bb2b5ccbb8..fdc68fa8db 100644
Binary files a/apps/blog/public/launching-prisma-compute-public-beta/imgs/meta.png and b/apps/blog/public/launching-prisma-compute-public-beta/imgs/meta.png differ
diff --git a/apps/blog/public/logo/full-color-white.svg b/apps/blog/public/logo/full-color-white.svg
new file mode 100644
index 0000000000..19e803de05
--- /dev/null
+++ b/apps/blog/public/logo/full-color-white.svg
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/logo/full-color.svg b/apps/blog/public/logo/full-color.svg
new file mode 100644
index 0000000000..19c4f1c037
--- /dev/null
+++ b/apps/blog/public/logo/full-color.svg
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/logo/prisma-footer-black.svg b/apps/blog/public/logo/prisma-footer-black.svg
new file mode 100644
index 0000000000..56293264a0
--- /dev/null
+++ b/apps/blog/public/logo/prisma-footer-black.svg
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/logo/prisma-footer-color.svg b/apps/blog/public/logo/prisma-footer-color.svg
new file mode 100644
index 0000000000..b54c20465d
--- /dev/null
+++ b/apps/blog/public/logo/prisma-footer-color.svg
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/make-your-docs-agent-ready/imgs/hero.svg b/apps/blog/public/make-your-docs-agent-ready/imgs/hero.svg
index 10abab986c..29fc3c90c1 100644
--- a/apps/blog/public/make-your-docs-agent-ready/imgs/hero.svg
+++ b/apps/blog/public/make-your-docs-agent-ready/imgs/hero.svg
@@ -1,100 +1,80 @@
-
-
-
- How to Make Your Docs Agent-Ready
- Prisma blog cover. A row of four document tiles, llms.txt highlighted in teal, then a markdown page, skill.md, and the .well-known MCP discovery document, under the headline "Make your docs agent-ready".
-
+
+ How to Make Your Docs Agent-Ready
+ An ink panel listing the Prisma docs endpoints an agent fetches: the split llms.txt index at 7 KB, per-area indexes, llms-full.txt at 4.5 MB, skill.md and the MCP discovery document. Prisma blog cover, 2026 brand, prism cyan accent.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
-
-
- DOCS FOR CODING AGENTS
+
+
+ Agent-ready docs
-
- Make your docs
- agent-ready
+
+ Small enough to
+ survive one fetch
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- { }
-
-
-
- llms.txt
- postgres.md
- skill.md
- .well-known/mcp
-
+
+ 116,000 characters down to 7,000.
+
+
+
+
+
+ agent endpoints
+
+
+
+ /docs/llms.txt
+ 7 KB
+ /docs/llms/orm.txt
+ /docs/llms/orm-v6.txt
+ 37 KB
+ /docs/llms/postgres.txt
+ /docs/llms-full.txt
+ 4.5 MB
+ /skill.md
+ /.well-known/mcp
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/make-your-docs-agent-ready/imgs/meta.png b/apps/blog/public/make-your-docs-agent-ready/imgs/meta.png
index e0261cbe1d..6f168c8474 100644
Binary files a/apps/blog/public/make-your-docs-agent-ready/imgs/meta.png and b/apps/blog/public/make-your-docs-agent-ready/imgs/meta.png differ
diff --git a/apps/blog/public/mongodb-without-compromise/imgs/hero.svg b/apps/blog/public/mongodb-without-compromise/imgs/hero.svg
index fc72dc9414..18e113685b 100644
--- a/apps/blog/public/mongodb-without-compromise/imgs/hero.svg
+++ b/apps/blog/public/mongodb-without-compromise/imgs/hero.svg
@@ -1 +1,91 @@
-PRISMA 8 Prisma 8and MongoDB
\ No newline at end of file
+
+ MongoDB Without Compromise
+ Data shape drawing: an untyped MongoDB document beside the Prisma 8 contract that types it, including the embedded Address type. Prisma blog cover, 2026 brand, prism cyan accent.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Prisma 8 and MongoDB
+
+
+
+ Typed all the way down
+
+
+
+
+ MongoDB document
+
+
+ {
+ _id: ObjectId
+ name: "Alice Chen"
+ email: "alice@example.com"
+ address: { street, city }
+ }
+
+
+
+
+
+
+
+ Prisma 8 contract
+
+
+ model User {
+ id ObjectId @id @map("_id")
+ name String
+ email String
+ address Address?
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/mongodb-without-compromise/imgs/meta.png b/apps/blog/public/mongodb-without-compromise/imgs/meta.png
index 1c28d3b17d..56c204bcc3 100644
Binary files a/apps/blog/public/mongodb-without-compromise/imgs/meta.png and b/apps/blog/public/mongodb-without-compromise/imgs/meta.png differ
diff --git a/apps/blog/public/object-store-buckets/imgs/hero.svg b/apps/blog/public/object-store-buckets/imgs/hero.svg
index f17aa8e9c6..c126761931 100644
--- a/apps/blog/public/object-store-buckets/imgs/hero.svg
+++ b/apps/blog/public/object-store-buckets/imgs/hero.svg
@@ -1,85 +1,81 @@
-
-
-
- Your AI Agent Needs File Storage. Now It Can Get Its Own
- An agent chip issues two Management API calls that create a bucket and mint a key, then writes hello/first-upload.txt, 44 bytes, into the bucket.
+
+ Your AI Agent Needs File Storage. Now It Can Get Its Own
+ Object Store buckets: two Management API calls take an agent from nothing to reading and writing files. Prisma blog cover, 2026 brand, prism yellow accent.
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
-
-
- OBJECT STORE BUCKETS
+
+
+ Object Store
- Your agent can provision
- file storage now
+
+ Your agent gets
+ its own file storage
+
+ S3-compatible buckets on every Prisma project, two API calls away.
-
-
-
- agent
-
-
-
-
- uploads
- bkt_ic7y0a24
-
+
+
+
+ agent
+ needs files
-
-
- POST /v1/buckets
- ready
+ →
-
- POST /v1/buckets/:id/keys
- read_write
+
+ Management API
+ 2 calls
-
-
-
- hello/first-upload.txt
- 44 bytes
+ →
-
- S3-compatible · any client · keys scoped read / read_write
+
+ bucket
+ read · write
-
- Prisma
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/object-store-buckets/imgs/meta.png b/apps/blog/public/object-store-buckets/imgs/meta.png
index 27d6d9cace..067e95b92b 100644
Binary files a/apps/blog/public/object-store-buckets/imgs/meta.png and b/apps/blog/public/object-store-buckets/imgs/meta.png differ
diff --git a/apps/blog/public/postgres-bloom-index-the-overlooked-postgres-feature/imgs/bloom-filters-in-postgres.png b/apps/blog/public/postgres-bloom-index-the-overlooked-postgres-feature/imgs/bloom-filters-in-postgres.png
deleted file mode 100644
index cb1c5c9d03..0000000000
Binary files a/apps/blog/public/postgres-bloom-index-the-overlooked-postgres-feature/imgs/bloom-filters-in-postgres.png and /dev/null differ
diff --git a/apps/blog/public/postgres-bloom-index-the-overlooked-postgres-feature/imgs/hero.svg b/apps/blog/public/postgres-bloom-index-the-overlooked-postgres-feature/imgs/hero.svg
new file mode 100644
index 0000000000..42fd7553e6
--- /dev/null
+++ b/apps/blog/public/postgres-bloom-index-the-overlooked-postgres-feature/imgs/hero.svg
@@ -0,0 +1,130 @@
+
+ Bloom Filters in Postgres: The Index Type Most Developers Overlook
+ Probabilistic set drawing: the item alice hashed by fnv1a, djb2 and murmur3, setting bits 2, 7 and 11 of a sixteen bit array. Prisma blog cover, 2026 brand, prism yellow accent, no headline.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ item
+
+ "alice"
+
+
+
+
+
+
+
+
+
+
+ fnv1a
+
+ djb2
+
+ murmur3
+
+
+
+
+
+
+
+
+
+
+
+
+ 16 bits
+
+
+ 0
+
+ 0
+
+ 1
+
+ 0
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+
+ 0
+
+ 0
+
+ 0
+
+ 0
+
+
+ 2
+ 7
+ 11
+
+
+
+ one bloom signature per row
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/postgres-bloom-index-the-overlooked-postgres-feature/imgs/meta.png b/apps/blog/public/postgres-bloom-index-the-overlooked-postgres-feature/imgs/meta.png
new file mode 100644
index 0000000000..a59a00fb10
Binary files /dev/null and b/apps/blog/public/postgres-bloom-index-the-overlooked-postgres-feature/imgs/meta.png differ
diff --git a/apps/blog/public/price-the-work-not-the-workflow/imgs/hero.png b/apps/blog/public/price-the-work-not-the-workflow/imgs/hero.png
deleted file mode 100644
index dcb14afad2..0000000000
Binary files a/apps/blog/public/price-the-work-not-the-workflow/imgs/hero.png and /dev/null differ
diff --git a/apps/blog/public/price-the-work-not-the-workflow/imgs/hero.svg b/apps/blog/public/price-the-work-not-the-workflow/imgs/hero.svg
new file mode 100644
index 0000000000..e73d4b5901
--- /dev/null
+++ b/apps/blog/public/price-the-work-not-the-workflow/imgs/hero.svg
@@ -0,0 +1,96 @@
+
+ Price the Work, Not the Workflow
+ Four meters priced separately, one per kind of consumption: requests, provisioned memory, active CPU and outbound bandwidth, with deploys, previews, retries, seats and idle time struck out as not billed. Prisma blog cover, 2026 brand, prism red accent.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Prisma Compute pricing
+
+
+
+ One meter per kind of work
+
+
+
+
+
+
+
+
+
+
+
+
+ Requests
+ $1.00
+ per 1M
+
+ Provisioned memory
+ $0.006
+ per GB-hour
+
+ Active CPU
+ $0.064
+ per vCPU-hour
+
+ Outbound bandwidth
+ $0.025
+ per GB
+
+
+
+ deploys, previews, retries, seats, idle time
+
+ not billed
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/price-the-work-not-the-workflow/imgs/meta.png b/apps/blog/public/price-the-work-not-the-workflow/imgs/meta.png
new file mode 100644
index 0000000000..072db6b251
Binary files /dev/null and b/apps/blog/public/price-the-work-not-the-workflow/imgs/meta.png differ
diff --git a/apps/blog/public/prisma-7-ama-clearing-up-the-why-behind-the-changes/imgs/hero-fed37f83921ceeba6d0395d774c48ae9d5b68dcc-844x474-7cca11ee09.png b/apps/blog/public/prisma-7-ama-clearing-up-the-why-behind-the-changes/imgs/hero-fed37f83921ceeba6d0395d774c48ae9d5b68dcc-844x474-7cca11ee09.png
deleted file mode 100644
index 6150d03403..0000000000
Binary files a/apps/blog/public/prisma-7-ama-clearing-up-the-why-behind-the-changes/imgs/hero-fed37f83921ceeba6d0395d774c48ae9d5b68dcc-844x474-7cca11ee09.png and /dev/null differ
diff --git a/apps/blog/public/prisma-7-ama-clearing-up-the-why-behind-the-changes/imgs/hero.svg b/apps/blog/public/prisma-7-ama-clearing-up-the-why-behind-the-changes/imgs/hero.svg
new file mode 100644
index 0000000000..09a8040447
--- /dev/null
+++ b/apps/blog/public/prisma-7-ama-clearing-up-the-why-behind-the-changes/imgs/hero.svg
@@ -0,0 +1,76 @@
+
+ Prisma 7 AMA: Clearing Up the Why Behind the Changes
+ A typographic question and answer from the Prisma 7 AMA: is Prisma 7 faster or slower than Prisma 6, answered with the line that it depends heavily on how you measure performance, with the operative phrase set in prism cyan. Prisma blog cover, 2026 brand, prism cyan accent.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Prisma 7 AMA
+
+
+
+
+
+ Q.
+
+ Prisma 7 vs Prisma 6 performance:
+ is it faster or slower?
+
+
+
+
+
+
+ A.
+
+ This depends heavily on
+ how you measure performance.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/blog/public/prisma-7-ama-clearing-up-the-why-behind-the-changes/imgs/meta-64c44281ee8d3e0fe5e7e9bbd309603e5496945d-1266x711-26d35e93c9.png b/apps/blog/public/prisma-7-ama-clearing-up-the-why-behind-the-changes/imgs/meta-64c44281ee8d3e0fe5e7e9bbd309603e5496945d-1266x711-26d35e93c9.png
deleted file mode 100644
index 735886ab0c..0000000000
Binary files a/apps/blog/public/prisma-7-ama-clearing-up-the-why-behind-the-changes/imgs/meta-64c44281ee8d3e0fe5e7e9bbd309603e5496945d-1266x711-26d35e93c9.png and /dev/null differ
diff --git a/apps/blog/public/prisma-7-ama-clearing-up-the-why-behind-the-changes/imgs/meta.png b/apps/blog/public/prisma-7-ama-clearing-up-the-why-behind-the-changes/imgs/meta.png
new file mode 100644
index 0000000000..99bca91ad8
Binary files /dev/null and b/apps/blog/public/prisma-7-ama-clearing-up-the-why-behind-the-changes/imgs/meta.png differ
diff --git a/apps/blog/public/prisma-compute-config-file/imgs/hero.svg b/apps/blog/public/prisma-compute-config-file/imgs/hero.svg
index 521918cefa..7478628352 100644
--- a/apps/blog/public/prisma-compute-config-file/imgs/hero.svg
+++ b/apps/blog/public/prisma-compute-config-file/imgs/hero.svg
@@ -1,504 +1,79 @@
-
-