mcpbeat Sign in

Customer Story Setup Agent Skill

>- Converts draft customer-story Markdown into Langfuse website MDX (Fumadocs), collects missing metadata and assets, wires meta.json and authors. Use when adding or converting a customer case study, user story, or /users page, or when the user mentions customer story setup, cresta/canva-style posts, or CustomerStoryCTA/BlogHeader for customers.

2k tokens
context cost
the whole folder, loaded on every use
1
files
instructions only
0
copies elsewhere
how many repositories repackaged it
231
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/langfuse/langfuse-docs --skill customer-story-setup

The instruction itself

11 sections, as written by the author

> Single source of truth: maintain this skill under

> .agents/skills/customer-story-setup/ only. Claude and Cursor load

> projected copies under .claude/skills/customer-story-setup and

> .cursor/skills/customer-story-setup.

Customer story setup (MD -> MDX)

Turns a plain Markdown draft into content/customers/<slug>.mdx in the

same pattern as content/customers/canva.mdx and cresta.mdx.

Before writing any file: collect missing input

Do not guess. If any item below is missing from the user's draft or

message, ask explicitly and wait for answers (or confirm defaults).

Content & publishing

| Topic | Ask |

| --------------------- | ----------------------------------------------------------------------------------------- |

| Company name | Legal/marketing name for copy and quotes |

| Company website | Public URL for the Company link in About &lt;Company&gt; |

| Slug | Filename: <slug>.mdx (lowercase, hyphens), e.g. cresta -> cresta.mdx |

| Page title | H1 string for BlogHeader + YAML title (often "How &lt;Company&gt; ... with Langfuse") |

| Short description | YAML description + BlogHeader description (SEO/social; 1-2 sentences) |

| Publish date | YAML date + BlogHeader date (e.g. March 26, 2026) |

| OG image | Optional ogImage: path; if unset, leave empty like other stories |

Authors (BlogHeader authors={["..."]})

| Topic | Ask |

| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

| Byline author(s) | Who should appear under the title (keys from data/authors.json) |

| External / guest speaker | If not in authors.json: collect name, title, optional socials, and headshot path under public/images/people/ or public/images/customers/<slug>/, then add an entry to data/authors.json (see existing entries). Every authors key must resolve in authors.json. |

Branding & Users index card

| Topic | Ask |

| ------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |

| Logos | Paths for customerLogo and customerLogoDark (light + dark mode), usually under public/images/customers/<slug>/ |

| Pull quote | customerQuote (short, for grid card) |

| Quote attribution | quoteAuthor, quoteRole, quoteCompany |

| Speaker headshot (optional) | quoteAuthorImage for card/SEO if you use the same as Canva |

| Show on /users | showInCustomerIndex: true \| false |

Images (screenshots & diagrams)

Produce a numbered checklist for the user (and keep it in the PR

description if useful):

  • Folder: public/images/customers/<slug>/
  • For each asset: filename, purpose, where it appears (section + suggested alt text)
  • Remind: customer posts use <Frame fullWidth> around markdown images, e.g. !Alt per site conventions
  • Size each image by aspect ratio (run sips -g pixelWidth -g pixelHeight <file> to get dimensions):
  • Portrait / square (ratio <= 1:1) -> <div className="flex justify-center"><Frame fullWidth className="w-1/2">...</Frame></div>
  • Landscape (~1.5:1) -> <div className="flex justify-center"><Frame fullWidth className="w-2/3">...</Frame></div>
  • Panoramic (> 2:1) -> <Frame fullWidth className="w-full">...</Frame> (no centering wrapper needed)

If the draft says "screenshot here" without files, list placeholders in

MDX with consistent paths so the user can drop files in later.

Ask whether to add sparse internal links. Default policy: only link

major product concepts (match what we used on Cresta):

  • Observability overview
  • Prompt management and/or Playground
  • Scores
  • Self-hosting
  • OpenTelemetry
  • Experiments
  • LLM-as-a-judge
  • Prompt version control

Do not pepper every noun with links. Use paths from **llms-docs.txt /

available-internal-links** rule so links resolve.


MDX structure to produce

  • YAML frontmatter at top: title, date, description, ogImage,

tag: customer-story, author (display string if needed), customerLogo,

customerLogoDark, optional quote fields, showInCustomerIndex.

  • Imports: BlogHeader, CustomerQuote (if quote), ImpactChart (if

impact section), CustomerStoryCTA; use Frame for images (global in MDX).

  • BlogHeader: title, description, customerLogo, authors, date;

optional image for hero.

  • Body headings: One conceptual H1 only (from BlogHeader). Body uses

## and ###; do not skip levels.

  • Quote block: <CustomerQuote quote="..." name="..." role="..." company="..." />
  • align role / company with frontmatter so the byline reads "Name, Role at Company"
  • avoid duplicating company name in role
  • Images: size by aspect ratio (see checklist item 4 under Images above)
  • portrait/square -> w-1/2 centered
  • landscape -> w-2/3 centered
  • panoramic -> w-full
  • Closing: <ImpactChart items={[{ area, impact }, ...]} /> (optional)

then <CustomerStoryCTA />.

Reference implementations: content/customers/canva.mdx,

content/customers/cresta.mdx.


Repo wiring (after MDX exists)

  • content/customers/meta.json
  • Add "<slug>" to the pages array (with "index" first).
  • Order matters for layout: the Users grid and homepage carousel are

sorted by sortCustomerStoriesByMetaOrder in

lib/sortCustomerStoriesByMeta.ts, which reads this list. Place the slug

where the card should appear (e.g. last in the list = bottom-right in a

2-column grid).

  • Authors
  • If new author: add to data/authors.json (key must match BlogHeader

authors).

  • Assets
  • Logos and story images under public/images/customers/<slug>/.

Checklist before finishing

  • [ ] All required fields collected from user (or documented as TBD)
  • [ ] authors keys exist in data/authors.json
  • [ ] meta.json includes slug in desired order
  • [ ] Image checklist given to user with folder path
  • [ ] Company website link in About section
  • [ ] Docs links only where agreed; no broken internal URLs
  • [ ] Replace all em dashes with regular hyphens (-) - the linter will do this anyway; better to do it upfront
  • [ ] Follow AGENTS.md / documentation-pages.mdc: one H1 via BlogHeader, American English, accessible alt text

Quick YAML skeleton (adapt fields)

---
title: "..."
date: ...
description: ...
ogImage:
tag: customer-story
author: ...
customerLogo: "/images/customers/<slug>/...-light.png"
customerLogoDark: "/images/customers/<slug>/...-dark.png"
customerQuote: "..."
quoteAuthor: "..."
quoteRole: "..."
quoteCompany: "..."
showInCustomerIndex: true
---

Other skills for the same job

different authors, same section of the catalogue
Doc Coauthoring
by anthropics
vendor ×10

Guide users through a structured workflow for co-authoring documentation. Use when user wants to write documentation, proposals, technical specs, decision docs, or similar structured content. This workflow helps users efficiently transfer context, refine content through iteration, and verify the doc works for readers. Trigger when user mentions writing docs, creating proposals, drafting specs, or similar documentation tasks.

4k tokens
Changelog Generator
by frostant
×9

Automatically creates user-facing changelogs from git commits by analyzing commit history, categorizing changes, and transforming technical commits into clear, customer-friendly release notes. Turns hours of manual changelog writing into minutes of automated generation.

774 tokens
Test Driven Development
by w95
×7

Use when implementing any feature or bugfix, before writing implementation code

2k tokens
Writing Plans
by ZhanlinCui
×4

Use when you have a spec or requirements for a multi-step task, before touching code

816 tokens
Writing Skills
by ZhanlinCui
×4

Use when creating new skills, editing existing skills, or verifying skills work before deployment

26k tokens scripts
Crafting Effective Readmes
by softaworks
×3

Use when writing or improving README files. Not all READMEs are the same — provides templates and guidance matched to your audience and project type.

15k tokens
Humanizer
by softaworks
×3

| Remove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's inflated symbolism, promotional language, superficial -ing analyses, vague attributions, em dash overuse, rule of three, AI vocabulary words, negative parallelisms, and excessive conjunctive phrases.

6k tokens
Opentrons Integration
by christophacham
×3

Official Opentrons Protocol API for OT-2 and Flex robots. Use when writing protocols specifically for Opentrons hardware with full access to Protocol API v2 features. Best for production Opentrons protocols, official API compatibility. For multi-vendor automation or broader equipment control use pylabrobot.

9k tokens scripts

How to use it

Copy the folder

Take langfuse/customer-story-setup from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.