@se-studio/project-build 1.0.122 → 1.0.124
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/management/sync-skills.d.ts.map +1 -1
- package/dist/management/sync-skills.js +31 -1
- package/dist/management/sync-skills.js.map +1 -1
- package/package.json +1 -1
- package/skills/contentful-cms/alt-text-audit/SKILL.md +60 -0
- package/skills/contentful-cms/cms-guidelines/README.md +3 -3
- package/skills/contentful-cms/core/SKILL.md +5 -0
- package/skills/contentful-cms/generate-cms-guidelines/SKILL.md +6 -1
- package/skills/contentful-cms/manifest.json +4 -1
- package/skills/contentful-cms/navigation/SKILL.md +5 -0
- package/skills/contentful-cms/rich-text/SKILL.md +5 -0
- package/skills/contentful-cms/schema-org/SKILL.md +74 -0
- package/skills/contentful-cms/screenshots/SKILL.md +5 -0
- package/skills/contentful-cms/seo-descriptions/SKILL.md +54 -0
- package/skills/contentful-cms/templates/SKILL.md +5 -0
- package/skills/contentful-cms/update-cms-guidelines/SKILL.md +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-skills.d.ts","sourceRoot":"","sources":["../../src/management/sync-skills.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sync-skills.d.ts","sourceRoot":"","sources":["../../src/management/sync-skills.ts"],"names":[],"mappings":"AA+CA,wBAAsB,UAAU,CAC9B,SAAS,GAAE,MAAsB;AACjC,uGAAuG;AACvG,WAAW,UAAQ,iBAsEpB"}
|
|
@@ -17,6 +17,16 @@ async function copyDir(src, dest) {
|
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
+
async function flattenGroup(srcGroupDir, prefix, targetDir) {
|
|
21
|
+
if (!fs.existsSync(srcGroupDir))
|
|
22
|
+
return;
|
|
23
|
+
const entries = await fs.promises.readdir(srcGroupDir, { withFileTypes: true });
|
|
24
|
+
for (const entry of entries) {
|
|
25
|
+
if (!entry.isDirectory())
|
|
26
|
+
continue;
|
|
27
|
+
await copyDir(path.join(srcGroupDir, entry.name), path.join(targetDir, `${prefix}-${entry.name}`));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
20
30
|
/**
|
|
21
31
|
* Returns true when this script is running from inside a pnpm/npm workspace
|
|
22
32
|
* (i.e. as a local package, not as an installed dependency from the registry).
|
|
@@ -56,7 +66,27 @@ ifInstalled = false) {
|
|
|
56
66
|
console.error('This may be because the package was not built or installed correctly.');
|
|
57
67
|
return;
|
|
58
68
|
}
|
|
59
|
-
|
|
69
|
+
// Remove stale nested group dirs and flat aliases before rebuilding
|
|
70
|
+
const groups = ['contentful-cms', 'se-marketing-sites', 'site-workflows'];
|
|
71
|
+
try {
|
|
72
|
+
const existing = await fs.promises.readdir(skillsTargetDir, { withFileTypes: true });
|
|
73
|
+
for (const entry of existing) {
|
|
74
|
+
if (!entry.isDirectory())
|
|
75
|
+
continue;
|
|
76
|
+
const isNestedGroup = groups.includes(entry.name);
|
|
77
|
+
const isFlatAlias = groups.some((g) => entry.name.startsWith(`${g}-`));
|
|
78
|
+
if (isNestedGroup || isFlatAlias) {
|
|
79
|
+
await fs.promises.rm(path.join(skillsTargetDir, entry.name), { recursive: true });
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// target dir may not exist yet — fine
|
|
85
|
+
}
|
|
86
|
+
// Flatten group dirs into <group>-<skill>/ at the top level
|
|
87
|
+
await flattenGroup(path.join(skillsSourceDir, 'contentful-cms'), 'contentful-cms', skillsTargetDir);
|
|
88
|
+
await flattenGroup(path.join(skillsSourceDir, 'se-marketing-sites'), 'se-marketing-sites', skillsTargetDir);
|
|
89
|
+
await flattenGroup(path.join(skillsSourceDir, 'site-workflows'), 'site-workflows', skillsTargetDir);
|
|
60
90
|
console.log('Skills synced successfully.');
|
|
61
91
|
}
|
|
62
92
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-skills.js","sourceRoot":"","sources":["../../src/management/sync-skills.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,IAAY;IAC9C,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAExE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAE7C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,kBAAkB;IACzB,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,YAAoB,OAAO,CAAC,GAAG,EAAE;AACjC,uGAAuG;AACvG,WAAW,GAAG,KAAK;IAEnB,IAAI,kBAAkB,EAAE,EAAE,CAAC;QACzB,IAAI,WAAW,EAAE,CAAC;YAChB,0EAA0E;YAC1E,OAAO;QACT,CAAC;QACD,OAAO,CAAC,IAAI,CACV,uFAAuF;YACrF,wEAAwE;YACxE,2FAA2F,CAC9F,CAAC;QACF,OAAO;IACT,CAAC;IAED,qFAAqF;IACrF,uDAAuD;IACvD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACxD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAElE,OAAO,CAAC,GAAG,CAAC,uBAAuB,eAAe,OAAO,eAAe,KAAK,CAAC,CAAC;IAE/E,IAAI,CAAC;QACH,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,wCAAwC,eAAe,EAAE,CAAC,CAAC;YACzE,OAAO,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;YACvF,OAAO;QACT,CAAC;QAED,MAAM,OAAO,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-skills.js","sourceRoot":"","sources":["../../src/management/sync-skills.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "Alt Text Audit"
|
|
3
|
+
description: "Audit and improve image alt text across site pages using cms-edit, with brand-aware terminology and accessibility best practices."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Skill: contentful-cms — Alt Text Audit
|
|
7
|
+
|
|
8
|
+
Use this skill when auditing or improving **image alt text** across a site's pages using `cms-edit`. Works with any brand context skill for customer-specific terminology.
|
|
9
|
+
|
|
10
|
+
## Brand Context
|
|
11
|
+
|
|
12
|
+
Before starting, check if a brand context skill is available (e.g., "OM1 Brand Context", "Something Else Brand Context"). If so, use its terminology, image interpretation guidelines, and brand voice when writing alt text.
|
|
13
|
+
|
|
14
|
+
If no brand context is available, ask the user about any brand-specific terms before proceeding.
|
|
15
|
+
|
|
16
|
+
## Workflow
|
|
17
|
+
|
|
18
|
+
1. **Get all pages**: `cms-edit sitemap`
|
|
19
|
+
2. **For each page** (or a specific page if the user specified one):
|
|
20
|
+
a. `cms-edit open /<slug>`
|
|
21
|
+
b. `cms-edit snapshot` — identify components with visual/image/media fields
|
|
22
|
+
c. For each image-bearing component:
|
|
23
|
+
- `cms-edit read @ref` to inspect fields
|
|
24
|
+
- Check `altText` on any image/visual references
|
|
25
|
+
- `cms-edit read @ref visual` to see asset details if needed
|
|
26
|
+
d. **Flag** images with:
|
|
27
|
+
- Missing alt text (empty or null)
|
|
28
|
+
- Generic alt text ("image", "photo", "banner", "screenshot", "img", "picture")
|
|
29
|
+
- Alt text that doesn't use brand terminology (if brand context available)
|
|
30
|
+
- Alt text over 125 characters
|
|
31
|
+
e. **Generate** improved alt text following the guidelines below
|
|
32
|
+
f. `cms-edit set @ref altText "new alt text"`
|
|
33
|
+
g. `cms-edit diff` to review, then `cms-edit save`
|
|
34
|
+
|
|
35
|
+
## Alt Text Guidelines
|
|
36
|
+
|
|
37
|
+
1. **Be specific and descriptive** — describe what is actually in the image
|
|
38
|
+
2. **Use brand terminology** — refer to the brand context for correct terms
|
|
39
|
+
3. **Keep under 125 characters** — screen readers truncate longer text
|
|
40
|
+
4. **Don't start with** "Image of", "Photo of", "Picture of"
|
|
41
|
+
5. **Decorative images** — set alt to "" (empty string) for dividers, background patterns
|
|
42
|
+
6. **Context matters** — describe the image's purpose on the page, not just its visual content
|
|
43
|
+
7. **Include relevant actions** — if people are doing something meaningful, describe it
|
|
44
|
+
|
|
45
|
+
## Reading Page Content
|
|
46
|
+
|
|
47
|
+
To understand a page before auditing its images, use `fetch_page_markdown` (from the site-workflows MCP server) with the page slug.
|
|
48
|
+
|
|
49
|
+
## Output
|
|
50
|
+
|
|
51
|
+
Present a summary table when complete:
|
|
52
|
+
|
|
53
|
+
| Page | Component | Old Alt Text | New Alt Text | Status |
|
|
54
|
+
|------|-----------|-------------|-------------|--------|
|
|
55
|
+
|
|
56
|
+
Where Status is: Updated, Skipped (decorative), Already Good, or Needs Review.
|
|
57
|
+
|
|
58
|
+
## Related skills
|
|
59
|
+
|
|
60
|
+
See the **core** skill for the full cms-edit workflow (open, snapshot, read, set, save).
|
|
@@ -18,7 +18,7 @@ Guidelines are short markdown fragments — one per CMS type — that describe h
|
|
|
18
18
|
pnpm --filter <appName> generate-showcase
|
|
19
19
|
```
|
|
20
20
|
This writes `src/generated/showcase-examples.json`.
|
|
21
|
-
3. **Curate showcase mocks** — run the [curate-showcase-mocks skill](.agents/skills/se-marketing-sites
|
|
21
|
+
3. **Curate showcase mocks** — run the [curate-showcase-mocks skill](.agents/skills/se-marketing-sites-curate-showcase-mocks/SKILL.md) to select the best examples into `showcase-mocks.json`. This makes the showcase (and screenshots) show realistic content.
|
|
22
22
|
4. **Generate field list** — parse TypeScript types to produce structured field metadata:
|
|
23
23
|
```bash
|
|
24
24
|
# From the app directory:
|
|
@@ -27,7 +27,7 @@ Guidelines are short markdown fragments — one per CMS type — that describe h
|
|
|
27
27
|
# Or from repo root:
|
|
28
28
|
pnpm --filter <appName> exec cms-generate-field-list --app-dir .
|
|
29
29
|
```
|
|
30
|
-
5. **Generate guidelines** — run the [Generate CMS guidelines skill](.agents/skills/contentful-cms
|
|
30
|
+
5. **Generate guidelines** — run the [Generate CMS guidelines skill](.agents/skills/contentful-cms-generate-cms-guidelines/SKILL.md).
|
|
31
31
|
|
|
32
32
|
Steps 1–3 only need to be repeated when content or component code changes significantly. Step 4 only needs to be repeated when TypeScript types change. Step 5 can be re-run at any time.
|
|
33
33
|
|
|
@@ -35,7 +35,7 @@ Steps 1–3 only need to be repeated when content or component code changes sign
|
|
|
35
35
|
|
|
36
36
|
## How to run guideline generation
|
|
37
37
|
|
|
38
|
-
Use the Cursor skill at [`.agents/skills/contentful-cms
|
|
38
|
+
Use the Cursor skill at [`.agents/skills/contentful-cms-generate-cms-guidelines/SKILL.md`](.agents/skills/contentful-cms-generate-cms-guidelines/SKILL.md). It supports three modes:
|
|
39
39
|
|
|
40
40
|
| Mode | When to use |
|
|
41
41
|
|---|---|
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "contentful-cms:core"
|
|
3
|
+
description: "Use cms-edit CLI to read/edit Contentful content (open → snapshot → read → set/rtf → diff → save)."
|
|
4
|
+
---
|
|
5
|
+
|
|
1
6
|
# Skill: contentful-cms CLI
|
|
2
7
|
|
|
3
8
|
Use this skill when you need to read or edit content in Contentful CMS using the `cms-edit` CLI tool.
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "contentful-cms:generate-cms-guidelines"
|
|
3
|
+
description: "Generate, regenerate, or merge CMS guideline markdown fragments for any app in the monorepo."
|
|
4
|
+
---
|
|
5
|
+
|
|
1
6
|
# Skill: Generate CMS Guidelines
|
|
2
7
|
|
|
3
8
|
Use this skill when you need to generate, regenerate, or merge CMS guideline markdown fragments for any app in the monorepo.
|
|
@@ -27,7 +32,7 @@ Guidelines are only meaningful when the showcase is populated with realistic dat
|
|
|
27
32
|
pnpm --filter <appName> generate-showcase
|
|
28
33
|
```
|
|
29
34
|
This writes `src/generated/showcase-examples.json` to the app.
|
|
30
|
-
3. **Curate showcase mocks:** Follow the [curate-showcase-mocks skill](.agents/skills/se-marketing-sites
|
|
35
|
+
3. **Curate showcase mocks:** Follow the [curate-showcase-mocks skill](.agents/skills/se-marketing-sites-curate-showcase-mocks/SKILL.md) to produce `showcase-mocks.json`.
|
|
31
36
|
4. **Generate field list:**
|
|
32
37
|
```bash
|
|
33
38
|
# From the app directory:
|
|
@@ -3,5 +3,8 @@
|
|
|
3
3
|
"templates": "Create and edit templates (preContent, postContent, menu, footer, colours)",
|
|
4
4
|
"navigation": "Create navigation, nav open/add, set nav item fields, remove",
|
|
5
5
|
"rich-text": "Rich text (rtf) and embeds (append/insert); Markdown support",
|
|
6
|
-
"screenshots": "Screenshot command, agent-browser requirement, mock vs live, --url-only"
|
|
6
|
+
"screenshots": "Screenshot command, agent-browser requirement, mock vs live, --url-only",
|
|
7
|
+
"alt-text-audit": "Audit and improve image alt text across site pages",
|
|
8
|
+
"seo-descriptions": "Generate or improve SEO meta descriptions for pages",
|
|
9
|
+
"schema-org": "Generate Schema.org structured data as Mustache templates"
|
|
7
10
|
}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "contentful-cms:navigation"
|
|
3
|
+
description: "Create or edit navigation entries and nav items in Contentful via cms-edit."
|
|
4
|
+
---
|
|
5
|
+
|
|
1
6
|
# Skill: contentful-cms — Navigation
|
|
2
7
|
|
|
3
8
|
Use this skill when creating or editing **navigation** entries and their items in Contentful via `cms-edit`.
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "contentful-cms:rich-text"
|
|
3
|
+
description: "Edit rich-text fields and insert embedded entries/assets via cms-edit."
|
|
4
|
+
---
|
|
5
|
+
|
|
1
6
|
# Skill: contentful-cms — Rich text and embeds
|
|
2
7
|
|
|
3
8
|
Use this skill when editing **rich text** fields (body, additionalCopy) and inserting **embedded entries/assets** via `cms-edit`.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "Schema.org Generation"
|
|
3
|
+
description: "Generate Schema.org structured data as Mustache templates for site pages and upload via cms-edit."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Skill: contentful-cms — Schema.org Generation
|
|
7
|
+
|
|
8
|
+
Use this skill when generating **Schema.org structured data** (JSON-LD) as Mustache templates for pages and uploading via `cms-edit`. Works with any brand context skill for customer name and site URL.
|
|
9
|
+
|
|
10
|
+
## Brand Context
|
|
11
|
+
|
|
12
|
+
Before starting, check if a brand context skill is available. You'll need the customer name and site URL for Organisation and publisher fields in the schema templates.
|
|
13
|
+
|
|
14
|
+
If no brand context is available, ask the user for these details.
|
|
15
|
+
|
|
16
|
+
## Phase 1: Analyse Site Structure
|
|
17
|
+
|
|
18
|
+
1. `cms-edit sitemap` to get all pages and articles
|
|
19
|
+
2. For each page, use `fetch_page_markdown` (from site-workflows MCP server) to read content
|
|
20
|
+
3. Categorise each page by Schema.org type:
|
|
21
|
+
|
|
22
|
+
| Page Type | Likely Schema.org Type |
|
|
23
|
+
|-----------|----------------------|
|
|
24
|
+
| Homepage | Organization + WebSite |
|
|
25
|
+
| About | AboutPage + Organization |
|
|
26
|
+
| Service/Product | Service or Product |
|
|
27
|
+
| Pricing | Product with Offer |
|
|
28
|
+
| Blog listing | CollectionPage |
|
|
29
|
+
| Article | Article or BlogPosting |
|
|
30
|
+
| FAQ | FAQPage with Question/Answer |
|
|
31
|
+
| Contact | ContactPage |
|
|
32
|
+
| Team/People | ProfilePage or Person |
|
|
33
|
+
| Case study | Article |
|
|
34
|
+
| Landing page | WebPage |
|
|
35
|
+
|
|
36
|
+
## Phase 2: Generate Mustache Templates
|
|
37
|
+
|
|
38
|
+
Create JSON-LD templates using these standard Mustache variables:
|
|
39
|
+
|
|
40
|
+
- `{{title}}` — page/article title
|
|
41
|
+
- `{{seoDescription}}` — SEO meta description
|
|
42
|
+
- `{{slug}}` — page slug
|
|
43
|
+
- `{{publishDate}}` — article publish date
|
|
44
|
+
- `{{updatedAt}}` — last modification date
|
|
45
|
+
- `{{authorName}}` — article author name
|
|
46
|
+
- `{{heroImageUrl}}` — primary image URL
|
|
47
|
+
- `{{customerName}}` — from brand context
|
|
48
|
+
- `{{siteUrl}}` — from brand context
|
|
49
|
+
|
|
50
|
+
## Phase 3: Upload via cms-edit
|
|
51
|
+
|
|
52
|
+
1. Check available fields:
|
|
53
|
+
- `cms-edit schema page` — page content type fields
|
|
54
|
+
- `cms-edit schema template` — template content type fields
|
|
55
|
+
- Look for `schemaOrg`, `jsonLd`, `structuredData`, or similar
|
|
56
|
+
2. For **template-level** schemas (Organization, WebSite — shared): `cms-edit list --type template` → open → set
|
|
57
|
+
3. For **page-level** schemas: open each page → set its schema field
|
|
58
|
+
4. `cms-edit diff` then `cms-edit save`
|
|
59
|
+
|
|
60
|
+
## Best Practices
|
|
61
|
+
|
|
62
|
+
- Don't duplicate — template-level Organization schema covers all pages
|
|
63
|
+
- Use specific types — `MedicalBusiness` over `LocalBusiness` if applicable
|
|
64
|
+
- Validate all required properties are present
|
|
65
|
+
- Schema must reflect actual page content
|
|
66
|
+
|
|
67
|
+
## Output
|
|
68
|
+
|
|
69
|
+
| Page/Template | Schema.org Type(s) | Variables Used | Applied To |
|
|
70
|
+
|--------------|-------------------|---------------|-----------|
|
|
71
|
+
|
|
72
|
+
## Related skills
|
|
73
|
+
|
|
74
|
+
See the **core** skill for the full cms-edit workflow. See the **seo-descriptions** skill for meta description generation.
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "contentful-cms:screenshots"
|
|
3
|
+
description: "Capture screenshots of components, collections, pages or persons via cms-edit."
|
|
4
|
+
---
|
|
5
|
+
|
|
1
6
|
# Skill: contentful-cms — Screenshots
|
|
2
7
|
|
|
3
8
|
Use this skill when capturing **screenshots** of components, collections, pages, or persons with `cms-edit`. **Requires agent-browser** to be installed.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "SEO Descriptions"
|
|
3
|
+
description: "Generate or improve SEO meta descriptions for pages using cms-edit, targeting keywords with the brand voice."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Skill: contentful-cms — SEO Descriptions
|
|
7
|
+
|
|
8
|
+
Use this skill when generating or improving **SEO meta descriptions** for pages using `cms-edit`. Works with any brand context skill for customer-specific voice and audience.
|
|
9
|
+
|
|
10
|
+
## Brand Context
|
|
11
|
+
|
|
12
|
+
Before starting, check if a brand context skill is available (e.g., "OM1 Brand Context"). If so, use its brand voice, target audience, SEO focus areas, and tone when writing descriptions.
|
|
13
|
+
|
|
14
|
+
If no brand context is available, ask the user about their brand voice and target audience before proceeding.
|
|
15
|
+
|
|
16
|
+
## Workflow
|
|
17
|
+
|
|
18
|
+
1. **Get all pages**: `cms-edit sitemap`
|
|
19
|
+
2. **For each page** (or a specific page):
|
|
20
|
+
a. **Read page content** using `fetch_page_markdown` (from the site-workflows MCP server) to understand what the page covers
|
|
21
|
+
b. **Check current SEO**:
|
|
22
|
+
- `cms-edit open /<slug>`
|
|
23
|
+
- `cms-edit read @page seoDescription` (or `read @page` for all fields)
|
|
24
|
+
c. **Analyse** the page — primary purpose, problem it solves, desired user action
|
|
25
|
+
d. **Generate** a meta description following the guidelines below
|
|
26
|
+
e. `cms-edit set @page seoDescription "new description"`
|
|
27
|
+
f. `cms-edit diff` then `cms-edit save`
|
|
28
|
+
|
|
29
|
+
## Meta Description Guidelines
|
|
30
|
+
|
|
31
|
+
1. **Length:** 150–160 characters (Google truncates at ~160)
|
|
32
|
+
2. **Include the target keyword** naturally — don't stuff it
|
|
33
|
+
3. **Use the brand voice** from the brand context
|
|
34
|
+
4. **Include a call to action** — "Learn more", "Get started", "Discover", etc.
|
|
35
|
+
5. **Be specific** — mention concrete benefits, not vague claims
|
|
36
|
+
6. **Match search intent** — what would someone search to land on this page?
|
|
37
|
+
7. **Avoid:**
|
|
38
|
+
- Starting with the brand name (it's in the title tag)
|
|
39
|
+
- "Welcome to..." or "This page is about..."
|
|
40
|
+
- Duplicating descriptions across pages
|
|
41
|
+
- Quotes (truncated in SERPs)
|
|
42
|
+
|
|
43
|
+
## Output
|
|
44
|
+
|
|
45
|
+
For each page, present:
|
|
46
|
+
|
|
47
|
+
| Page | Current Description | New Description | Chars | Target Keyword |
|
|
48
|
+
|------|-------------------|-----------------|-------|----------------|
|
|
49
|
+
|
|
50
|
+
Then apply changes via cms-edit.
|
|
51
|
+
|
|
52
|
+
## Related skills
|
|
53
|
+
|
|
54
|
+
See the **core** skill for the full cms-edit workflow. See the **alt-text-audit** skill for image accessibility.
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "contentful-cms:templates"
|
|
3
|
+
description: "Create or edit templates (preContent, postContent, menu, footer, colours) in Contentful via cms-edit."
|
|
4
|
+
---
|
|
5
|
+
|
|
1
6
|
# Skill: contentful-cms — Templates
|
|
2
7
|
|
|
3
8
|
Use this skill when creating or editing **templates** (layout shells with preContent, postContent, menu, footer) in Contentful via `cms-edit`.
|
|
@@ -112,7 +112,7 @@ grep -E "CONTENTFUL_SPACE_ID|CONTENTFUL_ACCESS_TOKEN|OPENAI_API_KEY|ANTHROPIC_AP
|
|
|
112
112
|
### Step 2 — Curate showcase mocks
|
|
113
113
|
|
|
114
114
|
Read and follow the **curate-showcase-mocks** skill:
|
|
115
|
-
`.agents/skills/se-marketing-sites
|
|
115
|
+
`.agents/skills/se-marketing-sites-curate-showcase-mocks/SKILL.md`
|
|
116
116
|
|
|
117
117
|
This produces `src/generated/showcase-mocks.json` (committed) and
|
|
118
118
|
`src/generated/cms-discovery/accepted-variants/{components|collections|externals}/<slug>.json` (often gitignored — **some apps commit them**; follow the app’s `.gitignore`).
|
|
@@ -150,7 +150,7 @@ Produces `generated/cms-discovery/field-list.json` (discovery API reads from thi
|
|
|
150
150
|
### Step 5 — Run generate-all-guidelines
|
|
151
151
|
|
|
152
152
|
Read and follow the **generate-all-guidelines** skill:
|
|
153
|
-
`.agents/skills/contentful-cms
|
|
153
|
+
`.agents/skills/contentful-cms-generate-all-guidelines/SKILL.md`
|
|
154
154
|
|
|
155
155
|
Skip its prerequisite check (you already verified everything through Step 4).
|
|
156
156
|
Run Phases 0–5 from that skill with **full regeneration rules**:
|
|
@@ -342,7 +342,7 @@ All under `<appDir>`:
|
|
|
342
342
|
|
|
343
343
|
| Purpose | Skill |
|
|
344
344
|
|---|---|
|
|
345
|
-
| Curate showcase mocks (Step 2 of `fresh`) | `.agents/skills/se-marketing-sites
|
|
346
|
-
| Full-site bulk generation (Step 4 of `fresh`: Phases 0–5) | `.agents/skills/contentful-cms
|
|
347
|
-
| Single-type regeneration (after code change) | `.agents/skills/contentful-cms
|
|
345
|
+
| Curate showcase mocks (Step 2 of `fresh`) | `.agents/skills/se-marketing-sites-curate-showcase-mocks/SKILL.md` |
|
|
346
|
+
| Full-site bulk generation (Step 4 of `fresh`: Phases 0–5) | `.agents/skills/contentful-cms-generate-all-guidelines/SKILL.md` |
|
|
347
|
+
| Single-type regeneration (after code change) | `.agents/skills/contentful-cms-generate-cms-guidelines/SKILL.md` (mode: single) |
|
|
348
348
|
| Per-component pipeline detail | `packages/contentful-cms/skills/cms-guidelines/generate-component-guidelines.md` |
|