@se-studio/project-build 1.0.131 → 1.0.133

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.
Files changed (42) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +13 -14
  3. package/package.json +2 -4
  4. package/dist/management/sync-skills.d.ts +0 -4
  5. package/dist/management/sync-skills.d.ts.map +0 -1
  6. package/dist/management/sync-skills.js +0 -97
  7. package/dist/management/sync-skills.js.map +0 -1
  8. package/dist/seskills.d.ts +0 -9
  9. package/dist/seskills.d.ts.map +0 -1
  10. package/dist/seskills.js +0 -32
  11. package/dist/seskills.js.map +0 -1
  12. package/skills/contentful-cms/alt-text-audit/SKILL.md +0 -60
  13. package/skills/contentful-cms/cms-guidelines/README.md +0 -166
  14. package/skills/contentful-cms/cms-guidelines/colour-hint-prompt.md +0 -77
  15. package/skills/contentful-cms/cms-guidelines/evaluation-prompt.md +0 -84
  16. package/skills/contentful-cms/cms-guidelines/generate-component-guidelines.md +0 -126
  17. package/skills/contentful-cms/cms-guidelines/generation-prompt.md +0 -231
  18. package/skills/contentful-cms/cms-guidelines/html-component-authoring.md +0 -401
  19. package/skills/contentful-cms/cms-guidelines/validation-prompt.md +0 -170
  20. package/skills/contentful-cms/cms-guidelines/variant-loop.md +0 -189
  21. package/skills/contentful-cms/cms-guidelines/variant-proposal-prompt.md +0 -131
  22. package/skills/contentful-cms/core/SKILL.md +0 -793
  23. package/skills/contentful-cms/generate-all-guidelines/SKILL.md +0 -313
  24. package/skills/contentful-cms/generate-cms-guidelines/SKILL.md +0 -313
  25. package/skills/contentful-cms/image-guide/SKILL.md +0 -240
  26. package/skills/contentful-cms/manifest.json +0 -11
  27. package/skills/contentful-cms/navigation/SKILL.md +0 -23
  28. package/skills/contentful-cms/rich-text/SKILL.md +0 -96
  29. package/skills/contentful-cms/schema-org/SKILL.md +0 -74
  30. package/skills/contentful-cms/screenshots/SKILL.md +0 -46
  31. package/skills/contentful-cms/seo-descriptions/SKILL.md +0 -54
  32. package/skills/contentful-cms/templates/SKILL.md +0 -21
  33. package/skills/contentful-cms/update-cms-guidelines/SKILL.md +0 -348
  34. package/skills/se-marketing-sites/cms-routes-and-appshared/SKILL.md +0 -99
  35. package/skills/se-marketing-sites/create-collection/SKILL.md +0 -295
  36. package/skills/se-marketing-sites/create-component/SKILL.md +0 -250
  37. package/skills/se-marketing-sites/create-page/SKILL.md +0 -129
  38. package/skills/se-marketing-sites/curate-showcase-mocks/SKILL.md +0 -343
  39. package/skills/se-marketing-sites/handling-media/SKILL.md +0 -195
  40. package/skills/se-marketing-sites/lib-cms-structure/SKILL.md +0 -83
  41. package/skills/se-marketing-sites/register-cms-features/SKILL.md +0 -95
  42. package/skills/se-marketing-sites/styling-system/SKILL.md +0 -122
@@ -1,240 +0,0 @@
1
- ---
2
- name: "Image Guide"
3
- description: "Generate a comprehensive image guide (both Markdown and HTML) for a site's CMS image assets, with rich AI-generated visual descriptions and content relationship trees."
4
- ---
5
-
6
- # Skill: contentful-cms — Image Guide
7
-
8
- Use this skill to generate a **fully enriched image guide** for a site. The guide documents every image in the CMS with:
9
- - Rich visual descriptions generated by inspecting each image
10
- - Content relationship tree showing which pages/components use each image
11
- - Two output formats: Markdown (AI-consumable) and HTML (human reference)
12
-
13
- The output files are written to the app's `docs/` directory (or a path you specify).
14
-
15
- ## When to use
16
-
17
- - Client or team wants a reference guide for all images in the CMS
18
- - Need to know where a specific image is used across the site
19
- - Preparing image guidance for AI agents that will be choosing images
20
- - Auditing image coverage or identifying unused assets
21
-
22
- ## Prerequisites
23
-
24
- - `cms-edit` is configured for the target space (run `cms-edit health` to verify)
25
- - You have read access to the image URLs (standard Contentful CDN URLs work)
26
- - The app directory is known (e.g. `apps/example-brightlifekids/`)
27
-
28
- ## Brand Context
29
-
30
- Before starting, check if a brand context skill is available (e.g., "BrightLife Kids Brand Context"). If so, incorporate brand terminology in the descriptions and "When to use" guidance.
31
-
32
- ---
33
-
34
- ## Workflow
35
-
36
- ### Step 0 — Load description cache
37
-
38
- Each image's description is stored as its own small file to avoid token-limit issues when reading or writing:
39
-
40
- ```
41
- docs/descriptions/{assetId}.json
42
- ```
43
-
44
- **To check if an image is already cached:**
45
- ```bash
46
- ls docs/descriptions/{assetId}.json 2>/dev/null && echo "cached" || echo "not cached"
47
- ```
48
-
49
- **Per-image file format:**
50
- ```json
51
- {
52
- "subjects": "...",
53
- "setting": "...",
54
- "composition": "...",
55
- "colours": "...",
56
- "mood": "...",
57
- "style": "...",
58
- "constraints": "...",
59
- "whenToUse": "...",
60
- "inspectedAt": "2026-04-15T10:00:00Z"
61
- }
62
- ```
63
-
64
- **Write-through caching — CRITICAL:** After visually inspecting each NEW image, immediately write its description to `docs/descriptions/{assetId}.json` using the Write tool BEFORE inspecting the next image. One image → one Write call → next image. Each file is tiny (~1KB), so no token limits apply.
65
-
66
- If `docs/descriptions/{assetId}.json` already exists, read it and use the cached data — **skip the vision call entirely**.
67
-
68
- At the end of the run, report: `N from cache, M newly inspected`.
69
-
70
- **Phase discipline — cache first, guides second:** Complete ALL image inspections and per-image cache writes before starting any guide file. Do not interleave inspection with guide writing.
71
-
72
- > **Note:** If a legacy `docs/image-descriptions-cache.json` file exists, ignore it. The per-file cache supersedes it.
73
-
74
- ### Step 1 — Gather structural data
75
-
76
- Run the audit command to get all images and their page/component usages:
77
-
78
- ```bash
79
- cms-edit --json audit images
80
- ```
81
-
82
- This outputs JSON with every image asset including:
83
- - Asset ID, title, filename, dimensions, MIME type, CDN URL
84
- - `usages[]`: the slug-bearing ancestors (page, article, articleType, pageVariant, tag, person) that ultimately use this asset. Intermediate wrapper entries (media, visual, component, etc.) are walked through transparently and not included. Each usage has `{ id, contentType, label, slug }`.
85
-
86
- Save the output to a temporary file or keep it in context.
87
-
88
- If the output is large, focus on images grouped by page. Use `cms-edit audit tree --page /<slug>` to see the relationship tree for a specific page:
89
-
90
- ```bash
91
- cms-edit audit tree --page /
92
- cms-edit audit tree --page /families
93
- ```
94
-
95
- ### Step 2 — Inspect each image visually
96
-
97
- For each image in the JSON output, fetch the image URL and inspect it carefully. The CDN URL supports resize parameters — use `?w=800&q=85` for a good preview:
98
-
99
- ```
100
- https://images.ctfassets.net/{spaceId}/{assetId}/{hash}/{filename}?w=800&q=85
101
- ```
102
-
103
- For each image generate a **visual description** covering ALL of these fields:
104
-
105
- | Field | What to capture |
106
- |-------|----------------|
107
- | **Subjects** | Count of people, apparent ages, genders (if relevant), expressions, what they are doing |
108
- | **Setting** | Indoor/outdoor, room type or environment, background detail level, time of day |
109
- | **Composition** | Landscape or portrait, crop tightness (headshot / mid-shot / wide / full-bleed), focal point position, negative space |
110
- | **Colours** | 3–5 dominant colours with approximate descriptions (e.g. "warm cream, sage green, muted terracotta"), warm vs cool tone, contrast level |
111
- | **Mood** | One or two words: playful, warm, clinical, energetic, calm, aspirational, inclusive, serious |
112
- | **Style** | Photography (stock / custom-produced), illustration, icon, UI mockup, logo |
113
- | **Constraints** | What the image does NOT have — e.g. "no text overlay space", "subject fills frame", "no negative space for overlay", "transparent background" |
114
-
115
- For icons, logos, and UI mockups, the description can be shorter and focus on what the graphic represents and its visual style.
116
-
117
- ### Step 3 — Determine "When to use" guidance
118
-
119
- Based on the image's current usages and its visual content, write a concise "When to use" paragraph covering:
120
- - Component types it suits (Hero, CtaCard, wide-format, etc.)
121
- - Content topics or page contexts where it fits
122
- - What NOT to use it for (age group constraints, format constraints, etc.)
123
- - Any reuse notes (e.g. "also used as /partners hero — suitable for both card and full-width formats")
124
-
125
- ### Step 4 — Write the Markdown guide
126
-
127
- Output path: `docs/image-guide.md` inside the app directory (e.g. `apps/example-brightlifekids/docs/image-guide.md`).
128
-
129
- **IMPORTANT — chunked writing to avoid output token limits:** The guide file will be large (many KB). Never try to write the entire file in a single Write tool call. Instead, use bash heredoc append operations in batches:
130
-
131
- ```bash
132
- # First call — write file header + first ~35 images (use actual app path)
133
- cat > apps/example-brightlifekids/docs/image-guide.md << 'MDEOF'
134
- # BrightLife Kids — Image Guide
135
-
136
- > Generated 2026-04-15. Space: blk. 202 images documented.
137
- ...
138
- ## Image 1 · filename.jpg
139
- ...
140
- MDEOF
141
-
142
- # Subsequent calls — APPEND next batch (note >>)
143
- cat >> apps/example-brightlifekids/docs/image-guide.md << 'MDEOF'
144
- ## Image 36 · filename.jpg
145
- ...
146
- MDEOF
147
- ```
148
-
149
- Keep each bash call to **35 images maximum** (~18,000 tokens of content per call). Use as many `cat >>` append calls as needed. For descriptions, read from the cached `docs/descriptions/{assetId}.json` files rather than re-inspecting.
150
-
151
- Use this structure:
152
-
153
- ```markdown
154
- # {Brand} — Image Guide
155
-
156
- > Generated {date}. Space: {spaceKey}. {N} images documented.
157
- >
158
- > **AI usage note**: Each entry below has consistent fields for programmatic selection.
159
- > Match `Subjects`, `Setting`, and `Mood` to the content context. Use `Constraints` to
160
- > rule out images that won't work for a given layout. `Used on` shows exact page/component context.
161
-
162
- ---
163
-
164
- ## {image title} · {filename}
165
-
166
- **Asset ID**: `{id}`
167
- **Dimensions**: {width}×{height} · {contentType}
168
- **CDN URL**: `{url}?w=800&q=85`
169
-
170
- **Used on**:
171
- - {slug} — {contentType} "{label}"
172
- - _(repeat for each usage; omit if usages array is empty — mark as "Unused / unattached")_
173
-
174
- **Subjects**: {description}
175
- **Setting**: {description}
176
- **Composition**: {description}
177
- **Colours**: {description}
178
- **Mood**: {description}
179
- **Style**: {description}
180
- **Constraints**: {description}
181
-
182
- **When to use**: {paragraph}
183
-
184
- ---
185
- ```
186
-
187
- Repeat for every image. Group images by page/section using `## Section: {page title}` headings before each page's images, matching the structure the `audit images` output provides.
188
-
189
- ### Step 5 — Write the HTML guide
190
-
191
- Output path: `docs/image-guide.html` inside the app directory.
192
-
193
- **IMPORTANT — chunked writing:** HTML files are much larger than Markdown. Use the same bash heredoc append strategy, but with **smaller batches of 15–20 image cards** per operation. Start with the full `<html>`, `<head>`, CSS, and opening body tags, then append cards in batches, then append the closing tags last.
194
-
195
- The HTML guide is a self-contained human reference (no server needed). Model it on the existing `tmp/blk-image-guide.html` style but with the following enhancements:
196
-
197
- 1. **Visual detail block**: Add a new `<div class="visual-detail-box">` section in each card containing the structured visual fields (Subjects, Setting, Composition, Colours, Mood, Style, Constraints) as a compact `<table>`.
198
-
199
- 2. **Usage tree**: In the metadata table, expand the `Pages` row to show the full chain: `{pageSlug} → {componentType} "{label}" (field: {fieldName})`.
200
-
201
- 3. **Site tree section**: Add a collapsible `<details>` section at the top of the page titled "Full Site Content Tree" that shows the inverse view — for each page, what images appear on it.
202
-
203
- 4. **LLM note**: Update the LLM usage note at the top to reference the structured visual fields.
204
-
205
- The HTML must:
206
- - Be fully self-contained (inline CSS, no external dependencies)
207
- - Work without a web server (file:// protocol)
208
- - Match the brand colours of the target site
209
- - Show thumbnail images with lazy loading
210
-
211
- ### Step 6 — Verify and report
212
-
213
- After writing both files, confirm:
214
- 1. Every image from the `audit images` output has an entry in both files
215
- 2. The "Used on" relationships match what `audit tree` shows
216
- 3. The Markdown file is clean and can be read without a browser
217
-
218
- Present a summary:
219
-
220
- | Image | Pages used on | Visual description added | Notes |
221
- |-------|--------------|--------------------------|-------|
222
- | ... | ... | ✓ | ... |
223
-
224
- Report the output paths and any images that had no usages (potential orphans).
225
-
226
- ---
227
-
228
- ## Tips
229
-
230
- - **Efficient image inspection**: Fetch images in batches. Process all images for a page together before moving to the next page.
231
- - **Orphaned assets**: Images with no usages (`usages: []` in the JSON) are likely unused. Flag them but still document them — they may be intentionally held in reserve.
232
- - **SVG icons**: For SVG assets, use the direct URL (no resize params needed). Describe the graphic shape and colour precisely.
233
- - **Stock vs custom**: Check the filename for patterns like `AdobeStock_`, `pexels-`, `unsplash-` to identify stock images. Custom-produced images typically have branded filenames.
234
- - **Mobile variants**: Some components have both `visual` and `mobileVisual` fields. If the same image appears in both, note the dual-use in the description.
235
-
236
- ## Related skills
237
-
238
- - **core**: Full cms-edit workflow reference
239
- - **alt-text-audit**: Audit and improve alt text on existing images
240
- - **contentful-cms-screenshots**: Take live screenshots of pages for reference
@@ -1,11 +0,0 @@
1
- {
2
- "core": "Main workflow, refs, session, and all cms-edit commands",
3
- "templates": "Create and edit templates (preContent, postContent, menu, footer, colours)",
4
- "navigation": "Create navigation, nav open/add, set nav item fields, remove",
5
- "rich-text": "Rich text (rtf) and embeds (append/insert); Markdown support",
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
- "image-guide": "Generate a comprehensive image guide (MD + HTML) with AI visual descriptions and content relationship trees",
9
- "seo-descriptions": "Generate or improve SEO meta descriptions for pages",
10
- "schema-org": "Generate Schema.org structured data as Mustache templates"
11
- }
@@ -1,23 +0,0 @@
1
- ---
2
- name: "contentful-cms:navigation"
3
- description: "Create or edit navigation entries and nav items in Contentful via cms-edit."
4
- ---
5
-
6
- # Skill: contentful-cms — Navigation
7
-
8
- Use this skill when creating or editing **navigation** entries and their items in Contentful via `cms-edit`.
9
-
10
- ## Workflow
11
-
12
- 1. **Create** a navigation: `cms-edit create navigation --label 'Main menu'`
13
- 2. **Open** the nav: `cms-edit nav open <slug-or-id>` (or after create, use the printed open command)
14
- 3. **Add** items: `cms-edit nav add --label "Pricing" --slug /pricing` or `--label "Docs" --href https://docs.example.com`; use `--after @cN` to insert after a ref.
15
- 4. **Set** nav item fields (use snapshot refs): `cms-edit set @c1 label "New label"`, `cms-edit set @c1 page <entry-id> --link`, `cms-edit set @c1 externalUrl "https://..."`.
16
- 5. **Remove** an item: `cms-edit remove @cN`
17
- 6. **Save**: `cms-edit save`
18
-
19
- Navigation entries are often linked from templates as **menu** or **footer**; set those with `set ... menu <nav-id> --link` from a template session.
20
-
21
- ## Related skills
22
-
23
- See the **core** skill for session, refs, and all commands. For templates that use menu/footer see the **templates** skill.
@@ -1,96 +0,0 @@
1
- ---
2
- name: "contentful-cms:rich-text"
3
- description: "Edit rich-text fields and insert embedded entries/assets via cms-edit."
4
- ---
5
-
6
- # Skill: contentful-cms — Rich text and embeds
7
-
8
- Use this skill when editing **rich text** fields (body, additionalCopy) and inserting **embedded entries/assets** via `cms-edit`.
9
-
10
- ## Rich text (rtf)
11
-
12
- - **Replace** body with Markdown (single paragraph, no newlines): `cms-edit rtf @c1 body "Simple body with **bold** and [link](https://example.com)."`
13
- - **Multiline content** — use `printf` piped to stdin; `\n` in a double-quoted shell string is **not** a newline in bash:
14
- ```bash
15
- printf '## Heading\n\nParagraph with **bold** and [link](https://example.com).\n' | cms-edit rtf @c1 body -
16
- ```
17
- - Use `--file path/to/file.md` or stdin (`-`) for long content.
18
- - Markdown supported: headings, bold/italic, links, lists, blockquote, inline code, `---`.
19
-
20
- Use **set** for scalar and link fields; use **rtf** only for rich text fields.
21
-
22
- ## Embeds (v1: append/insert only)
23
-
24
- - **Append** an embedded entry: `cms-edit rtf embed @c1 body <entry-id>`
25
- - **Insert** at position: `cms-edit rtf embed @c1 body <entry-id> --at 0`
26
- - **Raw asset** embed: `cms-edit rtf embed @c1 body <asset-id> --asset` — inserts an `embedded-asset-block` with **no** width/alignment on the block (Contentful only allows `data.target`).
27
- - **Width / horizontal position:** use a **Media** entry (not `--asset`). Create one with `cms-edit create media --asset-id <id> --name "…" [--position Middle] [--width 40]` (prints the new entry ID; does not replace your session), then `cms-edit rtf embed @c1 body <media-entry-id> --at 12`. Or set fields in the Contentful app. Same image, different layout in two places ⇒ two Media entries pointing at the same asset.
28
-
29
- Editing or moving existing embeds is **not supported in v1**.
30
-
31
- ## rtf replace — additional flags
32
-
33
- These flags provide finer control when using `rtf replace`:
34
-
35
- | Flag | Description |
36
- |------|-------------|
37
- | `--find-plain <text>` | Alias for `--find`; treats the search string as literal text (use when the string contains `*`) |
38
- | `--ignore-marks` | Match across adjacent bold/plain splits within the same block node |
39
- | `--protect-pattern <regex>` | Skip matches that fall inside spans matching this regex (e.g. existing quidget tokens) |
40
- | `--dry-run` | Count matches without writing any changes |
41
- | `--in-table-row <n>` | Restrict matches to row N (1-indexed; row 1 = header) |
42
- | `--in-row-containing <text>` | Restrict to rows where any cell contains this text |
43
- | `--in-col-containing <text>` | Restrict to the column whose header cell contains this text |
44
-
45
- Example — replace a value only in the column whose header contains "CSP":
46
- ```bash
47
- cms-edit rtf replace @c1 body \
48
- --find 'None' \
49
- --replace-plain '{*credit_card_id*:*5048345*,*field*:*foreign_transaction_fee*,*api*:*cc*}' \
50
- --in-col-containing 'CSP' \
51
- --mode all
52
- ```
53
-
54
- ## rtf patch — JSON batch find/replace
55
-
56
- Apply multiple find/replace operations in a single call. All ops are validated before any write.
57
-
58
- ```bash
59
- # From file
60
- cms-edit rtf patch @c0 body --file patch.json
61
-
62
- # From stdin
63
- echo '[{"find":"old","replaceWith":"new","mode":"exactlyOne"}]' | cms-edit rtf patch @c0 body
64
- ```
65
-
66
- Each op in the JSON array supports:
67
-
68
- | Key | Required | Description |
69
- |-----|----------|-------------|
70
- | `find` | yes | Search string (Markdown-interpreted) |
71
- | `replaceWith` | yes | Replacement string (Markdown-interpreted unless `replaceIsMarkdown: false`) |
72
- | `replaceIsMarkdown` | no | Set to `false` to treat `replaceWith` as plain text (like `--replace-plain`) |
73
- | `mode` | no | `"exactlyOne"` (default), `"all"`, `"first"` |
74
- | `ignoreMarks` | no | Match across adjacent bold/plain splits |
75
- | `inTableCol` | no | Restrict to column N (1-indexed) |
76
- | `inTableRow` | no | Restrict to row N (1-indexed) |
77
- | `inRowContaining` | no | Restrict to rows where any cell contains this text |
78
- | `inColContaining` | no | Restrict to the column whose header cell contains this text |
79
- | `section` | no | Restrict to a document section |
80
- | `protectPattern` | no | Skip matches inside spans matching this regex |
81
-
82
- Add `--dry-run` to count matches without writing.
83
-
84
- ## rtf edit — replace field via stdin
85
-
86
- Replace an entire rich text field by piping Markdown from stdin. Avoids shell quoting issues for long content.
87
-
88
- ```bash
89
- echo "## New heading\n\nNew body text." | cms-edit rtf edit @c1 body
90
- ```
91
-
92
- In human (interactive) mode, the command prints the current Markdown to stdout first, then reads the replacement from stdin.
93
-
94
- ## Related skills
95
-
96
- See the **core** skill for workflow, refs, and all commands.
@@ -1,74 +0,0 @@
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,46 +0,0 @@
1
- ---
2
- name: "contentful-cms:screenshots"
3
- description: "Capture screenshots of components, collections, pages or persons via cms-edit."
4
- ---
5
-
6
- # Skill: contentful-cms — Screenshots
7
-
8
- Use this skill when capturing **screenshots** of components, collections, pages, or persons with `cms-edit`. **Requires agent-browser** to be installed.
9
-
10
- ## Prerequisites
11
-
12
- - `npm install -g agent-browser && agent-browser install`
13
- - Without agent-browser, the command exits with install instructions (use `--url-only` to only print the URL).
14
- - For `@ref` and `--json-file`: the app must be running at `devBaseUrl` (see `.contentful-cms.json`).
15
-
16
- ## Commands
17
-
18
- - **From session ref** (full-fidelity): `cms-edit screenshot @c0` — uses the convert API and `/cms/preview/render-json` so **all** entry types render with real data: component, collection, externalComponent, person. Add `--full` for full-page capture (auto-applied for component/collection).
19
- - **From JSON file** (no Contentful): `cms-edit screenshot --json-file path/to/entry.json` — reads an IBase* JSON (e.g. from `read @c0 --json` or an export), base64-encodes it, and opens `/cms/preview/render-json?data=...`. Use to validate or screenshot without a session or preview token.
20
- - **By type** (no session, mock): `cms-edit screenshot --component HeroSimple`, `cms-edit screenshot --collection CardGrid` — uses `/cms/showcase/render` with mock data.
21
- - **Page**: `cms-edit screenshot` (current open page) or `cms-edit screenshot /resources/publications/other/my-slug`
22
- - **URL only** (no agent-browser needed): `cms-edit screenshot @c0 --url-only`
23
-
24
- ## Target path: use the full site path
25
-
26
- When passing a path target (e.g. `cms-edit screenshot /path`), the target must be the **full path** on the site — not just the final slug segment. cms-edit prepends `devBaseUrl` from your config to build the URL.
27
-
28
- > **Correct:** `cms-edit screenshot /resources/publications/other/my-article`
29
- > **Incorrect:** `cms-edit screenshot /my-article` ← will 404 if the site expects a longer path
30
-
31
- Check the site's URL structure (e.g. `/resources/publications/<type>/<slug>`) and use the complete path. The `devBaseUrl` is set in `.contentful-cms.json` (defaults to `http://localhost:3000` if not configured).
32
-
33
- ## Mock vs live (type-only mode only)
34
-
35
- When using `--component <type>` or `--collection <type>` (no session), the default is **mock** (showcase). Use `--live` with a ref to prefer the legacy direct preview URL; for `@ref`, full-fidelity is already the default via convert → render-json.
36
-
37
- - **Mock:** `/cms/showcase/render` with mock data; fast, no preview token.
38
- - **Live** (with ref): `cms-edit screenshot @c0 --live` — uses `/cms/preview/render?id=...`; equivalent for component/collection/externalComponent to the default @ref path.
39
-
40
- ## Checking your work
41
-
42
- After editing content, run `cms-edit screenshot @ref` or `cms-edit screenshot /slug` to capture and verify. Use `--out before.png` / `--out after.png` and `agent-browser diff screenshot` for visual diffing. To validate a component from exported JSON, use `cms-edit screenshot --json-file <path>`.
43
-
44
- ## Related skills
45
-
46
- See the **core** skill for session, open, and snapshot.
@@ -1,54 +0,0 @@
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,21 +0,0 @@
1
- ---
2
- name: "contentful-cms:templates"
3
- description: "Create or edit templates (preContent, postContent, menu, footer, colours) in Contentful via cms-edit."
4
- ---
5
-
6
- # Skill: contentful-cms — Templates
7
-
8
- Use this skill when creating or editing **templates** (layout shells with preContent, postContent, menu, footer) in Contentful via `cms-edit`.
9
-
10
- ## Workflow
11
-
12
- 1. **Create** a template: `cms-edit create template --label 'Campaign Landing'`
13
- 2. **List** templates: `cms-edit list --type template`
14
- 3. **Open** by ID: `cms-edit open <template-id> --id`
15
- 4. Edit content: set **preContent** and **postContent** (content arrays) via session snapshot refs; use `add`, `set`, `remove`, `move` as for pages. Set **menu** and **footer** (single navigation links) with `cms-edit set @ref menu <nav-entry-id> --link` and same for `footer`.
16
- 5. Set **colours**: `cms-edit set @ref backgroundColour Navy`, `cms-edit set @ref textColour White` (or project colour names).
17
- 6. **Save**: `cms-edit save`
18
-
19
- ## Related skills
20
-
21
- See the **core** skill for the full workflow (open, snapshot, set, save). For menu/footer navigation entries use the **navigation** skill.