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
package/package.json CHANGED
@@ -1,26 +1,48 @@
1
1
  {
2
2
  "name": "bsmnt",
3
- "version": "0.1.3",
3
+ "version": "0.2.4",
4
+ "packageManager": "bun@1.2.20",
4
5
  "description": "CLI to scaffold basement projects and add integrations",
5
6
  "type": "module",
7
+ "workspaces": [
8
+ ".",
9
+ "src/templates/*"
10
+ ],
6
11
  "bin": {
7
- "bsmnt": "./packages/cli/bin/index.js"
12
+ "bsmnt": "index.js"
8
13
  },
14
+ "main": "./dist/index.js",
9
15
  "files": [
10
- "packages/cli/bin/",
11
- "packages/cli/src/",
12
- "packages/create-basement-app/"
16
+ "dist",
17
+ "index.js",
18
+ "src/templates",
19
+ "!src/templates/*/node_modules",
20
+ "!src/templates/*/.next",
21
+ "!src/templates/*/bun.lock",
22
+ "src/template-hooks",
23
+ "plugins"
13
24
  ],
14
25
  "scripts": {
15
- "build": "bun pm pack --dry-run --ignore-scripts",
16
- "check": "for f in $(rg --files bin src -g '*.js'); do node --check \"$f\"; done",
26
+ "build": "tsc",
27
+ "check": "tsc --noEmit",
28
+ "dev": "tsx src/index.ts",
17
29
  "lint": "biome check .",
18
30
  "lint:fix": "biome check --write .",
19
- "test": "echo \"Error: no test specified\" && exit 1",
20
31
  "changeset": "changeset",
21
32
  "version-packages": "changeset version",
22
33
  "release": "changeset publish",
23
- "prepublishOnly": "bun run build"
34
+ "prepublishOnly": "rm -rf dist && bun run build",
35
+ "default": "turbo run dev --filter=bsmnt-next-starter",
36
+ "webgpu": "turbo run dev --filter=bsmnt-webgpu-starter",
37
+ "experiments": "turbo run dev --filter=bsmnt-experiments-starter",
38
+ "build:default": "turbo run build --filter=bsmnt-next-starter",
39
+ "build:webgpu": "turbo run build --filter=bsmnt-webgpu-starter",
40
+ "build:experiments": "turbo run build --filter=bsmnt-experiments-starter",
41
+ "build:all": "turbo run build --filter=bsmnt-next-starter --filter=bsmnt-webgpu-starter --filter=bsmnt-experiments-starter",
42
+ "lint:default": "turbo run lint --filter=bsmnt-next-starter",
43
+ "lint:webgpu": "turbo run lint --filter=bsmnt-webgpu-starter",
44
+ "lint:experiments": "turbo run lint --filter=bsmnt-experiments-starter",
45
+ "lint:all": "turbo run lint --filter=bsmnt-next-starter --filter=bsmnt-webgpu-starter --filter=bsmnt-experiments-starter"
24
46
  },
25
47
  "keywords": [
26
48
  "webgpu",
@@ -32,18 +54,21 @@
32
54
  "author": "",
33
55
  "license": "ISC",
34
56
  "dependencies": {
35
- "chalk": "^5.6.2",
36
- "dotenv": "^17.2.3",
57
+ "commander": "^13.1.0",
37
58
  "fs-extra": "^11.3.3",
38
- "inquirer": "^9.3.8",
39
59
  "ora": "^9.1.0",
40
60
  "picocolors": "^1.1.1",
41
- "prompts": "^2.4.2",
42
- "tiged": "^2.12.7"
61
+ "prompts": "^2.4.2"
43
62
  },
44
63
  "devDependencies": {
45
64
  "@biomejs/biome": "2.3.14",
46
65
  "@changesets/changelog-github": "^0.5.2",
47
- "@changesets/cli": "^2.29.8"
66
+ "@changesets/cli": "^2.29.8",
67
+ "@types/fs-extra": "^11.0.4",
68
+ "@types/node": "^25.2.3",
69
+ "@types/prompts": "^2.4.9",
70
+ "tsx": "^4.19.0",
71
+ "turbo": "^2.5.0",
72
+ "typescript": "^5.8.0"
48
73
  }
49
74
  }
@@ -1,23 +1,23 @@
1
- import type { Metadata, Viewport } from "next"
2
- import { Geist } from "next/font/google"
3
- import { type PropsWithChildren, Suspense } from "react"
4
- import { Link } from "@/components/ui/link"
5
- import { themes } from "@/lib/styles/colors"
6
- import { fontsVariable } from "@/lib/styles/fonts"
7
- import AppData from "@/package.json"
8
- import "@/lib/styles/css/index.css"
9
- import { cn } from "@/lib/styles/cn"
1
+ import type { Metadata, Viewport } from "next";
2
+ import { Geist } from "next/font/google";
3
+ import { type PropsWithChildren, Suspense } from "react";
4
+ import { Link } from "@/components/ui/link";
5
+ import { themes } from "@/lib/styles/colors";
6
+ import { fontsVariable } from "@/lib/styles/fonts";
7
+ import AppData from "@/package.json";
8
+ import "@/lib/styles/css/index.css";
9
+ import { cn } from "@/lib/styles/cn";
10
10
 
11
- const APP_NAME = AppData.name
12
- const APP_DEFAULT_TITLE = "Basement Starter"
13
- const APP_TITLE_TEMPLATE = "%s - Basement Starter"
14
- const APP_DESCRIPTION = AppData.description
11
+ const APP_NAME = AppData.name;
12
+ const APP_DEFAULT_TITLE = "Basement Starter";
13
+ const APP_TITLE_TEMPLATE = "%s - Basement Starter";
14
+ const APP_DESCRIPTION = AppData.description;
15
15
  const APP_BASE_URL =
16
- process.env.NEXT_PUBLIC_BASE_URL ?? "https://localhost:3000"
16
+ process.env.NEXT_PUBLIC_BASE_URL ?? "http://localhost:3000";
17
17
 
18
18
  const geist = Geist({
19
19
  subsets: ["latin"],
20
- })
20
+ });
21
21
 
22
22
  export const metadata: Metadata = {
23
23
  alternates: {
@@ -70,12 +70,12 @@ export const metadata: Metadata = {
70
70
  template: APP_TITLE_TEMPLATE,
71
71
  },
72
72
  },
73
- }
73
+ };
74
74
 
75
75
  export const viewport: Viewport = {
76
76
  colorScheme: "normal",
77
77
  themeColor: themes.dark.primary,
78
- }
78
+ };
79
79
 
80
80
  export default async function Layout({ children }: PropsWithChildren) {
81
81
  return (
@@ -100,5 +100,5 @@ export default async function Layout({ children }: PropsWithChildren) {
100
100
  {children}
101
101
  </body>
102
102
  </html>
103
- )
103
+ );
104
104
  }
@@ -0,0 +1,11 @@
1
+ import { Wrapper } from "@/components/layout/wrapper"
2
+
3
+ export default function Home() {
4
+ return (
5
+ <Wrapper theme="dark">
6
+ <section className="flex grow items-center justify-center">
7
+ <h1 className="font-mono text-xl uppercase">Basement Next Starter</h1>
8
+ </section>
9
+ </Wrapper>
10
+ )
11
+ }
@@ -1,7 +1,7 @@
1
- import type { MetadataRoute } from "next"
1
+ import type { MetadataRoute } from "next";
2
2
 
3
3
  const APP_BASE_URL =
4
- process.env.NEXT_PUBLIC_BASE_URL ?? "https://localhost:3000"
4
+ process.env.NEXT_PUBLIC_BASE_URL ?? "http://localhost:3000";
5
5
 
6
6
  export default function robots(): MetadataRoute.Robots {
7
7
  return {
@@ -11,5 +11,5 @@ export default function robots(): MetadataRoute.Robots {
11
11
  disallow: [],
12
12
  },
13
13
  sitemap: `${APP_BASE_URL}/sitemap.xml`,
14
- }
14
+ };
15
15
  }
@@ -1,7 +1,7 @@
1
- import type { MetadataRoute } from "next"
1
+ import type { MetadataRoute } from "next";
2
2
 
3
3
  const APP_BASE_URL =
4
- process.env.NEXT_PUBLIC_BASE_URL ?? "https://localhost:3000"
4
+ process.env.NEXT_PUBLIC_BASE_URL ?? "http://localhost:3000";
5
5
 
6
6
  export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
7
7
  const baseRoutes: MetadataRoute.Sitemap = [
@@ -11,6 +11,6 @@ export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
11
11
  changeFrequency: "daily",
12
12
  priority: 1,
13
13
  },
14
- ]
15
- return baseRoutes
14
+ ];
15
+ return baseRoutes;
16
16
  }
@@ -1,5 +1,5 @@
1
1
  {
2
- "root": false,
2
+ "root": true,
3
3
  "$schema": "node_modules/@biomejs/biome/configuration_schema.json",
4
4
  "assist": {
5
5
  "actions": {
@@ -245,6 +245,6 @@
245
245
  "vcs": {
246
246
  "clientKind": "git",
247
247
  "enabled": true,
248
- "useIgnoreFile": true
248
+ "useIgnoreFile": false
249
249
  }
250
250
  }
@@ -4,7 +4,11 @@ import { Link } from "@/components/ui/link"
4
4
  export function Footer() {
5
5
  return (
6
6
  <footer className="flex flex-col items-center justify-between p-safe font-mono uppercase 2xl:flex-row 2xl:items-end">
7
- <Link href="https://basement.studio/" className="link">
7
+ <Link
8
+ href="https://basement.studio/"
9
+ className="link"
10
+ aria-label="Basement Studio"
11
+ >
8
12
  <Logo className="w-148 text-secondary" />
9
13
  </Link>
10
14
  <div>
@@ -1,10 +1,8 @@
1
- "use client"
2
-
3
1
  export function Header() {
4
2
  return (
5
3
  <nav className="sticky top-0 z-2 flex flex-col font-mono uppercase">
6
4
  <div className="inline-flex px-safe py-safe">
7
- <h1>Basement Next Starter</h1>
5
+ <div className="font-bold text-xl">Basement Next Starter</div>
8
6
  </div>
9
7
  </nav>
10
8
  )
@@ -47,7 +47,7 @@ export function Theme({
47
47
 
48
48
  return (
49
49
  <>
50
- {global && (
50
+ {global && /^[a-z]+$/.test(currentTheme) && (
51
51
  <script>
52
52
  {`document.documentElement.setAttribute('data-theme', '${currentTheme}');`}
53
53
  </script>
@@ -3,8 +3,6 @@
3
3
  *
4
4
  * Customize the Header and Footer components for your project needs.
5
5
  */
6
- "use client"
7
-
8
6
  import cn from "clsx"
9
7
  import { Footer } from "@/components/layout/footer"
10
8
  import { Header } from "@/components/layout/header"
@@ -102,14 +102,14 @@ const getFinalPlaceholder = (
102
102
  * - Automatic responsive sizes generation
103
103
  * - Smart blur placeholders with aspect ratio support
104
104
  * - Performance optimizations (lazy loading by default)
105
- * - Preload for LCP images
105
+ * - Priority flag for LCP images
106
106
  *
107
107
  * @param props - Image props extending Next.js Image
108
108
  * @param props.aspectRatio - Aspect ratio for layout stability and blur placeholder
109
109
  * @param props.mobileSize - Size on mobile (e.g., "100vw")
110
110
  * @param props.desktopSize - Size on desktop (e.g., "50vw")
111
111
  * @param props.block - Display as block element
112
- * @param props.preload - Enable preloading for LCP images
112
+ * @param props.priority - Prioritize loading for LCP images
113
113
  *
114
114
  * @example
115
115
  * ```tsx
@@ -123,12 +123,12 @@ const getFinalPlaceholder = (
123
123
  *
124
124
  * @example
125
125
  * ```tsx
126
- * // LCP image with preload
126
+ * // LCP image with priority
127
127
  * <Image
128
128
  * src="/hero.jpg"
129
129
  * alt="Hero image"
130
130
  * aspectRatio={16/9}
131
- * preload // Preloads image for LCP
131
+ * priority // Preloads image for LCP
132
132
  * />
133
133
  * ```
134
134
  *
@@ -147,7 +147,6 @@ const getFinalPlaceholder = (
147
147
  export function Image({
148
148
  style,
149
149
  className,
150
- loading,
151
150
  objectFit = "cover",
152
151
  quality = 90,
153
152
  alt = "",
@@ -163,12 +162,9 @@ export function Image({
163
162
  ref,
164
163
  aspectRatio,
165
164
  placeholder = "blur",
166
- preload = false,
165
+ priority = false,
167
166
  ...props
168
167
  }: ImageProps) {
169
- // Determine loading strategy
170
- const finalLoading = loading ?? (preload ? "eager" : "lazy")
171
-
172
168
  // Generate responsive sizes if not provided
173
169
  const finalSizes =
174
170
  sizes ||
@@ -202,7 +198,7 @@ export function Image({
202
198
  fill={!block}
203
199
  {...(width !== undefined && { width })}
204
200
  {...(height !== undefined && { height })}
205
- loading={finalLoading}
201
+ priority={priority}
206
202
  quality={quality}
207
203
  alt={alt}
208
204
  style={{
@@ -217,7 +213,6 @@ export function Image({
217
213
  onDragStart={(e) => e.preventDefault()}
218
214
  {...(finalPlaceholder && { placeholder: finalPlaceholder })}
219
215
  {...(blurDataURL && { blurDataURL })}
220
- preload={preload}
221
216
  {...props}
222
217
  />
223
218
  )
@@ -1,14 +1,14 @@
1
- "use client"
1
+ "use client";
2
2
 
3
- import NextLink from "next/link"
4
- import { usePathname } from "next/navigation"
3
+ import NextLink from "next/link";
4
+ import { usePathname } from "next/navigation";
5
5
  import {
6
6
  type AnchorHTMLAttributes,
7
7
  type ComponentProps,
8
8
  type MouseEvent,
9
9
  useEffect,
10
10
  useState,
11
- } from "react"
11
+ } from "react";
12
12
 
13
13
  // Helper to extract props safe for button elements
14
14
  function getButtonProps(props: Record<string, unknown>) {
@@ -18,8 +18,8 @@ function getButtonProps(props: Record<string, unknown>) {
18
18
  rel,
19
19
  "data-external": _dataExternal,
20
20
  ...buttonProps
21
- } = props
22
- return buttonProps
21
+ } = props;
22
+ return buttonProps;
23
23
  }
24
24
 
25
25
  // Helper to extract props safe for div elements
@@ -31,8 +31,8 @@ function getDivProps(props: Record<string, unknown>) {
31
31
  onClick,
32
32
  "data-external": _dataExternal,
33
33
  ...divProps
34
- } = props
35
- return divProps
34
+ } = props;
35
+ return divProps;
36
36
  }
37
37
 
38
38
  type CustomLinkProps = Omit<
@@ -40,10 +40,10 @@ type CustomLinkProps = Omit<
40
40
  keyof ComponentProps<typeof NextLink> | "href"
41
41
  > &
42
42
  Omit<ComponentProps<typeof NextLink>, "href"> & {
43
- href?: string
44
- onClick?: (e: MouseEvent<HTMLElement>) => void
45
- scroll?: boolean
46
- }
43
+ href?: string;
44
+ onClick?: (e: MouseEvent<HTMLElement>) => void;
45
+ scroll?: boolean;
46
+ };
47
47
 
48
48
  export function Link({
49
49
  href,
@@ -52,47 +52,47 @@ export function Link({
52
52
  scroll = false, // Default to false to prevent scroll restoration warnings with fixed/sticky elements
53
53
  ...props
54
54
  }: CustomLinkProps) {
55
- const [shouldPrefetch, setShouldPrefetch] = useState(false)
56
- const [isExternal, setIsExternal] = useState(false)
57
- const [isActive, setIsActive] = useState(false)
55
+ const [shouldPrefetch, setShouldPrefetch] = useState(false);
56
+ const [isExternal, setIsExternal] = useState(false);
57
+ const [isActive, setIsActive] = useState(false);
58
58
 
59
59
  // Get pathname - deferred to avoid blocking static generation
60
60
  // usePathname is safe to call but we defer the active check to useEffect
61
- const pathname = usePathname()
61
+ const pathname = usePathname();
62
62
 
63
63
  useEffect(() => {
64
64
  // Check if this link is active (current page)
65
65
  if (href && pathname) {
66
- setIsActive(pathname === href)
66
+ setIsActive(pathname === href);
67
67
  }
68
- }, [href, pathname])
68
+ }, [href, pathname]);
69
69
 
70
70
  useEffect(() => {
71
71
  // Skip if no href
72
- if (!href) return
72
+ if (!href) return;
73
73
 
74
74
  // Check if external link
75
75
  try {
76
- const url = new URL(href, window.location.href)
77
- setIsExternal(url.host !== window.location.host)
76
+ const url = new URL(href, window.location.href);
77
+ setIsExternal(url.host !== window.location.host);
78
78
  } catch {
79
- setIsExternal(false)
79
+ setIsExternal(false);
80
80
  }
81
81
 
82
82
  // Only prefetch on good connections
83
83
  const connection = (
84
84
  navigator as Navigator & {
85
- connection?: { effectiveType: string; saveData: boolean }
85
+ connection?: { effectiveType: string; saveData: boolean };
86
86
  }
87
- ).connection
87
+ ).connection;
88
88
  if (connection) {
89
- const { effectiveType, saveData } = connection
90
- setShouldPrefetch(effectiveType === "4g" && !saveData)
89
+ const { effectiveType, saveData } = connection;
90
+ setShouldPrefetch(effectiveType === "4g" && !saveData);
91
91
  } else {
92
92
  // Default to prefetching if API not available
93
- setShouldPrefetch(true)
93
+ setShouldPrefetch(true);
94
94
  }
95
- }, [href])
95
+ }, [href]);
96
96
 
97
97
  // If no href is provided but there's an onClick, render a button
98
98
  if (!href && onClick) {
@@ -104,17 +104,23 @@ export function Link({
104
104
  >
105
105
  {children}
106
106
  </button>
107
- )
107
+ );
108
108
  }
109
109
 
110
110
  // If no href and no onClick, render a div
111
111
  if (!href) {
112
- return <div {...getDivProps(props)}>{children}</div>
112
+ return <div {...getDivProps(props)}>{children}</div>;
113
+ }
114
+
115
+ // Block dangerous URIs (javascript:, data:, vbscript:)
116
+ const isDangerousHref = /^(javascript|data|vbscript):/i.test(href);
117
+ if (isDangerousHref) {
118
+ return <span {...getDivProps(props)}>{children}</span>;
113
119
  }
114
120
 
115
121
  // For SSR, check if it's external based on the href pattern
116
122
  const isExternalSSR =
117
- href.startsWith("http://") || href.startsWith("https://")
123
+ href.startsWith("http://") || href.startsWith("https://");
118
124
 
119
125
  if (isExternalSSR || isExternal) {
120
126
  return (
@@ -128,7 +134,7 @@ export function Link({
128
134
  >
129
135
  {children}
130
136
  </a>
131
- )
137
+ );
132
138
  }
133
139
 
134
140
  return (
@@ -142,5 +148,5 @@ export function Link({
142
148
  >
143
149
  {children}
144
150
  </NextLink>
145
- )
151
+ );
146
152
  }
@@ -1,4 +1,4 @@
1
- import type { Metadata } from "next"
1
+ import type { Metadata } from "next";
2
2
 
3
3
  /**
4
4
  * Metadata Generation Utilities
@@ -8,26 +8,26 @@ import type { Metadata } from "next"
8
8
  */
9
9
 
10
10
  interface GenerateMetadataOptions {
11
- title?: string
12
- description?: string
13
- keywords?: string[]
11
+ title?: string;
12
+ description?: string;
13
+ keywords?: string[];
14
14
  image?: {
15
- url?: string
16
- width?: number
17
- height?: number
18
- alt?: string
19
- }
20
- url?: string
21
- siteName?: string
22
- noIndex?: boolean
23
- type?: "website" | "article"
24
- publishedTime?: string
25
- modifiedTime?: string
26
- authors?: string[]
15
+ url?: string;
16
+ width?: number;
17
+ height?: number;
18
+ alt?: string;
19
+ };
20
+ url?: string;
21
+ siteName?: string;
22
+ noIndex?: boolean;
23
+ type?: "website" | "article";
24
+ publishedTime?: string;
25
+ modifiedTime?: string;
26
+ authors?: string[];
27
27
  }
28
28
 
29
29
  const APP_BASE_URL =
30
- process.env.NEXT_PUBLIC_BASE_URL ?? "https://localhost:3000"
30
+ process.env.NEXT_PUBLIC_BASE_URL ?? "http://localhost:3000";
31
31
 
32
32
  /**
33
33
  * Generate complete metadata object for pages
@@ -62,13 +62,13 @@ export function generatePageMetadata(
62
62
  publishedTime,
63
63
  modifiedTime,
64
64
  authors,
65
- } = options
65
+ } = options;
66
66
 
67
- const fullUrl = url ? `${APP_BASE_URL}${url}` : APP_BASE_URL
68
- const imageUrl = image?.url || "/opengraph-image.jpg"
69
- const imageWidth = image?.width || 1200
70
- const imageHeight = image?.height || 630
71
- const imageAlt = image?.alt || title || siteName
67
+ const fullUrl = url ? `${APP_BASE_URL}${url}` : APP_BASE_URL;
68
+ const imageUrl = image?.url || "/opengraph-image.jpg";
69
+ const imageWidth = image?.width || 1200;
70
+ const imageHeight = image?.height || 630;
71
+ const imageAlt = image?.alt || title || siteName;
72
72
 
73
73
  const metadata: Metadata = {
74
74
  metadataBase: new URL(APP_BASE_URL),
@@ -113,14 +113,14 @@ export function generatePageMetadata(
113
113
  other: {
114
114
  "fb:app_id": process.env.NEXT_PUBLIC_FACEBOOK_APP_ID || "",
115
115
  },
116
- }
116
+ };
117
117
 
118
118
  if (noIndex) {
119
119
  metadata.robots = {
120
120
  index: false,
121
121
  follow: false,
122
- }
122
+ };
123
123
  }
124
124
 
125
- return metadata
125
+ return metadata;
126
126
  }
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "basement-next-starter",
2
+ "name": "bsmnt-next-starter",
3
3
  "description": "Basement Next.js starter template",
4
4
  "version": "0.1.0",
5
5
  "private": true,
@@ -26,7 +26,7 @@
26
26
  },
27
27
  "dependencies": {
28
28
  "class-variance-authority": "^0.7.1",
29
- "next": "16.1.4",
29
+ "next": "16.1.6",
30
30
  "react": "19.2.4",
31
31
  "react-dom": "19.2.4",
32
32
  "react-use": "^17.6.0",
@@ -35,10 +35,10 @@
35
35
  "zustand": "^5.0.10"
36
36
  },
37
37
  "devDependencies": {
38
- "@biomejs/biome": "2.3.11",
38
+ "@biomejs/biome": "2.3.14",
39
39
  "@clack/prompts": "^0.11.0",
40
40
  "@csstools/postcss-global-data": "^3.1.0",
41
- "@next/bundle-analyzer": "16.1.1",
41
+ "@next/bundle-analyzer": "16.1.6",
42
42
  "@svgr/webpack": "^8.1.0",
43
43
  "@tailwindcss/postcss": "^4.1.18",
44
44
  "@types/bun": "^1.3.6",
@@ -1,23 +1,23 @@
1
- import type { Metadata, Viewport } from "next"
2
- import { Geist } from "next/font/google"
3
- import { type PropsWithChildren, Suspense } from "react"
4
- import { Link } from "@/components/ui/link"
5
- import { themes } from "@/lib/styles/colors"
6
- import { fontsVariable } from "@/lib/styles/fonts"
7
- import AppData from "@/package.json"
8
- import "@/lib/styles/css/index.css"
9
- import { cn } from "@/lib/styles/cn"
1
+ import type { Metadata, Viewport } from "next";
2
+ import { Geist } from "next/font/google";
3
+ import { type PropsWithChildren, Suspense } from "react";
4
+ import { Link } from "@/components/ui/link";
5
+ import { themes } from "@/lib/styles/colors";
6
+ import { fontsVariable } from "@/lib/styles/fonts";
7
+ import AppData from "@/package.json";
8
+ import "@/lib/styles/css/index.css";
9
+ import { cn } from "@/lib/styles/cn";
10
10
 
11
- const APP_NAME = AppData.name
12
- const APP_DEFAULT_TITLE = "Basement Starter"
13
- const APP_TITLE_TEMPLATE = "%s - Basement Starter"
14
- const APP_DESCRIPTION = AppData.description
11
+ const APP_NAME = AppData.name;
12
+ const APP_DEFAULT_TITLE = "Basement Starter";
13
+ const APP_TITLE_TEMPLATE = "%s - Basement Starter";
14
+ const APP_DESCRIPTION = AppData.description;
15
15
  const APP_BASE_URL =
16
- process.env.NEXT_PUBLIC_BASE_URL ?? "https://localhost:3000"
16
+ process.env.NEXT_PUBLIC_BASE_URL ?? "http://localhost:3000";
17
17
 
18
18
  const geist = Geist({
19
19
  subsets: ["latin"],
20
- })
20
+ });
21
21
 
22
22
  export const metadata: Metadata = {
23
23
  alternates: {
@@ -70,12 +70,12 @@ export const metadata: Metadata = {
70
70
  template: APP_TITLE_TEMPLATE,
71
71
  },
72
72
  },
73
- }
73
+ };
74
74
 
75
75
  export const viewport: Viewport = {
76
76
  colorScheme: "normal",
77
77
  themeColor: themes.dark.primary,
78
- }
78
+ };
79
79
 
80
80
  export default async function Layout({ children }: PropsWithChildren) {
81
81
  return (
@@ -100,5 +100,5 @@ export default async function Layout({ children }: PropsWithChildren) {
100
100
  {children}
101
101
  </body>
102
102
  </html>
103
- )
103
+ );
104
104
  }