@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.
Files changed (377) hide show
  1. package/README.md +88 -0
  2. package/index.mjs +296 -0
  3. package/package.json +44 -0
  4. package/templates/next/.claude/skills/ai-elements/SKILL.md +160 -0
  5. package/templates/next/.claude/skills/ai-elements/references/agent.md +134 -0
  6. package/templates/next/.claude/skills/ai-elements/references/artifact.md +84 -0
  7. package/templates/next/.claude/skills/ai-elements/references/attachments.md +190 -0
  8. package/templates/next/.claude/skills/ai-elements/references/audio-player.md +134 -0
  9. package/templates/next/.claude/skills/ai-elements/references/canvas.md +34 -0
  10. package/templates/next/.claude/skills/ai-elements/references/chain-of-thought.md +81 -0
  11. package/templates/next/.claude/skills/ai-elements/references/checkpoint.md +183 -0
  12. package/templates/next/.claude/skills/ai-elements/references/code-block.md +170 -0
  13. package/templates/next/.claude/skills/ai-elements/references/commit.md +177 -0
  14. package/templates/next/.claude/skills/ai-elements/references/confirmation.md +262 -0
  15. package/templates/next/.claude/skills/ai-elements/references/connection.md +34 -0
  16. package/templates/next/.claude/skills/ai-elements/references/context.md +126 -0
  17. package/templates/next/.claude/skills/ai-elements/references/controls.md +32 -0
  18. package/templates/next/.claude/skills/ai-elements/references/conversation.md +224 -0
  19. package/templates/next/.claude/skills/ai-elements/references/edge.md +52 -0
  20. package/templates/next/.claude/skills/ai-elements/references/environment-variables.md +102 -0
  21. package/templates/next/.claude/skills/ai-elements/references/file-tree.md +72 -0
  22. package/templates/next/.claude/skills/ai-elements/references/image.md +146 -0
  23. package/templates/next/.claude/skills/ai-elements/references/inline-citation.md +299 -0
  24. package/templates/next/.claude/skills/ai-elements/references/jsx-preview.md +104 -0
  25. package/templates/next/.claude/skills/ai-elements/references/message.md +237 -0
  26. package/templates/next/.claude/skills/ai-elements/references/mic-selector.md +189 -0
  27. package/templates/next/.claude/skills/ai-elements/references/model-selector.md +112 -0
  28. package/templates/next/.claude/skills/ai-elements/references/node.md +73 -0
  29. package/templates/next/.claude/skills/ai-elements/references/open-in-chat.md +67 -0
  30. package/templates/next/.claude/skills/ai-elements/references/package-info.md +95 -0
  31. package/templates/next/.claude/skills/ai-elements/references/panel.md +33 -0
  32. package/templates/next/.claude/skills/ai-elements/references/persona.md +166 -0
  33. package/templates/next/.claude/skills/ai-elements/references/plan.md +79 -0
  34. package/templates/next/.claude/skills/ai-elements/references/prompt-input.md +579 -0
  35. package/templates/next/.claude/skills/ai-elements/references/queue.md +172 -0
  36. package/templates/next/.claude/skills/ai-elements/references/reasoning.md +238 -0
  37. package/templates/next/.claude/skills/ai-elements/references/sandbox.md +129 -0
  38. package/templates/next/.claude/skills/ai-elements/references/schema-display.md +102 -0
  39. package/templates/next/.claude/skills/ai-elements/references/shimmer.md +48 -0
  40. package/templates/next/.claude/skills/ai-elements/references/snippet.md +64 -0
  41. package/templates/next/.claude/skills/ai-elements/references/sources.md +209 -0
  42. package/templates/next/.claude/skills/ai-elements/references/speech-input.md +163 -0
  43. package/templates/next/.claude/skills/ai-elements/references/stack-trace.md +224 -0
  44. package/templates/next/.claude/skills/ai-elements/references/suggestion.md +124 -0
  45. package/templates/next/.claude/skills/ai-elements/references/task.md +222 -0
  46. package/templates/next/.claude/skills/ai-elements/references/terminal.md +103 -0
  47. package/templates/next/.claude/skills/ai-elements/references/test-results.md +157 -0
  48. package/templates/next/.claude/skills/ai-elements/references/tool.md +285 -0
  49. package/templates/next/.claude/skills/ai-elements/references/toolbar.md +32 -0
  50. package/templates/next/.claude/skills/ai-elements/references/transcription.md +120 -0
  51. package/templates/next/.claude/skills/ai-elements/references/voice-selector.md +241 -0
  52. package/templates/next/.claude/skills/ai-elements/references/web-preview.md +200 -0
  53. package/templates/next/.claude/skills/ai-elements/scripts/agent.tsx +61 -0
  54. package/templates/next/.claude/skills/ai-elements/scripts/artifact.tsx +127 -0
  55. package/templates/next/.claude/skills/ai-elements/scripts/attachments-inline.tsx +128 -0
  56. package/templates/next/.claude/skills/ai-elements/scripts/attachments-list.tsx +95 -0
  57. package/templates/next/.claude/skills/ai-elements/scripts/attachments.tsx +85 -0
  58. package/templates/next/.claude/skills/ai-elements/scripts/audio-player-remote.tsx +35 -0
  59. package/templates/next/.claude/skills/ai-elements/scripts/audio-player.tsx +68 -0
  60. package/templates/next/.claude/skills/ai-elements/scripts/chain-of-thought.tsx +82 -0
  61. package/templates/next/.claude/skills/ai-elements/scripts/checkpoint.tsx +110 -0
  62. package/templates/next/.claude/skills/ai-elements/scripts/code-block-dark.tsx +46 -0
  63. package/templates/next/.claude/skills/ai-elements/scripts/code-block.tsx +120 -0
  64. package/templates/next/.claude/skills/ai-elements/scripts/commit.tsx +94 -0
  65. package/templates/next/.claude/skills/ai-elements/scripts/confirmation-accepted.tsx +40 -0
  66. package/templates/next/.claude/skills/ai-elements/scripts/confirmation-rejected.tsx +40 -0
  67. package/templates/next/.claude/skills/ai-elements/scripts/confirmation-request.tsx +54 -0
  68. package/templates/next/.claude/skills/ai-elements/scripts/confirmation.tsx +55 -0
  69. package/templates/next/.claude/skills/ai-elements/scripts/context.tsx +45 -0
  70. package/templates/next/.claude/skills/ai-elements/scripts/conversation.tsx +177 -0
  71. package/templates/next/.claude/skills/ai-elements/scripts/environment-variables.tsx +62 -0
  72. package/templates/next/.claude/skills/ai-elements/scripts/file-tree-basic.tsx +18 -0
  73. package/templates/next/.claude/skills/ai-elements/scripts/file-tree-expanded.tsx +21 -0
  74. package/templates/next/.claude/skills/ai-elements/scripts/file-tree-selection.tsx +24 -0
  75. package/templates/next/.claude/skills/ai-elements/scripts/file-tree.tsx +42 -0
  76. package/templates/next/.claude/skills/ai-elements/scripts/image.tsx +20 -0
  77. package/templates/next/.claude/skills/ai-elements/scripts/inline-citation.tsx +97 -0
  78. package/templates/next/.claude/skills/ai-elements/scripts/jsx-preview.tsx +104 -0
  79. package/templates/next/.claude/skills/ai-elements/scripts/message.tsx +365 -0
  80. package/templates/next/.claude/skills/ai-elements/scripts/mic-selector.tsx +49 -0
  81. package/templates/next/.claude/skills/ai-elements/scripts/model-selector.tsx +365 -0
  82. package/templates/next/.claude/skills/ai-elements/scripts/open-in-chat.tsx +33 -0
  83. package/templates/next/.claude/skills/ai-elements/scripts/package-info.tsx +51 -0
  84. package/templates/next/.claude/skills/ai-elements/scripts/persona-command.tsx +110 -0
  85. package/templates/next/.claude/skills/ai-elements/scripts/persona-glint.tsx +110 -0
  86. package/templates/next/.claude/skills/ai-elements/scripts/persona-halo.tsx +110 -0
  87. package/templates/next/.claude/skills/ai-elements/scripts/persona-mana.tsx +110 -0
  88. package/templates/next/.claude/skills/ai-elements/scripts/persona-obsidian.tsx +110 -0
  89. package/templates/next/.claude/skills/ai-elements/scripts/persona-opal.tsx +110 -0
  90. package/templates/next/.claude/skills/ai-elements/scripts/plan.tsx +65 -0
  91. package/templates/next/.claude/skills/ai-elements/scripts/prompt-input-cursor.tsx +502 -0
  92. package/templates/next/.claude/skills/ai-elements/scripts/prompt-input-tooltip.tsx +44 -0
  93. package/templates/next/.claude/skills/ai-elements/scripts/prompt-input.tsx +267 -0
  94. package/templates/next/.claude/skills/ai-elements/scripts/queue-prompt-input.tsx +394 -0
  95. package/templates/next/.claude/skills/ai-elements/scripts/queue.tsx +295 -0
  96. package/templates/next/.claude/skills/ai-elements/scripts/reasoning.tsx +71 -0
  97. package/templates/next/.claude/skills/ai-elements/scripts/sandbox.tsx +178 -0
  98. package/templates/next/.claude/skills/ai-elements/scripts/schema-display-basic.tsx +9 -0
  99. package/templates/next/.claude/skills/ai-elements/scripts/schema-display-body.tsx +20 -0
  100. package/templates/next/.claude/skills/ai-elements/scripts/schema-display-nested.tsx +23 -0
  101. package/templates/next/.claude/skills/ai-elements/scripts/schema-display-params.tsx +16 -0
  102. package/templates/next/.claude/skills/ai-elements/scripts/schema-display.tsx +110 -0
  103. package/templates/next/.claude/skills/ai-elements/scripts/shimmer-duration.tsx +31 -0
  104. package/templates/next/.claude/skills/ai-elements/scripts/shimmer-elements.tsx +43 -0
  105. package/templates/next/.claude/skills/ai-elements/scripts/shimmer.tsx +17 -0
  106. package/templates/next/.claude/skills/ai-elements/scripts/snippet-plain.tsx +19 -0
  107. package/templates/next/.claude/skills/ai-elements/scripts/snippet.tsx +25 -0
  108. package/templates/next/.claude/skills/ai-elements/scripts/sources-custom.tsx +39 -0
  109. package/templates/next/.claude/skills/ai-elements/scripts/sources.tsx +32 -0
  110. package/templates/next/.claude/skills/ai-elements/scripts/speech-input.tsx +84 -0
  111. package/templates/next/.claude/skills/ai-elements/scripts/stack-trace-collapsed.tsx +39 -0
  112. package/templates/next/.claude/skills/ai-elements/scripts/stack-trace-no-internal.tsx +41 -0
  113. package/templates/next/.claude/skills/ai-elements/scripts/stack-trace.tsx +58 -0
  114. package/templates/next/.claude/skills/ai-elements/scripts/suggestion-input.tsx +144 -0
  115. package/templates/next/.claude/skills/ai-elements/scripts/suggestion.tsx +32 -0
  116. package/templates/next/.claude/skills/ai-elements/scripts/task.tsx +59 -0
  117. package/templates/next/.claude/skills/ai-elements/scripts/terminal-basic.tsx +7 -0
  118. package/templates/next/.claude/skills/ai-elements/scripts/terminal-clear.tsx +19 -0
  119. package/templates/next/.claude/skills/ai-elements/scripts/terminal-streaming.tsx +38 -0
  120. package/templates/next/.claude/skills/ai-elements/scripts/terminal.tsx +82 -0
  121. package/templates/next/.claude/skills/ai-elements/scripts/test-results-basic.tsx +27 -0
  122. package/templates/next/.claude/skills/ai-elements/scripts/test-results-errors.tsx +51 -0
  123. package/templates/next/.claude/skills/ai-elements/scripts/test-results-suites.tsx +40 -0
  124. package/templates/next/.claude/skills/ai-elements/scripts/test-results.tsx +102 -0
  125. package/templates/next/.claude/skills/ai-elements/scripts/tool-input-available.tsx +31 -0
  126. package/templates/next/.claude/skills/ai-elements/scripts/tool-input-streaming.tsx +30 -0
  127. package/templates/next/.claude/skills/ai-elements/scripts/tool-output-available.tsx +80 -0
  128. package/templates/next/.claude/skills/ai-elements/scripts/tool-output-error.tsx +44 -0
  129. package/templates/next/.claude/skills/ai-elements/scripts/tool.tsx +222 -0
  130. package/templates/next/.claude/skills/ai-elements/scripts/transcription.tsx +290 -0
  131. package/templates/next/.claude/skills/ai-elements/scripts/voice-selector.tsx +245 -0
  132. package/templates/next/.claude/skills/ai-elements/scripts/web-preview.tsx +115 -0
  133. package/templates/next/.claude/skills/ai-sdk/SKILL.md +78 -0
  134. package/templates/next/.claude/skills/frontend-design/LICENSE.txt +177 -0
  135. package/templates/next/.claude/skills/frontend-design/SKILL.md +55 -0
  136. package/templates/next/.claude/skills/gc-implement-figma-page/SKILL.md +93 -0
  137. package/templates/next/.claude/skills/migrate-ai-sdk-v6-to-v7/SKILL.md +108 -0
  138. package/templates/next/.claude/skills/vercel-composition-patterns/AGENTS.md +946 -0
  139. package/templates/next/.claude/skills/vercel-composition-patterns/README.md +60 -0
  140. package/templates/next/.claude/skills/vercel-composition-patterns/SKILL.md +89 -0
  141. package/templates/next/.claude/skills/vercel-composition-patterns/metadata.json +11 -0
  142. package/templates/next/.claude/skills/vercel-composition-patterns/rules/_sections.md +29 -0
  143. package/templates/next/.claude/skills/vercel-composition-patterns/rules/_template.md +24 -0
  144. package/templates/next/.claude/skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
  145. package/templates/next/.claude/skills/vercel-composition-patterns/rules/architecture-compound-components.md +112 -0
  146. package/templates/next/.claude/skills/vercel-composition-patterns/rules/patterns-children-over-render-props.md +87 -0
  147. package/templates/next/.claude/skills/vercel-composition-patterns/rules/patterns-explicit-variants.md +100 -0
  148. package/templates/next/.claude/skills/vercel-composition-patterns/rules/react19-no-forwardref.md +42 -0
  149. package/templates/next/.claude/skills/vercel-composition-patterns/rules/state-context-interface.md +191 -0
  150. package/templates/next/.claude/skills/vercel-composition-patterns/rules/state-decouple-implementation.md +113 -0
  151. package/templates/next/.claude/skills/vercel-composition-patterns/rules/state-lift-state.md +125 -0
  152. package/templates/next/.claude/skills/vercel-react-best-practices/AGENTS.md +3810 -0
  153. package/templates/next/.claude/skills/vercel-react-best-practices/README.md +123 -0
  154. package/templates/next/.claude/skills/vercel-react-best-practices/SKILL.md +149 -0
  155. package/templates/next/.claude/skills/vercel-react-best-practices/metadata.json +15 -0
  156. package/templates/next/.claude/skills/vercel-react-best-practices/rules/_sections.md +46 -0
  157. package/templates/next/.claude/skills/vercel-react-best-practices/rules/_template.md +28 -0
  158. package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
  159. package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  160. package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  161. package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  162. package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  163. package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
  164. package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-defer-await.md +82 -0
  165. package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  166. package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
  167. package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  168. package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-analyzable-paths.md +63 -0
  169. package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
  170. package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  171. package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  172. package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  173. package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  174. package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  175. package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  176. package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  177. package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  178. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  179. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  180. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  181. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  182. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  183. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  184. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
  185. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  186. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  187. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  188. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  189. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
  190. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  191. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  192. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  193. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  194. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  195. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  196. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  197. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  198. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  199. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
  200. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
  201. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  202. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  203. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  204. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  205. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  206. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  207. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  208. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  209. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  210. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  211. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  212. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
  213. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  214. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
  215. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  216. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
  217. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  218. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  219. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  220. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  221. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  222. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  223. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
  224. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
  225. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  226. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
  227. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  228. package/templates/next/.claude/skills/web-design-guidelines/SKILL.md +39 -0
  229. package/templates/next/CLAUDE.md +42 -0
  230. package/templates/next/README.md +30 -0
  231. package/templates/next/_gitignore +4 -0
  232. package/templates/next/app/globals.css +13 -0
  233. package/templates/next/app/layout.tsx +44 -0
  234. package/templates/next/app/page.tsx +30 -0
  235. package/templates/next/globals.d.ts +8 -0
  236. package/templates/next/next.config.mjs +6 -0
  237. package/templates/next/package.json +38 -0
  238. package/templates/next/postcss.config.mjs +5 -0
  239. package/templates/next/skills-lock.json +47 -0
  240. package/templates/next/tsconfig.json +36 -0
  241. package/templates/shopify-theme/.claude/skills/gc-shopify-block/SKILL.md +44 -0
  242. package/templates/shopify-theme/.claude/skills/shopify-dev/SKILL.md +51 -0
  243. package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/log_skill_use.mjs +205 -0
  244. package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/search_docs.mjs +272 -0
  245. package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/track-telemetry.ps1 +361 -0
  246. package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/track-telemetry.sh +527 -0
  247. package/templates/shopify-theme/.claude/skills/shopify-liquid/SKILL.md +343 -0
  248. package/templates/shopify-theme/.claude/skills/shopify-liquid/blocks/hero-slide.liquid +342 -0
  249. package/templates/shopify-theme/.claude/skills/shopify-liquid/config/settings_schema.json +1 -0
  250. package/templates/shopify-theme/.claude/skills/shopify-liquid/featured-collection.liquid +457 -0
  251. package/templates/shopify-theme/.claude/skills/shopify-liquid/locales/en.default.json +10 -0
  252. package/templates/shopify-theme/.claude/skills/shopify-liquid/locales/en.default.schema.json +103 -0
  253. package/templates/shopify-theme/.claude/skills/shopify-liquid/package.json +10 -0
  254. package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/search_docs.mjs +759 -0
  255. package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/track-telemetry.ps1 +361 -0
  256. package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/track-telemetry.sh +527 -0
  257. package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/validate.mjs +654 -0
  258. package/templates/shopify-theme/.claude/skills/shopify-liquid/sections/hero-banner.liquid +329 -0
  259. package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/SKILL.md +165 -0
  260. package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/scripts/log_skill_use.mjs +205 -0
  261. package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/scripts/track-telemetry.ps1 +361 -0
  262. package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/scripts/track-telemetry.sh +527 -0
  263. package/templates/shopify-theme/.shopifyignore +9 -0
  264. package/templates/shopify-theme/CLAUDE.md +51 -0
  265. package/templates/shopify-theme/README.md +92 -0
  266. package/templates/shopify-theme/assets/baseline.css +8390 -0
  267. package/templates/shopify-theme/assets/swiper-element-bundle.min.js +14 -0
  268. package/templates/shopify-theme/blocks/_accordion.liquid +59 -0
  269. package/templates/shopify-theme/blocks/_carousel-slide.liquid +24 -0
  270. package/templates/shopify-theme/blocks/_modal-body.liquid +18 -0
  271. package/templates/shopify-theme/blocks/_modal-footer.liquid +36 -0
  272. package/templates/shopify-theme/blocks/_modal-header.liquid +19 -0
  273. package/templates/shopify-theme/blocks/_modal-media.liquid +37 -0
  274. package/templates/shopify-theme/blocks/accordion-group.liquid +53 -0
  275. package/templates/shopify-theme/blocks/alert.liquid +92 -0
  276. package/templates/shopify-theme/blocks/avatar-group.liquid +51 -0
  277. package/templates/shopify-theme/blocks/avatar.liquid +56 -0
  278. package/templates/shopify-theme/blocks/badge.liquid +33 -0
  279. package/templates/shopify-theme/blocks/breadcrumb.liquid +45 -0
  280. package/templates/shopify-theme/blocks/button.liquid +51 -0
  281. package/templates/shopify-theme/blocks/buttons.liquid +41 -0
  282. package/templates/shopify-theme/blocks/card.liquid +67 -0
  283. package/templates/shopify-theme/blocks/carousel.liquid +55 -0
  284. package/templates/shopify-theme/blocks/column.liquid +33 -0
  285. package/templates/shopify-theme/blocks/image.liquid +37 -0
  286. package/templates/shopify-theme/blocks/modal.liquid +52 -0
  287. package/templates/shopify-theme/blocks/popover.liquid +24 -0
  288. package/templates/shopify-theme/blocks/skeleton.liquid +22 -0
  289. package/templates/shopify-theme/blocks/spinner.liquid +22 -0
  290. package/templates/shopify-theme/blocks/split.liquid +39 -0
  291. package/templates/shopify-theme/blocks/tab.liquid +19 -0
  292. package/templates/shopify-theme/blocks/tabs.liquid +78 -0
  293. package/templates/shopify-theme/blocks/tags.liquid +55 -0
  294. package/templates/shopify-theme/blocks/text.liquid +55 -0
  295. package/templates/shopify-theme/blocks/tooltip.liquid +50 -0
  296. package/templates/shopify-theme/blocks/typography.liquid +90 -0
  297. package/templates/shopify-theme/config/settings_data.json +4 -0
  298. package/templates/shopify-theme/config/settings_schema.json +10 -0
  299. package/templates/shopify-theme/layout/theme.liquid +21 -0
  300. package/templates/shopify-theme/locales/en.default.json +5 -0
  301. package/templates/shopify-theme/locales/en.default.schema.json +131 -0
  302. package/templates/shopify-theme/package.json +21 -0
  303. package/templates/shopify-theme/scripts/sync-tokens.mjs +32 -0
  304. package/templates/shopify-theme/sections/baseline-components.liquid +81 -0
  305. package/templates/shopify-theme/skills-lock.json +23 -0
  306. package/templates/shopify-theme/snippets/lucide.liquid +34 -0
  307. package/templates/shopify-theme/snippets/pagination.liquid +44 -0
  308. package/templates/shopify-theme/templates/collection.json +13 -0
  309. package/templates/shopify-theme/templates/gift_card.liquid +5 -0
  310. package/templates/shopify-theme/templates/index.json +135 -0
  311. package/templates/shopify-theme/templates/list-collections.json +13 -0
  312. package/templates/shopify-theme/templates/product.json +13 -0
  313. package/templates/wordpress/.claude/CLAUDE.md +37 -0
  314. package/templates/wordpress/.claude/skills/wp-block-development/SKILL.md +174 -0
  315. package/templates/wordpress/.claude/skills/wp-block-development/references/attributes-and-serialization.md +22 -0
  316. package/templates/wordpress/.claude/skills/wp-block-development/references/block-json.md +49 -0
  317. package/templates/wordpress/.claude/skills/wp-block-development/references/creating-new-blocks.md +46 -0
  318. package/templates/wordpress/.claude/skills/wp-block-development/references/debugging.md +36 -0
  319. package/templates/wordpress/.claude/skills/wp-block-development/references/deprecations.md +24 -0
  320. package/templates/wordpress/.claude/skills/wp-block-development/references/dynamic-rendering.md +23 -0
  321. package/templates/wordpress/.claude/skills/wp-block-development/references/inner-blocks.md +25 -0
  322. package/templates/wordpress/.claude/skills/wp-block-development/references/registration.md +30 -0
  323. package/templates/wordpress/.claude/skills/wp-block-development/references/supports-and-wrappers.md +18 -0
  324. package/templates/wordpress/.claude/skills/wp-block-development/references/tooling-and-testing.md +21 -0
  325. package/templates/wordpress/.claude/skills/wp-block-development/scripts/list_blocks.mjs +121 -0
  326. package/templates/wordpress/.claude/skills/wp-block-themes/SKILL.md +116 -0
  327. package/templates/wordpress/.claude/skills/wp-block-themes/references/creating-new-block-theme.md +37 -0
  328. package/templates/wordpress/.claude/skills/wp-block-themes/references/debugging.md +24 -0
  329. package/templates/wordpress/.claude/skills/wp-block-themes/references/patterns.md +18 -0
  330. package/templates/wordpress/.claude/skills/wp-block-themes/references/style-variations.md +14 -0
  331. package/templates/wordpress/.claude/skills/wp-block-themes/references/templates-and-parts.md +16 -0
  332. package/templates/wordpress/.claude/skills/wp-block-themes/references/theme-json.md +59 -0
  333. package/templates/wordpress/.claude/skills/wp-block-themes/scripts/detect_block_themes.mjs +117 -0
  334. package/templates/wordpress/.claude/skills/wp-performance/SKILL.md +146 -0
  335. package/templates/wordpress/.claude/skills/wp-performance/references/autoload-options.md +24 -0
  336. package/templates/wordpress/.claude/skills/wp-performance/references/cron.md +20 -0
  337. package/templates/wordpress/.claude/skills/wp-performance/references/database.md +20 -0
  338. package/templates/wordpress/.claude/skills/wp-performance/references/http-api.md +15 -0
  339. package/templates/wordpress/.claude/skills/wp-performance/references/measurement.md +21 -0
  340. package/templates/wordpress/.claude/skills/wp-performance/references/object-cache.md +24 -0
  341. package/templates/wordpress/.claude/skills/wp-performance/references/query-monitor-headless.md +38 -0
  342. package/templates/wordpress/.claude/skills/wp-performance/references/server-timing.md +22 -0
  343. package/templates/wordpress/.claude/skills/wp-performance/references/wp-cli-doctor.md +24 -0
  344. package/templates/wordpress/.claude/skills/wp-performance/references/wp-cli-profile.md +32 -0
  345. package/templates/wordpress/.claude/skills/wp-performance/scripts/perf_inspect.mjs +128 -0
  346. package/templates/wordpress/.claude/skills/wp-plugin-development/SKILL.md +112 -0
  347. package/templates/wordpress/.claude/skills/wp-plugin-development/references/data-and-cron.md +19 -0
  348. package/templates/wordpress/.claude/skills/wp-plugin-development/references/debugging.md +19 -0
  349. package/templates/wordpress/.claude/skills/wp-plugin-development/references/lifecycle.md +33 -0
  350. package/templates/wordpress/.claude/skills/wp-plugin-development/references/security.md +29 -0
  351. package/templates/wordpress/.claude/skills/wp-plugin-development/references/settings-api.md +22 -0
  352. package/templates/wordpress/.claude/skills/wp-plugin-development/references/structure.md +16 -0
  353. package/templates/wordpress/.claude/skills/wp-plugin-development/scripts/detect_plugins.mjs +122 -0
  354. package/templates/wordpress/.claude/skills/wp-rest-api/SKILL.md +114 -0
  355. package/templates/wordpress/.claude/skills/wp-rest-api/references/authentication.md +18 -0
  356. package/templates/wordpress/.claude/skills/wp-rest-api/references/custom-content-types.md +20 -0
  357. package/templates/wordpress/.claude/skills/wp-rest-api/references/discovery-and-params.md +20 -0
  358. package/templates/wordpress/.claude/skills/wp-rest-api/references/responses-and-fields.md +30 -0
  359. package/templates/wordpress/.claude/skills/wp-rest-api/references/routes-and-endpoints.md +36 -0
  360. package/templates/wordpress/.claude/skills/wp-rest-api/references/schema.md +22 -0
  361. package/templates/wordpress/.ddev/commands/web/seed +7 -0
  362. package/templates/wordpress/.ddev/config.yaml +18 -0
  363. package/templates/wordpress/.ddev/docker-compose.packages.yaml +14 -0
  364. package/templates/wordpress/.ddev/docker-compose.redis.yaml +11 -0
  365. package/templates/wordpress/.env.example +33 -0
  366. package/templates/wordpress/CLAUDE.md +34 -0
  367. package/templates/wordpress/README.md +45 -0
  368. package/templates/wordpress/_gitignore +33 -0
  369. package/templates/wordpress/auth.json.example +18 -0
  370. package/templates/wordpress/composer.json +91 -0
  371. package/templates/wordpress/composer.lock +1594 -0
  372. package/templates/wordpress/package.json +13 -0
  373. package/templates/wordpress/scripts/seed.sh +64 -0
  374. package/templates/wordpress/skills-lock.json +35 -0
  375. package/templates/wordpress/wp-config.php +89 -0
  376. package/templates/wordpress/wp-content/index.php +2 -0
  377. package/templates/wordpress/wp-content/mu-plugins/baseline-bootstrap.php +26 -0
package/README.md ADDED
@@ -0,0 +1,88 @@
1
+ # @goldencomm/create-baseline
2
+
3
+ Scaffolds a **standalone project** from a Baseline template — copies the template,
4
+ then rewires it into its own project (names, README, the design-system deps, and
5
+ platform-specific fixups). Zero dependencies; Node built-ins only.
6
+
7
+ ## Usage
8
+
9
+ ### Standalone (npm)
10
+
11
+ Because the package is named `@goldencomm/create-baseline`, npm's `create` prefix
12
+ mapping means the exact command is:
13
+
14
+ ```bash
15
+ npm create @goldencomm/baseline <platform> <name>
16
+ # flags need a `--` separator so npm doesn't eat them:
17
+ npm create @goldencomm/baseline <platform> <name> -- --dir ../my-app --ds-version ^0.0.1
18
+ ```
19
+
20
+ (`pnpm create @goldencomm/baseline …` and `npx @goldencomm/create-baseline …` work too.)
21
+
22
+ ### Inside the monorepo
23
+
24
+ ```bash
25
+ pnpm create-baseline <platform> <name> [options]
26
+ # or directly:
27
+ node tools/create-baseline/index.mjs <platform> <name> [options]
28
+ ```
29
+
30
+ | Platform | Produces |
31
+ |---|---|
32
+ | `next` | Next.js App Router app (React + `ds-core`/`ds-react`) |
33
+ | `shopify` | Shopify OS 2.0 theme (vendored `baseline.css`) |
34
+ | `wordpress` | WordPress site scaffold (Composer + DDEV) |
35
+ | `dotnet` | *(no scaffold)* — prints how to consume `ds-html` + `baseline.css` (Q-005) |
36
+
37
+ **Options**
38
+
39
+ | Flag | Default | Meaning |
40
+ |---|---|---|
41
+ | `--dir <path>` | `./<name>` | Target directory |
42
+ | `--ds-version <ver>` | `^0.0.1` | Version pinned for the `@goldencomm/ds-*` deps |
43
+ | `--force` | — | Allow scaffolding into a non-empty directory |
44
+
45
+ ```bash
46
+ pnpm create-baseline shopify acme-store
47
+ pnpm create-baseline next acme-proto --dir ../acme-proto --ds-version ^0.1.0
48
+ pnpm create-baseline wordpress acme-site
49
+ ```
50
+
51
+ ## What it does
52
+
53
+ 1. **Copies** the template. Two auto-detected source modes:
54
+ - **monorepo** — inside the design-system repo it copies the committed files of
55
+ `baselines/<platform>` via `git ls-files` (so `node_modules`, `dist`, `.next`,
56
+ `.turbo`, `vendor` are excluded automatically);
57
+ - **bundled** — installed from npm it copies the `templates/` snapshot that the
58
+ `prepack` script (`scripts/bundle-templates.mjs`) baked into the package at
59
+ publish time from the same `git ls-files` listing. (npm strips `.gitignore`/
60
+ `.npmrc`/`.npmignore` from tarballs, so those are stored renamed —
61
+ `_gitignore` etc. — and restored on scaffold.)
62
+ 2. **Rewires** identifiers: `package.json`/`composer.json` name + description, the
63
+ README title, and the Shopify `theme_name`.
64
+ 3. **Rewrites DS deps** — any `workspace:*` (`@goldencomm/ds-core`, `ds-react`) becomes
65
+ `--ds-version` so the project resolves them from npm.
66
+ 4. **Platform fixups:**
67
+ - **shopify** — repoints the `dev` token-watch at `node_modules/@goldencomm/ds-core`.
68
+ - **wordpress** — removes the monorepo bind-mount (`.ddev/docker-compose.packages.yaml`),
69
+ adds Composer `require` + VCS repos for `goldencomm/wp-theme` and
70
+ `goldencomm/wp-blocks-plugin`, renames the DDEV project, and updates `seed.sh`
71
+ (theme slug → `wp-theme`, site host → `<name>.ddev.site`).
72
+
73
+ ## Standalone readiness
74
+
75
+ - **Shopify** — works **now**; `baseline.css` is vendored into `assets/`.
76
+ - **Next** — needs `@goldencomm/ds-core` + `ds-react` on npm before `npm install`
77
+ resolves (they ship at `0.0.1`).
78
+ - **WordPress** — `goldencomm/wp-theme` + `wp-blocks-plugin` are **not published as
79
+ Composer packages yet**; `composer install` currently requires monorepo/Bitbucket
80
+ VCS access and your own gitignored `auth.json` for the ACF/Gravity/Bitbucket
81
+ credentials (never copied by the scaffolder). The scaffolder prints this caveat.
82
+
83
+ ## Publishing notes
84
+
85
+ - `templates/` is generated by `prepack` and gitignored — never commit it; it is
86
+ rebuilt from the committed baselines on every `pnpm pack` / `npm publish`.
87
+ - Packing/publishing must therefore happen from a monorepo checkout (prepack runs
88
+ `git ls-files`).
package/index.mjs ADDED
@@ -0,0 +1,296 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * create-baseline — scaffold a standalone project from a Baseline template.
4
+ *
5
+ * create-baseline <platform> <name> [--dir <path>] [--ds-version <ver>] [--force]
6
+ * npm create @goldencomm/baseline <platform> <name> (outside the monorepo)
7
+ *
8
+ * Platforms: next | wordpress | shopify (dotnet prints guidance — see Q-005).
9
+ *
10
+ * Template source (auto-detected):
11
+ * - monorepo mode — inside the design-system repo, copies the committed files
12
+ * of `baselines/<platform>` (via `git ls-files`, so node_modules/dist/vendor/
13
+ * .next/.turbo are excluded for free);
14
+ * - bundled mode — standalone (installed from npm), copies the `templates/`
15
+ * snapshot bundled into the package at prepack time.
16
+ *
17
+ * Either way it then rewires the copy into a standalone project: package/composer
18
+ * names, README title, the DS `workspace:*` deps (-> --ds-version), and
19
+ * platform-specific fixups (e.g. the WP monorepo bind-mount -> a Composer require).
20
+ *
21
+ * Zero dependencies — Node built-ins only.
22
+ */
23
+ import { execFileSync } from "node:child_process";
24
+ import {
25
+ existsSync, mkdirSync, copyFileSync, readFileSync, writeFileSync, readdirSync, rmSync,
26
+ } from "node:fs";
27
+ import { dirname, resolve, join } from "node:path";
28
+ import { fileURLToPath } from "node:url";
29
+
30
+ const HERE = dirname(fileURLToPath(import.meta.url));
31
+ const REPO_ROOT = resolve(HERE, "../..");
32
+
33
+ const PLATFORMS = {
34
+ next: { dir: "next", kind: "npm" },
35
+ shopify: { dir: "shopify-theme", kind: "npm" },
36
+ wordpress: { dir: "wordpress", kind: "composer" },
37
+ };
38
+
39
+ // ---- arg parsing -----------------------------------------------------------
40
+ const argv = process.argv.slice(2);
41
+ function takeFlag(name, hasValue = true) {
42
+ const i = argv.indexOf(name);
43
+ if (i === -1) return undefined;
44
+ const val = hasValue ? argv[i + 1] : true;
45
+ argv.splice(i, hasValue ? 2 : 1);
46
+ return val;
47
+ }
48
+ const force = takeFlag("--force", false);
49
+ const dirFlag = takeFlag("--dir");
50
+ const dsVersion = takeFlag("--ds-version") || "^0.0.1";
51
+ const [platform, nameArg] = argv;
52
+
53
+ function die(msg) {
54
+ console.error(`\n✖ ${msg}\n`);
55
+ process.exit(1);
56
+ }
57
+ function usage() {
58
+ console.log(`
59
+ create-baseline — scaffold a standalone project from a Baseline baseline
60
+
61
+ Usage:
62
+ create-baseline <platform> <name> [options]
63
+
64
+ Platforms:
65
+ next Next.js App Router app (React + ds-core/ds-react)
66
+ shopify Shopify OS 2.0 theme (vendored baseline.css)
67
+ wordpress WordPress site scaffold (Composer + DDEV)
68
+ dotnet (no scaffold — prints how to consume ds-html + baseline.css)
69
+
70
+ Options:
71
+ --dir <path> target directory (default: ./<name>)
72
+ --ds-version <ver> version for @goldencomm/ds-* deps (default: ^0.0.1)
73
+ --force allow scaffolding into a non-empty directory
74
+ `);
75
+ }
76
+
77
+ if (!platform || platform === "--help" || platform === "-h") {
78
+ usage();
79
+ process.exit(platform ? 0 : 1);
80
+ }
81
+
82
+ if (platform === "dotnet") {
83
+ console.log(`
84
+ .NET has no scaffolded baseline (decision Q-005). Consume the shared contract:
85
+
86
+ 1. Vendor @goldencomm/ds-core's baseline.css into your app's wwwroot and link it.
87
+ 2. Render components with the gcds-* markup from packages/ds-html
88
+ (e.g. <button class="gcds-button gcds-button--primary gcds-button--md">),
89
+ directly or via a Razor partial.
90
+
91
+ See packages/ds-html/README.md for the full guide.
92
+ `);
93
+ process.exit(0);
94
+ }
95
+
96
+ const cfg = PLATFORMS[platform];
97
+ if (!cfg) die(`Unknown platform "${platform}". Use: next | wordpress | shopify | dotnet`);
98
+ if (!nameArg) die(`Missing <name>. Try: create-baseline ${platform} my-project`);
99
+
100
+ // name derivations
101
+ const name = nameArg.trim();
102
+ const slug = (name.includes("/") ? name.split("/").pop() : name).toLowerCase();
103
+ if (!/^[a-z0-9][a-z0-9._-]*$/.test(slug)) {
104
+ die(`"${name}" isn't a safe project slug. Use lowercase letters, digits, - . _`);
105
+ }
106
+ const npmName = name.toLowerCase();
107
+ const composerName = name.includes("/") ? name.toLowerCase() : `goldencomm/${slug}`;
108
+ const description = `${slug} — scaffolded from the Baseline ${platform} baseline.`;
109
+
110
+ // ---- template source: monorepo baselines/ or bundled templates/ -------------
111
+ // prepack stores npm-packlist-hostile basenames renamed; restore them on copy.
112
+ // Keep in sync with PACK_SAFE_NAMES in scripts/bundle-templates.mjs.
113
+ const RESTORE_NAMES = {
114
+ _gitignore: ".gitignore",
115
+ _npmrc: ".npmrc",
116
+ _npmignore: ".npmignore",
117
+ };
118
+
119
+ /** Monorepo mode: the committed files of baselines/<dir>, or null if unavailable. */
120
+ function monorepoSource() {
121
+ const root = join(REPO_ROOT, "baselines", cfg.dir);
122
+ if (!existsSync(root)) return null;
123
+ try {
124
+ const tracked = execFileSync("git", ["-C", REPO_ROOT, "ls-files", `baselines/${cfg.dir}`], {
125
+ encoding: "utf8", stdio: ["ignore", "pipe", "ignore"],
126
+ }).split("\n").filter(Boolean);
127
+ if (tracked.length === 0) return null;
128
+ const prefix = `baselines/${cfg.dir}/`;
129
+ return {
130
+ mode: "monorepo", root,
131
+ files: tracked.map((f) => ({ src: f.slice(prefix.length), dest: f.slice(prefix.length) })),
132
+ };
133
+ } catch {
134
+ return null;
135
+ }
136
+ }
137
+
138
+ /** Bundled mode: the templates/<dir> snapshot shipped in the npm package. */
139
+ function bundledSource() {
140
+ const root = join(HERE, "templates", cfg.dir);
141
+ if (!existsSync(root)) return null;
142
+ const files = [];
143
+ (function walk(sub) {
144
+ for (const e of readdirSync(join(root, sub), { withFileTypes: true })) {
145
+ const rel = sub ? `${sub}/${e.name}` : e.name;
146
+ if (e.isDirectory()) walk(rel);
147
+ else files.push({ src: rel, dest: RESTORE_NAMES[e.name] ? rel.slice(0, rel.length - e.name.length) + RESTORE_NAMES[e.name] : rel });
148
+ }
149
+ })("");
150
+ return files.length > 0 ? { mode: "bundled", root, files } : null;
151
+ }
152
+
153
+ const source = monorepoSource() || bundledSource();
154
+ if (!source) {
155
+ die(`No template found for "${platform}" — neither the monorepo's baselines/${cfg.dir} nor a bundled templates/${cfg.dir}. If running from a git checkout, run \`node scripts/bundle-templates.mjs\` or use the published @goldencomm/create-baseline package.`);
156
+ }
157
+
158
+ const target = resolve(process.cwd(), dirFlag || slug);
159
+ if (existsSync(target) && readdirSync(target).length > 0 && !force) {
160
+ die(`Target ${target} exists and is not empty. Pass --force to scaffold anyway.`);
161
+ }
162
+
163
+ // ---- helpers ---------------------------------------------------------------
164
+ const tFile = (rel) => join(target, rel);
165
+ const has = (rel) => existsSync(tFile(rel));
166
+ function editJson(rel, fn) {
167
+ const p = tFile(rel);
168
+ const json = JSON.parse(readFileSync(p, "utf8"));
169
+ fn(json);
170
+ writeFileSync(p, JSON.stringify(json, null, 2) + "\n");
171
+ }
172
+ function patch(rel, replacers) {
173
+ const p = tFile(rel);
174
+ let s = readFileSync(p, "utf8");
175
+ for (const [find, repl] of replacers) s = s.replace(find, repl);
176
+ writeFileSync(p, s);
177
+ }
178
+ function setReadmeTitle(rel, title) {
179
+ if (has(rel)) patch(rel, [[/^#[^\n]*/, `# ${title}`]]);
180
+ }
181
+ function rewriteWorkspaceDeps(pkg) {
182
+ for (const field of ["dependencies", "devDependencies", "peerDependencies"]) {
183
+ const deps = pkg[field];
184
+ if (!deps) continue;
185
+ for (const k of Object.keys(deps)) {
186
+ if (typeof deps[k] === "string" && deps[k].startsWith("workspace:")) deps[k] = dsVersion;
187
+ }
188
+ }
189
+ }
190
+
191
+ // ---- copy ------------------------------------------------------------------
192
+ mkdirSync(target, { recursive: true });
193
+ for (const { src, dest } of source.files) {
194
+ const out = tFile(dest);
195
+ mkdirSync(dirname(out), { recursive: true });
196
+ copyFileSync(join(source.root, src), out);
197
+ }
198
+
199
+ // ---- rewire ----------------------------------------------------------------
200
+ const nextSteps = [];
201
+
202
+ if (cfg.kind === "npm") {
203
+ editJson("package.json", (pkg) => {
204
+ pkg.name = npmName;
205
+ pkg.description = description;
206
+ rewriteWorkspaceDeps(pkg);
207
+ if (platform === "shopify" && pkg.scripts?.dev) {
208
+ // monorepo watch path no longer exists standalone
209
+ pkg.scripts.dev = "node --watch-path=node_modules/@goldencomm/ds-core/dist scripts/sync-tokens.mjs";
210
+ }
211
+ });
212
+ setReadmeTitle("README.md", npmName);
213
+ }
214
+
215
+ if (platform === "shopify" && has("config/settings_schema.json")) {
216
+ editJson("config/settings_schema.json", (schema) => {
217
+ const info = Array.isArray(schema) ? schema.find((s) => s.name === "theme_info") : null;
218
+ if (info) info.theme_name = slug;
219
+ });
220
+ nextSteps.push(
221
+ "Shopify theme works immediately — baseline.css is vendored.",
222
+ " Run: cd " + target + " && shopify theme dev --store your-store.myshopify.com",
223
+ ` (Once @goldencomm/ds-core is published, 'npm i' enables re-syncing tokens; until then assets/baseline.css is the pinned copy.)`,
224
+ );
225
+ }
226
+
227
+ if (platform === "next") {
228
+ nextSteps.push(
229
+ `Next.js app depends on @goldencomm/ds-core@${dsVersion} + ds-react@${dsVersion} (npm).`,
230
+ " cd " + target + " && npm install && npm run dev",
231
+ );
232
+ }
233
+
234
+ if (cfg.kind === "composer") {
235
+ // 1) drop the monorepo-only bind-mount
236
+ const bindMount = ".ddev/docker-compose.packages.yaml";
237
+ if (has(bindMount)) rmSync(tFile(bindMount));
238
+
239
+ // 2) composer.json — name/description + require the theme & blocks plugin from VCS
240
+ editJson("composer.json", (c) => {
241
+ c.name = composerName;
242
+ c.description = description;
243
+ c.repositories = c.repositories || [];
244
+ c.repositories.push(
245
+ {
246
+ type: "package",
247
+ package: {
248
+ name: "goldencomm/wp-theme", type: "wordpress-theme", version: "dev-master",
249
+ source: { url: "https://bitbucket.org/goldencomm/wp-theme.git", type: "git", reference: "master" },
250
+ },
251
+ },
252
+ {
253
+ type: "package",
254
+ package: {
255
+ name: "goldencomm/wp-blocks-plugin", type: "wordpress-plugin", version: "dev-master",
256
+ source: { url: "https://bitbucket.org/goldencomm/wp-blocks-plugin.git", type: "git", reference: "master" },
257
+ },
258
+ },
259
+ );
260
+ c.require = c.require || {};
261
+ c.require["goldencomm/wp-theme"] = "dev-master";
262
+ c.require["goldencomm/wp-blocks-plugin"] = "dev-master";
263
+ });
264
+
265
+ // 3) .ddev project name
266
+ if (has(".ddev/config.yaml")) patch(".ddev/config.yaml", [[/^name:\s*.*$/m, `name: ${slug}`]]);
267
+
268
+ // 4) seed.sh — Composer installs the theme as "wp-theme"; site host follows the ddev name
269
+ if (has("scripts/seed.sh")) {
270
+ patch("scripts/seed.sh", [
271
+ [/baseline-wordpress\.ddev\.site/g, `${slug}.ddev.site`],
272
+ [/wp theme activate baseline\b/, "wp theme activate wp-theme"],
273
+ ]);
274
+ }
275
+
276
+ setReadmeTitle("README.md", slug);
277
+
278
+ nextSteps.push(
279
+ "WordPress scaffold rewired to install the theme + blocks plugin via Composer.",
280
+ "",
281
+ " IMPORTANT: goldencomm/wp-theme and goldencomm/wp-blocks-plugin are NOT published",
282
+ " as Composer packages yet — `composer install` currently requires monorepo/Bitbucket",
283
+ " VCS access (the Phase 6 repo split is still pending). Until then this scaffold only",
284
+ " resolves for GoldenComm developers with Bitbucket access + their own auth.json with",
285
+ " Composer creds (never copied by the scaffolder — add your own).",
286
+ "",
287
+ " Then: cd " + target + " && ddev start && ddev composer install && ddev exec bash scripts/seed.sh",
288
+ );
289
+ }
290
+
291
+ // ---- report ----------------------------------------------------------------
292
+ console.log(`\n✓ Scaffolded ${platform} baseline → ${target}`);
293
+ console.log(` name: ${cfg.kind === "composer" ? composerName : npmName} ds-version: ${dsVersion} files: ${source.files.length} (templates: ${source.mode})\n`);
294
+ console.log("Next steps:");
295
+ for (const line of nextSteps) console.log(" " + line);
296
+ console.log("");
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@goldencomm/create-baseline",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "description": "Scaffold a standalone GoldenComm Baseline project — Next.js app, Shopify OS 2.0 theme, or WordPress site — wired to the @goldencomm/ds-* design-system packages. Run as `npm create @goldencomm/baseline`.",
6
+ "bin": {
7
+ "create-baseline": "./index.mjs"
8
+ },
9
+ "files": [
10
+ "index.mjs",
11
+ "templates"
12
+ ],
13
+ "keywords": [
14
+ "create",
15
+ "scaffold",
16
+ "starter",
17
+ "design-system",
18
+ "baseline",
19
+ "nextjs",
20
+ "shopify",
21
+ "wordpress",
22
+ "goldencomm"
23
+ ],
24
+ "publishConfig": {
25
+ "access": "public"
26
+ },
27
+ "engines": {
28
+ "node": ">=20.0.0"
29
+ },
30
+ "author": "GoldenComm",
31
+ "license": "UNLICENSED",
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "git@bitbucket.org:goldencomm/design-system.git",
35
+ "directory": "tools/create-baseline"
36
+ },
37
+ "scripts": {
38
+ "build": "echo \"(no build — single zero-dep mjs entry)\"",
39
+ "clean": "node -e \"require('fs').rmSync('templates',{recursive:true,force:true})\"",
40
+ "lint": "echo \"(no lint yet)\"",
41
+ "typecheck": "echo \"(no TS in this package)\"",
42
+ "test": "echo \"(no tests yet)\""
43
+ }
44
+ }
@@ -0,0 +1,160 @@
1
+ ---
2
+ name: ai-elements
3
+ description: Build AI chat interfaces using ai-elements components — conversations, messages, tool displays, prompt inputs, and more. Use when the user wants to build a chatbot, AI assistant UI, or any AI-powered chat interface.
4
+ ---
5
+
6
+ # AI Elements
7
+
8
+ [AI Elements](https://www.npmjs.com/package/ai-elements) is a component library and custom registry built on top of [shadcn/ui](https://ui.shadcn.com/) to help you build AI-native applications faster. It provides pre-built components like conversations, messages and more.
9
+
10
+ Installing AI Elements is straightforward and can be done in a couple of ways. You can use the dedicated CLI command for the fastest setup, or integrate via the standard shadcn/ui CLI if you've already adopted shadcn's workflow.
11
+
12
+ > **IMPORTANT:** Run all CLI commands using the project's package runner: `npx ai-elements@latest`, `pnpm dlx ai-elements@latest`, or `bunx --bun ai-elements@latest` — based on the project's `packageManager`. Examples below use `npx ai-elements@latest` but substitute the correct runner for the project.
13
+
14
+ ## Prerequisites
15
+
16
+ Before installing AI Elements, make sure your environment meets the following requirements:
17
+
18
+ - [Node.js](https://nodejs.org/en/download/), version 18 or later
19
+ - A [Next.js](https://nextjs.org/) project with the [AI SDK](https://ai-sdk.dev/) installed.
20
+ - [shadcn/ui](https://ui.shadcn.com/) installed in your project. If you don't have it installed, running any install command will automatically install it for you.
21
+ - We also highly recommend using the [AI Gateway](https://vercel.com/docs/ai-gateway) and adding `AI_GATEWAY_API_KEY` to your `env.local` so you don't have to use an API key from every provider. AI Gateway also gives $5 in usage per month so you can experiment with models. You can obtain an API key [here](https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys&title=Get%20your%20AI%20Gateway%20key).
22
+
23
+ ## Installing Components
24
+
25
+ You can install AI Elements components using either the AI Elements CLI or the shadcn/ui CLI. Both achieve the same result: adding the selected component’s code and any needed dependencies to your project.
26
+
27
+ The CLI will download the component’s code and integrate it into your project’s directory (usually under your components folder). By default, AI Elements components are added to the `@/components/ai-elements/` directory (or whatever folder you’ve configured in your shadcn components settings).
28
+
29
+ After running the command, you should see a confirmation in your terminal that the files were added. You can then proceed to use the component in your code.
30
+
31
+ ## Usage
32
+
33
+ Once an AI Elements component is installed, you can import it and use it in your application like any other React component. The components are added as part of your codebase (not hidden in a library), so the usage feels very natural.
34
+
35
+ ## Example
36
+
37
+ After installing AI Elements components, you can use them in your application like any other React component. For example:
38
+
39
+ ```tsx title="conversation.tsx"
40
+ "use client";
41
+
42
+ import {
43
+ Message,
44
+ MessageContent,
45
+ MessageResponse,
46
+ } from "@/components/ai-elements/message";
47
+ import { useChat } from "@ai-sdk/react";
48
+
49
+ const Example = () => {
50
+ const { messages } = useChat();
51
+
52
+ return (
53
+ <>
54
+ {messages.map(({ role, parts }, index) => (
55
+ <Message from={role} key={index}>
56
+ <MessageContent>
57
+ {parts.map((part, i) => {
58
+ switch (part.type) {
59
+ case "text":
60
+ return (
61
+ <MessageResponse key={`${role}-${i}`}>
62
+ {part.text}
63
+ </MessageResponse>
64
+ );
65
+ }
66
+ })}
67
+ </MessageContent>
68
+ </Message>
69
+ ))}
70
+ </>
71
+ );
72
+ };
73
+
74
+ export default Example;
75
+ ```
76
+
77
+ In the example above, we import the `Message` component from our AI Elements directory and include it in our JSX. Then, we compose the component with the `MessageContent` and `MessageResponse` subcomponents. You can style or configure the component just as you would if you wrote it yourself – since the code lives in your project, you can even open the component file to see how it works or make custom modifications.
78
+
79
+ ## Extensibility
80
+
81
+ All AI Elements components take as many primitive attributes as possible. For example, the `Message` component extends `HTMLAttributes<HTMLDivElement>`, so you can pass any props that a `div` supports. This makes it easy to extend the component with your own styles or functionality.
82
+
83
+ ## Customization
84
+
85
+ After installation, no additional setup is needed. The component’s styles (Tailwind CSS classes) and scripts are already integrated. You can start interacting with the component in your app immediately.
86
+
87
+ For example, if you'd like to remove the rounding on `Message`, you can go to `components/ai-elements/message.tsx` and remove `rounded-lg` as follows:
88
+
89
+ ```tsx title="components/ai-elements/message.tsx" highlight="8"
90
+ export const MessageContent = ({
91
+ children,
92
+ className,
93
+ ...props
94
+ }: MessageContentProps) => (
95
+ <div
96
+ className={cn(
97
+ "flex flex-col gap-2 text-sm text-foreground",
98
+ "group-[.is-user]:bg-primary group-[.is-user]:text-primary-foreground group-[.is-user]:px-4 group-[.is-user]:py-3",
99
+ className
100
+ )}
101
+ {...props}
102
+ >
103
+ <div className="is-user:dark">{children}</div>
104
+ </div>
105
+ );
106
+ ```
107
+
108
+ ## Troubleshooting
109
+
110
+ ### Why are my components not styled?
111
+
112
+ Make sure your project is configured correctly for shadcn/ui in Tailwind 4 - this means having a `globals.css` file that imports Tailwind and includes the shadcn/ui base styles.
113
+
114
+ ### I ran the AI Elements CLI but nothing was added to my project
115
+
116
+ Double-check that:
117
+
118
+ - Your current working directory is the root of your project (where `package.json` lives).
119
+ - Your components.json file (if using shadcn-style config) is set up correctly.
120
+ - You’re using the latest version of the AI Elements CLI:
121
+
122
+ ```bash title="Terminal"
123
+ npx ai-elements@latest
124
+ ```
125
+
126
+ If all else fails, feel free to open an [issue on GitHub](https://github.com/vercel/ai-elements/issues).
127
+
128
+ ### Theme switching doesn’t work — my app stays in light mode
129
+
130
+ Ensure your app is using the same data-theme system that shadcn/ui and AI Elements expect. The default implementation toggles a data-theme attribute on the `<html>` element. Make sure your tailwind.config.js is using class or data- selectors accordingly.
131
+
132
+ ### The component imports fail with “module not found”
133
+
134
+ Check the file exists. If it does, make sure your `tsconfig.json` has a proper paths alias for `@/` i.e.
135
+
136
+ ```json title="tsconfig.json"
137
+ {
138
+ "compilerOptions": {
139
+ "baseUrl": ".",
140
+ "paths": {
141
+ "@/*": ["./*"]
142
+ }
143
+ }
144
+ }
145
+ ```
146
+
147
+ ### My AI coding assistant can't access AI Elements components
148
+
149
+ 1. Verify your config file syntax is valid JSON.
150
+ 2. Check that the file path is correct for your AI tool.
151
+ 3. Restart your coding assistant after making changes.
152
+ 4. Ensure you have a stable internet connection.
153
+
154
+ ### Still stuck?
155
+
156
+ If none of these answers help, open an [issue on GitHub](https://github.com/vercel/ai-elements/issues) and someone will be happy to assist.
157
+
158
+ ## Available Components
159
+
160
+ See the `references/` folder for detailed documentation on each component.