create-content-sdk-app 2.0.0-canary.9 → 2.0.0

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 (100) hide show
  1. package/LICENSE.MD +202 -202
  2. package/dist/initializers/angular/args.js +2 -0
  3. package/dist/initializers/angular/index.js +30 -0
  4. package/dist/initializers/angular/prompts.js +20 -0
  5. package/dist/templates/angular/.postcssrc.json +5 -0
  6. package/dist/templates/angular/.vscode/extensions.json +4 -0
  7. package/dist/templates/angular/README.md +3 -0
  8. package/dist/templates/angular/angular.json +79 -0
  9. package/dist/templates/angular/package.json +58 -0
  10. package/dist/templates/angular/public/favicon.ico +0 -0
  11. package/dist/templates/angular/src/app/app.config.server.ts +12 -0
  12. package/dist/templates/angular/src/app/app.config.ts +31 -0
  13. package/dist/templates/angular/src/app/app.css +0 -0
  14. package/dist/templates/angular/src/app/app.html +1 -0
  15. package/dist/templates/angular/src/app/app.routes.server.ts +15 -0
  16. package/dist/templates/angular/src/app/app.routes.ts +28 -0
  17. package/dist/templates/angular/src/app/app.ts +12 -0
  18. package/dist/templates/angular/src/app/loaders/error.loader.ts +12 -0
  19. package/dist/templates/angular/src/app/loaders/index.ts +14 -0
  20. package/dist/templates/angular/src/app/loaders/not-found.loader.ts +12 -0
  21. package/dist/templates/angular/src/app/loaders/page.loader.ts +15 -0
  22. package/dist/templates/angular/src/app/loaders/stub-utils.ts +83 -0
  23. package/dist/templates/angular/src/app/pages/error.component.ts +124 -0
  24. package/dist/templates/angular/src/app/pages/not-found.component.ts +85 -0
  25. package/dist/templates/angular/src/app/pages/page.component.ts +58 -0
  26. package/dist/templates/angular/src/app/shared/layout.component.ts +106 -0
  27. package/dist/templates/angular/src/index.html +13 -0
  28. package/dist/templates/angular/src/main.server.ts +8 -0
  29. package/dist/templates/angular/src/main.ts +6 -0
  30. package/dist/templates/angular/src/server.ts +65 -0
  31. package/dist/templates/angular/src/styles.css +3 -0
  32. package/dist/templates/angular/tsconfig.json +38 -0
  33. package/dist/templates/angular/tsconfig.spec.json +10 -0
  34. package/dist/templates/nextjs/.cursor/rules/general.mdc +81 -81
  35. package/dist/templates/nextjs/.cursor/rules/javascript.mdc +112 -112
  36. package/dist/templates/nextjs/.cursor/rules/project-setup.mdc +100 -100
  37. package/dist/templates/nextjs/.cursor/rules/sitecore.mdc +150 -150
  38. package/dist/templates/nextjs/.env.container.example +27 -27
  39. package/dist/templates/nextjs/.env.remote.example +51 -51
  40. package/dist/templates/nextjs/.gitattributes +11 -11
  41. package/dist/templates/nextjs/.prettierrc +8 -8
  42. package/dist/templates/nextjs/.vscode/extensions.json +8 -8
  43. package/dist/templates/nextjs/.vscode/launch.json +15 -15
  44. package/dist/templates/nextjs/.windsurfrules +186 -186
  45. package/dist/templates/nextjs/AGENTS.md +0 -1
  46. package/dist/templates/nextjs/LICENSE.txt +202 -202
  47. package/dist/templates/nextjs/LLMs.txt +179 -179
  48. package/dist/templates/nextjs/eslint.config.mjs +81 -81
  49. package/dist/templates/nextjs/gitignore +28 -28
  50. package/dist/templates/nextjs/package.json +68 -68
  51. package/dist/templates/nextjs/sitecore.config.ts.example +40 -40
  52. package/dist/templates/nextjs/tsconfig.json +40 -40
  53. package/dist/templates/nextjs-app-router/.cursor/rules/app-router-setup.mdc +116 -116
  54. package/dist/templates/nextjs-app-router/.cursor/rules/general.mdc +80 -80
  55. package/dist/templates/nextjs-app-router/.cursor/rules/javascript.mdc +112 -112
  56. package/dist/templates/nextjs-app-router/.cursor/rules/sitecore.mdc +174 -174
  57. package/dist/templates/nextjs-app-router/.env.container.example +27 -27
  58. package/dist/templates/nextjs-app-router/.env.remote.example +51 -51
  59. package/dist/templates/nextjs-app-router/.gitattributes +11 -11
  60. package/dist/templates/nextjs-app-router/.windsurfrules +290 -290
  61. package/dist/templates/nextjs-app-router/AGENTS.md +0 -1
  62. package/dist/templates/nextjs-app-router/LLMs.txt +236 -236
  63. package/dist/templates/nextjs-app-router/eslint.config.mjs +29 -29
  64. package/dist/templates/nextjs-app-router/gitignore +31 -31
  65. package/dist/templates/nextjs-app-router/package.json +54 -54
  66. package/dist/templates/nextjs-app-router/postcss.config.mjs +5 -5
  67. package/dist/templates/nextjs-app-router/sitecore.config.ts.example +40 -40
  68. package/dist/templates/nextjs-app-router/src/app/globals.css +1 -1
  69. package/dist/templates/nextjs-app-router/tsconfig.json +48 -48
  70. package/package.json +2 -2
  71. package/dist/templates/nextjs/.agents/skills/content-sdk-component-data-strategy/SKILL.md +0 -37
  72. package/dist/templates/nextjs/.agents/skills/content-sdk-component-registration/SKILL.md +0 -36
  73. package/dist/templates/nextjs/.agents/skills/content-sdk-component-scaffold/SKILL.md +0 -34
  74. package/dist/templates/nextjs/.agents/skills/content-sdk-component-variants/SKILL.md +0 -36
  75. package/dist/templates/nextjs/.agents/skills/content-sdk-dictionary-and-i18n/SKILL.md +0 -35
  76. package/dist/templates/nextjs/.agents/skills/content-sdk-editing-safe-rendering/SKILL.md +0 -37
  77. package/dist/templates/nextjs/.agents/skills/content-sdk-field-usage-image-link-text/SKILL.md +0 -36
  78. package/dist/templates/nextjs/.agents/skills/content-sdk-graphql-data-fetching/SKILL.md +0 -38
  79. package/dist/templates/nextjs/.agents/skills/content-sdk-multisite-management/SKILL.md +0 -37
  80. package/dist/templates/nextjs/.agents/skills/content-sdk-route-configuration/SKILL.md +0 -38
  81. package/dist/templates/nextjs/.agents/skills/content-sdk-site-setup-and-env/SKILL.md +0 -36
  82. package/dist/templates/nextjs/.agents/skills/content-sdk-sitemap-robots/SKILL.md +0 -37
  83. package/dist/templates/nextjs/.agents/skills/content-sdk-troubleshoot-editing/SKILL.md +0 -39
  84. package/dist/templates/nextjs/.agents/skills/content-sdk-upgrade-assistant/SKILL.md +0 -36
  85. package/dist/templates/nextjs/Skills.md +0 -79
  86. package/dist/templates/nextjs-app-router/.agents/skills/content-sdk-component-data-strategy/SKILL.md +0 -37
  87. package/dist/templates/nextjs-app-router/.agents/skills/content-sdk-component-registration/SKILL.md +0 -38
  88. package/dist/templates/nextjs-app-router/.agents/skills/content-sdk-component-scaffold/SKILL.md +0 -38
  89. package/dist/templates/nextjs-app-router/.agents/skills/content-sdk-component-variants/SKILL.md +0 -36
  90. package/dist/templates/nextjs-app-router/.agents/skills/content-sdk-dictionary-and-i18n/SKILL.md +0 -37
  91. package/dist/templates/nextjs-app-router/.agents/skills/content-sdk-editing-safe-rendering/SKILL.md +0 -37
  92. package/dist/templates/nextjs-app-router/.agents/skills/content-sdk-field-usage-image-link-text/SKILL.md +0 -36
  93. package/dist/templates/nextjs-app-router/.agents/skills/content-sdk-graphql-data-fetching/SKILL.md +0 -37
  94. package/dist/templates/nextjs-app-router/.agents/skills/content-sdk-multisite-management/SKILL.md +0 -37
  95. package/dist/templates/nextjs-app-router/.agents/skills/content-sdk-route-configuration/SKILL.md +0 -38
  96. package/dist/templates/nextjs-app-router/.agents/skills/content-sdk-site-setup-and-env/SKILL.md +0 -36
  97. package/dist/templates/nextjs-app-router/.agents/skills/content-sdk-sitemap-robots/SKILL.md +0 -37
  98. package/dist/templates/nextjs-app-router/.agents/skills/content-sdk-troubleshoot-editing/SKILL.md +0 -39
  99. package/dist/templates/nextjs-app-router/.agents/skills/content-sdk-upgrade-assistant/SKILL.md +0 -36
  100. package/dist/templates/nextjs-app-router/Skills.md +0 -79
@@ -1,37 +0,0 @@
1
- ---
2
- name: content-sdk-multisite-management
3
- description: Handles multisite: site resolution, .sitecore/sites.json, and proxy in src/proxy.ts. Pages Router proxy order is fixed: MultisiteProxy → RedirectsProxy → PersonalizeProxy. Use when working with multiple sites or hostnames.
4
- ---
5
-
6
- # Content SDK Multisite Management (Pages Router)
7
-
8
- Site resolution from request (e.g. hostname or cookie); proxy rewrites to internal path. No [locale] in URL; Next.js i18n handles locale separately.
9
-
10
- ## When to Use
11
-
12
- - User asks about multiple sites, hostnames, or site resolution.
13
- - Task involves .sitecore/sites.json, multisite config, or proxy/middleware for site.
14
- - User mentions "multisite," "site resolution," "hostname," or "sites.json."
15
-
16
- ## How to perform
17
-
18
- - Site list: `.sitecore/sites.json`. Proxy in `src/proxy.ts`; ensure `src/middleware.ts` re-exports it if present. Keep chain order: MultisiteProxy → RedirectsProxy → PersonalizeProxy. Exclude /api, _next, static assets in matcher/skip.
19
-
20
- ## Hard Rules
21
-
22
- - Site list is in `.sitecore/sites.json` (typically generated by Sitecore CLI or deployment). Avoid hand-editing unless the format is known.
23
- - **Proxy:** Implemented in `src/proxy.ts`. Next.js runs middleware from `middleware.ts` at root or in `src/` — if the app only has `proxy.ts`, add `src/middleware.ts` that re-exports it.
24
- - **Chain order is fixed:** MultisiteProxy → RedirectsProxy → PersonalizeProxy. **Do not change this order.** MultisiteProxy resolves site from request (hostname or cookie) and rewrites; redirects and personalization run after.
25
- - **Skip / matcher:** Use the skip callback and matcher to exclude /api, /_next, static files, and health checks so the proxy stays lightweight.
26
- - Config: sitecore.config.ts → multisite (e.g. enabled, useCookieResolution). Single SitecoreClient; pass resolved site (and locale from context.locale) into getPage, getDictionary, getComponentData.
27
-
28
- ## Stop Conditions
29
-
30
- - Stop if the user wants to reorder the proxy chain; explain that order is required.
31
- - Stop if sites.json format is unknown and the change could break resolution; suggest checking SDK docs or CLI output.
32
- - Do not add a second site resolution mechanism; use the existing proxy and config.
33
-
34
- ## References
35
-
36
- - [AGENTS.md](../../../AGENTS.md) for proxy chain, skip, and multisite config.
37
- - [Official Content SDK docs](https://doc.sitecore.com/xmc/en/developers/content-sdk/sitecore-content-sdk-for-xm-cloud.html).
@@ -1,38 +0,0 @@
1
- ---
2
- name: content-sdk-route-configuration
3
- description: Configures routing and layout for Pages Router. Single catch-all at src/pages/[[...path]].tsx; path from extractPath(context), locale from context.locale. Data flows via getStaticProps/getServerSideProps to _app and Layout. Use when changing routing, placeholders, or Layout.
4
- ---
5
-
6
- # Content SDK Route Configuration (Pages Router)
7
-
8
- Single catch-all route; no [site] or [locale] in the URL path. Site is resolved by middleware; locale from Next.js i18n (context.locale).
9
-
10
- ## When to Use
11
-
12
- - User asks to change routing, add a route, or fix 404/500 behavior.
13
- - Task involves catch-all route, placeholders, _app, or Layout.tsx.
14
- - User mentions "[[...path]]," "placeholder," "layout," or "getStaticProps."
15
-
16
- ## How to perform
17
-
18
- - Single Sitecore page: `src/pages/[[...path]].tsx`. Use `extractPath(context)` for path and `context.locale` for locale. Fetch all data in getStaticProps/getServerSideProps and pass to _app and Layout. Not-found/error: use getErrorPage in getStaticProps or 404.tsx / _error.tsx as appropriate.
19
-
20
- ## Hard Rules
21
-
22
- - **Single Sitecore page:** `src/pages/[[...path]].tsx`. This is the **only** page that renders Sitecore content. Do not add another page or catch-all for Sitecore content.
23
- - **Path:** Use `extractPath(context)` (from `@sitecore-content-sdk/nextjs/utils`) to get the path array. **Locale:** Use `context.locale` (Next.js i18n). Do not assume path or locale from headers or elsewhere.
24
- - **Data flow:** All Sitecore data is fetched in getStaticProps/getServerSideProps in [[...path]].tsx and passed to _app and Layout. Do not fetch Sitecore data in _app.tsx.
25
- - **Layout:** Layout.tsx renders page layout and placeholders; Providers wrap component props and page context; Bootstrap handles site name and preview mode.
26
- - Placeholders are rendered by the layout; do not change placeholder names or structure without aligning with Sitecore layout definition.
27
- - **404 / 500 / _error:** When the catch-all returns `notFound: true`, Next.js renders 404.tsx. For Sitecore-driven error content use `client.getErrorPage(ErrorPage.NotFound)` or `ErrorPage.InternalServerError` in getStaticProps when applicable. _error.tsx is the error boundary; it does not fetch from Sitecore.
28
-
29
- ## Stop Conditions
30
-
31
- - Stop if the user wants to add a second catch-all or a different URL shape for Sitecore pages; explain single-entry-point constraint.
32
- - Stop if changing proxy/middleware order; order is fixed (MultisiteProxy → RedirectsProxy → PersonalizeProxy).
33
- - Do not move or rename the catch-all file without updating all references.
34
-
35
- ## References
36
-
37
- - [AGENTS.md](../../../AGENTS.md) for exact paths, extractPath, and layout flow.
38
- - [Official Content SDK docs](https://doc.sitecore.com/xmc/en/developers/content-sdk/sitecore-content-sdk-for-xm-cloud.html).
@@ -1,36 +0,0 @@
1
- ---
2
- name: content-sdk-site-setup-and-env
3
- description: Configures site and environment: sitecore.config.ts, environment variables, default site and language. Use when configuring the app or adding env vars. Document in .env.example only; never commit .env or .env.local.
4
- ---
5
-
6
- # Content SDK Site Setup and Environment (Pages Router)
7
-
8
- Central config in sitecore.config.ts; all secrets and environment-specific values via env vars.
9
-
10
- ## When to Use
11
-
12
- - User asks to configure site, default language, API host, or environment.
13
- - Task involves sitecore.config.ts, .env, or defaultSite/defaultLanguage.
14
- - User mentions "config," "environment variables," "API key," or "default site."
15
-
16
- ## How to perform
17
-
18
- - Edit `sitecore.config.ts` with `defineConfig`; read all secrets and env-specific values from `process.env.*`. Add or change vars in `.env.example` (or `.env.remote.example` / `.env.container.example`) with placeholders; never commit `.env` or `.env.local`.
19
-
20
- ## Hard Rules
21
-
22
- - Use `sitecore.config.ts` with `defineConfig` from the SDK. Expose api (edge, local), defaultSite, defaultLanguage, editingSecret, multisite, redirects, personalize as needed.
23
- - All sensitive or environment-specific values must come from environment variables (e.g. process.env.SITECORE_API_KEY). Never hardcode API keys, secrets, or production URLs in source.
24
- - Document every new or changed env var in `.env.example` (or `.env.remote.example` / `.env.container.example`). Use placeholder or empty value and a short comment; never put real secrets in example files.
25
- - Never commit `.env` or `.env.local`; they are gitignored. Example files are the source of truth for which vars exist.
26
-
27
- ## Stop Conditions
28
-
29
- - Stop if the user wants to commit real secrets or production values; insist on env vars and .env.example only.
30
- - Stop if adding a new env var would require CI or deployment changes without explicit instruction; document the var and note that deployment must set it.
31
- - Do not edit .next/, node_modules/, or lockfiles unless the task explicitly requires it.
32
-
33
- ## References
34
-
35
- - [AGENTS.md](../../../AGENTS.md) for boundaries and env rules.
36
- - [Official Content SDK docs](https://doc.sitecore.com/xmc/en/developers/content-sdk/sitecore-content-sdk-for-xm-cloud.html).
@@ -1,37 +0,0 @@
1
- ---
2
- name: content-sdk-sitemap-robots
3
- description: Sitemap and robots.txt for Pages Router: src/pages/api/sitemap.ts and src/pages/api/robots.ts with SitemapMiddleware(scClient, sites).getHandler() and RobotsMiddleware(scClient, sites).getHandler(). Rewrites in next.config.js. Use when configuring sitemap, robots.txt, or SEO.
4
- ---
5
-
6
- # Content SDK Sitemap and Robots (Pages Router)
7
-
8
- Sitemap and robots.txt are served via **API routes** and rewrites. Use the SDK middleware getHandler pattern and sites from .sitecore/sites.json.
9
-
10
- ## When to Use
11
-
12
- - User asks to add or change sitemap or robots.txt.
13
- - Task involves SEO, sitemap.xml, or robots route.
14
- - User mentions "sitemap," "robots," "SEO," or "rewrites."
15
-
16
- ## How to perform
17
-
18
- - Sitemap: `src/pages/api/sitemap.ts` with `SitemapMiddleware(scClient, sites).getHandler()`; robots: `src/pages/api/robots.ts` with `RobotsMiddleware(scClient, sites).getHandler()`. Use sites from `.sitecore/sites.json`. Add rewrites in next.config.js for /sitemap*.xml and /robots.txt to these API routes.
19
-
20
- ## Hard Rules
21
-
22
- - **Sitemap:** `src/pages/api/sitemap.ts` — use `new SitemapMiddleware(scClient, sites).getHandler()`. Export the handler. Use `sites` from `.sitecore/sites.json`.
23
- - **Robots:** `src/pages/api/robots.ts` — use `new RobotsMiddleware(scClient, sites).getHandler()`. Same pattern.
24
- - **Rewrites:** In `next.config.js`, add rewrites for `/robots.txt` and `/sitemap*.xml` to the corresponding API routes (e.g. `/sitemap.xml` → `/api/sitemap`).
25
- - Use the same SitecoreClient instance (e.g. from `src/lib/sitecore-client.ts`) as the rest of the app; do not create a dedicated client for sitemap/robots.
26
- - Avoid hardcoding the site list; use .sitecore/sites.json.
27
-
28
- ## Stop Conditions
29
-
30
- - Stop if the user wants to serve sitemap/robots from a different origin or with different auth; document and suggest proxy or edge config.
31
- - Do not add new env vars for sitemap/robots without documenting them in .env.example.
32
- - Do not change rewrite paths without updating docs and any references.
33
-
34
- ## References
35
-
36
- - [AGENTS.md](../../../AGENTS.md) for API routes and rewrites.
37
- - [Official Content SDK docs](https://doc.sitecore.com/xmc/en/developers/content-sdk/sitecore-content-sdk-for-xm-cloud.html).
@@ -1,39 +0,0 @@
1
- ---
2
- name: content-sdk-troubleshoot-editing
3
- description: Troubleshoots XM Cloud editing, preview, and design library for Pages Router. Check context.preview, context.previewData, and editing API routes (config, render, feaas/render). Use when editing or preview does not behave as expected.
4
- ---
5
-
6
- # Content SDK Troubleshoot Editing (Pages Router)
7
-
8
- This skill focuses on **diagnosing** editing, preview, and design library issues. For implementing editing-safe rendering (context.preview, getPreview/getDesignLibraryData, API routes), use the **content-sdk-editing-safe-rendering** skill; the two are complementary (implementation vs. troubleshooting).
9
-
10
- Diagnose and fix editing, preview, and design library issues without breaking the single client or proxy order. This app uses **context.preview** and **context.previewData** in getStaticProps/getServerSideProps.
11
-
12
- ## When to Use
13
-
14
- - User reports that editing, preview, or design library is broken or inconsistent.
15
- - Task involves debugging "not working in editor," missing chromes, or wrong data in preview.
16
- - User mentions "editing broken," "preview not working," "design library," or "editor issues."
17
-
18
- ## How to perform
19
-
20
- - Confirm context.preview and context.previewData and correct path/locale (extractPath, context.locale). Verify editing API routes (config, render, feaas/render) are not rewritten (check proxy matcher) and component-map.ts includes the component. Check env (editingSecret, API config) and .env.example documentation.
21
-
22
- ## Hard Rules
23
-
24
- - **Preview flow:** In [[...path]].tsx getStaticProps/getServerSideProps, use `context.preview` and `context.previewData`. When in preview, use `client.getPreview(context.previewData)` or `client.getDesignLibraryData(context.previewData)`. Ensure path and locale come from extractPath(context) and context.locale when not in preview.
25
- - Editing API routes: `src/pages/api/editing/config.ts` (EditingConfigMiddleware), `render.ts` (EditingRenderMiddleware), `feaas/render.ts` (FEAASRenderMiddleware) must be reachable and use the same component map (`.sitecore/component-map.ts`) and config as the app. Check proxy `config.matcher` so `/api` is excluded and not rewritten or blocked.
26
- - Check that the component map includes all components used in the layout; missing registration causes "component not found" in editor.
27
- - Environment: editingSecret and API config must be set (in env); document in .env.example only. Do not log or commit secrets.
28
- - Common causes: wrong path/locale passed to getPreview/getDesignLibraryData, or component not registered in component-map.ts.
29
-
30
- ## Stop Conditions
31
-
32
- - Stop if the fix would require changing CI, deployment, or XM Cloud project settings; suggest the user do that and document the required env or config.
33
- - Stop if the issue might be in Sitecore (layout, template) rather than the app; suggest checking layout and content in XM Cloud.
34
- - Do not recommend disabling security (e.g. skipping secret validation) without explicit user request and warning.
35
-
36
- ## References
37
-
38
- - content-sdk-editing-safe-rendering skill and [AGENTS.md](../../../AGENTS.md) for preview and editing flow.
39
- - [Official Content SDK docs](https://doc.sitecore.com/xmc/en/developers/content-sdk/sitecore-content-sdk-for-xm-cloud.html).
@@ -1,36 +0,0 @@
1
- ---
2
- name: content-sdk-upgrade-assistant
3
- description: Guides upgrading @sitecore-content-sdk/* packages: version bumps, breaking changes, migration steps. Use when moving to a newer SDK or package version. Check Content SDK repo CHANGELOG and upgrade guides.
4
- ---
5
-
6
- # Content SDK Upgrade Assistant (Pages Router)
7
-
8
- Upgrade @sitecore-content-sdk/* packages safely; follow the Content SDK repo changelog and migration guides.
9
-
10
- ## When to Use
11
-
12
- - User asks to upgrade SDK packages, update to a new version, or apply a migration.
13
- - Task involves version bumps, @sitecore-content-sdk/* dependencies, or breaking changes.
14
- - User mentions "upgrade," "migration," "new version," or "breaking change."
15
-
16
- ## How to perform
17
-
18
- - Bump all @sitecore-content-sdk/* to consistent versions; read the Content SDK repo CHANGELOG (and MIGRATION/upgrade docs) for breaking changes and migration steps. Update package.json, run `npm install` and `npm run build`; test editing and preview after upgrade.
19
-
20
- ## Hard Rules
21
-
22
- - Prefer upgrading all @sitecore-content-sdk/* packages together to a consistent set of versions unless the user requests a partial upgrade. Check peer dependencies and compatibility.
23
- - Update dependencies in package.json; run `npm install` and `npm run build`. Test editing and preview after upgrade.
24
- - Read the **Content SDK repository** CHANGELOG (and any MIGRATION.md or upgrade guide) for breaking changes and required code/config updates. Apply migration steps before or with the version bump.
25
- - Do not edit .next/, node_modules/, or lockfiles unless required for the upgrade. Do not change CI or root tooling unless the task explicitly includes it.
26
-
27
- ## Stop Conditions
28
-
29
- - Stop if the target version is not specified or unclear; ask or suggest checking the Content SDK CHANGELOG and supported versions.
30
- - Stop if a breaking change requires product or deployment decisions (e.g. new env vars, config schema); list required changes and ask the user to confirm.
31
-
32
- ## References
33
-
34
- - Content SDK repo [CHANGELOG](https://github.com/Sitecore/content-sdk/blob/dev/CHANGELOG.md) and upgrade docs.
35
- - [AGENTS.md](../../../AGENTS.md) for build commands.
36
- - [Official Content SDK docs](https://doc.sitecore.com/xmc/en/developers/content-sdk/sitecore-content-sdk-for-xm-cloud.html).
@@ -1,79 +0,0 @@
1
- # Skills.md — Capability groupings for this app (Next.js Pages Router)
2
-
3
- This file describes **this application** in terms of **capability-style groupings**: high-level areas that help AI tools and developers map tasks to the right part of the app. This is a Pages Router app with `pages/[[...path]].tsx`, Next.js i18n, and a single component map. For concrete steps and patterns, see [AGENTS.md](AGENTS.md) and the [official Content SDK documentation](https://doc.sitecore.com/xmc/en/developers/content-sdk/sitecore-content-sdk-for-xm-cloud.html).
4
-
5
- **Agent Skills:** Each grouping is also available as a skill in [.agents/skills/](.agents/skills/) in the standard [Agent Skills](https://agentskills.io) format (`SKILL.md` per capability). Tools that support this standard can discover and load these skills automatically; the skills are tailored for **Pages Router** (e.g. extractPath, context.locale, getComponentData, single component-map.ts).
6
-
7
- ---
8
-
9
- ## Why capability grouping
10
-
11
- Grouping related capabilities makes it easier to know which area of the app applies to a given task and to point to the right docs and patterns. Map the task to one or more of the groupings below; use AGENTS.md and the official docs for concrete steps.
12
-
13
- ---
14
-
15
- ## Capability groupings
16
-
17
- ### content-sdk-component-scaffold
18
-
19
- Creating new Sitecore components: file structure, props interface, and placement under `src/components/`. Use when adding a new component from scratch. Register in `.sitecore/component-map.ts`.
20
-
21
- ### content-sdk-component-registration
22
-
23
- Registering components in `.sitecore/component-map.ts` only. Required so layout and editing can resolve and render components. Used by getComponentData and editing API routes. Pages Router has a single map.
24
-
25
- ### content-sdk-editing-safe-rendering
26
-
27
- Safe rendering in XM Cloud editing and preview: `context.preview` and `context.previewData`, editing chromes, and design library. Use when ensuring components work in the Sitecore editor and preview. Use `client.getPreview(context.previewData)` or `client.getDesignLibraryData(context.previewData)` when in preview.
28
-
29
- ### content-sdk-field-usage-image-link-text
30
-
31
- Using SDK field components: `<Text>`, `<RichText>`, `<Image>`, `<Link>`, with proper validation and fallbacks. Use when rendering Sitecore fields.
32
-
33
- ### content-sdk-graphql-data-fetching
34
-
35
- Page, dictionary, and component data via the single Sitecore client in `src/lib/sitecore-client.ts`. Use `getPage(path, { locale: context.locale })`, then `getDictionary({ site: page.siteName, locale: page.locale })` and `getComponentData(page.layout, context, components)`. For SSG use `getPagePaths(sites, context?.locales)`.
36
-
37
- ### content-sdk-route-configuration
38
-
39
- Routing: single catch-all at `src/pages/[[...path]].tsx`. Path from `extractPath(context)`; locale from `context.locale`. Layout and page data flow via getStaticProps/getServerSideProps to _app and Layout.tsx. No [site]/[locale] in path; site resolved by middleware.
40
-
41
- ### content-sdk-site-setup-and-env
42
-
43
- Site and environment: `sitecore.config.ts`, environment variables, default site and language. Document vars in `.env.example` only; never commit `.env` or `.env.local`.
44
-
45
- ### content-sdk-multisite-management
46
-
47
- Multisite: `.sitecore/sites.json`, proxy in `src/proxy.ts`. Chain order is **fixed:** MultisiteProxy → RedirectsProxy → PersonalizeProxy. Do not change proxy order.
48
-
49
- ### content-sdk-dictionary-and-i18n
50
-
51
- Dictionary and i18n: Next.js i18n in `next.config.js` (i18n.locales, defaultLocale). Per-request locale is `context.locale` in getStaticProps/getServerSideProps. Fetch dictionary with `client.getDictionary({ site: page.siteName, locale: page.locale })` after getPage.
52
-
53
- ### content-sdk-sitemap-robots
54
-
55
- Sitemap and robots: `src/pages/api/sitemap.ts` and `src/pages/api/robots.ts` with `SitemapMiddleware(scClient, sites).getHandler()` and `RobotsMiddleware(scClient, sites).getHandler()`. Rewrites in next.config.js for /sitemap*.xml and /robots.txt.
56
-
57
- ### content-sdk-component-variants
58
-
59
- Component variants: different renderings or data-driven variants of the same component type. Use when one component has multiple presentations. Register in `.sitecore/component-map.ts`; getComponentData resolves props.
60
-
61
- ### content-sdk-troubleshoot-editing
62
-
63
- Troubleshooting XM Cloud editing, preview, and design library. Use when editing or preview does not behave as expected. Check context.preview, context.previewData, and editing API routes (config, render, feaas/render).
64
-
65
- ### content-sdk-upgrade-assistant
66
-
67
- Upgrading @sitecore-content-sdk/* packages: version bumps, breaking changes, migration steps. Use when moving to a newer SDK version. Check the Content SDK repo CHANGELOG and upgrade guides.
68
-
69
- ### content-sdk-component-data-strategy
70
-
71
- Component data: after getPage, use `client.getComponentData(page.layout, context, components)` to resolve component props; pass result to layout renderer. All Sitecore-driven component data goes through this flow. BYOC must be registered in `.sitecore/component-map.ts`.
72
-
73
- ---
74
-
75
- ## How to use this
76
-
77
- Map the task to one or more groupings above. Use [AGENTS.md](AGENTS.md) for app-level instructions and the [official documentation](https://doc.sitecore.com/xmc/en/developers/content-sdk/sitecore-content-sdk-for-xm-cloud.html) for APIs.
78
-
79
- **If your tool supports Agent Skills:** Load skills from [.agents/skills/](.agents/skills/) (one folder per capability). They provide when-to-use, hard rules, and stop conditions tailored for this Pages Router app.
@@ -1,37 +0,0 @@
1
- ---
2
- name: content-sdk-component-data-strategy
3
- description: Component data for App Router: layout data from getPage (or getPreview/getDesignLibraryData in editing). No getComponentData; pass site and locale from route params. Server Components use the client in server context; Client Components receive serializable props. Use when wiring component data or BYOC.
4
- ---
5
-
6
- # Content SDK Component Data Strategy (App Router)
7
-
8
- This app does **not** use getComponentData. Page and layout data come from **getPage** (or getPreview/getDesignLibraryData in editing). Component props are derived from the layout/placeholders; pass site and locale from route params.
9
-
10
- ## When to Use
11
-
12
- - User asks how to pass data to components, wire component props, or integrate custom/BYOC components.
13
- - Task involves component props, server vs client components, or BYOC.
14
- - User mentions "component data," "props," "BYOC," "server component," or "client component."
15
-
16
- ## How to perform
17
-
18
- - Fetch at page/layout with getPage (or getPreview/getDesignLibraryData in draft). Pass site and locale from route params. Server Components use the client in server context; Client Components receive serializable props only. Register BYOC in the correct component map and pass props from layout.
19
-
20
- ## Hard Rules
21
-
22
- - **Data source:** Page and layout from `client.getPage(path ?? [], { site, locale })` in the catch-all page (or getPreview/getDesignLibraryData when draftMode() is enabled). All Sitecore-driven data flows from this single fetch at the route level.
23
- - **Server Components:** Use the same SitecoreClient in server context (e.g. in the page or layout). Pass data as props to children.
24
- - **Client Components:** Receive **serializable** props from parent (no functions or non-serializable values). Do not create a new client inside components. Pass data from page/layout level into components.
25
- - **BYOC or custom components:** Must be registered in the appropriate component map (.sitecore/component-map.ts or component-map.client.ts) and receive props in the shape the layout expects (e.g. fields, params).
26
- - Do not fetch layout or page data inside a child component (e.g. another getPage call); fetch at page/layout level and pass props.
27
-
28
- ## Stop Conditions
29
-
30
- - Stop if the user wants to fetch page/layout data inside a child component; recommend fetching at page/layout level and passing props.
31
- - Stop if server/client boundary is ambiguous and the change could cause "use client" or serialization issues; clarify and follow Next.js and app conventions.
32
- - Do not introduce getComponentData or duplicate getPage logic; this app uses getPage-only data flow.
33
-
34
- ## References
35
-
36
- - content-sdk-graphql-data-fetching and [AGENTS.md](../../../AGENTS.md) for getPage and data flow.
37
- - [Official Content SDK docs](https://doc.sitecore.com/xmc/en/developers/content-sdk/sitecore-content-sdk-for-xm-cloud.html).
@@ -1,38 +0,0 @@
1
- ---
2
- name: content-sdk-component-registration
3
- description: Registers Sitecore components in the component map so layout and editing can resolve them. App Router uses .sitecore/component-map.ts (Server) and .sitecore/component-map.client.ts (Client). Use when registering a new component or when layout/editor cannot find a component.
4
- ---
5
-
6
- # Content SDK Component Registration (App Router)
7
-
8
- Register components in the Sitecore component maps so the layout and editing pipeline can resolve and render them. This app has **two** maps: server and client.
9
-
10
- ## When to Use
11
-
12
- - After scaffolding or adding a new Sitecore component (must be registered).
13
- - User reports a component not rendering, "component not found," or layout/placeholder showing raw component name.
14
- - Task involves `.sitecore/component-map.ts` or `.sitecore/component-map.client.ts`.
15
- - User asks how to register a component or fix component resolution.
16
-
17
- ## How to perform
18
-
19
- - Open `.sitecore/component-map.ts` (Server) or `.sitecore/component-map.client.ts` (Client). Add an entry mapping the layout component name to the React component import. Keep keys consistent with layout and existing map entries.
20
-
21
- ## Hard Rules
22
-
23
- - Every component rendered from Sitecore layout must be registered. Keep the maps in sync with `src/components/`.
24
- - **Server components** (no `'use client'`): Register in `.sitecore/component-map.ts` only.
25
- - **Client components** (`'use client'`): Register in `.sitecore/component-map.client.ts` only. Editing API routes use both maps (e.g. `clientComponents` from the client map).
26
- - Use consistent component names (same key in map as used in layout). Follow existing naming in the maps.
27
- - Do not remove or rename registrations without updating all references (layout, editing routes).
28
-
29
- ## Stop Conditions
30
-
31
- - Stop if it is unclear whether the new component is Server or Client; ask or follow app convention.
32
- - Stop if modifying the maps would break existing layout or editing; suggest a safe change or ask for confirmation.
33
- - Do not edit `.sitecore/metadata.json` or import-map unless the task explicitly requires it.
34
-
35
- ## References
36
-
37
- - [AGENTS.md](../../../AGENTS.md) for component maps and editing routes.
38
- - [Official Content SDK docs](https://doc.sitecore.com/xmc/en/developers/content-sdk/sitecore-content-sdk-for-xm-cloud.html).
@@ -1,38 +0,0 @@
1
- ---
2
- name: content-sdk-component-scaffold
3
- description: Creates new Sitecore components with correct file structure, props interface, and placement under src/components/. Use when adding a new component from scratch or scaffolding a component. App Router: decide Server vs Client and register in the appropriate map.
4
- ---
5
-
6
- # Content SDK Component Scaffold (App Router)
7
-
8
- Scaffold new Sitecore components so they integrate with the layout and editing pipeline. This app uses App Router with separate server and client component maps.
9
-
10
- ## When to Use
11
-
12
- - User asks to add a new Sitecore component, create a component from scratch, or scaffold a component.
13
- - Task involves creating a new React component that will be rendered from Sitecore layout/placeholders.
14
- - User mentions "new component," "add component," or "component file structure."
15
-
16
- ## How to perform
17
-
18
- - Create a new file under `src/components/` (or existing feature folder). Define props (fields, params), export a single default component.
19
- - Decide Server vs Client: default Server; add `'use client'` only if the component needs hooks or event handlers.
20
- - Register the component in the correct map (content-sdk-component-registration). Run `npm run build` to verify.
21
-
22
- ## Hard Rules
23
-
24
- - Place components under `src/components/`. Use existing folder conventions.
25
- - Define a props interface with the component's fields (e.g. `fields: { title: Field; ... }`) and any params. Use types from `@sitecore-content-sdk/react` or the app's types.
26
- - Export a single default component; one component per file unless the app pattern differs.
27
- - **Server vs Client:** Use Server Components by default. Add `'use client'` only for interactivity (hooks, event handlers). Register Server components in `.sitecore/component-map.ts`; Client components in `.sitecore/component-map.client.ts`.
28
- - After creating the component file, register it in the correct component map (see content-sdk-component-registration). Do not leave the component unregistered.
29
-
30
- ## Stop Conditions
31
-
32
- - Stop and ask if the component should be a Server or Client Component when the app does not have a clear convention.
33
- - Do not create components in `.next/`, `node_modules/`, or build output.
34
-
35
- ## References
36
-
37
- - [AGENTS.md](../../../AGENTS.md) for app structure and component maps.
38
- - [Skills.md](../../../Skills.md) for capability map. [Official Content SDK docs](https://doc.sitecore.com/xmc/en/developers/content-sdk/sitecore-content-sdk-for-xm-cloud.html).
@@ -1,36 +0,0 @@
1
- ---
2
- name: content-sdk-component-variants
3
- description: Implements component variants: different renderings or data-driven variants of the same component type. App Router: register in component-map.ts or component-map.client.ts as appropriate. Use when one component has multiple presentations.
4
- ---
5
-
6
- # Content SDK Component Variants (App Router)
7
-
8
- One component definition can have multiple presentations or data-driven variants. Keep registration and layout aligned. This app does not use getComponentData; layout/placeholder data comes from getPage.
9
-
10
- ## When to Use
11
-
12
- - User asks for different "variants," "versions," or "presentations" of a component.
13
- - Task involves rendering the same component type with different layouts or props based on data (e.g. variant field or style).
14
- - User mentions "component variants," "variations," or "multiple renderings."
15
-
16
- ## How to perform
17
-
18
- - Prefer one component that accepts variant/style via props and branches internally; or multiple map entries if the app pattern uses one key per variant. Use layout/fields/params for variant; register in the correct component map (Server or Client). Align with existing app convention.
19
-
20
- ## Hard Rules
21
-
22
- - Prefer a single component registration that accepts variant/style data (e.g. params or fields) and branches internally, over multiple map entries for the same logical component unless the app pattern uses separate registrations per variant.
23
- - Use props (fields, params) from layout to decide variant; do not rely on global state or URL for variant selection when data comes from Sitecore.
24
- - Register in `.sitecore/component-map.ts` (Server) or `.sitecore/component-map.client.ts` (Client) as appropriate. If the app uses one key per variant, register each; if one key with variant param, single registration. Follow existing app convention.
25
- - Keep component maps in sync with src/components/.
26
-
27
- ## Stop Conditions
28
-
29
- - Stop if the variant model (one registration vs many) is unclear; ask or follow the app's existing pattern.
30
- - Do not add new component map entries without ensuring layout and editing can provide the corresponding data.
31
- - Do not assume variant field names (e.g. "variant," "style") without checking the layout definition.
32
-
33
- ## References
34
-
35
- - [AGENTS.md](../../../AGENTS.md) and content-sdk-component-registration for maps.
36
- - [Official Content SDK docs](https://doc.sitecore.com/xmc/en/developers/content-sdk/sitecore-content-sdk-for-xm-cloud.html).
@@ -1,37 +0,0 @@
1
- ---
2
- name: content-sdk-dictionary-and-i18n
3
- description: Dictionary and i18n for App Router: next-intl with src/i18n/routing.ts and request.ts. Request locale is site_locale; call setRequestLocale in the page; in request.ts parse and load dictionary with client.getDictionary. Use when adding or changing translated content or locale behavior.
4
- ---
5
-
6
- # Content SDK Dictionary and i18n (App Router)
7
-
8
- This app uses **next-intl**. Locale is in the URL as [locale]. Request locale is encoded as `${site}_${locale}` for next-intl.
9
-
10
- ## When to Use
11
-
12
- - User asks to add or change translated content, locale, or dictionary.
13
- - Task involves getDictionary, next-intl, or locale in URL/request.
14
- - User mentions "dictionary," "i18n," "locale," "translation," or "next-intl."
15
-
16
- ## How to perform
17
-
18
- - Locales and routing: `src/i18n/routing.ts`. Request config: `src/i18n/request.ts` — parse `requestLocale` (e.g. `${site}_${locale}`), call `client.getDictionary({ locale, site })`, return `{ locale, messages }`. In the page, call `setRequestLocale(\`${site}_${locale}\`)` at the top. Use a single getDictionary per request.
19
-
20
- ## Hard Rules
21
-
22
- - **Config:** `src/i18n/routing.ts` — `defineRouting({ locales, defaultLocale, localePrefix })`. Align `locales` with Sitecore languages (e.g. from sitecore.config.ts defaultLanguage).
23
- - **Request config:** `src/i18n/request.ts` — `getRequestConfig` receives `requestLocale`. This app uses `${site}_${locale}` (set by `setRequestLocale(\`${site}_${locale}\`)` in the page). Parse requestLocale (e.g. `split('_')`) to get site and locale; load dictionary with `client.getDictionary({ locale, site })` and return `{ locale, messages }`.
24
- - **In the page:** Call `setRequestLocale(\`${site}_${locale}\`)` at the **top** of the page so next-intl and request config see the correct locale. Do not omit when adding new page branches.
25
- - **Do not** change the `${site}_${locale}` convention without updating request.ts and all pages that call setRequestLocale.
26
- - Use a single client.getDictionary per request for the active site/locale. Never assume locale from headers or global state; use route params (site, locale).
27
-
28
- ## Stop Conditions
29
-
30
- - Stop if the user wants to change to a different encoding for requestLocale; this affects request.ts and all setRequestLocale call sites.
31
- - Stop if adding a new locale without confirming it exists in Sitecore and in routing.ts.
32
- - Do not duplicate dictionary fetching (e.g. in layout and page) without a clear need.
33
-
34
- ## References
35
-
36
- - [AGENTS.md](../../../AGENTS.md) for next-intl, setRequestLocale, and getDictionary usage.
37
- - [Official Content SDK docs](https://doc.sitecore.com/xmc/en/developers/content-sdk/sitecore-content-sdk-for-xm-cloud.html).
@@ -1,37 +0,0 @@
1
- ---
2
- name: content-sdk-editing-safe-rendering
3
- description: Ensures components render safely in XM Cloud editing and preview. App Router uses draftMode() and getPreview/getDesignLibraryData from searchParams. Use when making components work in the Sitecore editor or fixing preview/editing behavior.
4
- ---
5
-
6
- # Content SDK Editing-Safe Rendering (App Router)
7
-
8
- Ensure components behave correctly in XM Cloud editing, preview, and design library. This app uses **draftMode()** and **searchParams** for editing data.
9
-
10
- ## When to Use
11
-
12
- - User asks about editing, preview, design library, or "component not working in editor."
13
- - Task involves draft mode, editing chromes, or design library integration.
14
- - Fixing issues where components render differently or break in editor vs published.
15
- - User mentions getPreview, getDesignLibraryData, or editing API routes.
16
-
17
- ## How to perform
18
-
19
- - In the page or layout: call `draftMode()`; when enabled, read editing params from searchParams, use `isDesignLibraryPreviewData(editingParams)` to choose getDesignLibraryData vs getPreview; otherwise use getPage. Editing routes: config route uses `createEditingConfigRouteHandler`, render route uses `createEditingRenderRouteHandlers`; set `dynamic = 'force-dynamic'` on both.
20
-
21
- ## Hard Rules
22
-
23
- - Use `draftMode()` in Server Components (e.g. in the page or [site] layout). When `draft.isEnabled`, get editing params from **searchParams** and use `isDesignLibraryPreviewData(editingParams)` to distinguish: if true, use `client.getDesignLibraryData(editingParams)`; otherwise use `client.getPreview(editingParams)`. When not in draft mode, use `getPage(path ?? [], { site, locale })`.
24
- - Do not assume editing/preview context in components that might run in static or non-editing contexts; guard on `draftMode()`.
25
- - Editing API routes: `src/app/api/editing/config/route.ts` uses `createEditingConfigRouteHandler({ components, clientComponents, metadata })` (import from `.sitecore/component-map`, `.sitecore/component-map.client`, `.sitecore/metadata.json`). `src/app/api/editing/render/route.ts` uses `createEditingRenderRouteHandlers({})`. Set `export const dynamic = 'force-dynamic'` on both. Do not duplicate client creation; config and render routes use the same component maps as the app.
26
- - Never commit editing secrets; use environment variables and document in .env.example only.
27
-
28
- ## Stop Conditions
29
-
30
- - Stop and clarify if the issue is preview vs design library vs published; behavior differs.
31
- - Do not change proxy or middleware order to "fix" editing; editing is driven by API routes and draft/preview data.
32
- - Do not recommend disabling secret validation without explicit user request and warning.
33
-
34
- ## References
35
-
36
- - [AGENTS.md](../../../AGENTS.md) for data fetching, preview flow, and editing routes.
37
- - [Official Content SDK docs](https://doc.sitecore.com/xmc/en/developers/content-sdk/sitecore-content-sdk-for-xm-cloud.html).
@@ -1,36 +0,0 @@
1
- ---
2
- name: content-sdk-field-usage-image-link-text
3
- description: Renders Sitecore fields using SDK field components (Text, RichText, Image, Link) with proper validation and fallbacks. Use when rendering content fields or when the user mentions Text, RichText, Image, Link, or field components.
4
- ---
5
-
6
- # Content SDK Field Usage (App Router)
7
-
8
- Use SDK field components to render Sitecore fields with proper validation and fallbacks.
9
-
10
- ## When to Use
11
-
12
- - User asks how to render a title, body, image, or link from Sitecore.
13
- - Task involves displaying content fields, fixing empty/broken images or links, or using RichText/Text/Image/Link components.
14
- - User mentions "field," "Image," "Link," "Text," "RichText," or "field value."
15
-
16
- ## How to perform
17
-
18
- - Use SDK field components: `<Text field={fields?.title} />`, `<RichText field={fields?.content} />`, `<Image field={fields?.image} />`, `<Link field={fields?.link} />`. Guard with `fields?.` when optional; use tag prop on Text when needed. Do not hardcode media or link URLs from Sitecore.
19
-
20
- ## Hard Rules
21
-
22
- - Prefer SDK field components over manual field value extraction: `<Text field={fields?.title} />`, `<RichText field={fields?.content} />`, `<Image field={fields?.image} />`, `<Link field={fields?.link} />`. Use tag prop for Text when needed (e.g. tag="h1").
23
- - Validate or guard field existence before rendering when fields can be optional (e.g. `fields?.title`). Handle null/undefined and empty fields gracefully.
24
- - Do not hardcode image or link URLs when the data comes from Sitecore; use the field components or helpers that resolve media/URLs.
25
- - Follow the app's import pattern (e.g. from lib or components).
26
-
27
- ## Stop Conditions
28
-
29
- - Stop if the field structure (name or type) is unknown; suggest checking the layout/data shape or asking the user.
30
- - Do not assume field names (e.g. "title") without confirmation when the template might use different names.
31
- - Do not commit or log raw field values that might contain PII or secrets.
32
-
33
- ## References
34
-
35
- - [AGENTS.md](../../../AGENTS.md) for component and Sitecore patterns.
36
- - [Official Content SDK docs](https://doc.sitecore.com/xmc/en/developers/content-sdk/sitecore-content-sdk-for-xm-cloud.html).
@@ -1,37 +0,0 @@
1
- ---
2
- name: content-sdk-graphql-data-fetching
3
- description: Fetches page data and dictionary via the single Sitecore client. App Router: getPage(path ?? [], { site, locale }), getDictionary, getAppRouterStaticParams; for preview use draftMode() and getPreview/getDesignLibraryData from searchParams. Use when fetching page or dictionary content.
4
- ---
5
-
6
- # Content SDK GraphQL Data Fetching (App Router)
7
-
8
- All Sitecore data fetching goes through the single client in `src/lib/sitecore-client.ts`. Use getPage, getDictionary, and related methods correctly. This app does **not** use getComponentData; layout data comes from getPage.
9
-
10
- ## When to Use
11
-
12
- - User asks how to fetch page data, layout, or dictionary phrases.
13
- - Task involves getPage, getDictionary, getErrorPage, getPreview, getDesignLibraryData, or getAppRouterStaticParams.
14
- - User mentions "sitecore client," "Layout Service," "page data," or "dictionary."
15
-
16
- ## How to perform
17
-
18
- - Use the client from `src/lib/sitecore-client.ts` only. In the catch-all page: `await params`, then `client.getPage(path ?? [], { site, locale })`. For SSG use `generateStaticParams` and `client.getAppRouterStaticParams(siteNames, locales)`. For preview use `draftMode()` and `getPreview`/`getDesignLibraryData` from searchParams.
19
-
20
- ## Hard Rules
21
-
22
- - Use the single SitecoreClient instance in `src/lib/sitecore-client.ts`. Do not create a second client or instantiate SitecoreClient elsewhere.
23
- - Pass **site** and **locale** from route params (e.g. `await params` in the page). Do not rely on global state for site/locale in server code.
24
- - **Catch-all page:** `client.getPage(path ?? [], { site, locale })`. Params are a Promise (Next.js 15+); use `await params` to get `{ site, locale, path? }`.
25
- - **Preview:** Use `draftMode()`; if `draft.isEnabled`, use `client.getPreview(editingParams)` or `client.getDesignLibraryData(editingParams)` from **searchParams**. Otherwise use getPage with site and locale.
26
- - **SSG:** `generateStaticParams` — use `client.getAppRouterStaticParams(siteNames, locales)` where site names come from `.sitecore/sites.json` (e.g. `sites.map((s) => s.name)`), locales from `src/i18n/routing.ts` (e.g. `routing.locales.slice()`). Return at least one default param when not generating full paths (e.g. `{ site, locale, path: [] }`).
27
- - Config for the client comes from `sitecore.config.ts`; use environment variables, never hardcode secrets.
28
-
29
- ## Stop Conditions
30
-
31
- - Stop if the task requires moving the client to another folder without clear requirement; suggest keeping a single instance in lib.
32
- - Do not add direct GraphQL or fetch to Layout Service bypassing the client unless the task explicitly requires it.
33
-
34
- ## References
35
-
36
- - [AGENTS.md](../../../AGENTS.md) for SitecoreClient, getPage, getDictionary, and SSG.
37
- - [Official Content SDK docs](https://doc.sitecore.com/xmc/en/developers/content-sdk/sitecore-content-sdk-for-xm-cloud.html).