[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-contentful-contentful-custom-app-enhancement":3,"mdc--4go4tz-key":33,"related-org-contentful-contentful-custom-app-enhancement":688,"related-repo-contentful-contentful-custom-app-enhancement":785},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":19,"repoUrl":20,"updatedAt":21,"license":22,"forks":23,"topics":24,"repo":28,"sourceUrl":31,"mdContent":32},"contentful-custom-app-enhancement","enhance and debug Contentful custom apps","Improve, debug, and extend an existing Contentful App Framework custom app in a customer's own repository. Use when users provide a bug report, feature request, support note, customer feedback, or direct change request for an existing custom app, including app configuration, sidebar, field editor, dialog, page, home, App Action, Function, installation parameters, local validation, or PR preparation. Also triggers on \"fix my Contentful app\", \"improve a custom app\", \"enhance App Framework app\", \"debug custom app\", \"update sidebar app\", and \"custom app feature request\". Not for creating a brand new app from scratch (contentful-custom-app-from-scratch), generic API examples (contentful-api), migrations (contentful-migration), or website integration (contentful-nextjs).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"contentful","Contentful","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fcontentful.png",[12,16],{"name":13,"slug":14,"type":15},"CMS","cms","tag",{"name":17,"slug":18,"type":15},"Debugging","debugging",36,"https:\u002F\u002Fgithub.com\u002Fcontentful\u002Fskills","2026-07-12T08:48:03.887678","MIT",2,[25,8,26,27],"agents","optimization","skills",{"repoUrl":20,"stars":19,"forks":23,"topics":29,"description":30},[25,8,26,27],"Skills for teaching agents how to build on Contentful.","https:\u002F\u002Fgithub.com\u002Fcontentful\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Fcontentful-apps\u002Fcontentful-custom-app-enhancement","---\nname: contentful-custom-app-enhancement\ndescription: >-\n  Improve, debug, and extend an existing Contentful App Framework custom app in\n  a customer's own repository. Use when users provide a bug report, feature\n  request, support note, customer feedback, or direct change request for an\n  existing custom app, including app configuration, sidebar, field editor,\n  dialog, page, home, App Action, Function, installation parameters, local\n  validation, or PR preparation. Also triggers on \"fix my Contentful app\",\n  \"improve a custom app\", \"enhance App Framework app\", \"debug custom app\",\n  \"update sidebar app\", and \"custom app feature request\". Not for creating a\n  brand new app from scratch (contentful-custom-app-from-scratch), generic API\n  examples (contentful-api), migrations (contentful-migration), or website\n  integration (contentful-nextjs).\nlicense: MIT\nmetadata:\n  author: contentful\n  version: \"2.0.0\"\nallowed-tools: mcp__contentful-mcp__* mcp__plugin_contentful_contentful-mcp__*\n---\n\n# Contentful Custom App Enhancement\n\nUse this skill to turn a bug report, support note, or feature request into a\nsmall, reviewable improvement for an existing Contentful custom app.\n\nDefault to the user's app repository and workflow. Do not assume a specific\nrepository convention, publication process, or review policy unless the user\nprovides one.\n\nWhen a comparable public Contentful Marketplace app or example in Contentful's\npublic apps repository (`https:\u002F\u002Fgithub.com\u002Fcontentful\u002Fapps`) exists, use it as\na best practice reference for App Framework patterns and UX polish without\ninheriting its release or distribution workflow.\n\n## Inputs\n\nAccept:\n\n- bug reports,\n- customer or editor feedback,\n- support tickets or issue links,\n- screenshots or screen recordings,\n- direct requests to change a known custom app,\n- partial notes about an App Framework behavior.\n\nIf the source material is incomplete, continue with local code and provided\ncontext when the risk is low. Ask a targeted question when the missing answer\ncould change the user-facing behavior, data writes, authentication, or\ndeployment path.\n\n## Workflow\n\n### 1. Build the Request Context\n\nIdentify:\n\n- original request and affected users,\n- current app behavior versus expected behavior,\n- Contentful location and workflow affected,\n- space, environment, content type, field, locale, and role assumptions,\n- external service or credential dependencies,\n- evidence available locally and evidence still missing.\n\nSeparate confirmed facts from assumptions.\n\n### 2. Inspect the Existing App\n\nBefore editing:\n\n- check repository status and avoid overwriting user changes,\n- inspect `package.json`, scripts, lockfile, and framework conventions,\n- locate the relevant app locations and SDK usage,\n- review existing tests and nearby components,\n- identify app definition, installation parameters, and deployment notes if they\n  exist,\n- confirm whether the app uses App SDK, React Apps Toolkit, Forma 36,\n  contentful-management, App Actions, Functions, or an external backend.\n\nFor a reusable checklist, use\n[Enhancement checklist](references\u002Fenhancement-checklist.md).\n\n### 3. Decide Whether the Change Is Small Enough\n\nProceed with implementation when the change can plausibly be:\n\n- scoped to one app,\n- explained in one short PR,\n- validated locally or in a sandbox,\n- reviewed without broad product redesign,\n- implemented without risky migrations or secret-handling changes.\n\nPause and clarify when the request requires:\n\n- production data changes,\n- a new external auth model,\n- major content model redesign,\n- multi-app coordination,\n- new backend infrastructure,\n- unavailable Function or plan capabilities,\n- ambiguous editor behavior.\n\n### 4. Plan the Smallest Useful Change\n\nWrite a short plan before editing:\n\n- files or app locations likely to change,\n- data read\u002Fwrite behavior,\n- UI and validation updates,\n- tests or manual verification to run,\n- risks and rollback path.\n\nPrefer improving the existing flow over replacing it.\n\n### 5. Implement in the App's Existing Style\n\n- Reuse current framework, routing, hooks, components, and package manager.\n- Keep TypeScript precise and avoid broad `any` types.\n- Use Forma 36 for Contentful web app UI unless the app already uses another\n  deliberate design system.\n- Preserve editor trust: show loading, empty, error, permission, and destructive\n  action states when relevant.\n- Keep configuration UI explicit about what values are stored at installation\n  versus instance scope.\n- Treat non-secret parameters as readable by space members.\n- When runtime locations need installation parameters, prefer\n  `sdk.parameters.installation`. Do not add or preserve CMA app-installation\n  reads in sidebar, field editor, entry editor, page, dialog, home, mount\n  effects, render paths, or click handlers just to retrieve app configuration.\n- Do not expose tokens or private credentials in client code.\n- Keep changes narrow; avoid unrelated formatting, dependency churn, or\n  refactors.\n\n### 6. Validate the Improvement\n\nRun the closest available validation:\n\n- targeted unit or component tests,\n- typecheck,\n- lint or formatter check,\n- production build,\n- local dev server smoke test,\n- Contentful web app manual flow in a non-production space,\n- grep or ripgrep for `appInstallation.getForOrganization`,\n  `appInstallation.get`, and `getForOrganization` when installation-parameter\n  access is touched, confirming runtime config reads use\n  `sdk.parameters.installation` or documenting why a CMA app-installation call\n  remains,\n- App Action, Function, or backend endpoint test when the change touches\n  server-side behavior.\n\nWhen validation requires credentials or access the agent does not have, explain\nexactly what remains for the user to verify.\n\n### 7. Prepare Reviewable Output\n\nIf the user wants a commit or PR:\n\n- create a focused branch using the user's repo convention when known,\n- keep commits small and conventional,\n- do not stage unrelated local files,\n- include request context, implementation summary, validation, and open\n  questions in the PR draft.\n\nIf the user only asked for the fix, end with:\n\n- context,\n- assessment,\n- implementation summary,\n- validation,\n- remaining risks or follow-up.\n\n## Guardrails\n\n- Do not force a code change when the better answer is product clarification.\n- Do not overfit one vague report without saying what is uncertain.\n- Do not widen the scope into a rewrite unless the user asks.\n- Do not assume app users have publication or distribution requirements unless\n  they say so.\n- Do not claim Contentful plan features, SDK behavior, or API limits from memory\n  when current official docs should be checked.\n\n## Related Skills\n\n- `contentful-custom-app-from-scratch` - design and build a new custom app.\n- `contentful-api` - concrete REST and GraphQL API examples.\n- `contentful-migration` - content model migration scripts.\n- `contentful-guide` - Contentful concepts and API routing.\n",{"data":34,"body":38},{"name":4,"description":6,"license":22,"metadata":35,"allowed-tools":37},{"author":8,"version":36},"2.0.0","mcp__contentful-mcp__* mcp__plugin_contentful_contentful-mcp__*",{"type":39,"children":40},"root",[41,49,55,60,74,81,86,121,126,132,139,144,177,182,188,193,234,248,254,259,287,292,330,336,341,369,374,380,444,450,455,529,534,540,545,568,573,601,607,635,641],{"type":42,"tag":43,"props":44,"children":45},"element","h1",{"id":4},[46],{"type":47,"value":48},"text","Contentful Custom App Enhancement",{"type":42,"tag":50,"props":51,"children":52},"p",{},[53],{"type":47,"value":54},"Use this skill to turn a bug report, support note, or feature request into a\nsmall, reviewable improvement for an existing Contentful custom app.",{"type":42,"tag":50,"props":56,"children":57},{},[58],{"type":47,"value":59},"Default to the user's app repository and workflow. Do not assume a specific\nrepository convention, publication process, or review policy unless the user\nprovides one.",{"type":42,"tag":50,"props":61,"children":62},{},[63,65,72],{"type":47,"value":64},"When a comparable public Contentful Marketplace app or example in Contentful's\npublic apps repository (",{"type":42,"tag":66,"props":67,"children":69},"code",{"className":68},[],[70],{"type":47,"value":71},"https:\u002F\u002Fgithub.com\u002Fcontentful\u002Fapps",{"type":47,"value":73},") exists, use it as\na best practice reference for App Framework patterns and UX polish without\ninheriting its release or distribution workflow.",{"type":42,"tag":75,"props":76,"children":78},"h2",{"id":77},"inputs",[79],{"type":47,"value":80},"Inputs",{"type":42,"tag":50,"props":82,"children":83},{},[84],{"type":47,"value":85},"Accept:",{"type":42,"tag":87,"props":88,"children":89},"ul",{},[90,96,101,106,111,116],{"type":42,"tag":91,"props":92,"children":93},"li",{},[94],{"type":47,"value":95},"bug reports,",{"type":42,"tag":91,"props":97,"children":98},{},[99],{"type":47,"value":100},"customer or editor feedback,",{"type":42,"tag":91,"props":102,"children":103},{},[104],{"type":47,"value":105},"support tickets or issue links,",{"type":42,"tag":91,"props":107,"children":108},{},[109],{"type":47,"value":110},"screenshots or screen recordings,",{"type":42,"tag":91,"props":112,"children":113},{},[114],{"type":47,"value":115},"direct requests to change a known custom app,",{"type":42,"tag":91,"props":117,"children":118},{},[119],{"type":47,"value":120},"partial notes about an App Framework behavior.",{"type":42,"tag":50,"props":122,"children":123},{},[124],{"type":47,"value":125},"If the source material is incomplete, continue with local code and provided\ncontext when the risk is low. Ask a targeted question when the missing answer\ncould change the user-facing behavior, data writes, authentication, or\ndeployment path.",{"type":42,"tag":75,"props":127,"children":129},{"id":128},"workflow",[130],{"type":47,"value":131},"Workflow",{"type":42,"tag":133,"props":134,"children":136},"h3",{"id":135},"_1-build-the-request-context",[137],{"type":47,"value":138},"1. Build the Request Context",{"type":42,"tag":50,"props":140,"children":141},{},[142],{"type":47,"value":143},"Identify:",{"type":42,"tag":87,"props":145,"children":146},{},[147,152,157,162,167,172],{"type":42,"tag":91,"props":148,"children":149},{},[150],{"type":47,"value":151},"original request and affected users,",{"type":42,"tag":91,"props":153,"children":154},{},[155],{"type":47,"value":156},"current app behavior versus expected behavior,",{"type":42,"tag":91,"props":158,"children":159},{},[160],{"type":47,"value":161},"Contentful location and workflow affected,",{"type":42,"tag":91,"props":163,"children":164},{},[165],{"type":47,"value":166},"space, environment, content type, field, locale, and role assumptions,",{"type":42,"tag":91,"props":168,"children":169},{},[170],{"type":47,"value":171},"external service or credential dependencies,",{"type":42,"tag":91,"props":173,"children":174},{},[175],{"type":47,"value":176},"evidence available locally and evidence still missing.",{"type":42,"tag":50,"props":178,"children":179},{},[180],{"type":47,"value":181},"Separate confirmed facts from assumptions.",{"type":42,"tag":133,"props":183,"children":185},{"id":184},"_2-inspect-the-existing-app",[186],{"type":47,"value":187},"2. Inspect the Existing App",{"type":42,"tag":50,"props":189,"children":190},{},[191],{"type":47,"value":192},"Before editing:",{"type":42,"tag":87,"props":194,"children":195},{},[196,201,214,219,224,229],{"type":42,"tag":91,"props":197,"children":198},{},[199],{"type":47,"value":200},"check repository status and avoid overwriting user changes,",{"type":42,"tag":91,"props":202,"children":203},{},[204,206,212],{"type":47,"value":205},"inspect ",{"type":42,"tag":66,"props":207,"children":209},{"className":208},[],[210],{"type":47,"value":211},"package.json",{"type":47,"value":213},", scripts, lockfile, and framework conventions,",{"type":42,"tag":91,"props":215,"children":216},{},[217],{"type":47,"value":218},"locate the relevant app locations and SDK usage,",{"type":42,"tag":91,"props":220,"children":221},{},[222],{"type":47,"value":223},"review existing tests and nearby components,",{"type":42,"tag":91,"props":225,"children":226},{},[227],{"type":47,"value":228},"identify app definition, installation parameters, and deployment notes if they\nexist,",{"type":42,"tag":91,"props":230,"children":231},{},[232],{"type":47,"value":233},"confirm whether the app uses App SDK, React Apps Toolkit, Forma 36,\ncontentful-management, App Actions, Functions, or an external backend.",{"type":42,"tag":50,"props":235,"children":236},{},[237,239,246],{"type":47,"value":238},"For a reusable checklist, use\n",{"type":42,"tag":240,"props":241,"children":243},"a",{"href":242},"references\u002Fenhancement-checklist.md",[244],{"type":47,"value":245},"Enhancement checklist",{"type":47,"value":247},".",{"type":42,"tag":133,"props":249,"children":251},{"id":250},"_3-decide-whether-the-change-is-small-enough",[252],{"type":47,"value":253},"3. Decide Whether the Change Is Small Enough",{"type":42,"tag":50,"props":255,"children":256},{},[257],{"type":47,"value":258},"Proceed with implementation when the change can plausibly be:",{"type":42,"tag":87,"props":260,"children":261},{},[262,267,272,277,282],{"type":42,"tag":91,"props":263,"children":264},{},[265],{"type":47,"value":266},"scoped to one app,",{"type":42,"tag":91,"props":268,"children":269},{},[270],{"type":47,"value":271},"explained in one short PR,",{"type":42,"tag":91,"props":273,"children":274},{},[275],{"type":47,"value":276},"validated locally or in a sandbox,",{"type":42,"tag":91,"props":278,"children":279},{},[280],{"type":47,"value":281},"reviewed without broad product redesign,",{"type":42,"tag":91,"props":283,"children":284},{},[285],{"type":47,"value":286},"implemented without risky migrations or secret-handling changes.",{"type":42,"tag":50,"props":288,"children":289},{},[290],{"type":47,"value":291},"Pause and clarify when the request requires:",{"type":42,"tag":87,"props":293,"children":294},{},[295,300,305,310,315,320,325],{"type":42,"tag":91,"props":296,"children":297},{},[298],{"type":47,"value":299},"production data changes,",{"type":42,"tag":91,"props":301,"children":302},{},[303],{"type":47,"value":304},"a new external auth model,",{"type":42,"tag":91,"props":306,"children":307},{},[308],{"type":47,"value":309},"major content model redesign,",{"type":42,"tag":91,"props":311,"children":312},{},[313],{"type":47,"value":314},"multi-app coordination,",{"type":42,"tag":91,"props":316,"children":317},{},[318],{"type":47,"value":319},"new backend infrastructure,",{"type":42,"tag":91,"props":321,"children":322},{},[323],{"type":47,"value":324},"unavailable Function or plan capabilities,",{"type":42,"tag":91,"props":326,"children":327},{},[328],{"type":47,"value":329},"ambiguous editor behavior.",{"type":42,"tag":133,"props":331,"children":333},{"id":332},"_4-plan-the-smallest-useful-change",[334],{"type":47,"value":335},"4. Plan the Smallest Useful Change",{"type":42,"tag":50,"props":337,"children":338},{},[339],{"type":47,"value":340},"Write a short plan before editing:",{"type":42,"tag":87,"props":342,"children":343},{},[344,349,354,359,364],{"type":42,"tag":91,"props":345,"children":346},{},[347],{"type":47,"value":348},"files or app locations likely to change,",{"type":42,"tag":91,"props":350,"children":351},{},[352],{"type":47,"value":353},"data read\u002Fwrite behavior,",{"type":42,"tag":91,"props":355,"children":356},{},[357],{"type":47,"value":358},"UI and validation updates,",{"type":42,"tag":91,"props":360,"children":361},{},[362],{"type":47,"value":363},"tests or manual verification to run,",{"type":42,"tag":91,"props":365,"children":366},{},[367],{"type":47,"value":368},"risks and rollback path.",{"type":42,"tag":50,"props":370,"children":371},{},[372],{"type":47,"value":373},"Prefer improving the existing flow over replacing it.",{"type":42,"tag":133,"props":375,"children":377},{"id":376},"_5-implement-in-the-apps-existing-style",[378],{"type":47,"value":379},"5. Implement in the App's Existing Style",{"type":42,"tag":87,"props":381,"children":382},{},[383,388,401,406,411,416,421,434,439],{"type":42,"tag":91,"props":384,"children":385},{},[386],{"type":47,"value":387},"Reuse current framework, routing, hooks, components, and package manager.",{"type":42,"tag":91,"props":389,"children":390},{},[391,393,399],{"type":47,"value":392},"Keep TypeScript precise and avoid broad ",{"type":42,"tag":66,"props":394,"children":396},{"className":395},[],[397],{"type":47,"value":398},"any",{"type":47,"value":400}," types.",{"type":42,"tag":91,"props":402,"children":403},{},[404],{"type":47,"value":405},"Use Forma 36 for Contentful web app UI unless the app already uses another\ndeliberate design system.",{"type":42,"tag":91,"props":407,"children":408},{},[409],{"type":47,"value":410},"Preserve editor trust: show loading, empty, error, permission, and destructive\naction states when relevant.",{"type":42,"tag":91,"props":412,"children":413},{},[414],{"type":47,"value":415},"Keep configuration UI explicit about what values are stored at installation\nversus instance scope.",{"type":42,"tag":91,"props":417,"children":418},{},[419],{"type":47,"value":420},"Treat non-secret parameters as readable by space members.",{"type":42,"tag":91,"props":422,"children":423},{},[424,426,432],{"type":47,"value":425},"When runtime locations need installation parameters, prefer\n",{"type":42,"tag":66,"props":427,"children":429},{"className":428},[],[430],{"type":47,"value":431},"sdk.parameters.installation",{"type":47,"value":433},". Do not add or preserve CMA app-installation\nreads in sidebar, field editor, entry editor, page, dialog, home, mount\neffects, render paths, or click handlers just to retrieve app configuration.",{"type":42,"tag":91,"props":435,"children":436},{},[437],{"type":47,"value":438},"Do not expose tokens or private credentials in client code.",{"type":42,"tag":91,"props":440,"children":441},{},[442],{"type":47,"value":443},"Keep changes narrow; avoid unrelated formatting, dependency churn, or\nrefactors.",{"type":42,"tag":133,"props":445,"children":447},{"id":446},"_6-validate-the-improvement",[448],{"type":47,"value":449},"6. Validate the Improvement",{"type":42,"tag":50,"props":451,"children":452},{},[453],{"type":47,"value":454},"Run the closest available validation:",{"type":42,"tag":87,"props":456,"children":457},{},[458,463,468,473,478,483,488,524],{"type":42,"tag":91,"props":459,"children":460},{},[461],{"type":47,"value":462},"targeted unit or component tests,",{"type":42,"tag":91,"props":464,"children":465},{},[466],{"type":47,"value":467},"typecheck,",{"type":42,"tag":91,"props":469,"children":470},{},[471],{"type":47,"value":472},"lint or formatter check,",{"type":42,"tag":91,"props":474,"children":475},{},[476],{"type":47,"value":477},"production build,",{"type":42,"tag":91,"props":479,"children":480},{},[481],{"type":47,"value":482},"local dev server smoke test,",{"type":42,"tag":91,"props":484,"children":485},{},[486],{"type":47,"value":487},"Contentful web app manual flow in a non-production space,",{"type":42,"tag":91,"props":489,"children":490},{},[491,493,499,501,507,509,515,517,522],{"type":47,"value":492},"grep or ripgrep for ",{"type":42,"tag":66,"props":494,"children":496},{"className":495},[],[497],{"type":47,"value":498},"appInstallation.getForOrganization",{"type":47,"value":500},",\n",{"type":42,"tag":66,"props":502,"children":504},{"className":503},[],[505],{"type":47,"value":506},"appInstallation.get",{"type":47,"value":508},", and ",{"type":42,"tag":66,"props":510,"children":512},{"className":511},[],[513],{"type":47,"value":514},"getForOrganization",{"type":47,"value":516}," when installation-parameter\naccess is touched, confirming runtime config reads use\n",{"type":42,"tag":66,"props":518,"children":520},{"className":519},[],[521],{"type":47,"value":431},{"type":47,"value":523}," or documenting why a CMA app-installation call\nremains,",{"type":42,"tag":91,"props":525,"children":526},{},[527],{"type":47,"value":528},"App Action, Function, or backend endpoint test when the change touches\nserver-side behavior.",{"type":42,"tag":50,"props":530,"children":531},{},[532],{"type":47,"value":533},"When validation requires credentials or access the agent does not have, explain\nexactly what remains for the user to verify.",{"type":42,"tag":133,"props":535,"children":537},{"id":536},"_7-prepare-reviewable-output",[538],{"type":47,"value":539},"7. Prepare Reviewable Output",{"type":42,"tag":50,"props":541,"children":542},{},[543],{"type":47,"value":544},"If the user wants a commit or PR:",{"type":42,"tag":87,"props":546,"children":547},{},[548,553,558,563],{"type":42,"tag":91,"props":549,"children":550},{},[551],{"type":47,"value":552},"create a focused branch using the user's repo convention when known,",{"type":42,"tag":91,"props":554,"children":555},{},[556],{"type":47,"value":557},"keep commits small and conventional,",{"type":42,"tag":91,"props":559,"children":560},{},[561],{"type":47,"value":562},"do not stage unrelated local files,",{"type":42,"tag":91,"props":564,"children":565},{},[566],{"type":47,"value":567},"include request context, implementation summary, validation, and open\nquestions in the PR draft.",{"type":42,"tag":50,"props":569,"children":570},{},[571],{"type":47,"value":572},"If the user only asked for the fix, end with:",{"type":42,"tag":87,"props":574,"children":575},{},[576,581,586,591,596],{"type":42,"tag":91,"props":577,"children":578},{},[579],{"type":47,"value":580},"context,",{"type":42,"tag":91,"props":582,"children":583},{},[584],{"type":47,"value":585},"assessment,",{"type":42,"tag":91,"props":587,"children":588},{},[589],{"type":47,"value":590},"implementation summary,",{"type":42,"tag":91,"props":592,"children":593},{},[594],{"type":47,"value":595},"validation,",{"type":42,"tag":91,"props":597,"children":598},{},[599],{"type":47,"value":600},"remaining risks or follow-up.",{"type":42,"tag":75,"props":602,"children":604},{"id":603},"guardrails",[605],{"type":47,"value":606},"Guardrails",{"type":42,"tag":87,"props":608,"children":609},{},[610,615,620,625,630],{"type":42,"tag":91,"props":611,"children":612},{},[613],{"type":47,"value":614},"Do not force a code change when the better answer is product clarification.",{"type":42,"tag":91,"props":616,"children":617},{},[618],{"type":47,"value":619},"Do not overfit one vague report without saying what is uncertain.",{"type":42,"tag":91,"props":621,"children":622},{},[623],{"type":47,"value":624},"Do not widen the scope into a rewrite unless the user asks.",{"type":42,"tag":91,"props":626,"children":627},{},[628],{"type":47,"value":629},"Do not assume app users have publication or distribution requirements unless\nthey say so.",{"type":42,"tag":91,"props":631,"children":632},{},[633],{"type":47,"value":634},"Do not claim Contentful plan features, SDK behavior, or API limits from memory\nwhen current official docs should be checked.",{"type":42,"tag":75,"props":636,"children":638},{"id":637},"related-skills",[639],{"type":47,"value":640},"Related Skills",{"type":42,"tag":87,"props":642,"children":643},{},[644,655,666,677],{"type":42,"tag":91,"props":645,"children":646},{},[647,653],{"type":42,"tag":66,"props":648,"children":650},{"className":649},[],[651],{"type":47,"value":652},"contentful-custom-app-from-scratch",{"type":47,"value":654}," - design and build a new custom app.",{"type":42,"tag":91,"props":656,"children":657},{},[658,664],{"type":42,"tag":66,"props":659,"children":661},{"className":660},[],[662],{"type":47,"value":663},"contentful-api",{"type":47,"value":665}," - concrete REST and GraphQL API examples.",{"type":42,"tag":91,"props":667,"children":668},{},[669,675],{"type":42,"tag":66,"props":670,"children":672},{"className":671},[],[673],{"type":47,"value":674},"contentful-migration",{"type":47,"value":676}," - content model migration scripts.",{"type":42,"tag":91,"props":678,"children":679},{},[680,686],{"type":42,"tag":66,"props":681,"children":683},{"className":682},[],[684],{"type":47,"value":685},"contentful-guide",{"type":47,"value":687}," - Contentful concepts and API routing.",{"items":689,"total":784},[690,704,717,722,733,744,758,773],{"slug":691,"name":691,"fn":692,"description":693,"org":694,"tags":695,"stars":701,"repoUrl":702,"updatedAt":703},"contentful-help","configure and diagnose Contentful projects","Diagnose, configure, and look up Contentful topics. Trigger keywords: contentful help, contentful doctor, contentful setup",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[696,697,698],{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":699,"slug":700,"type":15},"Documentation","documentation",61,"https:\u002F\u002Fgithub.com\u002Fcontentful\u002Fskill-kit","2026-07-12T08:48:00.085365",{"slug":663,"name":663,"fn":705,"description":706,"org":707,"tags":708,"stars":19,"repoUrl":20,"updatedAt":716},"integrate Contentful REST and GraphQL APIs","Comprehensive Contentful REST API guide. Covers Content Management API (CMA) for creating\u002Fupdating content, Content Delivery API (CDA) for fetching published content, Preview API, Images API, and GraphQL API. All examples use curl\u002FHTTP — language-agnostic.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[709,712,713],{"name":710,"slug":711,"type":15},"API Development","api-development",{"name":13,"slug":14,"type":15},{"name":714,"slug":715,"type":15},"GraphQL","graphql","2026-07-12T08:47:43.592187",{"slug":4,"name":4,"fn":5,"description":6,"org":718,"tags":719,"stars":19,"repoUrl":20,"updatedAt":21},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[720,721],{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"slug":652,"name":652,"fn":723,"description":724,"org":725,"tags":726,"stars":19,"repoUrl":20,"updatedAt":732},"build custom Contentful App Framework apps","Design, scaffold, build, and validate a new Contentful App Framework custom app for a customer's own repository or workspace. Use when users want to create a custom app from an idea, choose App Framework locations, build a sidebar app, field editor app, page app, dialog, configuration screen, App Action, or Function-backed app, scaffold with create-contentful-app, or make a locally testable app for an organization-specific Contentful workflow. Also triggers on \"build a Contentful app\", \"custom app from scratch\", \"App Framework app\", \"sidebar app\", \"field editor app\", \"page app\", \"app action\", and \"app function\". Not for generic Contentful API examples (contentful-api), content model migrations (contentful-migration), or website integration (contentful-nextjs).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[727,730,731],{"name":728,"slug":729,"type":15},"Architecture","architecture",{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},"2026-07-12T08:48:05.103951",{"slug":685,"name":685,"fn":734,"description":735,"org":736,"tags":737,"stars":19,"repoUrl":20,"updatedAt":743},"guide Contentful implementation and concepts","Explain core Contentful concepts and route users to the right implementation skill or documentation. Use when users ask conceptual questions, need terminology clarified, want help choosing between APIs (CDA\u002FCMA\u002FCPA\u002FGraphQL), or need guidance on the Contentful MCP server. Also triggers on \"Contentful 101\", \"which Contentful API\", \"how do I get started\", \"which skill should I use\", \"what does X mean in Contentful\", \"Contentful glossary\", \"CDA vs CPA\", \"CDA vs GraphQL\", \"how does Contentful work\", \"Contentful architecture\", \"explain environments\", \"what are aliases\", \"content model design\", \"headless CMS\", \"Contentful MCP\", \"MCP server\", \"set up MCP\", \"Remix Contentful\", \"Astro Contentful\", \"Gatsby Contentful\", \"SvelteKit Contentful\", \"Nuxt Contentful\". Not for framework-specific implementation (contentful-nextjs), migrations (contentful-migration), personalization (contentful-personalization), or hands-on REST\u002FGraphQL request examples (contentful-api).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[738,739,740],{"name":13,"slug":14,"type":15},{"name":699,"slug":700,"type":15},{"name":741,"slug":742,"type":15},"Reference","reference","2026-07-12T08:47:45.041396",{"slug":674,"name":674,"fn":745,"description":746,"org":747,"tags":748,"stars":19,"repoUrl":20,"updatedAt":757},"run Contentful content model migrations","Write and run Contentful content model migration scripts using the contentful-migration library and the Contentful CLI. Covers creating, editing, and deleting content types and fields, validations, editor interface configuration, editor layouts, sidebar widgets, entry transformations, tags, annotations, and the migration context object. Use when asked to write a migration, create or add a content type, add, rename, or delete fields, change or update a content model, transform entries, derive linked entries, configure editor controls, or run a migration script. Also triggers on \"migration script\", \"contentful-migration\", \"schema migration\", \"content model migration\", \"field validation\", \"editor interface\", \"editor layout\", \"sidebar widget\", \"moveField\", \"changeFieldId\", \"rich text field\", \"reference field\", \"link field\". Not for SDK client setup or Next.js integration (contentful-nextjs). Not for Contentful terminology or API routing (contentful-guide).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[749,752,753,754],{"name":750,"slug":751,"type":15},"CLI","cli",{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":755,"slug":756,"type":15},"Migration","migration","2026-07-12T08:47:50.532378",{"slug":759,"name":759,"fn":760,"description":761,"org":762,"tags":763,"stars":19,"repoUrl":20,"updatedAt":772},"contentful-nextjs","integrate Contentful into Next.js applications","Add and configure Contentful in an existing Next.js project. Covers installing the JavaScript SDK, configuring environment variables, creating production and preview-aware clients, fetching content in App Router or Pages Router, and wiring Draft Mode preview flows. Use when users ask to integrate Contentful with Next.js, fetch entries, set up preview or draft content, or configure the Contentful client. Also triggers on \"Contentful SDK Next.js\", \"contentful.js\", \"fetch Contentful entries\", \"get content from Contentful\", \"Contentful preview\", \"preview mode\", \"Contentful environment variables\", \"Contentful client setup\", \"create Contentful client\", \"Pages Router Contentful\", \"getStaticProps Contentful\", \"Server Components Contentful\", \"revalidate Contentful\", \"ISR Contentful\". Not for personalization or Experiences SDK setup (contentful-personalization). Not for non-Next.js frameworks (contentful-guide can route to platform docs).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[764,765,766,769],{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":767,"slug":768,"type":15},"Frontend","frontend",{"name":770,"slug":771,"type":15},"Next.js","next-js","2026-07-12T08:47:49.223411",{"slug":774,"name":774,"fn":775,"description":776,"org":777,"tags":778,"stars":19,"repoUrl":20,"updatedAt":783},"contentful-personalization","build and debug Contentful personalization","Implement, extend, and debug Contentful personalization. Use onboarding for new, project-wide, or unknown setups; use extend-existing only for scoped work on an explicitly working integration. Trigger keywords: personalization, optimization, ninetailed, A\u002FB test, experiment, multivariate test, targeting, audience targeting, segments, variants, content variants, set up personalization, implement personalization, enable personalization, personalization not working, personalization broken, personalize this component, am I ready for personalization, experience API, Contentful Experiences, Experiences SDK, Studio Experiences, personalization in Next.js, @contentful\u002Foptimization, @ninetailed\u002Fexperience.js, run an experiment, check this URL, debug this live page, inspect network requests, check console errors, experience.ninetailed.co",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[779,780,781,782],{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"name":767,"slug":768,"type":15},"2026-08-01T05:44:01.030731",8,{"items":786,"total":831},[787,793,798,804,810,817,824],{"slug":663,"name":663,"fn":705,"description":706,"org":788,"tags":789,"stars":19,"repoUrl":20,"updatedAt":716},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[790,791,792],{"name":710,"slug":711,"type":15},{"name":13,"slug":14,"type":15},{"name":714,"slug":715,"type":15},{"slug":4,"name":4,"fn":5,"description":6,"org":794,"tags":795,"stars":19,"repoUrl":20,"updatedAt":21},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[796,797],{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"slug":652,"name":652,"fn":723,"description":724,"org":799,"tags":800,"stars":19,"repoUrl":20,"updatedAt":732},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[801,802,803],{"name":728,"slug":729,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"slug":685,"name":685,"fn":734,"description":735,"org":805,"tags":806,"stars":19,"repoUrl":20,"updatedAt":743},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[807,808,809],{"name":13,"slug":14,"type":15},{"name":699,"slug":700,"type":15},{"name":741,"slug":742,"type":15},{"slug":674,"name":674,"fn":745,"description":746,"org":811,"tags":812,"stars":19,"repoUrl":20,"updatedAt":757},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[813,814,815,816],{"name":750,"slug":751,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":755,"slug":756,"type":15},{"slug":759,"name":759,"fn":760,"description":761,"org":818,"tags":819,"stars":19,"repoUrl":20,"updatedAt":772},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[820,821,822,823],{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":767,"slug":768,"type":15},{"name":770,"slug":771,"type":15},{"slug":774,"name":774,"fn":775,"description":776,"org":825,"tags":826,"stars":19,"repoUrl":20,"updatedAt":783},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[827,828,829,830],{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"name":767,"slug":768,"type":15},7]