bsmnt 0.1.3 → 0.2.4

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 (407) hide show
  1. package/README.md +18 -18
  2. package/dist/configs/animations.d.ts +25 -0
  3. package/dist/configs/animations.d.ts.map +1 -0
  4. package/dist/configs/animations.js +29 -0
  5. package/dist/configs/animations.js.map +1 -0
  6. package/dist/helpers/add/hooks-config.d.ts +22 -0
  7. package/dist/helpers/add/hooks-config.d.ts.map +1 -0
  8. package/dist/helpers/add/hooks-config.js +37 -0
  9. package/dist/helpers/add/hooks-config.js.map +1 -0
  10. package/dist/helpers/add/index.d.ts +18 -0
  11. package/dist/helpers/add/index.d.ts.map +1 -0
  12. package/dist/helpers/add/index.js +152 -0
  13. package/dist/helpers/add/index.js.map +1 -0
  14. package/dist/helpers/create/copy-template.d.ts +11 -0
  15. package/dist/helpers/create/copy-template.d.ts.map +1 -0
  16. package/dist/helpers/create/copy-template.js +19 -0
  17. package/dist/helpers/create/copy-template.js.map +1 -0
  18. package/dist/helpers/create/index.d.ts +22 -0
  19. package/dist/helpers/create/index.d.ts.map +1 -0
  20. package/dist/helpers/create/index.js +81 -0
  21. package/dist/helpers/create/index.js.map +1 -0
  22. package/dist/helpers/create/install.d.ts +8 -0
  23. package/dist/helpers/create/install.d.ts.map +1 -0
  24. package/dist/helpers/create/install.js +20 -0
  25. package/dist/helpers/create/install.js.map +1 -0
  26. package/dist/helpers/create/rename-files.d.ts +10 -0
  27. package/dist/helpers/create/rename-files.d.ts.map +1 -0
  28. package/dist/helpers/create/rename-files.js +17 -0
  29. package/dist/helpers/create/rename-files.js.map +1 -0
  30. package/dist/helpers/create/setup-agent.d.ts +21 -0
  31. package/dist/helpers/create/setup-agent.d.ts.map +1 -0
  32. package/dist/helpers/create/setup-agent.js +65 -0
  33. package/dist/helpers/create/setup-agent.js.map +1 -0
  34. package/dist/helpers/create/setup-sanity.d.ts +23 -0
  35. package/dist/helpers/create/setup-sanity.d.ts.map +1 -0
  36. package/dist/helpers/create/setup-sanity.js +354 -0
  37. package/dist/helpers/create/setup-sanity.js.map +1 -0
  38. package/dist/helpers/create/update-package.d.ts +20 -0
  39. package/dist/helpers/create/update-package.d.ts.map +1 -0
  40. package/dist/helpers/create/update-package.js +87 -0
  41. package/dist/helpers/create/update-package.js.map +1 -0
  42. package/dist/helpers/integrate/index.d.ts +13 -0
  43. package/dist/helpers/integrate/index.d.ts.map +1 -0
  44. package/dist/helpers/integrate/index.js +204 -0
  45. package/dist/helpers/integrate/index.js.map +1 -0
  46. package/dist/helpers/integrate/merge-config.d.ts +21 -0
  47. package/dist/helpers/integrate/merge-config.d.ts.map +1 -0
  48. package/dist/helpers/integrate/merge-config.js +38 -0
  49. package/dist/helpers/integrate/merge-config.js.map +1 -0
  50. package/dist/helpers/integrate/merge-orchestrator.d.ts +10 -0
  51. package/dist/helpers/integrate/merge-orchestrator.d.ts.map +1 -0
  52. package/dist/helpers/integrate/merge-orchestrator.js +188 -0
  53. package/dist/helpers/integrate/merge-orchestrator.js.map +1 -0
  54. package/dist/helpers/integrate/sanity/config.d.ts +14 -0
  55. package/dist/helpers/integrate/sanity/config.d.ts.map +1 -0
  56. package/dist/helpers/integrate/sanity/config.js +38 -0
  57. package/dist/helpers/integrate/sanity/config.js.map +1 -0
  58. package/dist/helpers/integrate/sanity/mergers/check-integration-merger.d.ts +13 -0
  59. package/dist/helpers/integrate/sanity/mergers/check-integration-merger.d.ts.map +1 -0
  60. package/dist/helpers/integrate/sanity/mergers/check-integration-merger.js +84 -0
  61. package/dist/helpers/integrate/sanity/mergers/check-integration-merger.js.map +1 -0
  62. package/dist/helpers/integrate/sanity/mergers/layout-merger.d.ts +23 -0
  63. package/dist/helpers/integrate/sanity/mergers/layout-merger.d.ts.map +1 -0
  64. package/dist/helpers/integrate/sanity/mergers/layout-merger.js +161 -0
  65. package/dist/helpers/integrate/sanity/mergers/layout-merger.js.map +1 -0
  66. package/dist/helpers/integrate/sanity/mergers/sitemap-merger.d.ts +13 -0
  67. package/dist/helpers/integrate/sanity/mergers/sitemap-merger.d.ts.map +1 -0
  68. package/{packages/create-basement-app/src → dist/helpers/integrate/sanity}/mergers/sitemap-merger.js +33 -45
  69. package/dist/helpers/integrate/sanity/mergers/sitemap-merger.js.map +1 -0
  70. package/dist/index.d.ts +3 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +337 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/paths.d.ts +14 -0
  75. package/dist/paths.d.ts.map +1 -0
  76. package/dist/paths.js +24 -0
  77. package/dist/paths.js.map +1 -0
  78. package/dist/utils/detect-project.d.ts +40 -0
  79. package/dist/utils/detect-project.d.ts.map +1 -0
  80. package/dist/utils/detect-project.js +69 -0
  81. package/dist/utils/detect-project.js.map +1 -0
  82. package/dist/utils/format-results.d.ts +24 -0
  83. package/dist/utils/format-results.d.ts.map +1 -0
  84. package/dist/utils/format-results.js +27 -0
  85. package/dist/utils/format-results.js.map +1 -0
  86. package/index.js +25 -0
  87. package/package.json +40 -15
  88. package/{packages/create-basement-app/templates/experiment → src/templates/next-default}/app/layout.tsx +18 -18
  89. package/src/templates/next-default/app/page.tsx +11 -0
  90. package/{packages/create-basement-app/templates/experiment → src/templates/next-default}/app/robots.ts +3 -3
  91. package/{packages/create-basement-app/templates/webgl → src/templates/next-default}/app/sitemap.ts +4 -4
  92. package/{packages/create-basement-app/templates/default → src/templates/next-default}/biome.json +2 -2
  93. package/{packages/create-basement-app/templates/webgl → src/templates/next-default}/components/layout/footer/index.tsx +5 -1
  94. package/{packages/create-basement-app/templates/webgl → src/templates/next-default}/components/layout/header/index.tsx +1 -3
  95. package/{packages/create-basement-app/templates/default → src/templates/next-default}/components/layout/theme/index.tsx +1 -1
  96. package/{packages/create-basement-app/templates/default → src/templates/next-default}/components/layout/wrapper/index.tsx +0 -2
  97. package/{packages/create-basement-app/templates/webgl → src/templates/next-default}/components/ui/image/index.tsx +6 -11
  98. package/{packages/create-basement-app/templates/experiment → src/templates/next-default}/components/ui/link/index.tsx +39 -33
  99. package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/metadata.ts +26 -26
  100. package/{packages/create-basement-app/templates/default → src/templates/next-default}/package.json +4 -4
  101. package/{packages/create-basement-app/templates/webgl → src/templates/next-experiments}/app/layout.tsx +18 -18
  102. package/{packages/create-basement-app/templates/webgl → src/templates/next-experiments}/app/robots.ts +3 -3
  103. package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/sitemap.ts +4 -4
  104. package/{packages/create-basement-app/templates/webgl → src/templates/next-experiments}/biome.json +2 -2
  105. package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/layout/theme/index.tsx +1 -1
  106. package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/layout/wrapper/index.tsx +7 -9
  107. package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/ui/image/index.tsx +39 -46
  108. package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/ui/link/index.tsx +6 -0
  109. package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/metadata.ts +26 -26
  110. package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/package.json +4 -4
  111. package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/app/layout.tsx +18 -18
  112. package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/app/robots.ts +3 -3
  113. package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/app/sitemap.ts +4 -4
  114. package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/biome.json +2 -2
  115. package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/layout/theme/index.tsx +1 -1
  116. package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/layout/wrapper/index.tsx +0 -2
  117. package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/components/ui/image/index.tsx +6 -11
  118. package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/ui/link/index.tsx +9 -2
  119. package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/webgl/components/scene/index.tsx +1 -0
  120. package/src/templates/next-webgl/lib/renderer.ts +7 -0
  121. package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/metadata.ts +26 -26
  122. package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/package.json +4 -4
  123. package/packages/cli/bin/index.js +0 -259
  124. package/packages/cli/src/commands/add-integration.js +0 -310
  125. package/packages/cli/src/commands/create.js +0 -409
  126. package/packages/cli/src/commands/setup-sanity.js +0 -426
  127. package/packages/cli/src/commands/worktree.js +0 -805
  128. package/packages/create-basement-app/integrations/sanity/config.js +0 -46
  129. package/packages/create-basement-app/integrations/sanity/files/app/api/draft-mode/disable/route.ts +0 -7
  130. package/packages/create-basement-app/integrations/sanity/files/app/api/draft-mode/enable/route.ts +0 -21
  131. package/packages/create-basement-app/integrations/sanity/files/app/api/revalidate/route.ts +0 -37
  132. package/packages/create-basement-app/integrations/sanity/files/app/layout.tsx +0 -111
  133. package/packages/create-basement-app/integrations/sanity/files/app/sitemap.ts +0 -80
  134. package/packages/create-basement-app/integrations/sanity/files/app/studio/[[...tool]]/page.tsx +0 -8
  135. package/packages/create-basement-app/integrations/sanity/files/app/studio/layout.tsx +0 -7
  136. package/packages/create-basement-app/integrations/sanity/files/components/ui/sanity-image/index.tsx +0 -37
  137. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/README.md +0 -58
  138. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/check-integration.ts +0 -62
  139. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/README.md +0 -144
  140. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/client.ts +0 -30
  141. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/components/disable-draft-mode.tsx +0 -29
  142. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/components/rich-text.tsx +0 -73
  143. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/env.ts +0 -38
  144. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/live/index.tsx +0 -34
  145. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/queries.ts +0 -99
  146. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/sanity.cli.ts +0 -20
  147. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/sanity.config.ts +0 -94
  148. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/sanity.types.ts +0 -337
  149. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schema.json +0 -1850
  150. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/article.ts +0 -132
  151. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/example.ts +0 -203
  152. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/index.ts +0 -37
  153. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/link.ts +0 -127
  154. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/metadata.ts +0 -68
  155. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/navigation.ts +0 -39
  156. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/page.ts +0 -77
  157. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/richText.ts +0 -59
  158. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/structure.ts +0 -5
  159. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/utils/image.ts +0 -11
  160. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/utils/link.ts +0 -61
  161. package/packages/create-basement-app/integrations/sanity/files/lib/scripts/copy-sanity-mcp.ts +0 -23
  162. package/packages/create-basement-app/integrations/sanity/files/lib/scripts/generate-page.ts +0 -310
  163. package/packages/create-basement-app/integrations/sanity/files/lib/utils/metadata.ts +0 -190
  164. package/packages/create-basement-app/integrations/sanity/mergers/check-integration-merger.js +0 -105
  165. package/packages/create-basement-app/integrations/sanity/mergers/layout-merger.js +0 -223
  166. package/packages/create-basement-app/integrations/sanity/mergers/sitemap-merger.js +0 -121
  167. package/packages/create-basement-app/package.json +0 -10
  168. package/packages/create-basement-app/src/configs/animations.js +0 -28
  169. package/packages/create-basement-app/src/index.js +0 -15
  170. package/packages/create-basement-app/src/mergers/check-integration-merger.js +0 -105
  171. package/packages/create-basement-app/src/mergers/config.js +0 -109
  172. package/packages/create-basement-app/src/mergers/index.js +0 -346
  173. package/packages/create-basement-app/src/mergers/layout-merger.js +0 -223
  174. package/packages/create-basement-app/templates/default/.cursor/rules/README.md +0 -184
  175. package/packages/create-basement-app/templates/default/.cursor/rules/architecture.mdc +0 -437
  176. package/packages/create-basement-app/templates/default/.cursor/rules/components.mdc +0 -436
  177. package/packages/create-basement-app/templates/default/.cursor/rules/integrations.mdc +0 -447
  178. package/packages/create-basement-app/templates/default/.cursor/rules/main.mdc +0 -278
  179. package/packages/create-basement-app/templates/default/.cursor/rules/styling.mdc +0 -433
  180. package/packages/create-basement-app/templates/default/.github/workflows/lighthouse-to-slack.yml +0 -136
  181. package/packages/create-basement-app/templates/experiment/.cursor/rules/README.md +0 -184
  182. package/packages/create-basement-app/templates/experiment/.cursor/rules/architecture.mdc +0 -437
  183. package/packages/create-basement-app/templates/experiment/.cursor/rules/components.mdc +0 -436
  184. package/packages/create-basement-app/templates/experiment/.cursor/rules/integrations.mdc +0 -447
  185. package/packages/create-basement-app/templates/experiment/.cursor/rules/main.mdc +0 -278
  186. package/packages/create-basement-app/templates/experiment/.cursor/rules/styling.mdc +0 -433
  187. package/packages/create-basement-app/templates/experiment/.github/workflows/lighthouse-to-slack.yml +0 -136
  188. package/packages/create-basement-app/templates/experiment/app/page.tsx +0 -275
  189. package/packages/create-basement-app/templates/webgl/.biome/plugins/README.md +0 -21
  190. package/packages/create-basement-app/templates/webgl/.cursor/rules/README.md +0 -184
  191. package/packages/create-basement-app/templates/webgl/.cursor/rules/architecture.mdc +0 -437
  192. package/packages/create-basement-app/templates/webgl/.cursor/rules/components.mdc +0 -436
  193. package/packages/create-basement-app/templates/webgl/.cursor/rules/integrations.mdc +0 -447
  194. package/packages/create-basement-app/templates/webgl/.cursor/rules/main.mdc +0 -278
  195. package/packages/create-basement-app/templates/webgl/.cursor/rules/styling.mdc +0 -433
  196. package/packages/create-basement-app/templates/webgl/.github/workflows/lighthouse-to-slack.yml +0 -136
  197. /package/{packages/create-basement-app/plugins → plugins}/no-anchor-element.grit +0 -0
  198. /package/{packages/create-basement-app/plugins → plugins}/no-relative-parent-imports.grit +0 -0
  199. /package/{packages/create-basement-app/plugins → plugins}/no-unnecessary-forwardref.grit +0 -0
  200. /package/{packages/create-basement-app → src}/template-hooks/config.js +0 -0
  201. /package/{packages/create-basement-app → src}/template-hooks/use-battery.ts +0 -0
  202. /package/{packages/create-basement-app → src}/template-hooks/use-device-perf.ts +0 -0
  203. /package/{packages/create-basement-app → src}/template-hooks/use-intersection-observer.ts +0 -0
  204. /package/{packages/create-basement-app → src}/template-hooks/use-media.ts +0 -0
  205. /package/{packages/create-basement-app → src/templates/next-default/.biome}/plugins/README.md +0 -0
  206. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.biome/plugins/no-anchor-element.grit +0 -0
  207. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.biome/plugins/no-relative-parent-imports.grit +0 -0
  208. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.biome/plugins/no-unnecessary-forwardref.grit +0 -0
  209. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.editorconfig +0 -0
  210. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.env.example +0 -0
  211. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.gitattributes +0 -0
  212. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  213. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.vscode/extensions.json +0 -0
  214. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.vscode/settings.json +0 -0
  215. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/README.md +0 -0
  216. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/_gitignore +0 -0
  217. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/app/favicon.ico +0 -0
  218. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/components/basement.svg +0 -0
  219. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/components/ui/README.md +0 -0
  220. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/components/ui/image/README.md +0 -0
  221. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/README.md +0 -0
  222. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/index.ts +0 -0
  223. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/use-device-detection.ts +0 -0
  224. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/use-media-breakpoint.ts +0 -0
  225. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/use-prefetch.ts +0 -0
  226. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/integrations/.gitkeep +0 -0
  227. /package/{packages/create-basement-app/templates/webgl → src/templates/next-default}/lib/renderer.ts +0 -0
  228. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/dev.ts +0 -0
  229. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/generate-component.ts +0 -0
  230. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/generate-page.ts +0 -0
  231. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/generate.ts +0 -0
  232. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/utils.ts +0 -0
  233. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/store/app.ts +0 -0
  234. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/store/index.ts +0 -0
  235. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/README.md +0 -0
  236. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/cn.ts +0 -0
  237. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/colors.ts +0 -0
  238. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/config.ts +0 -0
  239. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/global.css +0 -0
  240. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/index.css +0 -0
  241. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/reset.css +0 -0
  242. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/root.css +0 -0
  243. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/tailwind.css +0 -0
  244. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/easings.ts +0 -0
  245. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/fonts.ts +0 -0
  246. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/index.ts +0 -0
  247. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/layout.mjs +0 -0
  248. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/README.md +0 -0
  249. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/generate-root.ts +0 -0
  250. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/generate-tailwind.ts +0 -0
  251. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/postcss-functions.mjs +0 -0
  252. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/setup-styles.ts +0 -0
  253. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/utils.ts +0 -0
  254. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/typography.ts +0 -0
  255. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/README.md +0 -0
  256. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/css.d.ts +0 -0
  257. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/easings.ts +0 -0
  258. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/fetch.ts +0 -0
  259. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/math.test.ts +0 -0
  260. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/math.ts +0 -0
  261. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/strings.test.ts +0 -0
  262. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/strings.ts +0 -0
  263. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/types.d.ts +0 -0
  264. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/viewport.test.ts +0 -0
  265. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/viewport.ts +0 -0
  266. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/next.config.ts +0 -0
  267. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/postcss.config.mjs +0 -0
  268. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/public/fonts/geist/Geist-Mono.woff2 +0 -0
  269. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/tsconfig.json +0 -0
  270. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.biome/plugins/README.md +0 -0
  271. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.biome/plugins/no-anchor-element.grit +0 -0
  272. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.biome/plugins/no-relative-parent-imports.grit +0 -0
  273. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.biome/plugins/no-unnecessary-forwardref.grit +0 -0
  274. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.editorconfig +0 -0
  275. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.env.example +0 -0
  276. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.gitattributes +0 -0
  277. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  278. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.vscode/extensions.json +0 -0
  279. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.vscode/settings.json +0 -0
  280. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/README.md +0 -0
  281. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/_gitignore +0 -0
  282. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/app/favicon.ico +0 -0
  283. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/page.tsx +0 -0
  284. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/basement.svg +0 -0
  285. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/layout/footer/index.tsx +0 -0
  286. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/layout/header/index.tsx +0 -0
  287. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/layout/navigation-menu.tsx +0 -0
  288. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/ui/README.md +0 -0
  289. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/ui/image/README.md +0 -0
  290. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/README.md +0 -0
  291. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/constants.ts +0 -0
  292. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/index.ts +0 -0
  293. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/use-device-detection.ts +0 -0
  294. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/use-media-breakpoint.ts +0 -0
  295. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/use-prefetch.ts +0 -0
  296. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/integrations/.gitkeep +0 -0
  297. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/dev.ts +0 -0
  298. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/generate-component.ts +0 -0
  299. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/generate-page.ts +0 -0
  300. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/generate.ts +0 -0
  301. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/utils.ts +0 -0
  302. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/store/app.ts +0 -0
  303. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/store/index.ts +0 -0
  304. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/README.md +0 -0
  305. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/cn.ts +0 -0
  306. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/colors.ts +0 -0
  307. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/config.ts +0 -0
  308. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/global.css +0 -0
  309. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/index.css +0 -0
  310. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/reset.css +0 -0
  311. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/root.css +0 -0
  312. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/tailwind.css +0 -0
  313. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/easings.ts +0 -0
  314. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/fonts.ts +0 -0
  315. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/index.ts +0 -0
  316. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/layout.mjs +0 -0
  317. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/README.md +0 -0
  318. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/generate-root.ts +0 -0
  319. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/generate-tailwind.ts +0 -0
  320. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/postcss-functions.mjs +0 -0
  321. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/setup-styles.ts +0 -0
  322. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/utils.ts +0 -0
  323. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/typography.ts +0 -0
  324. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/README.md +0 -0
  325. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/css.d.ts +0 -0
  326. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/easings.ts +0 -0
  327. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/fetch.ts +0 -0
  328. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/math.test.ts +0 -0
  329. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/math.ts +0 -0
  330. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/strings.test.ts +0 -0
  331. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/strings.ts +0 -0
  332. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/types.d.ts +0 -0
  333. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/viewport.test.ts +0 -0
  334. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/viewport.ts +0 -0
  335. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/next.config.ts +0 -0
  336. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/postcss.config.mjs +0 -0
  337. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/public/fonts/geist/Geist-Mono.woff2 +0 -0
  338. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/tsconfig.json +0 -0
  339. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.biome/plugins/README.md +0 -0
  340. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.biome/plugins/no-anchor-element.grit +0 -0
  341. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.biome/plugins/no-relative-parent-imports.grit +0 -0
  342. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.biome/plugins/no-unnecessary-forwardref.grit +0 -0
  343. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.editorconfig +0 -0
  344. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.env.example +0 -0
  345. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.gitattributes +0 -0
  346. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  347. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.vscode/extensions.json +0 -0
  348. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.vscode/settings.json +0 -0
  349. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/README.md +0 -0
  350. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/_gitignore +0 -0
  351. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/app/favicon.ico +0 -0
  352. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/app/page.tsx +0 -0
  353. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/basement.svg +0 -0
  354. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/layout/footer/index.tsx +0 -0
  355. /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/components/layout/header/index.tsx +0 -0
  356. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/ui/README.md +0 -0
  357. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/ui/image/README.md +0 -0
  358. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/webgl/canvas/dynamic.tsx +0 -0
  359. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/webgl/canvas/index.tsx +0 -0
  360. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/README.md +0 -0
  361. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/index.ts +0 -0
  362. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/use-device-detection.ts +0 -0
  363. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/use-media-breakpoint.ts +0 -0
  364. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/use-prefetch.ts +0 -0
  365. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/integrations/.gitkeep +0 -0
  366. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/dev.ts +0 -0
  367. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/generate-component.ts +0 -0
  368. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/generate-page.ts +0 -0
  369. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/generate.ts +0 -0
  370. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/utils.ts +0 -0
  371. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/store/app.ts +0 -0
  372. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/store/index.ts +0 -0
  373. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/README.md +0 -0
  374. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/cn.ts +0 -0
  375. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/colors.ts +0 -0
  376. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/config.ts +0 -0
  377. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/global.css +0 -0
  378. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/index.css +0 -0
  379. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/reset.css +0 -0
  380. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/root.css +0 -0
  381. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/tailwind.css +0 -0
  382. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/easings.ts +0 -0
  383. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/fonts.ts +0 -0
  384. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/index.ts +0 -0
  385. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/layout.mjs +0 -0
  386. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/README.md +0 -0
  387. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/generate-root.ts +0 -0
  388. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/generate-tailwind.ts +0 -0
  389. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/postcss-functions.mjs +0 -0
  390. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/setup-styles.ts +0 -0
  391. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/utils.ts +0 -0
  392. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/typography.ts +0 -0
  393. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/README.md +0 -0
  394. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/css.d.ts +0 -0
  395. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/easings.ts +0 -0
  396. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/fetch.ts +0 -0
  397. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/math.test.ts +0 -0
  398. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/math.ts +0 -0
  399. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/strings.test.ts +0 -0
  400. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/strings.ts +0 -0
  401. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/types.d.ts +0 -0
  402. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/viewport.test.ts +0 -0
  403. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/viewport.ts +0 -0
  404. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/next.config.ts +0 -0
  405. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/postcss.config.mjs +0 -0
  406. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/public/fonts/geist/Geist-Mono.woff2 +0 -0
  407. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/tsconfig.json +0 -0
@@ -1,46 +0,0 @@
1
- // packages/create-basement-app/integrations/sanity/config.js
2
-
3
- /**
4
- * Sanity integration configuration manifest.
5
- * Single source of truth for dependencies, scripts, paths, and merge rules.
6
- */
7
- export const sanityConfig = {
8
- name: "sanity",
9
-
10
- dependencies: {
11
- "@sanity/asset-utils": "^2.3.0",
12
- "@sanity/image-url": "^2.0.3",
13
- "@sanity/visual-editing": "^5.1.1",
14
- "@sanity/vision": "^5.7.0",
15
- "next-sanity": "^12.0.14",
16
- },
17
-
18
- devDependencies: {
19
- sanity: "^5.6.0",
20
- },
21
-
22
- scripts: {
23
- "sanity:extract":
24
- "cd lib/integrations/sanity && bun --env-file ../../../.env.local sanity schema extract",
25
- "sanity:typegen":
26
- "cd lib/integrations/sanity && bun --env-file ../../../.env.local sanity typegen generate && bun biome check --write --unsafe",
27
- },
28
-
29
- additivePaths: [
30
- "lib/integrations/sanity",
31
- "components/ui/sanity-image",
32
- "app/api/draft-mode",
33
- "app/api/revalidate",
34
- "app/studio",
35
- "lib/utils/metadata.ts",
36
- "lib/scripts/generate-page.ts",
37
- "lib/scripts/copy-sanity-mcp.ts",
38
- "lib/integrations/README.md",
39
- ],
40
-
41
- mergeFiles: [
42
- "app/layout.tsx",
43
- "app/sitemap.ts",
44
- "lib/integrations/check-integration.ts",
45
- ],
46
- };
@@ -1,7 +0,0 @@
1
- import { draftMode } from "next/headers";
2
- import { type NextRequest, NextResponse } from "next/server";
3
-
4
- export async function GET(request: NextRequest) {
5
- (await draftMode()).disable();
6
- return NextResponse.redirect(new URL("/", request.url));
7
- }
@@ -1,21 +0,0 @@
1
- import { NextResponse } from "next/server";
2
- import { defineEnableDraftMode } from "next-sanity/draft-mode";
3
- import { isSanityConfigured } from "@/lib/integrations/check-integration";
4
- import { client } from "@/lib/integrations/sanity/client";
5
- import { privateToken } from "@/lib/integrations/sanity/env";
6
-
7
- // Only enable draft mode if Sanity is configured
8
- const draftModeHandler =
9
- isSanityConfigured() && client
10
- ? defineEnableDraftMode({
11
- client: client.withConfig({ token: privateToken }),
12
- })
13
- : {
14
- GET: () =>
15
- NextResponse.json(
16
- { error: "Sanity is not configured" },
17
- { status: 503 },
18
- ),
19
- };
20
-
21
- export const { GET } = draftModeHandler;
@@ -1,37 +0,0 @@
1
- import { revalidateTag } from "next/cache";
2
- import { type NextRequest, NextResponse } from "next/server";
3
- import { parseBody } from "next-sanity/webhook";
4
-
5
- export async function POST(request: NextRequest) {
6
- try {
7
- const { body, isValidSignature } = await parseBody<{
8
- _type: string;
9
- slug?: { current: string };
10
- }>(request, process.env.SANITY_REVALIDATE_SECRET);
11
-
12
- if (!isValidSignature) {
13
- return new Response("Invalid signature", { status: 401 });
14
- }
15
-
16
- if (!body?._type) {
17
- return new Response("Bad Request", { status: 400 });
18
- }
19
-
20
- // Revalidate the specific document type
21
- revalidateTag(body._type);
22
-
23
- // If there's a slug, revalidate the specific page
24
- if (body.slug?.current) {
25
- revalidateTag(`${body._type}:${body.slug.current}`);
26
- }
27
-
28
- return NextResponse.json({
29
- status: 200,
30
- revalidated: true,
31
- now: Date.now(),
32
- });
33
- } catch (error) {
34
- console.error("Revalidation error:", error);
35
- return new Response("Internal Server Error", { status: 500 });
36
- }
37
- }
@@ -1,111 +0,0 @@
1
- import type { Metadata, Viewport } from "next";
2
- import { Geist } from "next/font/google";
3
- import { type PropsWithChildren, Suspense } from "react";
4
- import { SanityStudioGuard } from "@/components/sanity/studio-guard";
5
- import { SanityVisualEditing } from "@/components/sanity/visual-editing";
6
- import { Link } from "@/components/ui/link";
7
- import { themes } from "@/lib/styles/colors";
8
- import { fontsVariable } from "@/lib/styles/fonts";
9
- import AppData from "@/package.json";
10
- import "@/lib/styles/css/index.css";
11
- import { cn } from "@/lib/styles/cn";
12
-
13
- const APP_NAME = AppData.name;
14
- const APP_DEFAULT_TITLE = "Basement Starter";
15
- const APP_TITLE_TEMPLATE = "%s - Basement Starter";
16
- const APP_DESCRIPTION = AppData.description;
17
- const APP_BASE_URL =
18
- process.env.NEXT_PUBLIC_BASE_URL ?? "https://localhost:3000";
19
-
20
- const geist = Geist({
21
- subsets: ["latin"],
22
- });
23
-
24
- export const metadata: Metadata = {
25
- alternates: {
26
- canonical: "/",
27
- languages: {
28
- "en-US": "/en-US",
29
- },
30
- },
31
- appleWebApp: {
32
- capable: true,
33
- statusBarStyle: "default",
34
- title: APP_DEFAULT_TITLE,
35
- },
36
- applicationName: APP_NAME,
37
- authors: [{ name: "basement.studio", url: "https://basement.studio" }],
38
- description: APP_DESCRIPTION,
39
- formatDetection: { telephone: false },
40
- metadataBase: new URL(APP_BASE_URL),
41
- openGraph: {
42
- description: APP_DESCRIPTION,
43
- images: [
44
- {
45
- alt: APP_DEFAULT_TITLE,
46
- height: 630,
47
- url: "/opengraph-image.jpg",
48
- width: 1200,
49
- },
50
- ],
51
- locale: "en_US",
52
- siteName: APP_NAME,
53
- title: {
54
- default: APP_DEFAULT_TITLE,
55
- template: APP_TITLE_TEMPLATE,
56
- },
57
- type: "website",
58
- url: APP_BASE_URL,
59
- },
60
- other: {
61
- "fb:app_id": process.env.NEXT_PUBLIC_FACEBOOK_APP_ID || "",
62
- },
63
- title: {
64
- default: APP_DEFAULT_TITLE,
65
- template: APP_TITLE_TEMPLATE,
66
- },
67
- twitter: {
68
- card: "summary_large_image",
69
- description: APP_DESCRIPTION,
70
- title: {
71
- default: APP_DEFAULT_TITLE,
72
- template: APP_TITLE_TEMPLATE,
73
- },
74
- },
75
- };
76
-
77
- export const viewport: Viewport = {
78
- colorScheme: "normal",
79
- themeColor: themes.dark.primary,
80
- };
81
-
82
- export default function Layout({ children }: PropsWithChildren) {
83
- return (
84
- <html
85
- lang="en"
86
- dir="ltr"
87
- className={cn(fontsVariable, geist.className)}
88
- suppressHydrationWarning
89
- >
90
- <body>
91
- <Suspense fallback={null}>
92
- <SanityStudioGuard>
93
- {/* Skip link for keyboard navigation accessibility */}
94
- <Suspense fallback={null}>
95
- <Link
96
- href="#main-content"
97
- className="sr-only focus:not-sr-only focus:fixed focus:top-4 focus:left-4 focus:z-9999 focus:rounded focus:bg-black focus:px-4 focus:py-2 focus:text-white focus:outline-none focus:ring-2 focus:ring-white"
98
- >
99
- Skip to main content
100
- </Link>
101
- </Suspense>
102
- </SanityStudioGuard>
103
- </Suspense>
104
-
105
- {children}
106
-
107
- <SanityVisualEditing />
108
- </body>
109
- </html>
110
- );
111
- }
@@ -1,80 +0,0 @@
1
- import type { MetadataRoute } from "next";
2
- import { isSanityConfigured } from "@/lib/integrations/check-integration";
3
-
4
- const APP_BASE_URL =
5
- process.env.NEXT_PUBLIC_BASE_URL ?? "https://localhost:3000";
6
-
7
- export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
8
- const baseRoutes: MetadataRoute.Sitemap = [
9
- {
10
- url: APP_BASE_URL,
11
- lastModified: new Date(),
12
- changeFrequency: "daily",
13
- priority: 1,
14
- },
15
- ];
16
-
17
- // Only fetch Sanity pages if Sanity is configured
18
- if (isSanityConfigured()) {
19
- try {
20
- const sanityModule = await import("@/lib/integrations/sanity/client");
21
- const sanityGroq = await import("next-sanity");
22
-
23
- const client = sanityModule?.client;
24
- const groq = sanityGroq?.groq;
25
-
26
- // Skip if client is null (shouldn't happen since we check isSanityConfigured)
27
- if (!(client && groq)) return baseRoutes;
28
-
29
- type SanityDocument = {
30
- slug: { current: string };
31
- _updatedAt: string;
32
- metadata?: { noIndex?: boolean };
33
- };
34
-
35
- // Fetch all published pages and articles
36
- const pages = (await client.fetch(
37
- groq`*[_type == "page" && defined(slug.current)] {
38
- slug,
39
- _updatedAt,
40
- metadata
41
- }`,
42
- )) as SanityDocument[];
43
-
44
- const articles = (await client.fetch(
45
- groq`*[_type == "article" && defined(slug.current)] {
46
- slug,
47
- _updatedAt,
48
- metadata
49
- }`,
50
- )) as SanityDocument[];
51
-
52
- // Add pages to sitemap (exclude noIndex pages)
53
- const pageEntries: MetadataRoute.Sitemap = pages
54
- .filter((page: SanityDocument) => !page.metadata?.noIndex)
55
- .map((page: SanityDocument) => ({
56
- url: `${APP_BASE_URL}/${page.slug.current}`,
57
- lastModified: new Date(page._updatedAt),
58
- changeFrequency: "weekly" as const,
59
- priority: 0.8,
60
- }));
61
-
62
- // Add articles to sitemap (exclude noIndex articles)
63
- const articleEntries: MetadataRoute.Sitemap = articles
64
- .filter((article: SanityDocument) => !article.metadata?.noIndex)
65
- .map((article: SanityDocument) => ({
66
- url: `${APP_BASE_URL}/blog/${article.slug.current}`,
67
- lastModified: new Date(article._updatedAt),
68
- changeFrequency: "weekly" as const,
69
- priority: 0.7,
70
- }));
71
-
72
- return [...baseRoutes, ...pageEntries, ...articleEntries];
73
- } catch (error) {
74
- console.error("Error generating sitemap from Sanity:", error);
75
- return baseRoutes;
76
- }
77
- }
78
-
79
- return baseRoutes;
80
- }
@@ -1,8 +0,0 @@
1
- "use client";
2
-
3
- import { NextStudio } from "next-sanity/studio";
4
- import config from "@/lib/integrations/sanity/sanity.config";
5
-
6
- export default function StudioPage() {
7
- return <NextStudio config={config} />;
8
- }
@@ -1,7 +0,0 @@
1
- export default function StudioLayout({
2
- children,
3
- }: {
4
- children: React.ReactNode;
5
- }) {
6
- return children;
7
- }
@@ -1,37 +0,0 @@
1
- import { getImageDimensions } from "@sanity/asset-utils";
2
- import { Image, type ImageProps } from "@/components/ui/image";
3
- import { urlForImage } from "@/lib/integrations/sanity/utils/image";
4
-
5
- interface SanityImageProps extends Omit<ImageProps, "src" | "aspectRatio"> {
6
- image: {
7
- asset: {
8
- _ref: string;
9
- _type: "reference";
10
- };
11
- alt?: string;
12
- hotspot?: object;
13
- crop?: object;
14
- };
15
- maxWidth?: number;
16
- }
17
-
18
- export function SanityImage({
19
- image,
20
- maxWidth = 1920,
21
- alt,
22
- ...props
23
- }: SanityImageProps) {
24
- if (!image?.asset) return null;
25
-
26
- const { width, height } = getImageDimensions(image.asset);
27
- const aspectRatio = width / height;
28
-
29
- return (
30
- <Image
31
- src={urlForImage(image).width(maxWidth).url()}
32
- alt={alt || image.alt || ""}
33
- aspectRatio={aspectRatio}
34
- {...props}
35
- />
36
- );
37
- }
@@ -1,58 +0,0 @@
1
- # Integrations
2
-
3
- Third-party service integrations. All are optional—remove unused ones with `bun run setup:project`.
4
-
5
- ## Available Integrations
6
-
7
- | Integration | Purpose | Documentation |
8
- |-------------|---------|---------------|
9
- | [Sanity](sanity/README.md) | Headless CMS | Visual editing, content management |
10
- | [Shopify](shopify/README.md) | E-commerce | Cart, products, checkout |
11
-
12
- ## Environment Variables
13
-
14
- ```env
15
- # Sanity CMS
16
- NEXT_PUBLIC_SANITY_PROJECT_ID="your-project-id"
17
- NEXT_PUBLIC_SANITY_DATASET="production"
18
- NEXT_PUBLIC_SANITY_STUDIO_URL="http://localhost:3000/studio"
19
- SANITY_API_WRITE_TOKEN="your-write-token"
20
-
21
- # Shopify
22
- SHOPIFY_STORE_DOMAIN="your-store.myshopify.com"
23
- SHOPIFY_STOREFRONT_ACCESS_TOKEN="your-token"
24
- SHOPIFY_REVALIDATION_SECRET="your-secret"
25
-
26
- # Analytics
27
- NEXT_PUBLIC_GOOGLE_TAG_MANAGER_ID=GTM-XXXXXX
28
- NEXT_PUBLIC_GOOGLE_ANALYTICS=G-XXXXXXXXXX
29
- ```
30
-
31
- ## Quick Usage
32
-
33
- ```tsx
34
- // Sanity
35
- import { sanityFetch } from '@/integrations/sanity/live'
36
- import { RichText } from '@/integrations/sanity/components/rich-text'
37
- const { data } = await sanityFetch({ query: pageQuery })
38
-
39
- // Shopify
40
- import { Cart, AddToCart } from '@/lib/integrations/shopify/cart'
41
- <Cart><AddToCart product={product} /></Cart>
42
-
43
- ```
44
-
45
- ## Removing Integrations
46
-
47
- Run `bun run setup:project` for interactive removal, or manually:
48
-
49
- ```bash
50
- # Sanity (~150-200KB savings)
51
- rm -rf lib/integrations/sanity app/studio app/(examples)/sanity
52
- bun remove @sanity/asset-utils @sanity/image-url next-sanity sanity
53
-
54
- # Shopify (~50-80KB)
55
- rm -rf lib/integrations/shopify app/(examples)/shopify
56
- ```
57
-
58
- After removal: `bun lint:fix && bun build`
@@ -1,62 +0,0 @@
1
- /**
2
- * Integration Configuration Checker
3
- *
4
- * Utilities to check if integrations are configured via environment variables.
5
- * This helps with tree-shaking unused integrations from the bundle.
6
- *
7
- * Usage:
8
- * ```ts
9
- * import { isSanityConfigured } from '@/integrations/check-integration'
10
- *
11
- * if (isSanityConfigured()) {
12
- * // Only import and use Sanity code if configured
13
- * const { sanityFetch } = await import('next-sanity/live')
14
- * }
15
- * ```
16
- */
17
-
18
- /**
19
- * Check if Sanity CMS is configured
20
- * Requires: NEXT_PUBLIC_SANITY_PROJECT_ID and NEXT_PUBLIC_SANITY_DATASET
21
- */
22
- export function isSanityConfigured(): boolean {
23
- return Boolean(
24
- process.env.NEXT_PUBLIC_SANITY_PROJECT_ID &&
25
- process.env.NEXT_PUBLIC_SANITY_DATASET,
26
- );
27
- }
28
-
29
- /**
30
- * Check if Google Analytics is configured
31
- * Requires: NEXT_PUBLIC_GOOGLE_ANALYTICS or NEXT_PUBLIC_GOOGLE_TAG_MANAGER_ID
32
- */
33
- export function isAnalyticsConfigured(): boolean {
34
- return Boolean(
35
- process.env.NEXT_PUBLIC_GOOGLE_ANALYTICS ||
36
- process.env.NEXT_PUBLIC_GOOGLE_TAG_MANAGER_ID,
37
- );
38
- }
39
-
40
- /**
41
- * Get a list of all configured integrations
42
- */
43
- export function getConfiguredIntegrations(): string[] {
44
- const integrations: string[] = [];
45
-
46
- if (isSanityConfigured()) integrations.push("Sanity");
47
- if (isAnalyticsConfigured()) integrations.push("Analytics");
48
-
49
- return integrations;
50
- }
51
-
52
- /**
53
- * Get a list of all unconfigured integrations
54
- */
55
- export function getUnconfiguredIntegrations(): string[] {
56
- const integrations: string[] = [];
57
-
58
- if (!isSanityConfigured()) integrations.push("Sanity");
59
- if (!isAnalyticsConfigured()) integrations.push("Analytics");
60
-
61
- return integrations;
62
- }
@@ -1,144 +0,0 @@
1
- # Sanity CMS Integration
2
-
3
- Headless CMS with visual editing.
4
-
5
- ## Environment Variables
6
-
7
- ```env
8
- # Required
9
- NEXT_PUBLIC_SANITY_PROJECT_ID="your-project-id"
10
- NEXT_PUBLIC_SANITY_DATASET="production"
11
-
12
- # Required for Visual Editing & Live Preview
13
- NEXT_PUBLIC_SANITY_API_READ_TOKEN="your-viewer-token"
14
- SANITY_PRIVATE_TOKEN="your-editor-token"
15
-
16
- # Optional
17
- NEXT_PUBLIC_SANITY_STUDIO_URL="http://localhost:3000/studio"
18
- NEXT_PUBLIC_SANITY_API_VERSION="2024-03-15"
19
- ```
20
-
21
- > **Note**: Create tokens in [Sanity Dashboard](https://sanity.io/manage) → Your Project → API → Tokens.
22
- > - **Viewer** token → `NEXT_PUBLIC_SANITY_API_READ_TOKEN`
23
- > - **Editor** token → `SANITY_PRIVATE_TOKEN`
24
-
25
- ## Quick Start
26
-
27
- 1. Access Studio at `/studio`
28
- 2. Create content (Pages, Articles)
29
- 3. Click "Present" for visual editing
30
-
31
- ## Usage
32
-
33
- ### Fetching Data
34
-
35
- ```tsx
36
- import { sanityFetch } from 'next-sanity/live'
37
- import { pageQuery } from '@/lib/integrations/sanity/queries'
38
-
39
- export default async function Page({ params }) {
40
- const { data } = await sanityFetch({
41
- query: pageQuery,
42
- params: { slug: params.slug }
43
- })
44
- return <YourComponent data={data} />
45
- }
46
- ```
47
-
48
- ### Build-time Data Fetching
49
-
50
- For `generateStaticParams` or other build-time functions, use the client directly:
51
-
52
- ```tsx
53
- import { client } from '@/lib/integrations/sanity/client'
54
- import { allArticlesQuery } from '@/lib/integrations/sanity/queries'
55
-
56
- export async function generateStaticParams() {
57
- if (!client) return []
58
- const data = await client.fetch(allArticlesQuery)
59
- return data.map((item) => ({ slug: item.slug?.current ?? '' }))
60
- }
61
- ```
62
-
63
- ### Visual Editing
64
-
65
- Add `data-sanity` attributes for visual editing:
66
-
67
- ```tsx
68
- import { RichText } from '@/lib/integrations/sanity/components/rich-text'
69
-
70
- function MyComponent({ data }) {
71
- return (
72
- <div data-sanity={data._id}>
73
- <h1 data-sanity="title">{data.title}</h1>
74
- <RichText content={data.content} />
75
- </div>
76
- )
77
- }
78
- ```
79
-
80
- ### Image Handling
81
-
82
- ```tsx
83
- import { urlForImage } from '@/lib/integrations/sanity/utils/image'
84
- import { SanityImage } from '@/components/ui/sanity-image'
85
-
86
- // Option 1: Using urlForImage utility
87
- <img src={urlForImage(image).width(800).url()} alt={image.alt} />
88
-
89
- // Option 2: Using SanityImage component
90
- <SanityImage image={image} maxWidth={800} />
91
- ```
92
-
93
- ### SEO Metadata
94
-
95
- ```tsx
96
- import { generateSanityMetadata } from '@/lib/utils/metadata'
97
-
98
- export async function generateMetadata({ params }) {
99
- const { data } = await sanityFetch({ query: pageQuery, params })
100
- return generateSanityMetadata({ document: data, url: `/page/${params.slug}` })
101
- }
102
- ```
103
-
104
- ## Creating New Content Types
105
-
106
- 1. **Create schema** in `schemaTypes/`:
107
-
108
- ```typescript
109
- import { defineField, defineType } from 'sanity'
110
-
111
- export const landing = defineType({
112
- name: 'landing',
113
- type: 'document',
114
- fields: [
115
- defineField({ name: 'title', type: 'string' }),
116
- defineField({ name: 'slug', type: 'slug', options: { source: 'title' } }),
117
- defineField({ name: 'content', type: 'richText' }),
118
- ],
119
- })
120
- ```
121
-
122
- 2. **Add to schema index** in `schemaTypes/index.ts`
123
- 3. **Create query** in `queries.ts`
124
- 4. **Create page** in `app/`
125
-
126
- ## Caching
127
-
128
- - **Draft mode**: Uses `cache: 'no-store'` automatically
129
- - **Published content**: ISR with `revalidate: 3600`
130
- - All queries use `cacheSignal()` for automatic cleanup
131
-
132
- See [ARCHITECTURE.md](../../../ARCHITECTURE.md) for cache gotchas.
133
-
134
- ## Troubleshooting
135
-
136
- **Visual editor not loading:**
137
- - Check env vars are set correctly
138
- - Verify draft mode routes exist (`/api/draft-mode/enable`)
139
-
140
- **Content not updating:**
141
- - Hard refresh browser
142
- - Check revalidation webhook is configured
143
-
144
- **Related**: [Sanity Docs](https://www.sanity.io/docs) · [Parent README](../README.md)
@@ -1,30 +0,0 @@
1
- import { createClient, type SanityClient } from "next-sanity";
2
- import { isSanityConfigured } from "@/lib/integrations/check-integration";
3
- import { apiVersion, dataset, privateToken, projectId, studioUrl } from "./env";
4
-
5
- /**
6
- * Sanity client instance
7
- *
8
- * Returns null if Sanity is not configured (missing env vars).
9
- * Always check with isSanityConfigured() before using.
10
- */
11
- export const client: SanityClient | null = isSanityConfigured()
12
- ? createClient({
13
- projectId,
14
- dataset,
15
- apiVersion,
16
- useCdn: true,
17
- perspective: "published",
18
- token: privateToken,
19
- stega: {
20
- studioUrl,
21
- filter: (props) => {
22
- if (props.sourcePath.at(-1) === "title") {
23
- return true;
24
- }
25
-
26
- return props.filterDefault(props);
27
- },
28
- },
29
- })
30
- : null;
@@ -1,29 +0,0 @@
1
- "use client";
2
-
3
- import Link from "next/link";
4
- import { usePathname } from "next/navigation";
5
- import { useDraftModeEnvironment } from "next-sanity/hooks";
6
-
7
- export function DisableDraftMode() {
8
- const environment = useDraftModeEnvironment();
9
- const pathname = usePathname();
10
-
11
- // Only show the disable draft mode button when outside of Presentation Tool
12
- if (environment !== "live" && environment !== "unknown") {
13
- return null;
14
- }
15
-
16
- if (pathname.startsWith("/studio")) {
17
- return null;
18
- }
19
-
20
- return (
21
- <Link
22
- href="/api/draft-mode/disable"
23
- scroll={false}
24
- className="dr-p-4 fixed top-safe right-safe z-50 bg-red font-mono text-primary text-sm uppercase"
25
- >
26
- Disable Draft Mode
27
- </Link>
28
- );
29
- }