@goldencomm/create-baseline 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +88 -0
- package/index.mjs +296 -0
- package/package.json +44 -0
- package/templates/next/.claude/skills/ai-elements/SKILL.md +160 -0
- package/templates/next/.claude/skills/ai-elements/references/agent.md +134 -0
- package/templates/next/.claude/skills/ai-elements/references/artifact.md +84 -0
- package/templates/next/.claude/skills/ai-elements/references/attachments.md +190 -0
- package/templates/next/.claude/skills/ai-elements/references/audio-player.md +134 -0
- package/templates/next/.claude/skills/ai-elements/references/canvas.md +34 -0
- package/templates/next/.claude/skills/ai-elements/references/chain-of-thought.md +81 -0
- package/templates/next/.claude/skills/ai-elements/references/checkpoint.md +183 -0
- package/templates/next/.claude/skills/ai-elements/references/code-block.md +170 -0
- package/templates/next/.claude/skills/ai-elements/references/commit.md +177 -0
- package/templates/next/.claude/skills/ai-elements/references/confirmation.md +262 -0
- package/templates/next/.claude/skills/ai-elements/references/connection.md +34 -0
- package/templates/next/.claude/skills/ai-elements/references/context.md +126 -0
- package/templates/next/.claude/skills/ai-elements/references/controls.md +32 -0
- package/templates/next/.claude/skills/ai-elements/references/conversation.md +224 -0
- package/templates/next/.claude/skills/ai-elements/references/edge.md +52 -0
- package/templates/next/.claude/skills/ai-elements/references/environment-variables.md +102 -0
- package/templates/next/.claude/skills/ai-elements/references/file-tree.md +72 -0
- package/templates/next/.claude/skills/ai-elements/references/image.md +146 -0
- package/templates/next/.claude/skills/ai-elements/references/inline-citation.md +299 -0
- package/templates/next/.claude/skills/ai-elements/references/jsx-preview.md +104 -0
- package/templates/next/.claude/skills/ai-elements/references/message.md +237 -0
- package/templates/next/.claude/skills/ai-elements/references/mic-selector.md +189 -0
- package/templates/next/.claude/skills/ai-elements/references/model-selector.md +112 -0
- package/templates/next/.claude/skills/ai-elements/references/node.md +73 -0
- package/templates/next/.claude/skills/ai-elements/references/open-in-chat.md +67 -0
- package/templates/next/.claude/skills/ai-elements/references/package-info.md +95 -0
- package/templates/next/.claude/skills/ai-elements/references/panel.md +33 -0
- package/templates/next/.claude/skills/ai-elements/references/persona.md +166 -0
- package/templates/next/.claude/skills/ai-elements/references/plan.md +79 -0
- package/templates/next/.claude/skills/ai-elements/references/prompt-input.md +579 -0
- package/templates/next/.claude/skills/ai-elements/references/queue.md +172 -0
- package/templates/next/.claude/skills/ai-elements/references/reasoning.md +238 -0
- package/templates/next/.claude/skills/ai-elements/references/sandbox.md +129 -0
- package/templates/next/.claude/skills/ai-elements/references/schema-display.md +102 -0
- package/templates/next/.claude/skills/ai-elements/references/shimmer.md +48 -0
- package/templates/next/.claude/skills/ai-elements/references/snippet.md +64 -0
- package/templates/next/.claude/skills/ai-elements/references/sources.md +209 -0
- package/templates/next/.claude/skills/ai-elements/references/speech-input.md +163 -0
- package/templates/next/.claude/skills/ai-elements/references/stack-trace.md +224 -0
- package/templates/next/.claude/skills/ai-elements/references/suggestion.md +124 -0
- package/templates/next/.claude/skills/ai-elements/references/task.md +222 -0
- package/templates/next/.claude/skills/ai-elements/references/terminal.md +103 -0
- package/templates/next/.claude/skills/ai-elements/references/test-results.md +157 -0
- package/templates/next/.claude/skills/ai-elements/references/tool.md +285 -0
- package/templates/next/.claude/skills/ai-elements/references/toolbar.md +32 -0
- package/templates/next/.claude/skills/ai-elements/references/transcription.md +120 -0
- package/templates/next/.claude/skills/ai-elements/references/voice-selector.md +241 -0
- package/templates/next/.claude/skills/ai-elements/references/web-preview.md +200 -0
- package/templates/next/.claude/skills/ai-elements/scripts/agent.tsx +61 -0
- package/templates/next/.claude/skills/ai-elements/scripts/artifact.tsx +127 -0
- package/templates/next/.claude/skills/ai-elements/scripts/attachments-inline.tsx +128 -0
- package/templates/next/.claude/skills/ai-elements/scripts/attachments-list.tsx +95 -0
- package/templates/next/.claude/skills/ai-elements/scripts/attachments.tsx +85 -0
- package/templates/next/.claude/skills/ai-elements/scripts/audio-player-remote.tsx +35 -0
- package/templates/next/.claude/skills/ai-elements/scripts/audio-player.tsx +68 -0
- package/templates/next/.claude/skills/ai-elements/scripts/chain-of-thought.tsx +82 -0
- package/templates/next/.claude/skills/ai-elements/scripts/checkpoint.tsx +110 -0
- package/templates/next/.claude/skills/ai-elements/scripts/code-block-dark.tsx +46 -0
- package/templates/next/.claude/skills/ai-elements/scripts/code-block.tsx +120 -0
- package/templates/next/.claude/skills/ai-elements/scripts/commit.tsx +94 -0
- package/templates/next/.claude/skills/ai-elements/scripts/confirmation-accepted.tsx +40 -0
- package/templates/next/.claude/skills/ai-elements/scripts/confirmation-rejected.tsx +40 -0
- package/templates/next/.claude/skills/ai-elements/scripts/confirmation-request.tsx +54 -0
- package/templates/next/.claude/skills/ai-elements/scripts/confirmation.tsx +55 -0
- package/templates/next/.claude/skills/ai-elements/scripts/context.tsx +45 -0
- package/templates/next/.claude/skills/ai-elements/scripts/conversation.tsx +177 -0
- package/templates/next/.claude/skills/ai-elements/scripts/environment-variables.tsx +62 -0
- package/templates/next/.claude/skills/ai-elements/scripts/file-tree-basic.tsx +18 -0
- package/templates/next/.claude/skills/ai-elements/scripts/file-tree-expanded.tsx +21 -0
- package/templates/next/.claude/skills/ai-elements/scripts/file-tree-selection.tsx +24 -0
- package/templates/next/.claude/skills/ai-elements/scripts/file-tree.tsx +42 -0
- package/templates/next/.claude/skills/ai-elements/scripts/image.tsx +20 -0
- package/templates/next/.claude/skills/ai-elements/scripts/inline-citation.tsx +97 -0
- package/templates/next/.claude/skills/ai-elements/scripts/jsx-preview.tsx +104 -0
- package/templates/next/.claude/skills/ai-elements/scripts/message.tsx +365 -0
- package/templates/next/.claude/skills/ai-elements/scripts/mic-selector.tsx +49 -0
- package/templates/next/.claude/skills/ai-elements/scripts/model-selector.tsx +365 -0
- package/templates/next/.claude/skills/ai-elements/scripts/open-in-chat.tsx +33 -0
- package/templates/next/.claude/skills/ai-elements/scripts/package-info.tsx +51 -0
- package/templates/next/.claude/skills/ai-elements/scripts/persona-command.tsx +110 -0
- package/templates/next/.claude/skills/ai-elements/scripts/persona-glint.tsx +110 -0
- package/templates/next/.claude/skills/ai-elements/scripts/persona-halo.tsx +110 -0
- package/templates/next/.claude/skills/ai-elements/scripts/persona-mana.tsx +110 -0
- package/templates/next/.claude/skills/ai-elements/scripts/persona-obsidian.tsx +110 -0
- package/templates/next/.claude/skills/ai-elements/scripts/persona-opal.tsx +110 -0
- package/templates/next/.claude/skills/ai-elements/scripts/plan.tsx +65 -0
- package/templates/next/.claude/skills/ai-elements/scripts/prompt-input-cursor.tsx +502 -0
- package/templates/next/.claude/skills/ai-elements/scripts/prompt-input-tooltip.tsx +44 -0
- package/templates/next/.claude/skills/ai-elements/scripts/prompt-input.tsx +267 -0
- package/templates/next/.claude/skills/ai-elements/scripts/queue-prompt-input.tsx +394 -0
- package/templates/next/.claude/skills/ai-elements/scripts/queue.tsx +295 -0
- package/templates/next/.claude/skills/ai-elements/scripts/reasoning.tsx +71 -0
- package/templates/next/.claude/skills/ai-elements/scripts/sandbox.tsx +178 -0
- package/templates/next/.claude/skills/ai-elements/scripts/schema-display-basic.tsx +9 -0
- package/templates/next/.claude/skills/ai-elements/scripts/schema-display-body.tsx +20 -0
- package/templates/next/.claude/skills/ai-elements/scripts/schema-display-nested.tsx +23 -0
- package/templates/next/.claude/skills/ai-elements/scripts/schema-display-params.tsx +16 -0
- package/templates/next/.claude/skills/ai-elements/scripts/schema-display.tsx +110 -0
- package/templates/next/.claude/skills/ai-elements/scripts/shimmer-duration.tsx +31 -0
- package/templates/next/.claude/skills/ai-elements/scripts/shimmer-elements.tsx +43 -0
- package/templates/next/.claude/skills/ai-elements/scripts/shimmer.tsx +17 -0
- package/templates/next/.claude/skills/ai-elements/scripts/snippet-plain.tsx +19 -0
- package/templates/next/.claude/skills/ai-elements/scripts/snippet.tsx +25 -0
- package/templates/next/.claude/skills/ai-elements/scripts/sources-custom.tsx +39 -0
- package/templates/next/.claude/skills/ai-elements/scripts/sources.tsx +32 -0
- package/templates/next/.claude/skills/ai-elements/scripts/speech-input.tsx +84 -0
- package/templates/next/.claude/skills/ai-elements/scripts/stack-trace-collapsed.tsx +39 -0
- package/templates/next/.claude/skills/ai-elements/scripts/stack-trace-no-internal.tsx +41 -0
- package/templates/next/.claude/skills/ai-elements/scripts/stack-trace.tsx +58 -0
- package/templates/next/.claude/skills/ai-elements/scripts/suggestion-input.tsx +144 -0
- package/templates/next/.claude/skills/ai-elements/scripts/suggestion.tsx +32 -0
- package/templates/next/.claude/skills/ai-elements/scripts/task.tsx +59 -0
- package/templates/next/.claude/skills/ai-elements/scripts/terminal-basic.tsx +7 -0
- package/templates/next/.claude/skills/ai-elements/scripts/terminal-clear.tsx +19 -0
- package/templates/next/.claude/skills/ai-elements/scripts/terminal-streaming.tsx +38 -0
- package/templates/next/.claude/skills/ai-elements/scripts/terminal.tsx +82 -0
- package/templates/next/.claude/skills/ai-elements/scripts/test-results-basic.tsx +27 -0
- package/templates/next/.claude/skills/ai-elements/scripts/test-results-errors.tsx +51 -0
- package/templates/next/.claude/skills/ai-elements/scripts/test-results-suites.tsx +40 -0
- package/templates/next/.claude/skills/ai-elements/scripts/test-results.tsx +102 -0
- package/templates/next/.claude/skills/ai-elements/scripts/tool-input-available.tsx +31 -0
- package/templates/next/.claude/skills/ai-elements/scripts/tool-input-streaming.tsx +30 -0
- package/templates/next/.claude/skills/ai-elements/scripts/tool-output-available.tsx +80 -0
- package/templates/next/.claude/skills/ai-elements/scripts/tool-output-error.tsx +44 -0
- package/templates/next/.claude/skills/ai-elements/scripts/tool.tsx +222 -0
- package/templates/next/.claude/skills/ai-elements/scripts/transcription.tsx +290 -0
- package/templates/next/.claude/skills/ai-elements/scripts/voice-selector.tsx +245 -0
- package/templates/next/.claude/skills/ai-elements/scripts/web-preview.tsx +115 -0
- package/templates/next/.claude/skills/ai-sdk/SKILL.md +78 -0
- package/templates/next/.claude/skills/frontend-design/LICENSE.txt +177 -0
- package/templates/next/.claude/skills/frontend-design/SKILL.md +55 -0
- package/templates/next/.claude/skills/gc-implement-figma-page/SKILL.md +93 -0
- package/templates/next/.claude/skills/migrate-ai-sdk-v6-to-v7/SKILL.md +108 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/AGENTS.md +946 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/README.md +60 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/SKILL.md +89 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/metadata.json +11 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/_sections.md +29 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/_template.md +24 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/architecture-compound-components.md +112 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/patterns-children-over-render-props.md +87 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/patterns-explicit-variants.md +100 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/react19-no-forwardref.md +42 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/state-context-interface.md +191 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/state-decouple-implementation.md +113 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/state-lift-state.md +125 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/AGENTS.md +3810 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/README.md +123 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/SKILL.md +149 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/metadata.json +15 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/_sections.md +46 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/_template.md +28 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-defer-await.md +82 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-analyzable-paths.md +63 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/templates/next/.claude/skills/web-design-guidelines/SKILL.md +39 -0
- package/templates/next/CLAUDE.md +42 -0
- package/templates/next/README.md +30 -0
- package/templates/next/_gitignore +4 -0
- package/templates/next/app/globals.css +13 -0
- package/templates/next/app/layout.tsx +44 -0
- package/templates/next/app/page.tsx +30 -0
- package/templates/next/globals.d.ts +8 -0
- package/templates/next/next.config.mjs +6 -0
- package/templates/next/package.json +38 -0
- package/templates/next/postcss.config.mjs +5 -0
- package/templates/next/skills-lock.json +47 -0
- package/templates/next/tsconfig.json +36 -0
- package/templates/shopify-theme/.claude/skills/gc-shopify-block/SKILL.md +44 -0
- package/templates/shopify-theme/.claude/skills/shopify-dev/SKILL.md +51 -0
- package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/log_skill_use.mjs +205 -0
- package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/search_docs.mjs +272 -0
- package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/track-telemetry.ps1 +361 -0
- package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/track-telemetry.sh +527 -0
- package/templates/shopify-theme/.claude/skills/shopify-liquid/SKILL.md +343 -0
- package/templates/shopify-theme/.claude/skills/shopify-liquid/blocks/hero-slide.liquid +342 -0
- package/templates/shopify-theme/.claude/skills/shopify-liquid/config/settings_schema.json +1 -0
- package/templates/shopify-theme/.claude/skills/shopify-liquid/featured-collection.liquid +457 -0
- package/templates/shopify-theme/.claude/skills/shopify-liquid/locales/en.default.json +10 -0
- package/templates/shopify-theme/.claude/skills/shopify-liquid/locales/en.default.schema.json +103 -0
- package/templates/shopify-theme/.claude/skills/shopify-liquid/package.json +10 -0
- package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/search_docs.mjs +759 -0
- package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/track-telemetry.ps1 +361 -0
- package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/track-telemetry.sh +527 -0
- package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/validate.mjs +654 -0
- package/templates/shopify-theme/.claude/skills/shopify-liquid/sections/hero-banner.liquid +329 -0
- package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/SKILL.md +165 -0
- package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/scripts/log_skill_use.mjs +205 -0
- package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/scripts/track-telemetry.ps1 +361 -0
- package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/scripts/track-telemetry.sh +527 -0
- package/templates/shopify-theme/.shopifyignore +9 -0
- package/templates/shopify-theme/CLAUDE.md +51 -0
- package/templates/shopify-theme/README.md +92 -0
- package/templates/shopify-theme/assets/baseline.css +8390 -0
- package/templates/shopify-theme/assets/swiper-element-bundle.min.js +14 -0
- package/templates/shopify-theme/blocks/_accordion.liquid +59 -0
- package/templates/shopify-theme/blocks/_carousel-slide.liquid +24 -0
- package/templates/shopify-theme/blocks/_modal-body.liquid +18 -0
- package/templates/shopify-theme/blocks/_modal-footer.liquid +36 -0
- package/templates/shopify-theme/blocks/_modal-header.liquid +19 -0
- package/templates/shopify-theme/blocks/_modal-media.liquid +37 -0
- package/templates/shopify-theme/blocks/accordion-group.liquid +53 -0
- package/templates/shopify-theme/blocks/alert.liquid +92 -0
- package/templates/shopify-theme/blocks/avatar-group.liquid +51 -0
- package/templates/shopify-theme/blocks/avatar.liquid +56 -0
- package/templates/shopify-theme/blocks/badge.liquid +33 -0
- package/templates/shopify-theme/blocks/breadcrumb.liquid +45 -0
- package/templates/shopify-theme/blocks/button.liquid +51 -0
- package/templates/shopify-theme/blocks/buttons.liquid +41 -0
- package/templates/shopify-theme/blocks/card.liquid +67 -0
- package/templates/shopify-theme/blocks/carousel.liquid +55 -0
- package/templates/shopify-theme/blocks/column.liquid +33 -0
- package/templates/shopify-theme/blocks/image.liquid +37 -0
- package/templates/shopify-theme/blocks/modal.liquid +52 -0
- package/templates/shopify-theme/blocks/popover.liquid +24 -0
- package/templates/shopify-theme/blocks/skeleton.liquid +22 -0
- package/templates/shopify-theme/blocks/spinner.liquid +22 -0
- package/templates/shopify-theme/blocks/split.liquid +39 -0
- package/templates/shopify-theme/blocks/tab.liquid +19 -0
- package/templates/shopify-theme/blocks/tabs.liquid +78 -0
- package/templates/shopify-theme/blocks/tags.liquid +55 -0
- package/templates/shopify-theme/blocks/text.liquid +55 -0
- package/templates/shopify-theme/blocks/tooltip.liquid +50 -0
- package/templates/shopify-theme/blocks/typography.liquid +90 -0
- package/templates/shopify-theme/config/settings_data.json +4 -0
- package/templates/shopify-theme/config/settings_schema.json +10 -0
- package/templates/shopify-theme/layout/theme.liquid +21 -0
- package/templates/shopify-theme/locales/en.default.json +5 -0
- package/templates/shopify-theme/locales/en.default.schema.json +131 -0
- package/templates/shopify-theme/package.json +21 -0
- package/templates/shopify-theme/scripts/sync-tokens.mjs +32 -0
- package/templates/shopify-theme/sections/baseline-components.liquid +81 -0
- package/templates/shopify-theme/skills-lock.json +23 -0
- package/templates/shopify-theme/snippets/lucide.liquid +34 -0
- package/templates/shopify-theme/snippets/pagination.liquid +44 -0
- package/templates/shopify-theme/templates/collection.json +13 -0
- package/templates/shopify-theme/templates/gift_card.liquid +5 -0
- package/templates/shopify-theme/templates/index.json +135 -0
- package/templates/shopify-theme/templates/list-collections.json +13 -0
- package/templates/shopify-theme/templates/product.json +13 -0
- package/templates/wordpress/.claude/CLAUDE.md +37 -0
- package/templates/wordpress/.claude/skills/wp-block-development/SKILL.md +174 -0
- package/templates/wordpress/.claude/skills/wp-block-development/references/attributes-and-serialization.md +22 -0
- package/templates/wordpress/.claude/skills/wp-block-development/references/block-json.md +49 -0
- package/templates/wordpress/.claude/skills/wp-block-development/references/creating-new-blocks.md +46 -0
- package/templates/wordpress/.claude/skills/wp-block-development/references/debugging.md +36 -0
- package/templates/wordpress/.claude/skills/wp-block-development/references/deprecations.md +24 -0
- package/templates/wordpress/.claude/skills/wp-block-development/references/dynamic-rendering.md +23 -0
- package/templates/wordpress/.claude/skills/wp-block-development/references/inner-blocks.md +25 -0
- package/templates/wordpress/.claude/skills/wp-block-development/references/registration.md +30 -0
- package/templates/wordpress/.claude/skills/wp-block-development/references/supports-and-wrappers.md +18 -0
- package/templates/wordpress/.claude/skills/wp-block-development/references/tooling-and-testing.md +21 -0
- package/templates/wordpress/.claude/skills/wp-block-development/scripts/list_blocks.mjs +121 -0
- package/templates/wordpress/.claude/skills/wp-block-themes/SKILL.md +116 -0
- package/templates/wordpress/.claude/skills/wp-block-themes/references/creating-new-block-theme.md +37 -0
- package/templates/wordpress/.claude/skills/wp-block-themes/references/debugging.md +24 -0
- package/templates/wordpress/.claude/skills/wp-block-themes/references/patterns.md +18 -0
- package/templates/wordpress/.claude/skills/wp-block-themes/references/style-variations.md +14 -0
- package/templates/wordpress/.claude/skills/wp-block-themes/references/templates-and-parts.md +16 -0
- package/templates/wordpress/.claude/skills/wp-block-themes/references/theme-json.md +59 -0
- package/templates/wordpress/.claude/skills/wp-block-themes/scripts/detect_block_themes.mjs +117 -0
- package/templates/wordpress/.claude/skills/wp-performance/SKILL.md +146 -0
- package/templates/wordpress/.claude/skills/wp-performance/references/autoload-options.md +24 -0
- package/templates/wordpress/.claude/skills/wp-performance/references/cron.md +20 -0
- package/templates/wordpress/.claude/skills/wp-performance/references/database.md +20 -0
- package/templates/wordpress/.claude/skills/wp-performance/references/http-api.md +15 -0
- package/templates/wordpress/.claude/skills/wp-performance/references/measurement.md +21 -0
- package/templates/wordpress/.claude/skills/wp-performance/references/object-cache.md +24 -0
- package/templates/wordpress/.claude/skills/wp-performance/references/query-monitor-headless.md +38 -0
- package/templates/wordpress/.claude/skills/wp-performance/references/server-timing.md +22 -0
- package/templates/wordpress/.claude/skills/wp-performance/references/wp-cli-doctor.md +24 -0
- package/templates/wordpress/.claude/skills/wp-performance/references/wp-cli-profile.md +32 -0
- package/templates/wordpress/.claude/skills/wp-performance/scripts/perf_inspect.mjs +128 -0
- package/templates/wordpress/.claude/skills/wp-plugin-development/SKILL.md +112 -0
- package/templates/wordpress/.claude/skills/wp-plugin-development/references/data-and-cron.md +19 -0
- package/templates/wordpress/.claude/skills/wp-plugin-development/references/debugging.md +19 -0
- package/templates/wordpress/.claude/skills/wp-plugin-development/references/lifecycle.md +33 -0
- package/templates/wordpress/.claude/skills/wp-plugin-development/references/security.md +29 -0
- package/templates/wordpress/.claude/skills/wp-plugin-development/references/settings-api.md +22 -0
- package/templates/wordpress/.claude/skills/wp-plugin-development/references/structure.md +16 -0
- package/templates/wordpress/.claude/skills/wp-plugin-development/scripts/detect_plugins.mjs +122 -0
- package/templates/wordpress/.claude/skills/wp-rest-api/SKILL.md +114 -0
- package/templates/wordpress/.claude/skills/wp-rest-api/references/authentication.md +18 -0
- package/templates/wordpress/.claude/skills/wp-rest-api/references/custom-content-types.md +20 -0
- package/templates/wordpress/.claude/skills/wp-rest-api/references/discovery-and-params.md +20 -0
- package/templates/wordpress/.claude/skills/wp-rest-api/references/responses-and-fields.md +30 -0
- package/templates/wordpress/.claude/skills/wp-rest-api/references/routes-and-endpoints.md +36 -0
- package/templates/wordpress/.claude/skills/wp-rest-api/references/schema.md +22 -0
- package/templates/wordpress/.ddev/commands/web/seed +7 -0
- package/templates/wordpress/.ddev/config.yaml +18 -0
- package/templates/wordpress/.ddev/docker-compose.packages.yaml +14 -0
- package/templates/wordpress/.ddev/docker-compose.redis.yaml +11 -0
- package/templates/wordpress/.env.example +33 -0
- package/templates/wordpress/CLAUDE.md +34 -0
- package/templates/wordpress/README.md +45 -0
- package/templates/wordpress/_gitignore +33 -0
- package/templates/wordpress/auth.json.example +18 -0
- package/templates/wordpress/composer.json +91 -0
- package/templates/wordpress/composer.lock +1594 -0
- package/templates/wordpress/package.json +13 -0
- package/templates/wordpress/scripts/seed.sh +64 -0
- package/templates/wordpress/skills-lock.json +35 -0
- package/templates/wordpress/wp-config.php +89 -0
- package/templates/wordpress/wp-content/index.php +2 -0
- package/templates/wordpress/wp-content/mu-plugins/baseline-bootstrap.php +26 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wp-rest-api
|
|
3
|
+
description: "Use when building, extending, or debugging WordPress REST API endpoints/routes: register_rest_route, WP_REST_Controller/controller classes, schema/argument validation, permission_callback/authentication, response shaping, register_rest_field/register_meta, or exposing CPTs/taxonomies via show_in_rest."
|
|
4
|
+
compatibility: "Targets WordPress 6.9+ (PHP 7.2.24+). Filesystem-based agent with bash + node. Some workflows require WP-CLI."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# WP REST API
|
|
8
|
+
|
|
9
|
+
## When to use
|
|
10
|
+
|
|
11
|
+
Use this skill when you need to:
|
|
12
|
+
|
|
13
|
+
- create or update REST routes/endpoints
|
|
14
|
+
- debug 401/403/404 errors or permission/nonce issues
|
|
15
|
+
- add custom fields/meta to REST responses
|
|
16
|
+
- expose custom post types or taxonomies via REST
|
|
17
|
+
- implement schema + argument validation
|
|
18
|
+
- adjust response links/embedding/pagination
|
|
19
|
+
|
|
20
|
+
## Inputs required
|
|
21
|
+
|
|
22
|
+
- Repo root + target plugin/theme/mu-plugin (path to entrypoint).
|
|
23
|
+
- Desired namespace + version (e.g. `my-plugin/v1`) and routes.
|
|
24
|
+
- Authentication mode (cookie + nonce vs application passwords vs auth plugin).
|
|
25
|
+
- Target WordPress version constraints (if below 6.9, call out).
|
|
26
|
+
|
|
27
|
+
## Procedure
|
|
28
|
+
|
|
29
|
+
### 0) Triage and locate REST usage
|
|
30
|
+
|
|
31
|
+
1. Run triage:
|
|
32
|
+
- `node skills/wp-project-triage/scripts/detect_wp_project.mjs`
|
|
33
|
+
2. Search for existing REST usage:
|
|
34
|
+
- `register_rest_route`
|
|
35
|
+
- `WP_REST_Controller`
|
|
36
|
+
- `rest_api_init`
|
|
37
|
+
- `show_in_rest`, `rest_base`, `rest_controller_class`
|
|
38
|
+
|
|
39
|
+
If this is a full site repo, pick the specific plugin/theme before changing code.
|
|
40
|
+
|
|
41
|
+
### 1) Choose the right approach
|
|
42
|
+
|
|
43
|
+
- **Expose CPT/taxonomy in `wp/v2`:**
|
|
44
|
+
- Use `show_in_rest => true` + `rest_base` if needed.
|
|
45
|
+
- Optionally provide `rest_controller_class`.
|
|
46
|
+
- Read `references/custom-content-types.md`.
|
|
47
|
+
- **Custom endpoints:**
|
|
48
|
+
- Use `register_rest_route()` on `rest_api_init`.
|
|
49
|
+
- Prefer a controller class (`WP_REST_Controller` subclass) for anything non-trivial.
|
|
50
|
+
- Read `references/routes-and-endpoints.md` and `references/schema.md`.
|
|
51
|
+
|
|
52
|
+
### 2) Register routes safely (namespaces, methods, permissions)
|
|
53
|
+
|
|
54
|
+
- Use a unique namespace `vendor/v1`; avoid `wp/*` unless core.
|
|
55
|
+
- Always provide `permission_callback` (use `__return_true` for public endpoints).
|
|
56
|
+
- Use `WP_REST_Server::READABLE/CREATABLE/EDITABLE/DELETABLE` constants.
|
|
57
|
+
- Return data via `rest_ensure_response()` or `WP_REST_Response`.
|
|
58
|
+
- Return errors via `WP_Error` with an explicit `status`.
|
|
59
|
+
|
|
60
|
+
Read `references/routes-and-endpoints.md`.
|
|
61
|
+
|
|
62
|
+
### 3) Validate/sanitize request args
|
|
63
|
+
|
|
64
|
+
- Define `args` with `type`, `default`, `required`, `validate_callback`, `sanitize_callback`.
|
|
65
|
+
- Prefer JSON Schema validation with `rest_validate_value_from_schema` then `rest_sanitize_value_from_schema`.
|
|
66
|
+
- Never read `$_GET`/`$_POST` directly inside endpoints; use `WP_REST_Request`.
|
|
67
|
+
|
|
68
|
+
Read `references/schema.md`.
|
|
69
|
+
|
|
70
|
+
### 4) Responses, fields, and links
|
|
71
|
+
|
|
72
|
+
- Do **not** remove core fields from default endpoints; add fields instead.
|
|
73
|
+
- Use `register_rest_field` for computed fields; `register_meta` with `show_in_rest` for meta.
|
|
74
|
+
- For `object`/`array` meta, define schema in `show_in_rest.schema`.
|
|
75
|
+
- If you need unfiltered post content (e.g., ToC plugins injecting HTML), request `?context=edit` to access `content.raw` (auth required). Pair with `_fields=content.raw` to keep responses small.
|
|
76
|
+
- Add related resource links via `WP_REST_Response::add_link()`.
|
|
77
|
+
|
|
78
|
+
Read `references/responses-and-fields.md`.
|
|
79
|
+
|
|
80
|
+
### 5) Authentication and authorization
|
|
81
|
+
|
|
82
|
+
- For wp-admin/JS: cookie auth + `X-WP-Nonce` (action `wp_rest`).
|
|
83
|
+
- For external clients: application passwords (basic auth) or an auth plugin.
|
|
84
|
+
- Use capability checks in `permission_callback` (authorization), not just “logged in”.
|
|
85
|
+
|
|
86
|
+
Read `references/authentication.md`.
|
|
87
|
+
|
|
88
|
+
### 6) Client-facing behavior (discovery, pagination, embeds)
|
|
89
|
+
|
|
90
|
+
- Ensure discovery works (`Link` header or `<link rel="https://api.w.org/">`).
|
|
91
|
+
- Support `_fields`, `_embed`, `_method`, `_envelope`, pagination headers.
|
|
92
|
+
- Remember `per_page` is capped at 100.
|
|
93
|
+
|
|
94
|
+
Read `references/discovery-and-params.md`.
|
|
95
|
+
|
|
96
|
+
## Verification
|
|
97
|
+
|
|
98
|
+
- `/wp-json/` index includes your namespace.
|
|
99
|
+
- `OPTIONS` on your route returns schema (when provided).
|
|
100
|
+
- Endpoint returns expected data; permission failures return 401/403 as appropriate.
|
|
101
|
+
- CPT/taxonomy routes appear under `wp/v2` when `show_in_rest` is true.
|
|
102
|
+
- Run repo lint/tests and any PHP/JS build steps.
|
|
103
|
+
|
|
104
|
+
## Failure modes / debugging
|
|
105
|
+
|
|
106
|
+
- 404: `rest_api_init` not firing, route typo, or permalinks off (use `?rest_route=`).
|
|
107
|
+
- 401/403: missing nonce/auth, or `permission_callback` too strict.
|
|
108
|
+
- `_doing_it_wrong` for missing `permission_callback`: add it (use `__return_true` if public).
|
|
109
|
+
- Invalid params: missing/incorrect `args` schema or validation callbacks.
|
|
110
|
+
- Fields missing: `show_in_rest` false, meta not registered, or CPT lacks `custom-fields` support.
|
|
111
|
+
|
|
112
|
+
## Escalation
|
|
113
|
+
|
|
114
|
+
If version support or behavior is unclear, consult the REST API Handbook and core docs before inventing patterns.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Authentication (summary)
|
|
2
|
+
|
|
3
|
+
## Cookie authentication (in-dashboard / same-site)
|
|
4
|
+
|
|
5
|
+
- Standard for wp-admin and theme/plugin JS.
|
|
6
|
+
- Requires a REST nonce (`wp_rest`) sent as `X-WP-Nonce` header or `_wpnonce` param.
|
|
7
|
+
- If the nonce is missing, the request is treated as unauthenticated even if cookies exist.
|
|
8
|
+
|
|
9
|
+
## Application Passwords (external clients)
|
|
10
|
+
|
|
11
|
+
- Available in WordPress 5.6+.
|
|
12
|
+
- Use HTTPS + Basic Auth with the application password.
|
|
13
|
+
- Recommended over the legacy Basic Auth plugin.
|
|
14
|
+
|
|
15
|
+
## Auth plugins
|
|
16
|
+
|
|
17
|
+
- OAuth 1.0a or JWT plugins are common for external apps.
|
|
18
|
+
- Use only if required; follow plugin docs and security guidance.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Custom Content Types (summary)
|
|
2
|
+
|
|
3
|
+
## Custom post types
|
|
4
|
+
|
|
5
|
+
- Set `show_in_rest => true` in `register_post_type()` to expose in `wp/v2`.
|
|
6
|
+
- Use `rest_base` to change the route slug.
|
|
7
|
+
- Optionally set `rest_controller_class` (must extend `WP_REST_Controller`).
|
|
8
|
+
|
|
9
|
+
## Custom taxonomies
|
|
10
|
+
|
|
11
|
+
- Set `show_in_rest => true` in `register_taxonomy()`.
|
|
12
|
+
- Use `rest_base` and optional `rest_controller_class` (default `WP_REST_Terms_Controller`).
|
|
13
|
+
|
|
14
|
+
## Adding REST support to existing types
|
|
15
|
+
|
|
16
|
+
- Use `register_post_type_args` or `register_taxonomy_args` filters to enable `show_in_rest` for types you do not control.
|
|
17
|
+
|
|
18
|
+
## Discovery links for custom controllers
|
|
19
|
+
|
|
20
|
+
- If you use a custom controller class, use `rest_route_for_post` or `rest_route_for_term` filters to map objects to routes.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Discovery and Global Parameters (summary)
|
|
2
|
+
|
|
3
|
+
## API discovery
|
|
4
|
+
|
|
5
|
+
- REST API root is discovered via the `Link` header: `rel="https://api.w.org/"`.
|
|
6
|
+
- HTML pages also include a `<link rel="https://api.w.org/" href="...">` element.
|
|
7
|
+
- For non-pretty permalinks, use `?rest_route=/`.
|
|
8
|
+
|
|
9
|
+
## Global parameters
|
|
10
|
+
|
|
11
|
+
- `_fields` limits response fields (supports nested meta keys).
|
|
12
|
+
- `_embed` includes linked resources in `_embedded`.
|
|
13
|
+
- `_method` or `X-HTTP-Method-Override` allows POST to simulate PUT/DELETE.
|
|
14
|
+
- `_envelope` puts headers/status in the response body.
|
|
15
|
+
- `_jsonp` enables JSONP for legacy clients.
|
|
16
|
+
|
|
17
|
+
## Pagination
|
|
18
|
+
|
|
19
|
+
- Collections accept `page`, `per_page` (1-100), and `offset`.
|
|
20
|
+
- Pagination headers: `X-WP-Total` and `X-WP-TotalPages`.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Responses and Fields (summary)
|
|
2
|
+
|
|
3
|
+
## Do not remove core fields
|
|
4
|
+
|
|
5
|
+
- Removing or changing core fields breaks clients (including wp-admin).
|
|
6
|
+
- Prefer adding new fields or using `_fields` to limit response size.
|
|
7
|
+
|
|
8
|
+
## register_rest_field
|
|
9
|
+
|
|
10
|
+
- Use for computed or custom fields.
|
|
11
|
+
- Provide `get_callback`, optional `update_callback`, and `schema`.
|
|
12
|
+
- Register on `rest_api_init`.
|
|
13
|
+
|
|
14
|
+
## Raw vs rendered content
|
|
15
|
+
|
|
16
|
+
- For posts, `content.rendered` reflects filters (plugins like ToC inject HTML).
|
|
17
|
+
- Use `?context=edit` (authenticated) to access `content.raw`.
|
|
18
|
+
- Combine with `_fields=content.raw` when you only need the editable body.
|
|
19
|
+
|
|
20
|
+
## register_meta / register_post_meta / register_term_meta
|
|
21
|
+
|
|
22
|
+
- Use when the data is stored as meta.
|
|
23
|
+
- Set `show_in_rest => true` to expose under `.meta`.
|
|
24
|
+
- For `object` or `array` types, provide a JSON schema in `show_in_rest.schema`.
|
|
25
|
+
|
|
26
|
+
## Links and embedding
|
|
27
|
+
|
|
28
|
+
- Add links with `WP_REST_Response::add_link( $rel, $href, $attrs )`.
|
|
29
|
+
- Use `embeddable => true` to allow `_embed`.
|
|
30
|
+
- Use IANA rels or a custom URI relation; CURIEs can be registered via `rest_response_link_curies`.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Routes and Endpoints (summary)
|
|
2
|
+
|
|
3
|
+
## Registering routes
|
|
4
|
+
|
|
5
|
+
- Register routes on the `rest_api_init` hook with `register_rest_route( $namespace, $route, $args )`.
|
|
6
|
+
- A **route** is the URL pattern; an **endpoint** is the method + callback bound to that route.
|
|
7
|
+
- For non-pretty permalinks, the route is accessed via `?rest_route=/namespace/route`.
|
|
8
|
+
|
|
9
|
+
## Namespacing
|
|
10
|
+
|
|
11
|
+
- Always namespace routes (`vendor/v1`).
|
|
12
|
+
- **Do not** use the `wp/*` namespace unless you are targeting core.
|
|
13
|
+
|
|
14
|
+
## Methods
|
|
15
|
+
|
|
16
|
+
- Use `WP_REST_Server::READABLE` (GET), `CREATABLE` (POST), `EDITABLE` (PUT/PATCH), `DELETABLE` (DELETE).
|
|
17
|
+
- Multiple endpoints can share a route, one per method.
|
|
18
|
+
|
|
19
|
+
## permission_callback (required)
|
|
20
|
+
|
|
21
|
+
- Always provide `permission_callback`.
|
|
22
|
+
- Public endpoints should use `__return_true`.
|
|
23
|
+
- For restricted endpoints, use capability checks (`current_user_can`) or object-level authorization.
|
|
24
|
+
- Missing `permission_callback` emits a `_doing_it_wrong` notice in modern WP.
|
|
25
|
+
|
|
26
|
+
## Arguments
|
|
27
|
+
|
|
28
|
+
- Register `args` to validate and sanitize inputs.
|
|
29
|
+
- Use `type`, `required`, `default`, `validate_callback`, `sanitize_callback`.
|
|
30
|
+
- Access params via the `WP_REST_Request` object, not `$_GET`/`$_POST`.
|
|
31
|
+
|
|
32
|
+
## Return values
|
|
33
|
+
|
|
34
|
+
- Return data via `rest_ensure_response()` or a `WP_REST_Response`.
|
|
35
|
+
- Return `WP_Error` with a `status` in `data` for error responses.
|
|
36
|
+
- Do not call `wp_send_json()` in REST callbacks.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Schema and Argument Validation (summary)
|
|
2
|
+
|
|
3
|
+
## JSON Schema in WordPress
|
|
4
|
+
|
|
5
|
+
- REST API uses JSON Schema (draft 4 subset) for resource and argument definitions.
|
|
6
|
+
- Provide schema via `get_item_schema()` on controllers or `schema` callbacks on routes.
|
|
7
|
+
- Schema enables discovery (`OPTIONS`) and validation.
|
|
8
|
+
|
|
9
|
+
## Validation + sanitization
|
|
10
|
+
|
|
11
|
+
- Use `rest_validate_value_from_schema( $value, $schema )` then `rest_sanitize_value_from_schema( $value, $schema )`.
|
|
12
|
+
- If you override `sanitize_callback`, built-in schema validation will not run; use `rest_validate_request_arg` to keep it.
|
|
13
|
+
- `WP_REST_Controller::get_endpoint_args_for_item_schema()` wires validation automatically.
|
|
14
|
+
|
|
15
|
+
## Schema caching
|
|
16
|
+
|
|
17
|
+
- Cache the generated schema on the controller instance (`$this->schema`) to avoid recomputation.
|
|
18
|
+
|
|
19
|
+
## Formats and types
|
|
20
|
+
|
|
21
|
+
- Common formats: `date-time`, `uri`, `email`, `ip`, `uuid`, `hex-color`.
|
|
22
|
+
- For `array` and `object` types, you must define `items` or `properties` schemas.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
name: baseline-wordpress
|
|
2
|
+
type: wordpress
|
|
3
|
+
docroot: ""
|
|
4
|
+
php_version: "8.2"
|
|
5
|
+
webserver_type: nginx-fpm
|
|
6
|
+
xdebug_enabled: false
|
|
7
|
+
database:
|
|
8
|
+
type: mariadb
|
|
9
|
+
version: "10.11"
|
|
10
|
+
composer_version: "2"
|
|
11
|
+
use_dns_when_possible: true
|
|
12
|
+
web_environment:
|
|
13
|
+
- WP_ENV=development
|
|
14
|
+
hooks:
|
|
15
|
+
post-start:
|
|
16
|
+
- exec: '[ -f auth.json ] || echo "⚠ auth.json missing — copy auth.json.example → auth.json, fill in ACF/Gravity/Bitbucket credentials, then: ddev composer install"'
|
|
17
|
+
- exec: '[ -f auth.json ] && composer install --no-interaction --no-progress --prefer-dist || true'
|
|
18
|
+
- exec: 'wp core is-installed 2>/dev/null || echo "ℹ WordPress not installed yet — run: ddev seed"'
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Monorepo-only: bind-mount the Baseline theme + blocks plugin from packages/
|
|
2
|
+
# straight into wp-content (live — edit in packages/, refresh the site).
|
|
3
|
+
#
|
|
4
|
+
# DDEV only mounts this project dir, so the sibling packages/ aren't reachable by
|
|
5
|
+
# Composer in-container. This mounts them directly instead. ${DDEV_APPROOT} is the
|
|
6
|
+
# absolute host path to baselines/wordpress; ../../packages → repo/packages.
|
|
7
|
+
#
|
|
8
|
+
# In a standalone CLIENT repo (no monorepo), delete this file and instead
|
|
9
|
+
# `composer require goldencomm/wp-theme goldencomm/wp-blocks-plugin` from Bitbucket VCS.
|
|
10
|
+
services:
|
|
11
|
+
web:
|
|
12
|
+
volumes:
|
|
13
|
+
- "${DDEV_APPROOT}/../../packages/wp-theme:/var/www/html/wp-content/themes/baseline"
|
|
14
|
+
- "${DDEV_APPROOT}/../../packages/wp-blocks-plugin:/var/www/html/wp-content/plugins/baseline-blocks"
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Redis service for the redis-cache plugin (WP_REDIS_HOST=redis).
|
|
2
|
+
services:
|
|
3
|
+
redis:
|
|
4
|
+
container_name: ddev-${DDEV_SITENAME}-redis
|
|
5
|
+
image: redis:7-alpine
|
|
6
|
+
restart: "no"
|
|
7
|
+
labels:
|
|
8
|
+
com.ddev.site-name: ${DDEV_SITENAME}
|
|
9
|
+
com.ddev.approot: $DDEV_APPROOT
|
|
10
|
+
expose:
|
|
11
|
+
- "6379"
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Copy to .env and fill in. Locally, DDEV injects DB_* and IS_DDEV_PROJECT;
|
|
2
|
+
# other environments set these explicitly (AWS task env, WP Engine, etc.).
|
|
3
|
+
|
|
4
|
+
WP_ENV=development
|
|
5
|
+
WP_HOME=https://baseline-wordpress.ddev.site
|
|
6
|
+
WP_SITEURL="${WP_HOME}"
|
|
7
|
+
|
|
8
|
+
# Database (DDEV provides db/db/db/db locally)
|
|
9
|
+
DB_NAME=db
|
|
10
|
+
DB_USER=db
|
|
11
|
+
DB_PASSWORD=db
|
|
12
|
+
DB_HOST=db
|
|
13
|
+
DB_PREFIX=wp_
|
|
14
|
+
|
|
15
|
+
# Salts — generate with `wp config shuffle-salts` or https://roots.io/salts.html
|
|
16
|
+
AUTH_KEY=
|
|
17
|
+
SECURE_AUTH_KEY=
|
|
18
|
+
LOGGED_IN_KEY=
|
|
19
|
+
NONCE_KEY=
|
|
20
|
+
AUTH_SALT=
|
|
21
|
+
SECURE_AUTH_SALT=
|
|
22
|
+
LOGGED_IN_SALT=
|
|
23
|
+
NONCE_SALT=
|
|
24
|
+
|
|
25
|
+
# Redis object cache (DDEV provides a redis service)
|
|
26
|
+
WP_REDIS_HOST=redis
|
|
27
|
+
WP_REDIS_PORT=6379
|
|
28
|
+
|
|
29
|
+
# S3 media offload (production) — humanmade/s3-uploads
|
|
30
|
+
S3_UPLOADS_BUCKET=
|
|
31
|
+
S3_UPLOADS_REGION=
|
|
32
|
+
S3_UPLOADS_KEY=
|
|
33
|
+
S3_UPLOADS_SECRET=
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# CLAUDE.md — Baseline WordPress site
|
|
2
|
+
|
|
3
|
+
The DDEV WordPress baseline for the Baseline design system (theme in
|
|
4
|
+
`packages/wp-theme`, custom blocks in `packages/wp-blocks-plugin`). See the repo-root
|
|
5
|
+
`CLAUDE.md` for design-system non-negotiables; component work follows the
|
|
6
|
+
`gc-wp-block` skill (core-blocks-first decision tree, gcds namespace rules).
|
|
7
|
+
|
|
8
|
+
## Conventions
|
|
9
|
+
- Local dev: `pnpm dev:wp` / `pnpm dev:wp:down` (DDEV; ports may conflict with
|
|
10
|
+
other local sites).
|
|
11
|
+
- **On Windows, run these from inside a WSL2 shell — not from PowerShell.** DDEV
|
|
12
|
+
is a WSL2-native tool and this project lives on the Windows drive (`/mnt/c/…`).
|
|
13
|
+
Driving it from a Windows-spawned `wsl.exe` fails three ways: `ddev` isn't on
|
|
14
|
+
the Windows PATH; a name-based `ddev start <project>` computes an empty TLD
|
|
15
|
+
(invalid hostname `<project>.`); and `cd /mnt/c/… && ddev …` (even with
|
|
16
|
+
`wsl.exe --cd`) hits `stat .: input/output error` on the DrvFs mount. Inside an
|
|
17
|
+
interactive WSL2 shell the `cd baselines/wordpress && ddev start` script works
|
|
18
|
+
cleanly. So keep the scripts `cd`-based (no `wsl.exe` wrapper — it breaks both
|
|
19
|
+
sides). Contrast `dev:shopify`/`dev:next`/`dev:docs`, which run from Windows.
|
|
20
|
+
- Keep WP auto-updates ON — never disable the self-updater.
|
|
21
|
+
- No WP validator in the agent environment (no wp-cli) — changes are verified
|
|
22
|
+
visually by the developer via `pnpm dev:wp`; flag unverified work.
|
|
23
|
+
|
|
24
|
+
## Skills upkeep
|
|
25
|
+
`.claude/skills/` vendors the official WordPress skills (`wp-block-development`,
|
|
26
|
+
`wp-block-themes`, `wp-plugin-development`, `wp-rest-api`, `wp-performance`),
|
|
27
|
+
tracked by this directory's `skills-lock.json`. Refresh from upstream with:
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
npx skills update -p -y
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
(Inside the design-system monorepo, run `pnpm skills:update` at the repo root
|
|
34
|
+
instead.) Review the diff before committing.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Baseline WordPress
|
|
2
|
+
|
|
3
|
+
The **WordPress site-build scaffold** — a full, Composer-managed WordPress site wired to
|
|
4
|
+
the Baseline design system. Also the starter template for new client sites
|
|
5
|
+
(`create-baseline wordpress`, Phase 5). Scope: [`../../docs/wp-baseline-scope.md`](../../docs/wp-baseline-scope.md).
|
|
6
|
+
|
|
7
|
+
**Stack:** traditional WP-root + Composer (`composer/installers`) + `.env` + DDEV. Not
|
|
8
|
+
Bedrock — deploys to AWS, WP Engine, or anywhere with no docroot/conversion changes (see Q-004).
|
|
9
|
+
|
|
10
|
+
## Prerequisites
|
|
11
|
+
- **DDEV inside WSL2** (on Windows). Run all commands from the WSL2 shell, not PowerShell.
|
|
12
|
+
- Docker (via WSL2), Composer 2.
|
|
13
|
+
|
|
14
|
+
## Quick start
|
|
15
|
+
```bash
|
|
16
|
+
cp auth.json.example auth.json # fill in ACF Pro / Gravity Forms / Bitbucket creds
|
|
17
|
+
cp .env.example .env # locally DDEV provides DB; set salts + WP_HOME
|
|
18
|
+
ddev start # boots PHP/MariaDB/Redis, runs `composer install`
|
|
19
|
+
ddev seed # installs WP core, activates theme + plugins, seeds content
|
|
20
|
+
ddev launch # open https://baseline-wordpress.ddev.site (admin/admin)
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## What you get
|
|
24
|
+
- **Theme + blocks plugin:** in the monorepo these are **bind-mounted live** from
|
|
25
|
+
`packages/wp-theme` → `wp-content/themes/baseline` and `packages/wp-blocks-plugin` →
|
|
26
|
+
`wp-content/plugins/baseline-blocks` (see `.ddev/docker-compose.packages.yaml`) — edit in
|
|
27
|
+
`packages/`, refresh the site. In a standalone client repo, delete that file and
|
|
28
|
+
`composer require goldencomm/wp-theme goldencomm/wp-blocks-plugin` from Bitbucket VCS.
|
|
29
|
+
- **Plugins** (Composer): ACF Pro · Gravity Forms (+cli, recaptcha, smtp) · Yoast SEO ·
|
|
30
|
+
Wordfence · Redirection · UK Cookie Consent · WordPress Importer · Redis Cache ·
|
|
31
|
+
s3-uploads · gravityforms-offload-uploads · gc-wordpress-announcements · gc-cf7-user-info ·
|
|
32
|
+
Query Monitor (dev). `s3-uploads` + offload are deactivated locally (need prod S3).
|
|
33
|
+
- **Seed content:** Home (front page) + a Components demo (from Baseline patterns) + a
|
|
34
|
+
Primary nav menu + a sample post.
|
|
35
|
+
- **mu-plugin:** `baseline-bootstrap` (pattern category + non-prod indexing guard).
|
|
36
|
+
- **Claude config:** `skills-lock.json` (5 WP skills + `figma-implement-design`) +
|
|
37
|
+
`.claude/` (web-dev plugin config + project CLAUDE.md). No permissions are pre-granted —
|
|
38
|
+
you approve commands as they run.
|
|
39
|
+
|
|
40
|
+
## Notes
|
|
41
|
+
- WP core is **pinned** (`WP_VERSION` in `scripts/seed.sh`) and downloaded via wp-cli — not committed.
|
|
42
|
+
- `wp-config.php` is committed; secrets live in `.env` / `auth.json` (both gitignored).
|
|
43
|
+
- Regenerate thumbnails with `ddev wp media regenerate` — no plugin required.
|
|
44
|
+
- For a real client: clone this dir, rename in `composer.json`/`.ddev`, point the theme/plugin
|
|
45
|
+
repos at Bitbucket VCS, and set production `.env`/`auth.json`.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# WordPress core — pinned + downloaded via wp-cli, not committed
|
|
2
|
+
/wp-admin/
|
|
3
|
+
/wp-includes/
|
|
4
|
+
/wp-*.php
|
|
5
|
+
!/wp-config.php
|
|
6
|
+
/index.php
|
|
7
|
+
/xmlrpc.php
|
|
8
|
+
/license.txt
|
|
9
|
+
/readme.html
|
|
10
|
+
|
|
11
|
+
# Composer
|
|
12
|
+
/vendor/
|
|
13
|
+
|
|
14
|
+
# Composer-managed themes & plugins
|
|
15
|
+
/wp-content/themes/
|
|
16
|
+
/wp-content/plugins/
|
|
17
|
+
|
|
18
|
+
# mu-plugins: keep the ones we author, ignore composer-installed
|
|
19
|
+
/wp-content/mu-plugins/*
|
|
20
|
+
!/wp-content/mu-plugins/baseline-bootstrap.php
|
|
21
|
+
|
|
22
|
+
# Generated / runtime
|
|
23
|
+
/.maintenance
|
|
24
|
+
/wp-content/uploads/
|
|
25
|
+
/wp-content/cache/
|
|
26
|
+
/wp-content/upgrade/
|
|
27
|
+
/wp-content/object-cache.php
|
|
28
|
+
/wp-content/advanced-cache.php
|
|
29
|
+
|
|
30
|
+
# Secrets & local
|
|
31
|
+
/.env
|
|
32
|
+
/auth.json
|
|
33
|
+
/wp-config-ddev.php
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"http-basic": {
|
|
3
|
+
"connect.advancedcustomfields.com": {
|
|
4
|
+
"username": "<ACF_PRO_LICENSE_KEY>",
|
|
5
|
+
"password": "<SITE_URL>"
|
|
6
|
+
},
|
|
7
|
+
"composer.gravity.io": {
|
|
8
|
+
"username": "<GRAVITY_FORMS_LICENSE_KEY>",
|
|
9
|
+
"password": "<SITE_URL>"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"bitbucket-oauth": {
|
|
13
|
+
"bitbucket.org": {
|
|
14
|
+
"consumer-key": "<BITBUCKET_OAUTH_KEY>",
|
|
15
|
+
"consumer-secret": "<BITBUCKET_OAUTH_SECRET>"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "goldencomm/baseline-wordpress",
|
|
3
|
+
"description": "Baseline — GoldenComm WordPress site-build scaffold (traditional root + Composer + DDEV). Starter template for new client sites.",
|
|
4
|
+
"type": "project",
|
|
5
|
+
"license": "proprietary",
|
|
6
|
+
"minimum-stability": "dev",
|
|
7
|
+
"prefer-stable": true,
|
|
8
|
+
"config": {
|
|
9
|
+
"allow-plugins": {
|
|
10
|
+
"composer/installers": true
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"extra": {
|
|
14
|
+
"installer-paths": {
|
|
15
|
+
"wp-content/plugins/{$name}/": ["type:wordpress-plugin"],
|
|
16
|
+
"wp-content/themes/{$name}/": ["type:wordpress-theme"],
|
|
17
|
+
"wp-content/mu-plugins/{$name}/": ["type:wordpress-muplugin"]
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"repositories": [
|
|
21
|
+
{
|
|
22
|
+
"name": "advancedcustomfields",
|
|
23
|
+
"type": "composer",
|
|
24
|
+
"url": "https://connect.advancedcustomfields.com"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "gravity",
|
|
28
|
+
"type": "composer",
|
|
29
|
+
"url": "https://composer.gravity.io"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"type": "composer",
|
|
33
|
+
"url": "https://wpackagist.org",
|
|
34
|
+
"only": ["wpackagist-plugin/*", "wpackagist-theme/*"]
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"type": "package",
|
|
38
|
+
"package": {
|
|
39
|
+
"name": "goldencomm/gc-wordpress-announcements",
|
|
40
|
+
"type": "wordpress-plugin",
|
|
41
|
+
"version": "dev-master",
|
|
42
|
+
"source": { "url": "https://bitbucket.org/goldencomm/gc-wordpress-announcements.git", "type": "git", "reference": "master" }
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"type": "package",
|
|
47
|
+
"package": {
|
|
48
|
+
"name": "goldencomm/gc-cf7-user-info",
|
|
49
|
+
"type": "wordpress-plugin",
|
|
50
|
+
"version": "dev-master",
|
|
51
|
+
"source": { "url": "https://bitbucket.org/goldencomm/gc-cf7-user-info.git", "type": "git", "reference": "master" }
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"type": "package",
|
|
56
|
+
"package": {
|
|
57
|
+
"name": "vitaldevteam/gravityforms-offload-uploads",
|
|
58
|
+
"type": "wordpress-plugin",
|
|
59
|
+
"version": "2.0",
|
|
60
|
+
"source": { "url": "https://github.com/VitalDevTeam/gravityforms-offload-uploads.git", "type": "git", "reference": "2.0" }
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
"require": {
|
|
65
|
+
"php": ">=8.2",
|
|
66
|
+
"composer/installers": "^1",
|
|
67
|
+
|
|
68
|
+
"wpengine/advanced-custom-fields-pro": "*",
|
|
69
|
+
|
|
70
|
+
"gravity/gravityforms": "*",
|
|
71
|
+
"gravity/gravityformscli": "*",
|
|
72
|
+
"gravity/gravityformsrecaptcha": "*",
|
|
73
|
+
"gravity/gravitysmtp": "*",
|
|
74
|
+
|
|
75
|
+
"wpackagist-plugin/wordpress-seo": "*",
|
|
76
|
+
"wpackagist-plugin/wordfence": "*",
|
|
77
|
+
"wpackagist-plugin/redirection": "*",
|
|
78
|
+
"wpackagist-plugin/uk-cookie-consent": "*",
|
|
79
|
+
"wpackagist-plugin/wordpress-importer": "*",
|
|
80
|
+
"wpackagist-plugin/redis-cache": "*",
|
|
81
|
+
|
|
82
|
+
"humanmade/s3-uploads": "^3.0",
|
|
83
|
+
"vitaldevteam/gravityforms-offload-uploads": "^2.0",
|
|
84
|
+
|
|
85
|
+
"goldencomm/gc-wordpress-announcements": "dev-master",
|
|
86
|
+
"goldencomm/gc-cf7-user-info": "dev-master"
|
|
87
|
+
},
|
|
88
|
+
"require-dev": {
|
|
89
|
+
"wpackagist-plugin/query-monitor": "*"
|
|
90
|
+
}
|
|
91
|
+
}
|