bsmnt 0.0.2 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (346) hide show
  1. package/.github/workflows/release.yml +2 -0
  2. package/CHANGELOG.md +31 -0
  3. package/CLAUDE.md +42 -24
  4. package/README.md +33 -12
  5. package/biome.json +1 -0
  6. package/bun.lock +2 -1
  7. package/docs/architecture.drawio +250 -0
  8. package/docs/architecture.mermaid +85 -0
  9. package/package.json +42 -42
  10. package/{bin → packages/cli/bin}/index.js +28 -31
  11. package/packages/cli/package.json +16 -0
  12. package/{src → packages/cli/src}/commands/add-integration.js +22 -37
  13. package/{src → packages/cli/src}/commands/create.js +125 -131
  14. package/packages/create-basement-app/integrations/sanity/config.js +46 -0
  15. package/{src → packages/create-basement-app/integrations/sanity}/mergers/check-integration-merger.js +1 -1
  16. package/{src → packages/create-basement-app/integrations/sanity}/mergers/layout-merger.js +1 -1
  17. package/{src → packages/create-basement-app/integrations/sanity}/mergers/sitemap-merger.js +1 -1
  18. package/packages/create-basement-app/package.json +10 -0
  19. package/packages/create-basement-app/src/configs/animations.js +28 -0
  20. package/packages/create-basement-app/src/index.js +15 -0
  21. package/packages/create-basement-app/src/mergers/check-integration-merger.js +105 -0
  22. package/{src → packages/create-basement-app/src}/mergers/config.js +5 -33
  23. package/{src → packages/create-basement-app/src}/mergers/index.js +89 -98
  24. package/packages/create-basement-app/src/mergers/layout-merger.js +223 -0
  25. package/packages/create-basement-app/src/mergers/sitemap-merger.js +121 -0
  26. package/packages/create-basement-app/template-hooks/config.js +38 -0
  27. package/packages/create-basement-app/templates/default/.biome/plugins/README.md +21 -0
  28. package/packages/create-basement-app/templates/default/.biome/plugins/no-anchor-element.grit +12 -0
  29. package/packages/create-basement-app/templates/default/.biome/plugins/no-relative-parent-imports.grit +10 -0
  30. package/packages/create-basement-app/templates/default/.biome/plugins/no-unnecessary-forwardref.grit +9 -0
  31. package/packages/create-basement-app/templates/default/.cursor/rules/README.md +184 -0
  32. package/packages/create-basement-app/templates/default/.cursor/rules/architecture.mdc +437 -0
  33. package/packages/create-basement-app/templates/default/.cursor/rules/components.mdc +436 -0
  34. package/packages/create-basement-app/templates/default/.cursor/rules/integrations.mdc +447 -0
  35. package/packages/create-basement-app/templates/default/.cursor/rules/main.mdc +278 -0
  36. package/packages/create-basement-app/templates/default/.cursor/rules/styling.mdc +433 -0
  37. package/packages/create-basement-app/templates/default/.editorconfig +40 -0
  38. package/packages/create-basement-app/templates/default/.env.example +81 -0
  39. package/packages/create-basement-app/templates/default/.gitattributes +19 -0
  40. package/packages/create-basement-app/templates/default/.github/PULL_REQUEST_TEMPLATE.md +14 -0
  41. package/packages/create-basement-app/templates/default/.github/workflows/lighthouse-to-slack.yml +136 -0
  42. package/packages/create-basement-app/templates/default/.vscode/extensions.json +20 -0
  43. package/packages/create-basement-app/templates/default/.vscode/settings.json +105 -0
  44. package/packages/create-basement-app/templates/default/README.md +221 -0
  45. package/packages/create-basement-app/templates/default/_gitignore +67 -0
  46. package/packages/create-basement-app/templates/default/app/favicon.ico +0 -0
  47. package/packages/create-basement-app/templates/default/app/layout.tsx +104 -0
  48. package/packages/create-basement-app/templates/default/app/page.tsx +275 -0
  49. package/packages/create-basement-app/templates/default/app/robots.ts +15 -0
  50. package/packages/create-basement-app/templates/default/app/sitemap.ts +16 -0
  51. package/packages/create-basement-app/templates/default/biome.json +250 -0
  52. package/packages/create-basement-app/templates/default/components/basement.svg +1 -0
  53. package/packages/create-basement-app/templates/default/components/layout/footer/index.tsx +27 -0
  54. package/packages/create-basement-app/templates/default/components/layout/header/index.tsx +11 -0
  55. package/packages/create-basement-app/templates/default/components/layout/theme/index.tsx +66 -0
  56. package/packages/create-basement-app/templates/default/components/layout/wrapper/index.tsx +65 -0
  57. package/packages/create-basement-app/templates/default/components/ui/README.md +77 -0
  58. package/packages/create-basement-app/templates/default/components/ui/image/README.md +37 -0
  59. package/packages/create-basement-app/templates/default/components/ui/image/index.tsx +224 -0
  60. package/packages/create-basement-app/templates/default/components/ui/link/index.tsx +146 -0
  61. package/packages/create-basement-app/templates/default/lib/README.md +33 -0
  62. package/packages/create-basement-app/templates/default/lib/hooks/index.ts +12 -0
  63. package/packages/create-basement-app/templates/default/lib/hooks/use-device-detection.ts +81 -0
  64. package/packages/create-basement-app/templates/default/lib/hooks/use-media-breakpoint.ts +15 -0
  65. package/packages/create-basement-app/templates/default/lib/hooks/use-prefetch.ts +74 -0
  66. package/packages/create-basement-app/templates/default/lib/scripts/dev.ts +52 -0
  67. package/packages/create-basement-app/templates/default/lib/scripts/generate-component.ts +322 -0
  68. package/packages/create-basement-app/templates/default/lib/scripts/generate-page.ts +193 -0
  69. package/packages/create-basement-app/templates/default/lib/scripts/generate.ts +79 -0
  70. package/packages/create-basement-app/templates/default/lib/scripts/utils.ts +246 -0
  71. package/packages/create-basement-app/templates/default/lib/store/app.ts +11 -0
  72. package/packages/create-basement-app/templates/default/lib/store/index.ts +11 -0
  73. package/packages/create-basement-app/templates/default/lib/styles/README.md +64 -0
  74. package/packages/create-basement-app/templates/default/lib/styles/cn.ts +7 -0
  75. package/packages/create-basement-app/templates/default/lib/styles/colors.ts +63 -0
  76. package/packages/create-basement-app/templates/default/lib/styles/config.ts +34 -0
  77. package/packages/create-basement-app/templates/default/lib/styles/css/global.css +85 -0
  78. package/packages/create-basement-app/templates/default/lib/styles/css/index.css +6 -0
  79. package/packages/create-basement-app/templates/default/lib/styles/css/reset.css +166 -0
  80. package/packages/create-basement-app/templates/default/lib/styles/css/root.css +68 -0
  81. package/packages/create-basement-app/templates/default/lib/styles/css/tailwind.css +132 -0
  82. package/packages/create-basement-app/templates/default/lib/styles/easings.ts +21 -0
  83. package/packages/create-basement-app/templates/default/lib/styles/fonts.ts +28 -0
  84. package/packages/create-basement-app/templates/default/lib/styles/index.ts +12 -0
  85. package/packages/create-basement-app/templates/default/lib/styles/layout.mjs +27 -0
  86. package/packages/create-basement-app/templates/default/lib/styles/scripts/README.md +29 -0
  87. package/packages/create-basement-app/templates/default/lib/styles/scripts/generate-root.ts +57 -0
  88. package/packages/create-basement-app/templates/default/lib/styles/scripts/generate-tailwind.ts +162 -0
  89. package/packages/create-basement-app/templates/default/lib/styles/scripts/postcss-functions.mjs +168 -0
  90. package/packages/create-basement-app/templates/default/lib/styles/scripts/setup-styles.ts +24 -0
  91. package/packages/create-basement-app/templates/default/lib/styles/scripts/utils.ts +20 -0
  92. package/packages/create-basement-app/templates/default/lib/styles/typography.ts +36 -0
  93. package/packages/create-basement-app/templates/default/lib/utils/README.md +40 -0
  94. package/packages/create-basement-app/templates/default/lib/utils/css.d.ts +21 -0
  95. package/packages/create-basement-app/templates/default/lib/utils/easings.ts +240 -0
  96. package/packages/create-basement-app/templates/default/lib/utils/fetch.ts +84 -0
  97. package/packages/create-basement-app/templates/default/lib/utils/math.test.ts +221 -0
  98. package/packages/create-basement-app/templates/default/lib/utils/math.ts +236 -0
  99. package/packages/create-basement-app/templates/default/lib/utils/metadata.ts +126 -0
  100. package/packages/create-basement-app/templates/default/lib/utils/strings.test.ts +166 -0
  101. package/packages/create-basement-app/templates/default/lib/utils/strings.ts +246 -0
  102. package/packages/create-basement-app/templates/default/lib/utils/types.d.ts +15 -0
  103. package/packages/create-basement-app/templates/default/lib/utils/viewport.test.ts +256 -0
  104. package/packages/create-basement-app/templates/default/lib/utils/viewport.ts +193 -0
  105. package/packages/create-basement-app/templates/default/next.config.ts +142 -0
  106. package/packages/create-basement-app/templates/default/package.json +62 -0
  107. package/packages/create-basement-app/templates/default/postcss.config.mjs +42 -0
  108. package/packages/create-basement-app/templates/default/public/fonts/geist/Geist-Mono.woff2 +0 -0
  109. package/packages/create-basement-app/templates/default/tsconfig.json +43 -0
  110. package/packages/create-basement-app/templates/experiment/.biome/plugins/README.md +21 -0
  111. package/packages/create-basement-app/templates/experiment/.biome/plugins/no-anchor-element.grit +12 -0
  112. package/packages/create-basement-app/templates/experiment/.biome/plugins/no-relative-parent-imports.grit +10 -0
  113. package/packages/create-basement-app/templates/experiment/.biome/plugins/no-unnecessary-forwardref.grit +9 -0
  114. package/packages/create-basement-app/templates/experiment/.cursor/rules/README.md +184 -0
  115. package/packages/create-basement-app/templates/experiment/.cursor/rules/architecture.mdc +437 -0
  116. package/packages/create-basement-app/templates/experiment/.cursor/rules/components.mdc +436 -0
  117. package/packages/create-basement-app/templates/experiment/.cursor/rules/integrations.mdc +447 -0
  118. package/packages/create-basement-app/templates/experiment/.cursor/rules/main.mdc +278 -0
  119. package/packages/create-basement-app/templates/experiment/.cursor/rules/styling.mdc +433 -0
  120. package/packages/create-basement-app/templates/experiment/.editorconfig +40 -0
  121. package/packages/create-basement-app/templates/experiment/.env.example +81 -0
  122. package/packages/create-basement-app/templates/experiment/.gitattributes +19 -0
  123. package/packages/create-basement-app/templates/experiment/.github/PULL_REQUEST_TEMPLATE.md +14 -0
  124. package/packages/create-basement-app/templates/experiment/.github/workflows/lighthouse-to-slack.yml +136 -0
  125. package/packages/create-basement-app/templates/experiment/.vscode/extensions.json +20 -0
  126. package/packages/create-basement-app/templates/experiment/.vscode/settings.json +105 -0
  127. package/packages/create-basement-app/templates/experiment/README.md +221 -0
  128. package/packages/create-basement-app/templates/experiment/_gitignore +67 -0
  129. package/packages/create-basement-app/templates/experiment/app/favicon.ico +0 -0
  130. package/packages/create-basement-app/templates/experiment/app/layout.tsx +104 -0
  131. package/packages/create-basement-app/templates/experiment/app/page.tsx +275 -0
  132. package/packages/create-basement-app/templates/experiment/app/robots.ts +15 -0
  133. package/packages/create-basement-app/templates/experiment/app/sitemap.ts +16 -0
  134. package/packages/create-basement-app/templates/experiment/biome.json +250 -0
  135. package/packages/create-basement-app/templates/experiment/components/basement.svg +1 -0
  136. package/packages/create-basement-app/templates/experiment/components/layout/footer/index.tsx +27 -0
  137. package/packages/create-basement-app/templates/experiment/components/layout/header/index.tsx +58 -0
  138. package/packages/create-basement-app/templates/experiment/components/layout/navigation-menu.tsx +127 -0
  139. package/packages/create-basement-app/templates/experiment/components/layout/theme/index.tsx +66 -0
  140. package/packages/create-basement-app/templates/experiment/components/layout/wrapper/index.tsx +65 -0
  141. package/packages/create-basement-app/templates/experiment/components/ui/README.md +77 -0
  142. package/packages/create-basement-app/templates/experiment/components/ui/image/README.md +37 -0
  143. package/packages/create-basement-app/templates/experiment/components/ui/image/index.tsx +224 -0
  144. package/packages/create-basement-app/templates/experiment/components/ui/link/index.tsx +146 -0
  145. package/packages/create-basement-app/templates/experiment/lib/README.md +33 -0
  146. package/packages/create-basement-app/templates/experiment/lib/constants.ts +12 -0
  147. package/packages/create-basement-app/templates/experiment/lib/hooks/index.ts +12 -0
  148. package/packages/create-basement-app/templates/experiment/lib/hooks/use-device-detection.ts +81 -0
  149. package/packages/create-basement-app/templates/experiment/lib/hooks/use-media-breakpoint.ts +15 -0
  150. package/packages/create-basement-app/templates/experiment/lib/hooks/use-prefetch.ts +74 -0
  151. package/packages/create-basement-app/templates/experiment/lib/integrations/.gitkeep +0 -0
  152. package/packages/create-basement-app/templates/experiment/lib/scripts/dev.ts +52 -0
  153. package/packages/create-basement-app/templates/experiment/lib/scripts/generate-component.ts +322 -0
  154. package/packages/create-basement-app/templates/experiment/lib/scripts/generate-page.ts +193 -0
  155. package/packages/create-basement-app/templates/experiment/lib/scripts/generate.ts +79 -0
  156. package/packages/create-basement-app/templates/experiment/lib/scripts/utils.ts +246 -0
  157. package/packages/create-basement-app/templates/experiment/lib/store/app.ts +11 -0
  158. package/packages/create-basement-app/templates/experiment/lib/store/index.ts +11 -0
  159. package/packages/create-basement-app/templates/experiment/lib/styles/README.md +64 -0
  160. package/packages/create-basement-app/templates/experiment/lib/styles/cn.ts +7 -0
  161. package/packages/create-basement-app/templates/experiment/lib/styles/colors.ts +63 -0
  162. package/packages/create-basement-app/templates/experiment/lib/styles/config.ts +34 -0
  163. package/packages/create-basement-app/templates/experiment/lib/styles/css/global.css +85 -0
  164. package/packages/create-basement-app/templates/experiment/lib/styles/css/index.css +6 -0
  165. package/packages/create-basement-app/templates/experiment/lib/styles/css/reset.css +166 -0
  166. package/packages/create-basement-app/templates/experiment/lib/styles/css/root.css +68 -0
  167. package/packages/create-basement-app/templates/experiment/lib/styles/css/tailwind.css +132 -0
  168. package/packages/create-basement-app/templates/experiment/lib/styles/easings.ts +21 -0
  169. package/packages/create-basement-app/templates/experiment/lib/styles/fonts.ts +28 -0
  170. package/packages/create-basement-app/templates/experiment/lib/styles/index.ts +12 -0
  171. package/packages/create-basement-app/templates/experiment/lib/styles/layout.mjs +27 -0
  172. package/packages/create-basement-app/templates/experiment/lib/styles/scripts/README.md +29 -0
  173. package/packages/create-basement-app/templates/experiment/lib/styles/scripts/generate-root.ts +57 -0
  174. package/packages/create-basement-app/templates/experiment/lib/styles/scripts/generate-tailwind.ts +162 -0
  175. package/packages/create-basement-app/templates/experiment/lib/styles/scripts/postcss-functions.mjs +168 -0
  176. package/packages/create-basement-app/templates/experiment/lib/styles/scripts/setup-styles.ts +24 -0
  177. package/packages/create-basement-app/templates/experiment/lib/styles/scripts/utils.ts +20 -0
  178. package/packages/create-basement-app/templates/experiment/lib/styles/typography.ts +36 -0
  179. package/packages/create-basement-app/templates/experiment/lib/utils/README.md +40 -0
  180. package/packages/create-basement-app/templates/experiment/lib/utils/css.d.ts +21 -0
  181. package/packages/create-basement-app/templates/experiment/lib/utils/easings.ts +240 -0
  182. package/packages/create-basement-app/templates/experiment/lib/utils/fetch.ts +84 -0
  183. package/packages/create-basement-app/templates/experiment/lib/utils/math.test.ts +221 -0
  184. package/packages/create-basement-app/templates/experiment/lib/utils/math.ts +236 -0
  185. package/packages/create-basement-app/templates/experiment/lib/utils/metadata.ts +126 -0
  186. package/packages/create-basement-app/templates/experiment/lib/utils/strings.test.ts +166 -0
  187. package/packages/create-basement-app/templates/experiment/lib/utils/strings.ts +246 -0
  188. package/packages/create-basement-app/templates/experiment/lib/utils/types.d.ts +15 -0
  189. package/packages/create-basement-app/templates/experiment/lib/utils/viewport.test.ts +256 -0
  190. package/packages/create-basement-app/templates/experiment/lib/utils/viewport.ts +193 -0
  191. package/packages/create-basement-app/templates/experiment/next.config.ts +142 -0
  192. package/packages/create-basement-app/templates/experiment/package.json +69 -0
  193. package/packages/create-basement-app/templates/experiment/postcss.config.mjs +42 -0
  194. package/packages/create-basement-app/templates/experiment/public/fonts/geist/Geist-Mono.woff2 +0 -0
  195. package/packages/create-basement-app/templates/experiment/tsconfig.json +43 -0
  196. package/packages/create-basement-app/templates/webgl/.biome/plugins/README.md +21 -0
  197. package/packages/create-basement-app/templates/webgl/.biome/plugins/no-anchor-element.grit +12 -0
  198. package/packages/create-basement-app/templates/webgl/.biome/plugins/no-relative-parent-imports.grit +10 -0
  199. package/packages/create-basement-app/templates/webgl/.biome/plugins/no-unnecessary-forwardref.grit +9 -0
  200. package/packages/create-basement-app/templates/webgl/.cursor/rules/README.md +184 -0
  201. package/packages/create-basement-app/templates/webgl/.cursor/rules/architecture.mdc +437 -0
  202. package/packages/create-basement-app/templates/webgl/.cursor/rules/components.mdc +436 -0
  203. package/packages/create-basement-app/templates/webgl/.cursor/rules/integrations.mdc +447 -0
  204. package/packages/create-basement-app/templates/webgl/.cursor/rules/main.mdc +278 -0
  205. package/packages/create-basement-app/templates/webgl/.cursor/rules/styling.mdc +433 -0
  206. package/packages/create-basement-app/templates/webgl/.editorconfig +40 -0
  207. package/packages/create-basement-app/templates/webgl/.env.example +81 -0
  208. package/packages/create-basement-app/templates/webgl/.gitattributes +19 -0
  209. package/packages/create-basement-app/templates/webgl/.github/PULL_REQUEST_TEMPLATE.md +14 -0
  210. package/packages/create-basement-app/templates/webgl/.github/workflows/lighthouse-to-slack.yml +136 -0
  211. package/packages/create-basement-app/templates/webgl/.vscode/extensions.json +20 -0
  212. package/packages/create-basement-app/templates/webgl/.vscode/settings.json +105 -0
  213. package/packages/create-basement-app/templates/webgl/README.md +221 -0
  214. package/packages/create-basement-app/templates/webgl/_gitignore +67 -0
  215. package/packages/create-basement-app/templates/webgl/app/favicon.ico +0 -0
  216. package/packages/create-basement-app/templates/webgl/app/layout.tsx +104 -0
  217. package/packages/create-basement-app/templates/webgl/app/page.tsx +10 -0
  218. package/packages/create-basement-app/templates/webgl/app/robots.ts +15 -0
  219. package/packages/create-basement-app/templates/webgl/app/sitemap.ts +16 -0
  220. package/packages/create-basement-app/templates/webgl/biome.json +250 -0
  221. package/packages/create-basement-app/templates/webgl/components/basement.svg +1 -0
  222. package/packages/create-basement-app/templates/webgl/components/layout/footer/index.tsx +27 -0
  223. package/packages/create-basement-app/templates/webgl/components/layout/header/index.tsx +11 -0
  224. package/packages/create-basement-app/templates/webgl/components/layout/theme/index.tsx +66 -0
  225. package/packages/create-basement-app/templates/webgl/components/layout/wrapper/index.tsx +65 -0
  226. package/packages/create-basement-app/templates/webgl/components/ui/README.md +77 -0
  227. package/packages/create-basement-app/templates/webgl/components/ui/image/README.md +37 -0
  228. package/packages/create-basement-app/templates/webgl/components/ui/image/index.tsx +224 -0
  229. package/packages/create-basement-app/templates/webgl/components/ui/link/index.tsx +146 -0
  230. package/packages/create-basement-app/templates/webgl/components/webgl/canvas/dynamic.tsx +34 -0
  231. package/packages/create-basement-app/templates/webgl/components/webgl/canvas/index.tsx +38 -0
  232. package/packages/create-basement-app/templates/webgl/components/webgl/components/scene/index.tsx +29 -0
  233. package/packages/create-basement-app/templates/webgl/lib/README.md +33 -0
  234. package/packages/create-basement-app/templates/webgl/lib/hooks/index.ts +12 -0
  235. package/packages/create-basement-app/templates/webgl/lib/hooks/use-device-detection.ts +81 -0
  236. package/packages/create-basement-app/templates/webgl/lib/hooks/use-media-breakpoint.ts +15 -0
  237. package/packages/create-basement-app/templates/webgl/lib/hooks/use-prefetch.ts +74 -0
  238. package/packages/create-basement-app/templates/webgl/lib/integrations/.gitkeep +0 -0
  239. package/packages/create-basement-app/templates/webgl/lib/renderer.ts +7 -0
  240. package/packages/create-basement-app/templates/webgl/lib/scripts/dev.ts +52 -0
  241. package/packages/create-basement-app/templates/webgl/lib/scripts/generate-component.ts +322 -0
  242. package/packages/create-basement-app/templates/webgl/lib/scripts/generate-page.ts +193 -0
  243. package/packages/create-basement-app/templates/webgl/lib/scripts/generate.ts +79 -0
  244. package/packages/create-basement-app/templates/webgl/lib/scripts/utils.ts +246 -0
  245. package/packages/create-basement-app/templates/webgl/lib/store/app.ts +11 -0
  246. package/packages/create-basement-app/templates/webgl/lib/store/index.ts +11 -0
  247. package/packages/create-basement-app/templates/webgl/lib/styles/README.md +64 -0
  248. package/packages/create-basement-app/templates/webgl/lib/styles/cn.ts +7 -0
  249. package/packages/create-basement-app/templates/webgl/lib/styles/colors.ts +63 -0
  250. package/packages/create-basement-app/templates/webgl/lib/styles/config.ts +34 -0
  251. package/packages/create-basement-app/templates/webgl/lib/styles/css/global.css +85 -0
  252. package/packages/create-basement-app/templates/webgl/lib/styles/css/index.css +6 -0
  253. package/packages/create-basement-app/templates/webgl/lib/styles/css/reset.css +166 -0
  254. package/packages/create-basement-app/templates/webgl/lib/styles/css/root.css +68 -0
  255. package/packages/create-basement-app/templates/webgl/lib/styles/css/tailwind.css +132 -0
  256. package/packages/create-basement-app/templates/webgl/lib/styles/easings.ts +21 -0
  257. package/packages/create-basement-app/templates/webgl/lib/styles/fonts.ts +28 -0
  258. package/packages/create-basement-app/templates/webgl/lib/styles/index.ts +12 -0
  259. package/packages/create-basement-app/templates/webgl/lib/styles/layout.mjs +27 -0
  260. package/packages/create-basement-app/templates/webgl/lib/styles/scripts/README.md +29 -0
  261. package/packages/create-basement-app/templates/webgl/lib/styles/scripts/generate-root.ts +57 -0
  262. package/packages/create-basement-app/templates/webgl/lib/styles/scripts/generate-tailwind.ts +162 -0
  263. package/packages/create-basement-app/templates/webgl/lib/styles/scripts/postcss-functions.mjs +168 -0
  264. package/packages/create-basement-app/templates/webgl/lib/styles/scripts/setup-styles.ts +24 -0
  265. package/packages/create-basement-app/templates/webgl/lib/styles/scripts/utils.ts +20 -0
  266. package/packages/create-basement-app/templates/webgl/lib/styles/typography.ts +36 -0
  267. package/packages/create-basement-app/templates/webgl/lib/utils/README.md +40 -0
  268. package/packages/create-basement-app/templates/webgl/lib/utils/css.d.ts +21 -0
  269. package/packages/create-basement-app/templates/webgl/lib/utils/easings.ts +240 -0
  270. package/packages/create-basement-app/templates/webgl/lib/utils/fetch.ts +84 -0
  271. package/packages/create-basement-app/templates/webgl/lib/utils/math.test.ts +221 -0
  272. package/packages/create-basement-app/templates/webgl/lib/utils/math.ts +236 -0
  273. package/packages/create-basement-app/templates/webgl/lib/utils/metadata.ts +126 -0
  274. package/packages/create-basement-app/templates/webgl/lib/utils/strings.test.ts +166 -0
  275. package/packages/create-basement-app/templates/webgl/lib/utils/strings.ts +246 -0
  276. package/packages/create-basement-app/templates/webgl/lib/utils/types.d.ts +15 -0
  277. package/packages/create-basement-app/templates/webgl/lib/utils/viewport.test.ts +256 -0
  278. package/packages/create-basement-app/templates/webgl/lib/utils/viewport.ts +193 -0
  279. package/packages/create-basement-app/templates/webgl/next.config.ts +142 -0
  280. package/packages/create-basement-app/templates/webgl/package.json +68 -0
  281. package/packages/create-basement-app/templates/webgl/postcss.config.mjs +42 -0
  282. package/packages/create-basement-app/templates/webgl/public/fonts/geist/Geist-Mono.woff2 +0 -0
  283. package/packages/create-basement-app/templates/webgl/tsconfig.json +43 -0
  284. package/tasks/.last-branch +1 -0
  285. package/tasks/CLAUDE.md +104 -0
  286. package/tasks/archive/2026-02-09-next-starter-dynamic-layers/prd.json +153 -0
  287. package/tasks/archive/2026-02-09-next-starter-dynamic-layers/progress.txt +115 -0
  288. package/tasks/prd-project-restructure.md +375 -0
  289. package/tasks/prd.json +227 -91
  290. package/tasks/progress.txt +281 -87
  291. package/tasks/ralph.sh +113 -0
  292. package/integrations/basehub/README.md +0 -3
  293. package/layers/experiment/components/layout/header/index.tsx +0 -58
  294. package/layers/experiment/components/layout/navigation-menu.tsx +0 -127
  295. package/layers/experiment/lib/constants.ts +0 -12
  296. package/layers/webgl/app/page.tsx +0 -10
  297. package/layers/webgl/components/webgl/canvas/dynamic.tsx +0 -34
  298. package/layers/webgl/components/webgl/canvas/index.tsx +0 -43
  299. package/layers/webgl/components/webgl/components/scene/index.tsx +0 -21
  300. package/src/mergers/next-config-merger.js +0 -63
  301. /package/{src → packages/cli/src}/commands/setup-sanity.js +0 -0
  302. /package/{src → packages/cli/src}/commands/worktree.js +0 -0
  303. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/api/draft-mode/disable/route.ts +0 -0
  304. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/api/draft-mode/enable/route.ts +0 -0
  305. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/api/revalidate/route.ts +0 -0
  306. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/layout.tsx +0 -0
  307. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/sitemap.ts +0 -0
  308. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/studio/[[...tool]]/page.tsx +0 -0
  309. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/studio/layout.tsx +0 -0
  310. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/components/ui/sanity-image/index.tsx +0 -0
  311. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/README.md +0 -0
  312. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/check-integration.ts +0 -0
  313. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/README.md +0 -0
  314. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/client.ts +0 -0
  315. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/components/disable-draft-mode.tsx +0 -0
  316. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/components/rich-text.tsx +0 -0
  317. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/env.ts +0 -0
  318. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/live/index.tsx +0 -0
  319. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/queries.ts +0 -0
  320. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/sanity.cli.ts +0 -0
  321. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/sanity.config.ts +0 -0
  322. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/sanity.types.ts +0 -0
  323. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schema.json +0 -0
  324. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/article.ts +0 -0
  325. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/example.ts +0 -0
  326. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/index.ts +0 -0
  327. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/link.ts +0 -0
  328. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/metadata.ts +0 -0
  329. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/navigation.ts +0 -0
  330. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/page.ts +0 -0
  331. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/richText.ts +0 -0
  332. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/structure.ts +0 -0
  333. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/utils/image.ts +0 -0
  334. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/utils/link.ts +0 -0
  335. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/scripts/copy-sanity-mcp.ts +0 -0
  336. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/scripts/generate-page.ts +0 -0
  337. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/utils/metadata.ts +0 -0
  338. /package/{plugins → packages/create-basement-app/plugins}/README.md +0 -0
  339. /package/{plugins → packages/create-basement-app/plugins}/no-anchor-element.grit +0 -0
  340. /package/{plugins → packages/create-basement-app/plugins}/no-relative-parent-imports.grit +0 -0
  341. /package/{plugins → packages/create-basement-app/plugins}/no-unnecessary-forwardref.grit +0 -0
  342. /package/{template-hooks → packages/create-basement-app/template-hooks}/use-battery.ts +0 -0
  343. /package/{template-hooks → packages/create-basement-app/template-hooks}/use-device-perf.ts +0 -0
  344. /package/{template-hooks → packages/create-basement-app/template-hooks}/use-intersection-observer.ts +0 -0
  345. /package/{template-hooks → packages/create-basement-app/template-hooks}/use-media.ts +0 -0
  346. /package/{layers/webgpu → packages/create-basement-app/templates/default/lib/integrations}/.gitkeep +0 -0
@@ -0,0 +1,67 @@
1
+ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2
+
3
+ # dependencies
4
+ /node_modules
5
+ /.pnp
6
+ .pnp.*
7
+ .turbo
8
+ .npmrc
9
+ .yarn/*
10
+ !.yarn/patches
11
+ !.yarn/plugins
12
+ !.yarn/releases
13
+ !.yarn/versions
14
+
15
+ # testing
16
+ /coverage
17
+
18
+ # next.js
19
+ /.next/
20
+ /out/
21
+
22
+ # TypeScript
23
+ *.tsbuildinfo
24
+
25
+ # production
26
+ /build
27
+ /public/sw.js
28
+
29
+ # misc
30
+ .DS_Store
31
+ *.pem
32
+ .cursor/scratchpad.md
33
+
34
+ # debug
35
+ npm-debug.log*
36
+ yarn-debug.log*
37
+ yarn-error.log*
38
+
39
+ # local env files
40
+ .env
41
+ .env.local
42
+ .env*.local
43
+ .env.development.local
44
+ .env.test.local
45
+ .env.production.local
46
+
47
+ # vercel
48
+ .vercel
49
+
50
+ # tldr
51
+ .tldr
52
+
53
+ # eslint
54
+ .eslintcache
55
+
56
+ # certificates
57
+ certificates
58
+
59
+ next-env.d.ts
60
+ # claude
61
+ .claude
62
+
63
+ # unlighthouse
64
+ .unlighthouse/
65
+
66
+ # storybook
67
+ *storybook.log
@@ -0,0 +1,104 @@
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
+
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
+ const APP_BASE_URL =
16
+ process.env.NEXT_PUBLIC_BASE_URL ?? "https://localhost:3000"
17
+
18
+ const geist = Geist({
19
+ subsets: ["latin"],
20
+ })
21
+
22
+ export const metadata: Metadata = {
23
+ alternates: {
24
+ canonical: "/",
25
+ languages: {
26
+ "en-US": "/en-US",
27
+ },
28
+ },
29
+ appleWebApp: {
30
+ capable: true,
31
+ statusBarStyle: "default",
32
+ title: APP_DEFAULT_TITLE,
33
+ },
34
+ applicationName: APP_NAME,
35
+ authors: [{ name: "basement.studio", url: "https://basement.studio" }],
36
+ description: APP_DESCRIPTION,
37
+ formatDetection: { telephone: false },
38
+ metadataBase: new URL(APP_BASE_URL),
39
+ openGraph: {
40
+ description: APP_DESCRIPTION,
41
+ images: [
42
+ {
43
+ alt: APP_DEFAULT_TITLE,
44
+ height: 630,
45
+ url: "/opengraph-image.jpg",
46
+ width: 1200,
47
+ },
48
+ ],
49
+ locale: "en_US",
50
+ siteName: APP_NAME,
51
+ title: {
52
+ default: APP_DEFAULT_TITLE,
53
+ template: APP_TITLE_TEMPLATE,
54
+ },
55
+ type: "website",
56
+ url: APP_BASE_URL,
57
+ },
58
+ other: {
59
+ "fb:app_id": process.env.NEXT_PUBLIC_FACEBOOK_APP_ID || "",
60
+ },
61
+ title: {
62
+ default: APP_DEFAULT_TITLE,
63
+ template: APP_TITLE_TEMPLATE,
64
+ },
65
+ twitter: {
66
+ card: "summary_large_image",
67
+ description: APP_DESCRIPTION,
68
+ title: {
69
+ default: APP_DEFAULT_TITLE,
70
+ template: APP_TITLE_TEMPLATE,
71
+ },
72
+ },
73
+ }
74
+
75
+ export const viewport: Viewport = {
76
+ colorScheme: "normal",
77
+ themeColor: themes.dark.primary,
78
+ }
79
+
80
+ export default async function Layout({ children }: PropsWithChildren) {
81
+ return (
82
+ <html
83
+ lang="en"
84
+ dir="ltr"
85
+ className={cn(fontsVariable, geist.className)}
86
+ // NOTE: This is due to the data-theme attribute being set which causes hydration errors
87
+ suppressHydrationWarning
88
+ >
89
+ <body>
90
+ {/* Skip link for keyboard navigation accessibility */}
91
+ <Suspense fallback={null}>
92
+ <Link
93
+ href="#main-content"
94
+ 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"
95
+ >
96
+ Skip to main content
97
+ </Link>
98
+ </Suspense>
99
+
100
+ {children}
101
+ </body>
102
+ </html>
103
+ )
104
+ }
@@ -0,0 +1,275 @@
1
+ import { Wrapper } from "@/components/layout/wrapper"
2
+ import { Link } from "@/components/ui/link"
3
+ import { colors } from "@/lib/styles/colors"
4
+ import { breakpoints, layout } from "@/lib/styles/layout.mjs"
5
+
6
+ const TECH_STACK = [
7
+ { description: "App Router, Turbopack", name: "Next.js", version: "16.1" },
8
+ { description: "React Compiler enabled", name: "React", version: "19" },
9
+ { description: "Strict mode", name: "TypeScript", version: "5.9" },
10
+ { description: "CSS-first config", name: "Tailwind CSS", version: "4" },
11
+ { description: "Lint + Format", name: "Biome", version: "2.3" },
12
+ { description: "Package manager", name: "Bun", version: "1.3" },
13
+ ]
14
+
15
+ const FEATURES = [
16
+ {
17
+ description:
18
+ "Pre-configured colors, breakpoints, typography, and 30+ easing functions ready to use.",
19
+ title: "Design System",
20
+ },
21
+ {
22
+ description:
23
+ "Enhanced Image and Link components with blur placeholders, connection-aware prefetching.",
24
+ title: "Smart Components",
25
+ },
26
+ {
27
+ description:
28
+ "Light/dark theme with CSS custom properties and React context.",
29
+ title: "Theme Support",
30
+ },
31
+ {
32
+ description:
33
+ "Custom scripts for component scaffolding, style generation, and HTTPS dev server.",
34
+ title: "Developer Experience",
35
+ },
36
+ {
37
+ description:
38
+ "Bundle analyzer, optimized imports, security headers, and image optimization.",
39
+ title: "Performance Optimized",
40
+ },
41
+ ]
42
+
43
+ const SCRIPTS = [
44
+ { cmd: "bun dev", desc: "Start development server" },
45
+ { cmd: "bun dev:https", desc: "Start with HTTPS" },
46
+ { cmd: "bun build", desc: "Build for production" },
47
+ { cmd: "bun generate", desc: "Scaffold components" },
48
+ { cmd: "bun lint:fix", desc: "Fix lint issues" },
49
+ { cmd: "bun typecheck", desc: "Type check with tsgo" },
50
+ ]
51
+
52
+ const VERSION = "1.0.0"
53
+
54
+ export default function Home() {
55
+ return (
56
+ <Wrapper theme="dark">
57
+ {/* Hero */}
58
+ <section className="flex min-h-[80vh] flex-col justify-center px-safe pt-header-height">
59
+ <div className="max-w-3xl">
60
+ <p className="font-mono text-contrast text-sm uppercase tracking-wider">
61
+ Next.js Starter Template v{VERSION}
62
+ </p>
63
+ <h1 className="mt-4 font-semibold text-4xl leading-tight tracking-tight md:text-6xl">
64
+ Basement Next Starter
65
+ </h1>
66
+ <p className="mt-6 max-w-xl text-lg text-secondary/70">
67
+ A production-ready Next.js starter with React 19, Tailwind CSS v4,
68
+ TypeScript strict mode, and everything you need to build modern web
69
+ applications.
70
+ </p>
71
+ <div className="mt-8 flex flex-wrap gap-4 font-mono text-sm uppercase">
72
+ <Link
73
+ href="https://github.com/basementstudio/next-starter/generate"
74
+ className="bg-secondary px-6 py-3 text-primary transition-opacity hover:opacity-80"
75
+ >
76
+ Use this template
77
+ </Link>
78
+ <Link
79
+ href="https://github.com/basementstudio/next-starter"
80
+ className="border border-secondary/30 px-6 py-3 transition-colors hover:border-secondary"
81
+ >
82
+ View on GitHub
83
+ </Link>
84
+ </div>
85
+ </div>
86
+ </section>
87
+
88
+ {/* Tech Stack */}
89
+ <section className="px-safe py-24">
90
+ <h2 className="font-mono text-contrast text-sm uppercase tracking-wider">
91
+ Tech Stack
92
+ </h2>
93
+ <div className="mt-8 grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
94
+ {TECH_STACK.map((tech) => (
95
+ <div
96
+ key={tech.name}
97
+ className="border border-secondary/10 p-6 transition-colors hover:border-secondary/30"
98
+ >
99
+ <div className="flex items-baseline justify-between">
100
+ <span className="font-semibold text-lg">{tech.name}</span>
101
+ <span className="font-mono text-contrast text-sm">
102
+ v{tech.version}
103
+ </span>
104
+ </div>
105
+ <p className="mt-2 text-secondary/60 text-sm">
106
+ {tech.description}
107
+ </p>
108
+ </div>
109
+ ))}
110
+ </div>
111
+ </section>
112
+
113
+ {/* Features */}
114
+ <section className="px-safe py-24">
115
+ <h2 className="font-mono text-contrast text-sm uppercase tracking-wider">
116
+ Features
117
+ </h2>
118
+ <div className="mt-8 grid gap-8 sm:grid-cols-2 lg:grid-cols-3">
119
+ {FEATURES.map((feature) => (
120
+ <div key={feature.title}>
121
+ <h3 className="font-semibold text-lg">{feature.title}</h3>
122
+ <p className="mt-2 text-secondary/60">{feature.description}</p>
123
+ </div>
124
+ ))}
125
+ </div>
126
+ </section>
127
+
128
+ {/* Design System */}
129
+ <section className="px-safe py-24">
130
+ <h2 className="font-mono text-contrast text-sm uppercase tracking-wider">
131
+ Design System
132
+ </h2>
133
+
134
+ {/* Colors */}
135
+ <div className="mt-8">
136
+ <h3 className="font-mono text-secondary/60 text-xs uppercase">
137
+ Colors
138
+ </h3>
139
+ <div className="mt-4 flex flex-wrap gap-3">
140
+ {Object.entries(colors).map(([name, value]) => (
141
+ <div key={name} className="flex items-center gap-2">
142
+ <div
143
+ className="size-8 rounded border border-secondary/20"
144
+ style={{ backgroundColor: value }}
145
+ />
146
+ <div className="font-mono text-xs">
147
+ <div className="text-secondary">{name}</div>
148
+ <div className="text-secondary/40">{value}</div>
149
+ </div>
150
+ </div>
151
+ ))}
152
+ </div>
153
+ </div>
154
+
155
+ {/* Breakpoints */}
156
+ <div className="mt-12">
157
+ <h3 className="font-mono text-secondary/60 text-xs uppercase">
158
+ Breakpoints
159
+ </h3>
160
+ <div className="mt-4 flex flex-wrap gap-4">
161
+ {Object.entries(breakpoints).map(([name, value]) => (
162
+ <div
163
+ key={name}
164
+ className="border border-secondary/10 px-4 py-2 font-mono text-sm"
165
+ >
166
+ <span className="text-secondary">{name}</span>
167
+ <span className="ml-2 text-secondary/40">{value}px</span>
168
+ </div>
169
+ ))}
170
+ </div>
171
+ </div>
172
+
173
+ {/* Grid */}
174
+ <div className="mt-12">
175
+ <h3 className="font-mono text-secondary/60 text-xs uppercase">
176
+ Grid System
177
+ </h3>
178
+ <div className="mt-4 flex gap-8 font-mono text-sm">
179
+ <div>
180
+ <span className="text-secondary/40">Mobile:</span>{" "}
181
+ <span className="text-secondary">
182
+ {layout.columns.mobile} columns
183
+ </span>
184
+ </div>
185
+ <div>
186
+ <span className="text-secondary/40">Desktop:</span>{" "}
187
+ <span className="text-secondary">
188
+ {layout.columns.desktop} columns
189
+ </span>
190
+ </div>
191
+ <div>
192
+ <span className="text-secondary/40">Gap:</span>{" "}
193
+ <span className="text-secondary">{layout.gap.desktop}px</span>
194
+ </div>
195
+ </div>
196
+ </div>
197
+ </section>
198
+
199
+ {/* Quick Start */}
200
+ <section className="px-safe py-24">
201
+ <h2 className="font-mono text-contrast text-sm uppercase tracking-wider">
202
+ Quick Start
203
+ </h2>
204
+
205
+ <div className="mt-8 max-w-2xl">
206
+ <div className="border border-secondary/10 bg-secondary/5 p-6 font-mono text-sm">
207
+ <div className="text-secondary/40"># Clone the template</div>
208
+ <div className="mt-1 text-secondary">
209
+ bunx degit basementstudio/next-starter my-project
210
+ </div>
211
+ <div className="mt-4 text-secondary/40"># Install dependencies</div>
212
+ <div className="mt-1 text-secondary">
213
+ cd my-project && bun install
214
+ </div>
215
+ <div className="mt-4 text-secondary/40"># Start development</div>
216
+ <div className="mt-1 text-secondary">bun dev</div>
217
+ </div>
218
+ </div>
219
+
220
+ <div className="mt-12">
221
+ <h3 className="font-mono text-secondary/60 text-xs uppercase">
222
+ Available Scripts
223
+ </h3>
224
+ <div className="mt-4 grid gap-2 sm:grid-cols-2 lg:grid-cols-3">
225
+ {SCRIPTS.map((script) => (
226
+ <div
227
+ key={script.cmd}
228
+ className="flex items-center justify-between border border-secondary/10 px-4 py-3 font-mono text-sm"
229
+ >
230
+ <code className="text-secondary">{script.cmd}</code>
231
+ <span className="text-secondary/40">{script.desc}</span>
232
+ </div>
233
+ ))}
234
+ </div>
235
+ </div>
236
+ </section>
237
+
238
+ {/* Project Structure */}
239
+ <section className="px-safe py-24">
240
+ <h2 className="font-mono text-contrast text-sm uppercase tracking-wider">
241
+ Project Structure
242
+ </h2>
243
+ <div className="mt-8 max-w-2xl border border-secondary/10 bg-secondary/5 p-6 font-mono text-sm leading-relaxed">
244
+ <pre className="text-secondary/80">
245
+ {`app/ # Next.js pages and routes
246
+ components/
247
+ ├── layout/ # Header, Footer, Wrapper, Theme
248
+ └── ui/ # Image, Link, SanityImage
249
+ lib/
250
+ ├── hooks/ # useDeviceDetection, useMediaBreakpoint
251
+ ├── scripts/ # Dev tools, generators
252
+ ├── store/ # Zustand global state
253
+ ├── styles/ # Design tokens, CSS config
254
+ └── utils/ # Easings, math, strings, fetch`}
255
+ </pre>
256
+ </div>
257
+ </section>
258
+
259
+ {/* CTA */}
260
+ <section className="px-safe py-24 text-center">
261
+ <p className="font-mono text-secondary/60 text-sm uppercase">
262
+ Ready to build something great?
263
+ </p>
264
+ <div className="mt-6 flex justify-center gap-4 font-mono text-sm uppercase">
265
+ <Link
266
+ href="https://github.com/basementstudio/next-starter/generate"
267
+ className="bg-contrast px-8 py-4 text-primary transition-opacity hover:opacity-80"
268
+ >
269
+ Get Started
270
+ </Link>
271
+ </div>
272
+ </section>
273
+ </Wrapper>
274
+ )
275
+ }
@@ -0,0 +1,15 @@
1
+ import type { MetadataRoute } from "next"
2
+
3
+ const APP_BASE_URL =
4
+ process.env.NEXT_PUBLIC_BASE_URL ?? "https://localhost:3000"
5
+
6
+ export default function robots(): MetadataRoute.Robots {
7
+ return {
8
+ rules: {
9
+ userAgent: "*",
10
+ allow: "/",
11
+ disallow: [],
12
+ },
13
+ sitemap: `${APP_BASE_URL}/sitemap.xml`,
14
+ }
15
+ }
@@ -0,0 +1,16 @@
1
+ import type { MetadataRoute } from "next"
2
+
3
+ const APP_BASE_URL =
4
+ process.env.NEXT_PUBLIC_BASE_URL ?? "https://localhost:3000"
5
+
6
+ export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
7
+ const baseRoutes: MetadataRoute.Sitemap = [
8
+ {
9
+ url: APP_BASE_URL,
10
+ lastModified: new Date(),
11
+ changeFrequency: "daily",
12
+ priority: 1,
13
+ },
14
+ ]
15
+ return baseRoutes
16
+ }