--- name: add-customer-to-user-list description: >- Add or update a company in the Langfuse /users adopters table. Use when the user asks to add a customer, adopter, or company to the users list, /users page, or adopters table — including "add X to the user list", "list as Langfuse Customer", or pasting a public blog/job/case-study link to cite. Always check for an existing user story before choosing the Reference cell. --- > **Single source of truth:** maintain this skill under > **`.agents/skills/add-customer-to-user-list/`** only. Claude and Cursor load > projected copies under **`.claude/skills/add-customer-to-user-list`** and > **`.cursor/skills/add-customer-to-user-list`**. # Add a customer to the users list Adds or updates one row in the public adopters table on `/users`. **Do not write a customer story in this skill.** If the user wants a full `/users/` case study, use [`customer-story-setup`](../customer-story-setup/SKILL.md) first, then come back here to link it. ## Canonical file | What | Where | | -------------------------------- | --------------------------------------------------------------------------- | | Adopters table (source of truth) | `components-mdx/adopters-table.mdx` | | Rendered on | `/users` (`content/customers/index.mdx`) and the handbook customers chapter | The handbook imports the same table (``). Editing the MDX file updates both pages. Do **not** duplicate the table elsewhere. ## Before writing any file Collect what you can from the request. Ask only for what is still missing: 1. **Company name** — public marketing name 2. **Company website** — used in the Company column 3. **Use case** — optional; write one if a user story or external link exists 4. **External reference URL** — optional public source (blog, job post, DPA, talk) Then **always** check for a user story. Do not skip this step. ## Always check: is there a user story? Search the working tree **and** `origin/main` (this branch may be behind): - `content/customers/meta.json` → `pages` (skip `"index"`) - `content/customers/*.mdx` — match company name, legal name, or obvious slug variants (`hugging-face` vs `huggingface`, `merckgroup` vs `merck`) - Frontmatter `showInCustomerIndex` and `quoteCompany` if the filename is unclear The public URL is `/users/` where `` is the MDX filename without `.mdx`. | Result | Reference column (last) | Use case column (middle) | | --------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | | **User story exists** | `[User Story](/users/)` | Brief summary of **how they use Langfuse** from the story (or the user's wording if they gave one) | | **No story, external link given** | Briefly named link, see below | Brief summary of the Langfuse use case from that source | | **No story, no external link** | `Langfuse Customer` | Short product/industry line if the user gave one; otherwise a concise public description of the company. Do not invent a Langfuse use case. | Never write `Langfuse Customer` when a user story exists. Prefer the user story over an external link when both exist. ## External reference links When the user (or a public source they pointed at) provides a URL and there is **no** user story: 1. Open the page and read enough to understand the Langfuse mention. 2. **Middle column:** one short use-case phrase (sentence case), focused on what they do with Langfuse or their AI product — not a full company bio. 3. **Last column:** a short link label plus the URL, matching existing rows. Link-label examples already in the table: `Blogpost`, `Tech Blogpost`, `AWS Blogpost`, `LinkedIn Post`, `Job Description`, `Case Study`, `Client Story`, `Documentation`, `Release Notes`, `Research Paper`, `Source Code`, `Conference Talk`, `Conference Deck`, `Privacy Policy`, `Data Processing Addendum`, `Subprocessor List`, `IT White Paper`, `Technical Memorandum`, `Open Source Catalog`, `OSS LLMOps Stack`, `Partner Newsletter` Pick the closest label. Include a date only when it helps (`Blogpost from 12/23/2025`). **Always include a Wayback Machine archive** when the Reference cell is an external URL. User-story links (`/users/`) and `Langfuse Customer` do not need one. 1. Look up an existing `200` snapshot. **Always percent-encode the URL** with `curl -G --data-urlencode` (or equivalent). A raw `?url=` query treats `&` in the page URL as another CDX parameter and can miss snapshots. ```bash curl -sS -G "https://web.archive.org/cdx/search/cdx" \ --data-urlencode "url=" \ --data-urlencode "output=json" \ --data-urlencode "filter=statuscode:200" \ --data-urlencode "limit=1" ``` 2. If CDX is empty, **request a snapshot** and wait for it. Do not skip this step or ship the row without an archive. Percent-encode reserved characters in the page URL (`?`, `&`, `#`) so Save Page Now receives the full URL. ```bash curl -sS -I "https://web.archive.org/save/$(python3 -c 'import urllib.parse,sys; print(urllib.parse.quote(sys.argv[1], safe=":/"))' '')" ``` Re-query CDX until it returns a `200` row. The Save Page Now response may be `5xx` even when a capture is stored — trust CDX plus a fetch of the archive URL. 3. Confirm the snapshot contains the Langfuse mention (or the cited source content), then use: `https://web.archive.org/web//` ```md [Tech Blogpost](https://example.com/post) ([Archive](https://web.archive.org/web/20260304001459/https://example.com/post)) ``` If Wayback cannot capture the page after a retry (common for some LinkedIn or login-walled URLs), use an `archive.ph` snapshot the same way neighboring rows do. Say so in the PR. Do not omit the archive. ## Row format Insert **alphabetically by company display name** (the visible name, not the domain). Update an existing row instead of adding a duplicate. ```md | [Company](https://www.example.com/) | Short use-case phrase | Langfuse Customer | ``` ```md | [Company](https://www.example.com/) | Short use-case phrase | [User Story](/users/) | ``` ```md | [Company](https://www.example.com/) | Short use-case phrase | [Tech Blogpost](https://example.com/post) ([Archive](https://web.archive.org/web/...)) | ``` - Company cell: markdown link to the official site. Add a parenthetical only when the table already does that for subsidiaries (`(Wix)`, `(Toyota Group)`). - Use case: sentence case; keep it to one line; American English; no em dashes (use a regular hyphen or an em-dash character only if neighboring rows do). - Preserve the existing column padding so the table stays aligned. - One H1 per markdown file already exists in consumers; do not add a `# ` heading to the table file. ## Optional companion updates (only if they already apply) Do these only when the company is already on that surface, or the user asks: | Surface | File | When | | ------------------------- | ------------------------------------------ | ----------------------------------------------------------------------------------------- | | Handbook featured bullets | `content/handbook/chapters/customers.mdx` | Company is in the curated list; add `[(Read Story)](/users/)` if a story exists | | Homepage logo grid | `components/shared/EnterpriseLogoGrid.tsx` | Logo is already in the grid and a story exists → set `customerStoryPath: "/users/"` | | Wrapped customers | `components/wrapped/Customers.tsx` | Same: move to `companiesWithStories` and `{ type: "story", name: "..." }` | Do **not** add a homepage logo in this skill. That needs a tight wordmark SVG (no padding; see `components/home/img/AGENTS.md`) and is a separate request. ## Out of scope - Creating `content/customers/.mdx` or editing `content/customers/meta.json` → `customer-story-setup` - Designing or replacing homepage logos - Inventing public citations or claiming a user story that does not exist ## Checklist - [ ] Searched `content/customers/` and `origin/main` for a user story - [ ] Reference is `User Story`, a described external link, or `Langfuse Customer` - [ ] External reference includes a Wayback `[Archive](...)` (requested via Save Page Now if none existed) - [ ] Use case is a brief, sourced summary (not a long paragraph) - [ ] Company cell links to the official website - [ ] Row is alphabetical and not a duplicate - [ ] Table column alignment preserved - [ ] `pnpm run format` if you edited Prettier-covered files