| name | changelog |
| description | Write a new LLM Gateway changelog entry. Use when the user says "changelog", "changelog entry", "write a changelog", "add a changelog", "announce this feature", or asks to document a shipped feature for the public changelog. Produces the dated markdown file under apps/ui/src/content/changelog plus a gpt-image-2 prompt for the OpenGraph image. |
Changelog
Write a public changelog entry for LLM Gateway, in the house style, and hand back a ready-to-run gpt-image-2 prompt for its OpenGraph image.
Paths below assume the LLM Gateway monorepo. Adapt them if your changelog lives elsewhere — the format, voice, and image guidance carry over.
What you need first
Before writing, make sure you understand the feature concretely. If the user only gave a feature name, find the facts — don't guess:
- Read the relevant docs page under
apps/docs/content/ (e.g. features/<feature>.mdx).
- Inspect the shipping commit/PR if one is referenced:
git show <sha> --stat, then read the changed UI/API/gateway files for the exact user-facing behavior.
- Confirm plan gating (free vs Pro vs Enterprise), exact field names, error codes, and any limits. The changelog must be accurate — never invent prices, limits, or capabilities.
Where entries live
- Entries:
apps/ui/src/content/changelog/<YYYY-MM-DD>-<kebab-slug>.md
- Images:
apps/ui/public/changelog/<kebab-slug>.png
- Schema is enforced by
apps/ui/content-collections.ts — all frontmatter fields below are required (except draft).
Step 1 — Pick the date, id, and slug
Step 2 — Write the markdown file
Frontmatter (YAML), then the body. Entries are plain Markdown — no MDX/JSX components (no <Callout>); use bold inline notes instead.
---
id: "<next-id>"
slug: "<slug>"
date: "<YYYY-MM-DD>"
title: "<Title Case, ~3–7 words>"
summary: "<1–3 sentences: what shipped, the concrete benefit, and the plan if gated. This is the OG description and the listing blurb.>"
image:
src: "/changelog/<slug>.png"
alt: "<Descriptive alt text: the feature and what the image shows>"
width: 1536
height: 1024
---
<Opening paragraph: the problem this solves, then the one-line statement of what shipped. Bold the feature name once.>
## <Section header — verb-led or outcome-led>
<Body. Prefer a table for field/option references and a fenced code block for an API example.>
---
**[<Docs link> →](https://docs.llmgateway.io/...)** | **[<Secondary CTA> →](https://llmgateway.io/...)**
House style (match existing entries)
Read the two or three most recent files in apps/ui/src/content/changelog/ before writing, and mirror their tone:
- Lead with the problem, then the fix. First paragraph names the pain; the next sentence states what shipped.
- Benefits over features, specific over vague. "about 50% cheaper", "rejected with
400 before any data leaves the gateway" — not "improved efficiency".
- Confident and plain. Active voice. No exclamation points. No "very/really/simply". No buzzwords ("streamline", "seamless", "revolutionary").
- Show the API. Include a realistic
curl or JSON example when there's a request-level change. Use https://api.llmgateway.io/v1/... and $LLM_GATEWAY_API_KEY.
- Use a table for fields, options, strategies, or tiers.
- State plan gating explicitly (e.g. "Available on the Enterprise plan").
- Close with a footer link line: a docs link and one secondary CTA, separated by
|, each as **[Label →](url)**.
- Keep section headers in
##. Keep it scannable — short paragraphs, bullets for lists of behaviors.
Step 3 — Produce the OpenGraph image prompt
Hand the user a single, ready-to-paste gpt-image-2 prompt that produces the OG image, plus where to save it.
Resolution. Target 1536×1024 (3:2 landscape). This is the recommended OpenGraph size for gpt-image-2: the dimensions are divisible by 16 (a gpt-image-2 requirement) and crop cleanly to the ~1.91:1 social card. Match the width/height in the frontmatter to whatever you generate. (Square 1024×1024 is acceptable for icon-style art but crops more on social cards — prefer landscape for OG.)
Prompt guidance. Write a small summary prompt — 2–4 sentences — that:
- Describes a clean, modern, abstract tech illustration that conveys the feature's concept (e.g. a catalog/ledger of model cards with price tags and guard rails for the model catalog). Concept over literalism.
- States the LLM Gateway brand feel: minimal, premium, soft gradients, subtle depth, plenty of negative space, suitable as a backdrop behind a title.
- Says "no text, no words, no letters, no UI chrome" — AI image text is unreliable; the title lives in the page, not the image.
- Specifies the aspect: "wide 3:2 landscape composition, 1536×1024".
Output the prompt in a fenced block, then the save path, e.g.:
Prompt for gpt-image-2 (1536×1024):
```
A clean, modern abstract illustration of <concept>, in the LLM Gateway brand
style: minimal and premium, soft gradients, subtle depth and glow, generous
negative space, balanced as a backdrop behind a headline. Wide 3:2 landscape
composition, 1536×1024. No text, no words, no letters, no UI chrome.
```
Save the result to: apps/ui/public/changelog/<slug>.png
Generate the image with gpt-image-2 (LLM Gateway playground, the Images API, or any gpt-image-2 client), then drop the PNG at that path. The entry references it via image.src; until the file exists the entry builds fine but the image 404s.
Step 4 — Validate
pnpm format
turbo run build --filter=ui
pnpm format normalizes the markdown; the ui build fails if the frontmatter doesn't match the content-collections schema. Then commit (conventional commit, ≤50-char title), e.g. docs(changelog): add custom model catalog entry.