Skip to content

Commit a7c71cc

Browse files
authored
chore(content): add check:library-content audit for content posts (#8526)
* chore(content): add check:library-content audit for blog, library, and customer posts Validates frontmatter against the strict ContentFrontmatterSchema, slug/folder parity, local ogImage existence, MDX compilation with remark-gfm, FAQ placement, and internal post links (including retired and moved slugs). Moves the library slug redirect maps into lib/library/retired-slugs.ts so next.config.ts and the audit share one source. Fixes two FAQ answers that rendered Markdown links as literal text. * fix(content): tighten check:library-content link, author, and ogImage rules Treat draft blog/library posts and customer stories missing from CUSTOMER_STORIES as unserved link targets, reserve only sibling folders that define a page or route, validate author profiles with AuthorSchema, check moved blog slug destinations, and reject ogImage paths that resolve outside public.
1 parent 1b0b86e commit a7c71cc

7 files changed

Lines changed: 856 additions & 30 deletions

File tree

‎apps/sim/content/library/ai-agent-vs-chatbot/index.mdx‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ ogImage: /library/ai-agent-vs-chatbot/cover.jpg
1212
draft: false
1313
faq:
1414
- q: "Do AI agents always produce more accurate answers than chatbots?"
15-
a: "Answer accuracy is the degree to which a system's response is correct and supported by the available evidence. In [Sim](https://www.sim.ai), you can inspect each workflow step and control which instructions, data, and tools the model uses. This visibility helps you find the source of an error and improve the workflow without assuming that an agent is inherently more accurate than a chatbot."
15+
a: "Answer accuracy is the degree to which a system's response is correct and supported by the available evidence. In Sim, you can inspect each workflow step and control which instructions, data, and tools the model uses. This visibility helps you find the source of an error and improve the workflow without assuming that an agent is inherently more accurate than a chatbot."
1616
- q: "Can a chatbot and an AI agent work together?"
17-
a: "A hybrid application uses a chatbot for conversation and an AI agent for actions that require tools or multiple steps. Sim connects our [Chat interface](https://docs.sim.ai/execution/chat) to agent workflows you build in a visual workspace with connected integrations. You can give users one conversational interface while the agent handles work across connected applications."
17+
a: "A hybrid application uses a chatbot for conversation and an AI agent for actions that require tools or multiple steps. Sim connects our Chat interface to agent workflows you build in a visual workspace with connected integrations. You can give users one conversational interface while the agent handles work across connected applications."
1818
- q: "Do I need to know how to code to build an AI agent?"
1919
a: "A visual agent builder represents workflow logic as configurable blocks that connect models to tools, so you do not have to program every step. Sim provides a visual workspace for creating and testing these workflows. You can add code when needed without building the orchestration layer from scratch."
2020
- q: "Can AI agents run with local models?"
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/**
2+
* AEO/GEO-style posts (listicles, comparisons, how-tos) split out of `/blog`
3+
* into the dedicated `/library` section so `/blog` stays editorial-only.
4+
* `next.config.ts` redirects `/blog/<slug>` to `/library/<slug>` for each.
5+
*/
6+
export const LIBRARY_MOVED_BLOG_SLUGS = [
7+
'best-zapier-alternatives',
8+
'ai-agents-vs-rpa',
9+
'ai-agent-vs-chatbot',
10+
'openai-vs-n8n-vs-sim',
11+
'ai-agent-ideas',
12+
'how-to-create-an-ai-agent',
13+
] as const
14+
15+
/**
16+
* Library articles retired by merging into a stronger article on the same
17+
* search intent, keyed by retired slug. `next.config.ts` redirects each
18+
* retired URL to the surviving article, and `check:library-content` rejects
19+
* new links to a retired slug.
20+
*/
21+
export const LIBRARY_MERGED_SLUGS: Readonly<Record<string, string>> = {
22+
'automation-anywhere-alternative': 'ai-agents-vs-rpa',
23+
'ai-native-vs-traditional-workflow-automation':
24+
'ai-native-workflow-automation-vs-traditional-automation',
25+
'best-ai-workflow-builders-small-teams-2026': 'best-ai-workflow-builders',
26+
'best-ai-agent-builder-2026': 'best-ai-agent-platforms-2026',
27+
'best-ai-agent-builders-slack-crm-automation-2026': 'best-ai-agents-for-slack',
28+
'best-open-source-ai-agent-frameworks': 'open-source-ai-agent-platforms',
29+
}

‎apps/sim/next.config.ts‎

Lines changed: 1 addition & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9,34 +9,7 @@ import {
99
getWorkflowExecutionCSPPolicy,
1010
} from './lib/core/security/csp'
1111
import { LANDING_ROUTES } from './lib/landing/routes'
12-
13-
/**
14-
* AEO/GEO-style posts (listicles, comparisons, how-tos) split out of `/blog`
15-
* into the dedicated `/library` section so `/blog` stays editorial-only.
16-
*/
17-
const LIBRARY_MOVED_BLOG_SLUGS = [
18-
'best-zapier-alternatives',
19-
'ai-agents-vs-rpa',
20-
'ai-agent-vs-chatbot',
21-
'openai-vs-n8n-vs-sim',
22-
'ai-agent-ideas',
23-
'how-to-create-an-ai-agent',
24-
] as const
25-
26-
/**
27-
* Library articles retired by merging into a stronger article on the same
28-
* search intent, keyed by retired slug. Keeps indexed URLs and inbound links
29-
* pointing at the surviving article.
30-
*/
31-
const LIBRARY_MERGED_SLUGS: Record<string, string> = {
32-
'automation-anywhere-alternative': 'ai-agents-vs-rpa',
33-
'ai-native-vs-traditional-workflow-automation':
34-
'ai-native-workflow-automation-vs-traditional-automation',
35-
'best-ai-workflow-builders-small-teams-2026': 'best-ai-workflow-builders',
36-
'best-ai-agent-builder-2026': 'best-ai-agent-platforms-2026',
37-
'best-ai-agent-builders-slack-crm-automation-2026': 'best-ai-agents-for-slack',
38-
'best-open-source-ai-agent-frameworks': 'open-source-ai-agent-platforms',
39-
}
12+
import { LIBRARY_MERGED_SLUGS, LIBRARY_MOVED_BLOG_SLUGS } from './lib/library/retired-slugs'
4013

4114
const nextConfig: NextConfig = {
4215
devIndicators: false,

‎bun.lock‎

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
"check:native-typecheck": "bun run scripts/check-native-typecheck.ts",
7272
"check:source-text": "bun run scripts/check-source-text.ts",
7373
"check:site-urls": "bun run scripts/check-site-urls.ts",
74+
"check:library-content": "bun run scripts/check-library-content.ts",
7475
"check:spec-example-ids": "bun run scripts/check-spec-example-ids.ts",
7576
"check:script-tests": "bun run scripts/check-script-test-coverage.ts",
7677
"check:test-patterns": "bun run scripts/check-test-patterns.ts",
@@ -162,6 +163,7 @@
162163
"devDependencies": {
163164
"@babel/parser": "7.29.2",
164165
"@biomejs/biome": "2.0.6",
166+
"@mdx-js/mdx": "3.1.1",
165167
"@octokit/rest": "^21.0.0",
166168
"@sim/utils": "workspace:*",
167169
"@types/opentype.js": "1.3.10",

0 commit comments

Comments
 (0)