bsmnt 0.1.2 → 0.2.0

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 (447) 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 +25 -12
  88. package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/package.json +1 -1
  89. package/src/templates/next-webgl/lib/renderer.ts +7 -0
  90. package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/package.json +1 -1
  91. package/.changeset/README.md +0 -10
  92. package/.changeset/config.json +0 -16
  93. package/.github/workflows/ci.yml +0 -37
  94. package/.github/workflows/release.yml +0 -56
  95. package/.tldr/cache/call_graph.json +0 -7
  96. package/.tldr/languages.json +0 -6
  97. package/.tldr/status +0 -1
  98. package/.tldrignore +0 -84
  99. package/.vscode/settings.json +0 -98
  100. package/CHANGELOG.md +0 -68
  101. package/CLAUDE.md +0 -156
  102. package/biome.json +0 -45
  103. package/bun.lock +0 -496
  104. package/changelog/04-02-26.md +0 -86
  105. package/changelog/05-02-26.md +0 -101
  106. package/changelog/09-02-26.md +0 -83
  107. package/docs/architecture.drawio +0 -250
  108. package/docs/architecture.mermaid +0 -85
  109. package/docs/fix-studio-hydration.md +0 -46
  110. package/docs/plans/2026-01-29-sanity-smart-merge-design.md +0 -196
  111. package/docs/plans/2026-01-29-sanity-smart-merge-implementation.md +0 -695
  112. package/docs/sanity-setup-steps.md +0 -199
  113. package/packages/cli/bin/index.js +0 -259
  114. package/packages/cli/package.json +0 -16
  115. package/packages/cli/src/commands/add-integration.js +0 -310
  116. package/packages/cli/src/commands/create.js +0 -409
  117. package/packages/cli/src/commands/setup-sanity.js +0 -426
  118. package/packages/cli/src/commands/worktree.js +0 -805
  119. package/packages/create-basement-app/integrations/sanity/config.js +0 -46
  120. package/packages/create-basement-app/integrations/sanity/files/app/api/draft-mode/disable/route.ts +0 -7
  121. package/packages/create-basement-app/integrations/sanity/files/app/api/draft-mode/enable/route.ts +0 -21
  122. package/packages/create-basement-app/integrations/sanity/files/app/api/revalidate/route.ts +0 -37
  123. package/packages/create-basement-app/integrations/sanity/files/app/layout.tsx +0 -111
  124. package/packages/create-basement-app/integrations/sanity/files/app/sitemap.ts +0 -80
  125. package/packages/create-basement-app/integrations/sanity/files/app/studio/[[...tool]]/page.tsx +0 -8
  126. package/packages/create-basement-app/integrations/sanity/files/app/studio/layout.tsx +0 -7
  127. package/packages/create-basement-app/integrations/sanity/files/components/ui/sanity-image/index.tsx +0 -37
  128. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/README.md +0 -58
  129. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/check-integration.ts +0 -62
  130. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/README.md +0 -144
  131. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/client.ts +0 -30
  132. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/components/disable-draft-mode.tsx +0 -29
  133. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/components/rich-text.tsx +0 -73
  134. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/env.ts +0 -38
  135. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/live/index.tsx +0 -34
  136. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/queries.ts +0 -99
  137. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/sanity.cli.ts +0 -20
  138. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/sanity.config.ts +0 -94
  139. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/sanity.types.ts +0 -337
  140. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schema.json +0 -1850
  141. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/article.ts +0 -132
  142. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/example.ts +0 -203
  143. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/index.ts +0 -37
  144. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/link.ts +0 -127
  145. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/metadata.ts +0 -68
  146. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/navigation.ts +0 -39
  147. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/page.ts +0 -77
  148. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/richText.ts +0 -59
  149. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/structure.ts +0 -5
  150. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/utils/image.ts +0 -11
  151. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/utils/link.ts +0 -61
  152. package/packages/create-basement-app/integrations/sanity/files/lib/scripts/copy-sanity-mcp.ts +0 -23
  153. package/packages/create-basement-app/integrations/sanity/files/lib/scripts/generate-page.ts +0 -310
  154. package/packages/create-basement-app/integrations/sanity/files/lib/utils/metadata.ts +0 -190
  155. package/packages/create-basement-app/integrations/sanity/mergers/check-integration-merger.js +0 -105
  156. package/packages/create-basement-app/integrations/sanity/mergers/layout-merger.js +0 -223
  157. package/packages/create-basement-app/integrations/sanity/mergers/sitemap-merger.js +0 -121
  158. package/packages/create-basement-app/package.json +0 -10
  159. package/packages/create-basement-app/src/configs/animations.js +0 -28
  160. package/packages/create-basement-app/src/index.js +0 -15
  161. package/packages/create-basement-app/src/mergers/check-integration-merger.js +0 -105
  162. package/packages/create-basement-app/src/mergers/config.js +0 -109
  163. package/packages/create-basement-app/src/mergers/index.js +0 -346
  164. package/packages/create-basement-app/src/mergers/layout-merger.js +0 -223
  165. package/packages/create-basement-app/templates/experiment/.cursor/rules/README.md +0 -184
  166. package/packages/create-basement-app/templates/experiment/.cursor/rules/architecture.mdc +0 -437
  167. package/packages/create-basement-app/templates/experiment/.cursor/rules/components.mdc +0 -436
  168. package/packages/create-basement-app/templates/experiment/.cursor/rules/integrations.mdc +0 -447
  169. package/packages/create-basement-app/templates/experiment/.cursor/rules/main.mdc +0 -278
  170. package/packages/create-basement-app/templates/experiment/.cursor/rules/styling.mdc +0 -433
  171. package/packages/create-basement-app/templates/experiment/.github/PULL_REQUEST_TEMPLATE.md +0 -14
  172. package/packages/create-basement-app/templates/experiment/.vscode/extensions.json +0 -20
  173. package/packages/create-basement-app/templates/experiment/app/page.tsx +0 -275
  174. package/packages/create-basement-app/templates/webgl/.biome/plugins/README.md +0 -21
  175. package/packages/create-basement-app/templates/webgl/.biome/plugins/no-anchor-element.grit +0 -12
  176. package/packages/create-basement-app/templates/webgl/.biome/plugins/no-relative-parent-imports.grit +0 -10
  177. package/packages/create-basement-app/templates/webgl/.biome/plugins/no-unnecessary-forwardref.grit +0 -9
  178. package/packages/create-basement-app/templates/webgl/.cursor/rules/README.md +0 -184
  179. package/packages/create-basement-app/templates/webgl/.cursor/rules/architecture.mdc +0 -437
  180. package/packages/create-basement-app/templates/webgl/.cursor/rules/components.mdc +0 -436
  181. package/packages/create-basement-app/templates/webgl/.cursor/rules/integrations.mdc +0 -447
  182. package/packages/create-basement-app/templates/webgl/.cursor/rules/main.mdc +0 -278
  183. package/packages/create-basement-app/templates/webgl/.cursor/rules/styling.mdc +0 -433
  184. package/packages/create-basement-app/templates/webgl/.github/PULL_REQUEST_TEMPLATE.md +0 -14
  185. package/packages/create-basement-app/templates/webgl/.github/workflows/lighthouse-to-slack.yml +0 -136
  186. package/packages/create-basement-app/templates/webgl/.vscode/extensions.json +0 -20
  187. package/packages/create-basement-app/templates/webgl/.vscode/settings.json +0 -105
  188. package/packages/create-basement-app/templates/webgl/app/favicon.ico +0 -0
  189. package/packages/create-basement-app/templates/webgl/app/layout.tsx +0 -104
  190. package/packages/create-basement-app/templates/webgl/app/robots.ts +0 -15
  191. package/packages/create-basement-app/templates/webgl/app/sitemap.ts +0 -16
  192. package/packages/create-basement-app/templates/webgl/components/layout/footer/index.tsx +0 -27
  193. package/packages/create-basement-app/templates/webgl/components/layout/header/index.tsx +0 -11
  194. package/packages/create-basement-app/templates/webgl/components/layout/theme/index.tsx +0 -66
  195. package/packages/create-basement-app/templates/webgl/components/layout/wrapper/index.tsx +0 -65
  196. package/packages/create-basement-app/templates/webgl/components/ui/README.md +0 -77
  197. package/packages/create-basement-app/templates/webgl/components/ui/image/README.md +0 -37
  198. package/packages/create-basement-app/templates/webgl/components/ui/image/index.tsx +0 -224
  199. package/packages/create-basement-app/templates/webgl/components/ui/link/index.tsx +0 -146
  200. package/packages/create-basement-app/templates/webgl/lib/integrations/.gitkeep +0 -0
  201. package/packages/create-basement-app/templates/webgl/public/fonts/geist/Geist-Mono.woff2 +0 -0
  202. package/tasks/.last-branch +0 -1
  203. package/tasks/CLAUDE.md +0 -104
  204. package/tasks/archive/2026-02-09-next-starter-dynamic-layers/prd.json +0 -153
  205. package/tasks/archive/2026-02-09-next-starter-dynamic-layers/progress.txt +0 -115
  206. package/tasks/prd-next-starter-dynamic-layers.md +0 -184
  207. package/tasks/prd-project-restructure.md +0 -375
  208. package/tasks/prd.json +0 -289
  209. package/tasks/progress.txt +0 -309
  210. package/tasks/ralph.sh +0 -113
  211. /package/{packages/create-basement-app/plugins → plugins}/no-anchor-element.grit +0 -0
  212. /package/{packages/create-basement-app/plugins → plugins}/no-relative-parent-imports.grit +0 -0
  213. /package/{packages/create-basement-app/plugins → plugins}/no-unnecessary-forwardref.grit +0 -0
  214. /package/{packages/create-basement-app → src}/template-hooks/config.js +0 -0
  215. /package/{packages/create-basement-app → src}/template-hooks/use-battery.ts +0 -0
  216. /package/{packages/create-basement-app → src}/template-hooks/use-device-perf.ts +0 -0
  217. /package/{packages/create-basement-app → src}/template-hooks/use-intersection-observer.ts +0 -0
  218. /package/{packages/create-basement-app → src}/template-hooks/use-media.ts +0 -0
  219. /package/{packages/create-basement-app → src/templates/next-default/.biome}/plugins/README.md +0 -0
  220. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.editorconfig +0 -0
  221. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.env.example +0 -0
  222. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.gitattributes +0 -0
  223. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/README.md +0 -0
  224. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/_gitignore +0 -0
  225. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/biome.json +0 -0
  226. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/components/basement.svg +0 -0
  227. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/README.md +0 -0
  228. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/index.ts +0 -0
  229. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/use-device-detection.ts +0 -0
  230. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/use-media-breakpoint.ts +0 -0
  231. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/use-prefetch.ts +0 -0
  232. /package/{.github/workflows → src/templates/next-default/lib/integrations}/.gitkeep +0 -0
  233. /package/{packages/create-basement-app/templates/webgl → src/templates/next-default}/lib/renderer.ts +0 -0
  234. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/dev.ts +0 -0
  235. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/generate-component.ts +0 -0
  236. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/generate-page.ts +0 -0
  237. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/generate.ts +0 -0
  238. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/utils.ts +0 -0
  239. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/store/app.ts +0 -0
  240. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/store/index.ts +0 -0
  241. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/README.md +0 -0
  242. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/cn.ts +0 -0
  243. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/colors.ts +0 -0
  244. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/config.ts +0 -0
  245. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/global.css +0 -0
  246. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/index.css +0 -0
  247. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/reset.css +0 -0
  248. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/root.css +0 -0
  249. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/tailwind.css +0 -0
  250. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/easings.ts +0 -0
  251. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/fonts.ts +0 -0
  252. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/index.ts +0 -0
  253. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/layout.mjs +0 -0
  254. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/README.md +0 -0
  255. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/generate-root.ts +0 -0
  256. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/generate-tailwind.ts +0 -0
  257. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/postcss-functions.mjs +0 -0
  258. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/setup-styles.ts +0 -0
  259. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/utils.ts +0 -0
  260. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/typography.ts +0 -0
  261. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/README.md +0 -0
  262. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/css.d.ts +0 -0
  263. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/easings.ts +0 -0
  264. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/fetch.ts +0 -0
  265. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/math.test.ts +0 -0
  266. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/math.ts +0 -0
  267. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/metadata.ts +0 -0
  268. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/strings.test.ts +0 -0
  269. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/strings.ts +0 -0
  270. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/types.d.ts +0 -0
  271. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/viewport.test.ts +0 -0
  272. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/viewport.ts +0 -0
  273. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/next.config.ts +0 -0
  274. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/package.json +0 -0
  275. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/postcss.config.mjs +0 -0
  276. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/tsconfig.json +0 -0
  277. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.biome/plugins/README.md +0 -0
  278. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.biome/plugins/no-anchor-element.grit +0 -0
  279. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.biome/plugins/no-relative-parent-imports.grit +0 -0
  280. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.biome/plugins/no-unnecessary-forwardref.grit +0 -0
  281. /package/{.cursor → src/templates/next-experiments/.cursor}/rules/README.md +0 -0
  282. /package/{.cursor → src/templates/next-experiments/.cursor}/rules/architecture.mdc +0 -0
  283. /package/{.cursor → src/templates/next-experiments/.cursor}/rules/components.mdc +0 -0
  284. /package/{.cursor → src/templates/next-experiments/.cursor}/rules/integrations.mdc +0 -0
  285. /package/{.cursor → src/templates/next-experiments/.cursor}/rules/main.mdc +0 -0
  286. /package/{.cursor → src/templates/next-experiments/.cursor}/rules/styling.mdc +0 -0
  287. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.editorconfig +0 -0
  288. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.env.example +0 -0
  289. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.gitattributes +0 -0
  290. /package/{.github → src/templates/next-experiments/.github}/PULL_REQUEST_TEMPLATE.md +0 -0
  291. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.github/workflows/lighthouse-to-slack.yml +0 -0
  292. /package/{.vscode → src/templates/next-experiments/.vscode}/extensions.json +0 -0
  293. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.vscode/settings.json +0 -0
  294. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/README.md +0 -0
  295. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/_gitignore +0 -0
  296. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/favicon.ico +0 -0
  297. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/layout.tsx +0 -0
  298. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/page.tsx +0 -0
  299. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/robots.ts +0 -0
  300. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/sitemap.ts +0 -0
  301. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/biome.json +0 -0
  302. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/basement.svg +0 -0
  303. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/layout/footer/index.tsx +0 -0
  304. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/layout/header/index.tsx +0 -0
  305. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/layout/navigation-menu.tsx +0 -0
  306. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/layout/theme/index.tsx +0 -0
  307. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/layout/wrapper/index.tsx +0 -0
  308. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/ui/README.md +0 -0
  309. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/ui/image/README.md +0 -0
  310. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/ui/image/index.tsx +0 -0
  311. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/ui/link/index.tsx +0 -0
  312. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/README.md +0 -0
  313. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/constants.ts +0 -0
  314. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/index.ts +0 -0
  315. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/use-device-detection.ts +0 -0
  316. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/use-media-breakpoint.ts +0 -0
  317. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/use-prefetch.ts +0 -0
  318. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/lib/integrations/.gitkeep +0 -0
  319. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/dev.ts +0 -0
  320. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/generate-component.ts +0 -0
  321. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/generate-page.ts +0 -0
  322. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/generate.ts +0 -0
  323. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/utils.ts +0 -0
  324. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/store/app.ts +0 -0
  325. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/store/index.ts +0 -0
  326. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/README.md +0 -0
  327. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/cn.ts +0 -0
  328. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/colors.ts +0 -0
  329. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/config.ts +0 -0
  330. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/global.css +0 -0
  331. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/index.css +0 -0
  332. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/reset.css +0 -0
  333. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/root.css +0 -0
  334. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/tailwind.css +0 -0
  335. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/easings.ts +0 -0
  336. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/fonts.ts +0 -0
  337. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/index.ts +0 -0
  338. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/layout.mjs +0 -0
  339. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/README.md +0 -0
  340. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/generate-root.ts +0 -0
  341. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/generate-tailwind.ts +0 -0
  342. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/postcss-functions.mjs +0 -0
  343. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/setup-styles.ts +0 -0
  344. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/utils.ts +0 -0
  345. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/typography.ts +0 -0
  346. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/README.md +0 -0
  347. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/css.d.ts +0 -0
  348. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/easings.ts +0 -0
  349. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/fetch.ts +0 -0
  350. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/math.test.ts +0 -0
  351. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/math.ts +0 -0
  352. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/metadata.ts +0 -0
  353. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/strings.test.ts +0 -0
  354. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/strings.ts +0 -0
  355. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/types.d.ts +0 -0
  356. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/viewport.test.ts +0 -0
  357. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/viewport.ts +0 -0
  358. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/next.config.ts +0 -0
  359. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/postcss.config.mjs +0 -0
  360. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/public/fonts/geist/Geist-Mono.woff2 +0 -0
  361. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/tsconfig.json +0 -0
  362. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.biome/plugins/README.md +0 -0
  363. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.biome/plugins/no-anchor-element.grit +0 -0
  364. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.biome/plugins/no-relative-parent-imports.grit +0 -0
  365. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.biome/plugins/no-unnecessary-forwardref.grit +0 -0
  366. /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/.cursor/rules/README.md +0 -0
  367. /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/.cursor/rules/architecture.mdc +0 -0
  368. /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/.cursor/rules/components.mdc +0 -0
  369. /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/.cursor/rules/integrations.mdc +0 -0
  370. /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/.cursor/rules/main.mdc +0 -0
  371. /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/.cursor/rules/styling.mdc +0 -0
  372. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.editorconfig +0 -0
  373. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.env.example +0 -0
  374. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.gitattributes +0 -0
  375. /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  376. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.github/workflows/lighthouse-to-slack.yml +0 -0
  377. /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/.vscode/extensions.json +0 -0
  378. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.vscode/settings.json +0 -0
  379. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/README.md +0 -0
  380. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/_gitignore +0 -0
  381. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/app/favicon.ico +0 -0
  382. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/app/layout.tsx +0 -0
  383. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/app/page.tsx +0 -0
  384. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/app/robots.ts +0 -0
  385. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/app/sitemap.ts +0 -0
  386. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/biome.json +0 -0
  387. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/basement.svg +0 -0
  388. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/layout/footer/index.tsx +0 -0
  389. /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/components/layout/header/index.tsx +0 -0
  390. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/layout/theme/index.tsx +0 -0
  391. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/layout/wrapper/index.tsx +0 -0
  392. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/ui/README.md +0 -0
  393. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/ui/image/README.md +0 -0
  394. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/ui/image/index.tsx +0 -0
  395. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/ui/link/index.tsx +0 -0
  396. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/webgl/canvas/dynamic.tsx +0 -0
  397. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/webgl/canvas/index.tsx +0 -0
  398. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/webgl/components/scene/index.tsx +0 -0
  399. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/README.md +0 -0
  400. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/index.ts +0 -0
  401. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/use-device-detection.ts +0 -0
  402. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/use-media-breakpoint.ts +0 -0
  403. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/use-prefetch.ts +0 -0
  404. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/lib/integrations/.gitkeep +0 -0
  405. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/dev.ts +0 -0
  406. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/generate-component.ts +0 -0
  407. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/generate-page.ts +0 -0
  408. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/generate.ts +0 -0
  409. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/utils.ts +0 -0
  410. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/store/app.ts +0 -0
  411. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/store/index.ts +0 -0
  412. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/README.md +0 -0
  413. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/cn.ts +0 -0
  414. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/colors.ts +0 -0
  415. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/config.ts +0 -0
  416. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/global.css +0 -0
  417. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/index.css +0 -0
  418. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/reset.css +0 -0
  419. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/root.css +0 -0
  420. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/tailwind.css +0 -0
  421. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/easings.ts +0 -0
  422. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/fonts.ts +0 -0
  423. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/index.ts +0 -0
  424. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/layout.mjs +0 -0
  425. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/README.md +0 -0
  426. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/generate-root.ts +0 -0
  427. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/generate-tailwind.ts +0 -0
  428. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/postcss-functions.mjs +0 -0
  429. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/setup-styles.ts +0 -0
  430. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/utils.ts +0 -0
  431. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/typography.ts +0 -0
  432. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/README.md +0 -0
  433. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/css.d.ts +0 -0
  434. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/easings.ts +0 -0
  435. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/fetch.ts +0 -0
  436. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/math.test.ts +0 -0
  437. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/math.ts +0 -0
  438. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/metadata.ts +0 -0
  439. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/strings.test.ts +0 -0
  440. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/strings.ts +0 -0
  441. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/types.d.ts +0 -0
  442. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/viewport.test.ts +0 -0
  443. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/viewport.ts +0 -0
  444. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/next.config.ts +0 -0
  445. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/postcss.config.mjs +0 -0
  446. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/public/fonts/geist/Geist-Mono.woff2 +0 -0
  447. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/tsconfig.json +0 -0
@@ -1,14 +0,0 @@
1
- ## Summary
2
-
3
- <!-- Brief description of what this PR does -->
4
-
5
- ## Changes
6
-
7
- -
8
-
9
- ## Checklist
10
-
11
- - [ ] `bun lint` passes
12
- - [ ] Tested locally in dev mode
13
- - [ ] No breaking changes (or documented in summary)
14
-
@@ -1,136 +0,0 @@
1
- # Lighthouse Performance Reports
2
- #
3
- # Runs Lighthouse on Vercel deployments and posts results as commit comments.
4
- # Our GitHub → Slack integration forwards these to Slack automatically.
5
- #
6
- # Required GitHub Secrets:
7
- # VERCEL_TOKEN - Vercel API token (Settings → Tokens)
8
-
9
- name: Lighthouse
10
-
11
- on:
12
- push:
13
- branches: [main]
14
- pull_request:
15
- types: [opened, synchronize]
16
- branches: [main]
17
- paths:
18
- # Only runs when relevant files change
19
- - 'app/**'
20
- - 'components/**'
21
- - 'lib/**'
22
- - 'public/**'
23
- - 'package.json'
24
- - 'package-lock.json'
25
- - 'next.config.**'
26
-
27
- permissions:
28
- contents: write
29
- pull-requests: write
30
- actions: read
31
-
32
- jobs:
33
- lighthouse:
34
- runs-on: ubuntu-latest
35
- timeout-minutes: 10
36
-
37
- steps:
38
- - name: Discover Vercel Project
39
- id: vercel_info
40
- env:
41
- VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
42
- run: |
43
- project_name="${GITHUB_REPOSITORY##*/}"
44
- echo "Looking for Vercel project: $project_name"
45
-
46
- # Get team ID for basement.studio
47
- teams=$(curl -s -H "Authorization: Bearer $VERCEL_TOKEN" "https://api.vercel.com/v2/teams")
48
- team_id=$(echo "$teams" | jq -r '.teams[] | select(.slug=="basement") | .id')
49
- echo "Team ID: $team_id"
50
-
51
- # Get project ID by matching repo name
52
- projects=$(curl -s -H "Authorization: Bearer $VERCEL_TOKEN" "https://api.vercel.com/v9/projects?teamId=$team_id")
53
- project_id=$(echo "$projects" | jq -r ".projects[] | select(.name==\"$project_name\") | .id")
54
- echo "Project ID: $project_id"
55
-
56
- echo "team_id=$team_id" >> $GITHUB_OUTPUT
57
- echo "project_id=$project_id" >> $GITHUB_OUTPUT
58
-
59
- - name: Get Vercel Preview URL
60
- id: vercel_url
61
- uses: zentered/vercel-preview-url@v1.4.0
62
- env:
63
- VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
64
- with:
65
- vercel_team_id: ${{ steps.vercel_info.outputs.team_id }}
66
- vercel_project_id: ${{ steps.vercel_info.outputs.project_id }}
67
-
68
- - name: Wait for Deployment
69
- id: await
70
- uses: UnlyEd/github-action-await-vercel@v2.0.0
71
- env:
72
- VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
73
- with:
74
- deployment-url: ${{ steps.vercel_url.outputs.preview_url }}
75
- timeout: 300
76
- poll-interval: 10
77
- continue-on-error: true
78
-
79
- - name: Run Lighthouse
80
- if: steps.await.outcome == 'success'
81
- id: lighthouse
82
- uses: treosh/lighthouse-ci-action@v12
83
- env:
84
- LHCI_BUILD_CONTEXT__CURRENT_HASH: ${{ github.sha }}
85
- with:
86
- urls: https://${{ steps.vercel_url.outputs.preview_url }}
87
- uploadArtifacts: true
88
- temporaryPublicStorage: true
89
-
90
- - name: Format Results
91
- id: format
92
- uses: actions/github-script@v8
93
- env:
94
- DEPLOYMENT_FAILED: ${{ steps.await.outcome != 'success' }}
95
- PREVIEW_URL: ${{ steps.vercel_url.outputs.preview_url }}
96
- MANIFEST: ${{ steps.lighthouse.outputs.manifest }}
97
- LINKS: ${{ steps.lighthouse.outputs.links }}
98
- with:
99
- script: |
100
- if (process.env.DEPLOYMENT_FAILED === 'true') {
101
- core.setOutput('comment', '⚠️ Vercel deployment failed or timed out. Lighthouse audit skipped.');
102
- return;
103
- }
104
-
105
- try {
106
- const manifest = JSON.parse(process.env.MANIFEST);
107
- const links = JSON.parse(process.env.LINKS);
108
- const previewUrl = process.env.PREVIEW_URL;
109
-
110
- const scores = manifest[0].summary;
111
- const reportUrl = Object.values(links)[0];
112
-
113
- const emoji = (score) => score >= 0.9 ? '🟢' : score >= 0.5 ? '🟠' : '🔴';
114
- const format = (score) => Math.round(score * 100);
115
-
116
- const comment = [
117
- `⚡️ [Lighthouse report](${reportUrl}) for this commit:`,
118
- '',
119
- `${emoji(scores.performance)} Performance: ${format(scores.performance)}`,
120
- `${emoji(scores.accessibility)} Accessibility: ${format(scores.accessibility)}`,
121
- `${emoji(scores['best-practices'])} Best Practices: ${format(scores['best-practices'])}`,
122
- `${emoji(scores.seo)} SEO: ${format(scores.seo)}`,
123
- '',
124
- `*Tested on [${previewUrl}](https://${previewUrl})*`
125
- ].join('\n');
126
-
127
- core.setOutput('comment', comment);
128
- } catch (error) {
129
- console.error('Error:', error);
130
- core.setOutput('comment', '⚠️ Failed to generate Lighthouse report. Check workflow logs.');
131
- }
132
-
133
- - name: Post Commit Comment
134
- uses: peter-evans/commit-comment@v4
135
- with:
136
- body: ${{ steps.format.outputs.comment }}
@@ -1,20 +0,0 @@
1
- {
2
- "recommendations": [
3
- // Formatting & Linting
4
- "biomejs.biome",
5
-
6
- // CSS & Styling
7
- "bradlc.vscode-tailwindcss",
8
- "csstools.postcss",
9
-
10
- // GraphQL (Shopify, etc.)
11
- "graphql.vscode-graphql-syntax",
12
-
13
- // Sanity CMS (GROQ syntax + validation)
14
- "sanity-io.vscode-sanity",
15
-
16
- // DX Enhancements
17
- "yoavbls.pretty-ts-errors",
18
- "waderyan.gitblame"
19
- ]
20
- }
@@ -1,105 +0,0 @@
1
- {
2
- // Language-specific formatters (explicit per-language ensures no fallback to other formatters)
3
- "[css]": {
4
- "editor.defaultFormatter": "biomejs.biome"
5
- },
6
- "[javascript]": {
7
- "editor.defaultFormatter": "biomejs.biome"
8
- },
9
- "[javascriptreact]": {
10
- "editor.defaultFormatter": "biomejs.biome"
11
- },
12
- "[json]": {
13
- "editor.defaultFormatter": "biomejs.biome"
14
- },
15
- "[jsonc]": {
16
- "editor.defaultFormatter": "biomejs.biome"
17
- },
18
- "[postcss]": {
19
- "editor.defaultFormatter": "biomejs.biome"
20
- },
21
- "[typescript]": {
22
- "editor.defaultFormatter": "biomejs.biome"
23
- },
24
- "[typescriptreact]": {
25
- "editor.defaultFormatter": "biomejs.biome"
26
- },
27
- "colorize.languages": [
28
- "javascript",
29
- "typescript",
30
- "css",
31
- "scss",
32
- "less",
33
- "html",
34
- "json",
35
- "yaml",
36
- "markdown",
37
- "glsl"
38
- ],
39
- "css.lint.unknownAtRules": "ignore",
40
-
41
- // CSS (Tailwind v4)
42
- "css.lint.validProperties": ["user-drag"],
43
- "editor.codeActionsOnSave": {
44
- "source.fixAll.biome": "always",
45
- "source.organizeImports.biome": "always"
46
- },
47
- "editor.defaultFormatter": "biomejs.biome",
48
-
49
- // Formatting
50
- "editor.formatOnSave": true,
51
- "editor.formatOnSaveMode": "file",
52
-
53
- // File associations
54
- "files.associations": {
55
- "*.css": "css",
56
- "*.json": "jsonc"
57
- },
58
-
59
- // General
60
- "files.eol": "\n",
61
- // "typescript.experimental.useTsgo": true, // Disabled: tsgo doesn't support Next.js plugin
62
- "javascript.suggest.autoImports": true,
63
- // Disable Prettier to prevent silent formatter conflicts
64
- "prettier.enable": false,
65
-
66
- // Search exclusions (performance)
67
- "search.exclude": {
68
- "**/.next": true,
69
- "**/.vercel": true,
70
- "**/bun.lock": true,
71
- "**/lib/integrations/sanity/sanity.types.ts": true,
72
- "**/node_modules": true
73
- },
74
- "tailwindCSS.classAttributes": [
75
- "class",
76
- "className",
77
- ".*ClassName",
78
- ".*Styles"
79
- ],
80
- "tailwindCSS.classFunctions": ["cn", "cva", "twMerge", "cx"],
81
- "tailwindCSS.experimental.classRegex": [
82
- ["cn\\(([^)]*)\\)", "(?:'|\"|`)([^\"'`]*)(?:'|\"|`)"],
83
- ["cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"]
84
- ],
85
- "tailwindCSS.experimental.configFile": "./lib/styles/css/tailwind.css",
86
- "tailwindCSS.includeLanguages": {
87
- "typescriptreact": "html"
88
- },
89
- "typescript.preferences.importModuleSpecifier": "non-relative",
90
-
91
- // TypeScript
92
- "typescript.suggest.autoImports": true,
93
- "typescript.tsdk": "node_modules/typescript/lib",
94
-
95
- // Editor labels (fixed for .tsx files)
96
- "workbench.editor.customLabels.patterns": {
97
- "**/app/**/layout.tsx": "${dirname(1)}/${dirname} <layout>",
98
- "**/app/**/page.tsx": "${dirname(1)}/${dirname} <page>",
99
- "**/app/api/**/route.ts": "${dirname(1)}/${dirname} <route>",
100
- "**/components/**/index.tsx": "${dirname} <component>"
101
- },
102
- "workbench.editorAssociations": {
103
- "*.svg": "default"
104
- }
105
- }
@@ -1,104 +0,0 @@
1
- import type { Metadata, Viewport } from "next"
2
- import { Geist } from "next/font/google"
3
- import { type PropsWithChildren, Suspense } from "react"
4
- import { 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
- }
@@ -1,15 +0,0 @@
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
- }
@@ -1,16 +0,0 @@
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
- }
@@ -1,27 +0,0 @@
1
- import Logo from "@/components/basement.svg"
2
- import { Link } from "@/components/ui/link"
3
-
4
- export function Footer() {
5
- return (
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">
8
- <Logo className="w-148 text-secondary" />
9
- </Link>
10
- <div>
11
- <Link
12
- href="https://github.com/basementstudio/next-starter/generate"
13
- className="link"
14
- >
15
- use this template
16
- </Link>
17
- {" / "}
18
- <Link
19
- href="https://github.com/basementstudio/next-starter"
20
- className="link"
21
- >
22
- github
23
- </Link>
24
- </div>
25
- </footer>
26
- )
27
- }
@@ -1,11 +0,0 @@
1
- "use client"
2
-
3
- export function Header() {
4
- return (
5
- <nav className="sticky top-0 z-2 flex flex-col font-mono uppercase">
6
- <div className="inline-flex px-safe py-safe">
7
- <h1>Basement Next Starter</h1>
8
- </div>
9
- </nav>
10
- )
11
- }
@@ -1,66 +0,0 @@
1
- "use client"
2
-
3
- import { usePathname } from "next/navigation"
4
- import { createContext, useContext, useEffect, useState } from "react"
5
- import type { Themes } from "@/lib/styles/colors"
6
- import { type ThemeName, themes } from "@/lib/styles/config"
7
-
8
- export const ThemeContext = createContext<{
9
- name: ThemeName
10
- theme: Themes[ThemeName]
11
- setThemeName: (theme: ThemeName) => void
12
- }>({
13
- name: "light",
14
- theme: themes.light,
15
- setThemeName: () => {
16
- void 0
17
- },
18
- })
19
-
20
- export function useTheme() {
21
- return useContext(ThemeContext)
22
- }
23
-
24
- export function Theme({
25
- children,
26
- theme,
27
- global,
28
- }: {
29
- children: React.ReactNode
30
- theme: ThemeName
31
- global?: boolean
32
- }) {
33
- const pathname = usePathname()
34
-
35
- const [currentTheme, setCurrentTheme] = useState(theme)
36
-
37
- useEffect(() => {
38
- setCurrentTheme(theme)
39
- }, [theme])
40
-
41
- // biome-ignore lint/correctness/useExhaustiveDependencies: we need to trigger on path change
42
- useEffect(() => {
43
- if (global) {
44
- document.documentElement.setAttribute("data-theme", currentTheme)
45
- }
46
- }, [pathname, currentTheme, global])
47
-
48
- return (
49
- <>
50
- {global && (
51
- <script>
52
- {`document.documentElement.setAttribute('data-theme', '${currentTheme}');`}
53
- </script>
54
- )}
55
- <ThemeContext.Provider
56
- value={{
57
- name: currentTheme,
58
- theme: themes[currentTheme],
59
- setThemeName: setCurrentTheme,
60
- }}
61
- >
62
- {children}
63
- </ThemeContext.Provider>
64
- </>
65
- )
66
- }
@@ -1,65 +0,0 @@
1
- /**
2
- * Main page wrapper providing theme, smooth scrolling, and WebGL context.
3
- *
4
- * Customize the Header and Footer components for your project needs.
5
- */
6
- "use client"
7
-
8
- import cn from "clsx"
9
- import { Footer } from "@/components/layout/footer"
10
- import { Header } from "@/components/layout/header"
11
- import { Theme } from "@/components/layout/theme"
12
- import type { ThemeName } from "@/lib/styles/config"
13
-
14
- /**
15
- * Props for the Wrapper component.
16
- */
17
- interface WrapperProps extends React.HTMLAttributes<HTMLDivElement> {
18
- /** Theme to apply ('dark' | 'light'). Defaults to 'dark'. */
19
- theme?: ThemeName
20
- }
21
-
22
- /**
23
- * Main page wrapper component providing theme.
24
- *
25
- * This component serves as the root container for pages, automatically handling
26
- * theme application and layout structure.
27
- * It includes navigation and footer.
28
- *
29
- * @param props - Component props
30
- * @param props.theme - Color theme to apply to the page
31
- * @param props.children - Page content
32
- * @param props.className - Additional CSS classes
33
- *
34
- * @example
35
- * ```tsx
36
- * // Basic usage with theme
37
- * export default function Page() {
38
- * return (
39
- * <Wrapper theme="dark">
40
- * <section>My page content</section>
41
- * </Wrapper>
42
- * )
43
- * }
44
- * ```
45
- */
46
- export function Wrapper({
47
- children,
48
- theme = "dark",
49
- className,
50
- ...props
51
- }: WrapperProps) {
52
- return (
53
- <Theme theme={theme} global>
54
- <Header />
55
- <main
56
- id="main-content"
57
- className={cn("relative flex grow flex-col", className)}
58
- {...props}
59
- >
60
- {children}
61
- </main>
62
- <Footer />
63
- </Theme>
64
- )
65
- }
@@ -1,77 +0,0 @@
1
- # Components
2
-
3
- UI components organized by purpose.
4
-
5
- ```
6
- components/
7
- ├── ui/ → Primitives (reusable across projects)
8
- ├── layout/ → Site chrome (customize per project)
9
- └── magic/ → Animation & visual enhancements
10
- ```
11
-
12
- ## Direct Imports (Recommended)
13
-
14
- ```tsx
15
- // UI Components - import directly for better clarity
16
- import { Image } from '@/components/ui/image'
17
- import { Link } from '@/components/ui/link'
18
-
19
- // Layout Components
20
- import { Wrapper } from '@/components/layout/wrapper'
21
- import { Header } from '@/components/layout/header'
22
- import { Footer } from '@/components/layout/footer'
23
-
24
- // Magic Components
25
- import { Marquee } from '@/components/magic/marquee'
26
- ```
27
-
28
- ## UI Components
29
-
30
- | Component | Purpose |
31
- |-----------|---------|
32
- | `image/` | Optimized images (always use this, never `next/image`) |
33
- | `link/` | Smart navigation (auto-detects external) |
34
-
35
- ## Layout Components
36
-
37
- | Component | Purpose |
38
- |-----------|---------|
39
- | `wrapper/` | Page wrapper (theme, WebGL, Lenis) |
40
- | `header/` | Site header/navigation |
41
- | `footer/` | Site footer |
42
- | `lenis/` | Smooth scrolling |
43
-
44
- ```tsx
45
- <Wrapper theme="dark" webgl lenis>
46
- <section>Your content</section>
47
- </Wrapper>
48
- ```
49
-
50
- ## Effects Components
51
-
52
- | Component | Purpose |
53
- |-----------|---------|
54
- | `marquee/` | Infinite scrolling text |
55
-
56
- ## Best Practices
57
-
58
- ```tsx
59
- // ✅ Always use custom Image
60
- import { Image } from '@/components/ui/image'
61
- <Image src="/photo.jpg" alt="Photo" aspectRatio={16/9} />
62
-
63
- // ✅ Always use custom Link
64
- import { Link } from '@/components/ui/link'
65
- <Link href="/about">Internal</Link>
66
- <Link href="https://example.com">External</Link>
67
-
68
- // ✅ CSS Modules + Tailwind
69
- import s from './component.module.css'
70
- <div className={cn(s.wrapper, 'flex items-center')} />
71
- ```
72
-
73
- ## Related
74
-
75
- - [Image docs](ui/image/README.md)
76
- - [Real Viewport docs](ui/real-viewport/README.md)
77
- - [WebGL Components](../lib/webgl/README.md)