bsmnt 0.0.2 → 0.1.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.
- package/.github/workflows/release.yml +2 -0
- package/CHANGELOG.md +21 -0
- package/CLAUDE.md +42 -23
- package/README.md +33 -11
- package/biome.json +1 -0
- package/bun.lock +1 -1
- package/docs/architecture.drawio +266 -0
- package/docs/architecture.mermaid +91 -0
- package/package.json +1 -1
- package/{bin → packages/cli/bin}/index.js +28 -27
- package/packages/cli/package.json +16 -0
- package/{src → packages/cli/src}/commands/add-integration.js +23 -25
- package/{src → packages/cli/src}/commands/create.js +104 -133
- package/packages/create-basement-app/integrations/basehub/config.js +21 -0
- package/packages/create-basement-app/integrations/sanity/config.js +46 -0
- package/{src → packages/create-basement-app/integrations/sanity}/mergers/check-integration-merger.js +1 -1
- package/{src → packages/create-basement-app/integrations/sanity}/mergers/layout-merger.js +1 -1
- package/{src → packages/create-basement-app/integrations/sanity}/mergers/sitemap-merger.js +1 -1
- package/packages/create-basement-app/package.json +10 -0
- package/packages/create-basement-app/src/configs/animations.js +28 -0
- package/packages/create-basement-app/src/index.js +15 -0
- package/packages/create-basement-app/src/mergers/check-integration-merger.js +105 -0
- package/{src → packages/create-basement-app/src}/mergers/config.js +1 -7
- package/{src → packages/create-basement-app/src}/mergers/index.js +87 -93
- package/packages/create-basement-app/src/mergers/layout-merger.js +223 -0
- package/packages/create-basement-app/src/mergers/sitemap-merger.js +121 -0
- package/packages/create-basement-app/template-hooks/config.js +38 -0
- package/packages/create-basement-app/templates/default/.biome/plugins/README.md +21 -0
- package/packages/create-basement-app/templates/default/.biome/plugins/no-anchor-element.grit +12 -0
- package/packages/create-basement-app/templates/default/.biome/plugins/no-relative-parent-imports.grit +10 -0
- package/packages/create-basement-app/templates/default/.biome/plugins/no-unnecessary-forwardref.grit +9 -0
- package/packages/create-basement-app/templates/default/.cursor/rules/README.md +184 -0
- package/packages/create-basement-app/templates/default/.cursor/rules/architecture.mdc +437 -0
- package/packages/create-basement-app/templates/default/.cursor/rules/components.mdc +436 -0
- package/packages/create-basement-app/templates/default/.cursor/rules/integrations.mdc +447 -0
- package/packages/create-basement-app/templates/default/.cursor/rules/main.mdc +278 -0
- package/packages/create-basement-app/templates/default/.cursor/rules/styling.mdc +433 -0
- package/packages/create-basement-app/templates/default/.editorconfig +40 -0
- package/packages/create-basement-app/templates/default/.env.example +81 -0
- package/packages/create-basement-app/templates/default/.gitattributes +19 -0
- package/packages/create-basement-app/templates/default/.github/PULL_REQUEST_TEMPLATE.md +14 -0
- package/packages/create-basement-app/templates/default/.github/workflows/lighthouse-to-slack.yml +136 -0
- package/packages/create-basement-app/templates/default/.vscode/extensions.json +20 -0
- package/packages/create-basement-app/templates/default/.vscode/settings.json +105 -0
- package/packages/create-basement-app/templates/default/README.md +221 -0
- package/packages/create-basement-app/templates/default/_gitignore +67 -0
- package/packages/create-basement-app/templates/default/app/favicon.ico +0 -0
- package/packages/create-basement-app/templates/default/app/layout.tsx +104 -0
- package/packages/create-basement-app/templates/default/app/page.tsx +275 -0
- package/packages/create-basement-app/templates/default/app/robots.ts +15 -0
- package/packages/create-basement-app/templates/default/app/sitemap.ts +16 -0
- package/packages/create-basement-app/templates/default/biome.json +250 -0
- package/packages/create-basement-app/templates/default/components/basement.svg +1 -0
- package/packages/create-basement-app/templates/default/components/layout/footer/index.tsx +27 -0
- package/packages/create-basement-app/templates/default/components/layout/header/index.tsx +11 -0
- package/packages/create-basement-app/templates/default/components/layout/theme/index.tsx +66 -0
- package/packages/create-basement-app/templates/default/components/layout/wrapper/index.tsx +65 -0
- package/packages/create-basement-app/templates/default/components/ui/README.md +77 -0
- package/packages/create-basement-app/templates/default/components/ui/image/README.md +37 -0
- package/packages/create-basement-app/templates/default/components/ui/image/index.tsx +224 -0
- package/packages/create-basement-app/templates/default/components/ui/link/index.tsx +146 -0
- package/packages/create-basement-app/templates/default/lib/README.md +33 -0
- package/packages/create-basement-app/templates/default/lib/hooks/index.ts +12 -0
- package/packages/create-basement-app/templates/default/lib/hooks/use-device-detection.ts +81 -0
- package/packages/create-basement-app/templates/default/lib/hooks/use-media-breakpoint.ts +15 -0
- package/packages/create-basement-app/templates/default/lib/hooks/use-prefetch.ts +74 -0
- package/packages/create-basement-app/templates/default/lib/scripts/dev.ts +52 -0
- package/packages/create-basement-app/templates/default/lib/scripts/generate-component.ts +322 -0
- package/packages/create-basement-app/templates/default/lib/scripts/generate-page.ts +193 -0
- package/packages/create-basement-app/templates/default/lib/scripts/generate.ts +79 -0
- package/packages/create-basement-app/templates/default/lib/scripts/utils.ts +246 -0
- package/packages/create-basement-app/templates/default/lib/store/app.ts +11 -0
- package/packages/create-basement-app/templates/default/lib/store/index.ts +11 -0
- package/packages/create-basement-app/templates/default/lib/styles/README.md +64 -0
- package/packages/create-basement-app/templates/default/lib/styles/cn.ts +7 -0
- package/packages/create-basement-app/templates/default/lib/styles/colors.ts +63 -0
- package/packages/create-basement-app/templates/default/lib/styles/config.ts +34 -0
- package/packages/create-basement-app/templates/default/lib/styles/css/global.css +85 -0
- package/packages/create-basement-app/templates/default/lib/styles/css/index.css +6 -0
- package/packages/create-basement-app/templates/default/lib/styles/css/reset.css +166 -0
- package/packages/create-basement-app/templates/default/lib/styles/css/root.css +68 -0
- package/packages/create-basement-app/templates/default/lib/styles/css/tailwind.css +132 -0
- package/packages/create-basement-app/templates/default/lib/styles/easings.ts +21 -0
- package/packages/create-basement-app/templates/default/lib/styles/fonts.ts +28 -0
- package/packages/create-basement-app/templates/default/lib/styles/index.ts +12 -0
- package/packages/create-basement-app/templates/default/lib/styles/layout.mjs +27 -0
- package/packages/create-basement-app/templates/default/lib/styles/scripts/README.md +29 -0
- package/packages/create-basement-app/templates/default/lib/styles/scripts/generate-root.ts +57 -0
- package/packages/create-basement-app/templates/default/lib/styles/scripts/generate-tailwind.ts +162 -0
- package/packages/create-basement-app/templates/default/lib/styles/scripts/postcss-functions.mjs +168 -0
- package/packages/create-basement-app/templates/default/lib/styles/scripts/setup-styles.ts +24 -0
- package/packages/create-basement-app/templates/default/lib/styles/scripts/utils.ts +20 -0
- package/packages/create-basement-app/templates/default/lib/styles/typography.ts +36 -0
- package/packages/create-basement-app/templates/default/lib/utils/README.md +40 -0
- package/packages/create-basement-app/templates/default/lib/utils/css.d.ts +21 -0
- package/packages/create-basement-app/templates/default/lib/utils/easings.ts +240 -0
- package/packages/create-basement-app/templates/default/lib/utils/fetch.ts +84 -0
- package/packages/create-basement-app/templates/default/lib/utils/math.test.ts +221 -0
- package/packages/create-basement-app/templates/default/lib/utils/math.ts +236 -0
- package/packages/create-basement-app/templates/default/lib/utils/metadata.ts +126 -0
- package/packages/create-basement-app/templates/default/lib/utils/strings.test.ts +166 -0
- package/packages/create-basement-app/templates/default/lib/utils/strings.ts +246 -0
- package/packages/create-basement-app/templates/default/lib/utils/types.d.ts +15 -0
- package/packages/create-basement-app/templates/default/lib/utils/viewport.test.ts +256 -0
- package/packages/create-basement-app/templates/default/lib/utils/viewport.ts +193 -0
- package/packages/create-basement-app/templates/default/next.config.ts +142 -0
- package/packages/create-basement-app/templates/default/package.json +62 -0
- package/packages/create-basement-app/templates/default/postcss.config.mjs +42 -0
- package/packages/create-basement-app/templates/default/public/fonts/geist/Geist-Mono.woff2 +0 -0
- package/packages/create-basement-app/templates/default/tsconfig.json +43 -0
- package/packages/create-basement-app/templates/experiment/.biome/plugins/README.md +21 -0
- package/packages/create-basement-app/templates/experiment/.biome/plugins/no-anchor-element.grit +12 -0
- package/packages/create-basement-app/templates/experiment/.biome/plugins/no-relative-parent-imports.grit +10 -0
- package/packages/create-basement-app/templates/experiment/.biome/plugins/no-unnecessary-forwardref.grit +9 -0
- package/packages/create-basement-app/templates/experiment/.cursor/rules/README.md +184 -0
- package/packages/create-basement-app/templates/experiment/.cursor/rules/architecture.mdc +437 -0
- package/packages/create-basement-app/templates/experiment/.cursor/rules/components.mdc +436 -0
- package/packages/create-basement-app/templates/experiment/.cursor/rules/integrations.mdc +447 -0
- package/packages/create-basement-app/templates/experiment/.cursor/rules/main.mdc +278 -0
- package/packages/create-basement-app/templates/experiment/.cursor/rules/styling.mdc +433 -0
- package/packages/create-basement-app/templates/experiment/.editorconfig +40 -0
- package/packages/create-basement-app/templates/experiment/.env.example +81 -0
- package/packages/create-basement-app/templates/experiment/.gitattributes +19 -0
- package/packages/create-basement-app/templates/experiment/.github/PULL_REQUEST_TEMPLATE.md +14 -0
- package/packages/create-basement-app/templates/experiment/.github/workflows/lighthouse-to-slack.yml +136 -0
- package/packages/create-basement-app/templates/experiment/.vscode/extensions.json +20 -0
- package/packages/create-basement-app/templates/experiment/.vscode/settings.json +105 -0
- package/packages/create-basement-app/templates/experiment/README.md +221 -0
- package/packages/create-basement-app/templates/experiment/_gitignore +67 -0
- package/packages/create-basement-app/templates/experiment/app/favicon.ico +0 -0
- package/packages/create-basement-app/templates/experiment/app/layout.tsx +104 -0
- package/packages/create-basement-app/templates/experiment/app/page.tsx +275 -0
- package/packages/create-basement-app/templates/experiment/app/robots.ts +15 -0
- package/packages/create-basement-app/templates/experiment/app/sitemap.ts +16 -0
- package/packages/create-basement-app/templates/experiment/biome.json +250 -0
- package/packages/create-basement-app/templates/experiment/components/basement.svg +1 -0
- package/packages/create-basement-app/templates/experiment/components/layout/footer/index.tsx +27 -0
- package/packages/create-basement-app/templates/experiment/components/layout/header/index.tsx +58 -0
- package/packages/create-basement-app/templates/experiment/components/layout/navigation-menu.tsx +127 -0
- package/packages/create-basement-app/templates/experiment/components/layout/theme/index.tsx +66 -0
- package/packages/create-basement-app/templates/experiment/components/layout/wrapper/index.tsx +65 -0
- package/packages/create-basement-app/templates/experiment/components/ui/README.md +77 -0
- package/packages/create-basement-app/templates/experiment/components/ui/image/README.md +37 -0
- package/packages/create-basement-app/templates/experiment/components/ui/image/index.tsx +224 -0
- package/packages/create-basement-app/templates/experiment/components/ui/link/index.tsx +146 -0
- package/packages/create-basement-app/templates/experiment/lib/README.md +33 -0
- package/packages/create-basement-app/templates/experiment/lib/constants.ts +12 -0
- package/packages/create-basement-app/templates/experiment/lib/hooks/index.ts +12 -0
- package/packages/create-basement-app/templates/experiment/lib/hooks/use-device-detection.ts +81 -0
- package/packages/create-basement-app/templates/experiment/lib/hooks/use-media-breakpoint.ts +15 -0
- package/packages/create-basement-app/templates/experiment/lib/hooks/use-prefetch.ts +74 -0
- package/packages/create-basement-app/templates/experiment/lib/integrations/.gitkeep +0 -0
- package/packages/create-basement-app/templates/experiment/lib/scripts/dev.ts +52 -0
- package/packages/create-basement-app/templates/experiment/lib/scripts/generate-component.ts +322 -0
- package/packages/create-basement-app/templates/experiment/lib/scripts/generate-page.ts +193 -0
- package/packages/create-basement-app/templates/experiment/lib/scripts/generate.ts +79 -0
- package/packages/create-basement-app/templates/experiment/lib/scripts/utils.ts +246 -0
- package/packages/create-basement-app/templates/experiment/lib/store/app.ts +11 -0
- package/packages/create-basement-app/templates/experiment/lib/store/index.ts +11 -0
- package/packages/create-basement-app/templates/experiment/lib/styles/README.md +64 -0
- package/packages/create-basement-app/templates/experiment/lib/styles/cn.ts +7 -0
- package/packages/create-basement-app/templates/experiment/lib/styles/colors.ts +63 -0
- package/packages/create-basement-app/templates/experiment/lib/styles/config.ts +34 -0
- package/packages/create-basement-app/templates/experiment/lib/styles/css/global.css +85 -0
- package/packages/create-basement-app/templates/experiment/lib/styles/css/index.css +6 -0
- package/packages/create-basement-app/templates/experiment/lib/styles/css/reset.css +166 -0
- package/packages/create-basement-app/templates/experiment/lib/styles/css/root.css +68 -0
- package/packages/create-basement-app/templates/experiment/lib/styles/css/tailwind.css +132 -0
- package/packages/create-basement-app/templates/experiment/lib/styles/easings.ts +21 -0
- package/packages/create-basement-app/templates/experiment/lib/styles/fonts.ts +28 -0
- package/packages/create-basement-app/templates/experiment/lib/styles/index.ts +12 -0
- package/packages/create-basement-app/templates/experiment/lib/styles/layout.mjs +27 -0
- package/packages/create-basement-app/templates/experiment/lib/styles/scripts/README.md +29 -0
- package/packages/create-basement-app/templates/experiment/lib/styles/scripts/generate-root.ts +57 -0
- package/packages/create-basement-app/templates/experiment/lib/styles/scripts/generate-tailwind.ts +162 -0
- package/packages/create-basement-app/templates/experiment/lib/styles/scripts/postcss-functions.mjs +168 -0
- package/packages/create-basement-app/templates/experiment/lib/styles/scripts/setup-styles.ts +24 -0
- package/packages/create-basement-app/templates/experiment/lib/styles/scripts/utils.ts +20 -0
- package/packages/create-basement-app/templates/experiment/lib/styles/typography.ts +36 -0
- package/packages/create-basement-app/templates/experiment/lib/utils/README.md +40 -0
- package/packages/create-basement-app/templates/experiment/lib/utils/css.d.ts +21 -0
- package/packages/create-basement-app/templates/experiment/lib/utils/easings.ts +240 -0
- package/packages/create-basement-app/templates/experiment/lib/utils/fetch.ts +84 -0
- package/packages/create-basement-app/templates/experiment/lib/utils/math.test.ts +221 -0
- package/packages/create-basement-app/templates/experiment/lib/utils/math.ts +236 -0
- package/packages/create-basement-app/templates/experiment/lib/utils/metadata.ts +126 -0
- package/packages/create-basement-app/templates/experiment/lib/utils/strings.test.ts +166 -0
- package/packages/create-basement-app/templates/experiment/lib/utils/strings.ts +246 -0
- package/packages/create-basement-app/templates/experiment/lib/utils/types.d.ts +15 -0
- package/packages/create-basement-app/templates/experiment/lib/utils/viewport.test.ts +256 -0
- package/packages/create-basement-app/templates/experiment/lib/utils/viewport.ts +193 -0
- package/packages/create-basement-app/templates/experiment/next.config.ts +142 -0
- package/packages/create-basement-app/templates/experiment/package.json +69 -0
- package/packages/create-basement-app/templates/experiment/postcss.config.mjs +42 -0
- package/packages/create-basement-app/templates/experiment/public/fonts/geist/Geist-Mono.woff2 +0 -0
- package/packages/create-basement-app/templates/experiment/tsconfig.json +43 -0
- package/packages/create-basement-app/templates/webgl/.biome/plugins/README.md +21 -0
- package/packages/create-basement-app/templates/webgl/.biome/plugins/no-anchor-element.grit +12 -0
- package/packages/create-basement-app/templates/webgl/.biome/plugins/no-relative-parent-imports.grit +10 -0
- package/packages/create-basement-app/templates/webgl/.biome/plugins/no-unnecessary-forwardref.grit +9 -0
- package/packages/create-basement-app/templates/webgl/.cursor/rules/README.md +184 -0
- package/packages/create-basement-app/templates/webgl/.cursor/rules/architecture.mdc +437 -0
- package/packages/create-basement-app/templates/webgl/.cursor/rules/components.mdc +436 -0
- package/packages/create-basement-app/templates/webgl/.cursor/rules/integrations.mdc +447 -0
- package/packages/create-basement-app/templates/webgl/.cursor/rules/main.mdc +278 -0
- package/packages/create-basement-app/templates/webgl/.cursor/rules/styling.mdc +433 -0
- package/packages/create-basement-app/templates/webgl/.editorconfig +40 -0
- package/packages/create-basement-app/templates/webgl/.env.example +81 -0
- package/packages/create-basement-app/templates/webgl/.gitattributes +19 -0
- package/packages/create-basement-app/templates/webgl/.github/PULL_REQUEST_TEMPLATE.md +14 -0
- package/packages/create-basement-app/templates/webgl/.github/workflows/lighthouse-to-slack.yml +136 -0
- package/packages/create-basement-app/templates/webgl/.vscode/extensions.json +20 -0
- package/packages/create-basement-app/templates/webgl/.vscode/settings.json +105 -0
- package/packages/create-basement-app/templates/webgl/README.md +221 -0
- package/packages/create-basement-app/templates/webgl/_gitignore +67 -0
- package/packages/create-basement-app/templates/webgl/app/favicon.ico +0 -0
- package/packages/create-basement-app/templates/webgl/app/layout.tsx +104 -0
- package/packages/create-basement-app/templates/webgl/app/page.tsx +10 -0
- package/packages/create-basement-app/templates/webgl/app/robots.ts +15 -0
- package/packages/create-basement-app/templates/webgl/app/sitemap.ts +16 -0
- package/packages/create-basement-app/templates/webgl/biome.json +250 -0
- package/packages/create-basement-app/templates/webgl/components/basement.svg +1 -0
- package/packages/create-basement-app/templates/webgl/components/layout/footer/index.tsx +27 -0
- package/packages/create-basement-app/templates/webgl/components/layout/header/index.tsx +11 -0
- package/packages/create-basement-app/templates/webgl/components/layout/theme/index.tsx +66 -0
- package/packages/create-basement-app/templates/webgl/components/layout/wrapper/index.tsx +65 -0
- package/packages/create-basement-app/templates/webgl/components/ui/README.md +77 -0
- package/packages/create-basement-app/templates/webgl/components/ui/image/README.md +37 -0
- package/packages/create-basement-app/templates/webgl/components/ui/image/index.tsx +224 -0
- package/packages/create-basement-app/templates/webgl/components/ui/link/index.tsx +146 -0
- package/packages/create-basement-app/templates/webgl/components/webgl/canvas/dynamic.tsx +34 -0
- package/packages/create-basement-app/templates/webgl/components/webgl/canvas/index.tsx +43 -0
- package/packages/create-basement-app/templates/webgl/components/webgl/components/scene/index.tsx +21 -0
- package/packages/create-basement-app/templates/webgl/lib/README.md +33 -0
- package/packages/create-basement-app/templates/webgl/lib/hooks/index.ts +12 -0
- package/packages/create-basement-app/templates/webgl/lib/hooks/use-device-detection.ts +81 -0
- package/packages/create-basement-app/templates/webgl/lib/hooks/use-media-breakpoint.ts +15 -0
- package/packages/create-basement-app/templates/webgl/lib/hooks/use-prefetch.ts +74 -0
- package/packages/create-basement-app/templates/webgl/lib/integrations/.gitkeep +0 -0
- package/packages/create-basement-app/templates/webgl/lib/scripts/dev.ts +52 -0
- package/packages/create-basement-app/templates/webgl/lib/scripts/generate-component.ts +322 -0
- package/packages/create-basement-app/templates/webgl/lib/scripts/generate-page.ts +193 -0
- package/packages/create-basement-app/templates/webgl/lib/scripts/generate.ts +79 -0
- package/packages/create-basement-app/templates/webgl/lib/scripts/utils.ts +246 -0
- package/packages/create-basement-app/templates/webgl/lib/store/app.ts +11 -0
- package/packages/create-basement-app/templates/webgl/lib/store/index.ts +11 -0
- package/packages/create-basement-app/templates/webgl/lib/styles/README.md +64 -0
- package/packages/create-basement-app/templates/webgl/lib/styles/cn.ts +7 -0
- package/packages/create-basement-app/templates/webgl/lib/styles/colors.ts +63 -0
- package/packages/create-basement-app/templates/webgl/lib/styles/config.ts +34 -0
- package/packages/create-basement-app/templates/webgl/lib/styles/css/global.css +85 -0
- package/packages/create-basement-app/templates/webgl/lib/styles/css/index.css +6 -0
- package/packages/create-basement-app/templates/webgl/lib/styles/css/reset.css +166 -0
- package/packages/create-basement-app/templates/webgl/lib/styles/css/root.css +68 -0
- package/packages/create-basement-app/templates/webgl/lib/styles/css/tailwind.css +132 -0
- package/packages/create-basement-app/templates/webgl/lib/styles/easings.ts +21 -0
- package/packages/create-basement-app/templates/webgl/lib/styles/fonts.ts +28 -0
- package/packages/create-basement-app/templates/webgl/lib/styles/index.ts +12 -0
- package/packages/create-basement-app/templates/webgl/lib/styles/layout.mjs +27 -0
- package/packages/create-basement-app/templates/webgl/lib/styles/scripts/README.md +29 -0
- package/packages/create-basement-app/templates/webgl/lib/styles/scripts/generate-root.ts +57 -0
- package/packages/create-basement-app/templates/webgl/lib/styles/scripts/generate-tailwind.ts +162 -0
- package/packages/create-basement-app/templates/webgl/lib/styles/scripts/postcss-functions.mjs +168 -0
- package/packages/create-basement-app/templates/webgl/lib/styles/scripts/setup-styles.ts +24 -0
- package/packages/create-basement-app/templates/webgl/lib/styles/scripts/utils.ts +20 -0
- package/packages/create-basement-app/templates/webgl/lib/styles/typography.ts +36 -0
- package/packages/create-basement-app/templates/webgl/lib/utils/README.md +40 -0
- package/packages/create-basement-app/templates/webgl/lib/utils/css.d.ts +21 -0
- package/packages/create-basement-app/templates/webgl/lib/utils/easings.ts +240 -0
- package/packages/create-basement-app/templates/webgl/lib/utils/fetch.ts +84 -0
- package/packages/create-basement-app/templates/webgl/lib/utils/math.test.ts +221 -0
- package/packages/create-basement-app/templates/webgl/lib/utils/math.ts +236 -0
- package/packages/create-basement-app/templates/webgl/lib/utils/metadata.ts +126 -0
- package/packages/create-basement-app/templates/webgl/lib/utils/strings.test.ts +166 -0
- package/packages/create-basement-app/templates/webgl/lib/utils/strings.ts +246 -0
- package/packages/create-basement-app/templates/webgl/lib/utils/types.d.ts +15 -0
- package/packages/create-basement-app/templates/webgl/lib/utils/viewport.test.ts +256 -0
- package/packages/create-basement-app/templates/webgl/lib/utils/viewport.ts +193 -0
- package/packages/create-basement-app/templates/webgl/next.config.ts +142 -0
- package/packages/create-basement-app/templates/webgl/package.json +68 -0
- package/packages/create-basement-app/templates/webgl/postcss.config.mjs +42 -0
- package/packages/create-basement-app/templates/webgl/public/fonts/geist/Geist-Mono.woff2 +0 -0
- package/packages/create-basement-app/templates/webgl/tsconfig.json +43 -0
- package/packages/create-basement-app/templates/webgpu/.biome/plugins/README.md +21 -0
- package/packages/create-basement-app/templates/webgpu/.biome/plugins/no-anchor-element.grit +12 -0
- package/packages/create-basement-app/templates/webgpu/.biome/plugins/no-relative-parent-imports.grit +10 -0
- package/packages/create-basement-app/templates/webgpu/.biome/plugins/no-unnecessary-forwardref.grit +9 -0
- package/packages/create-basement-app/templates/webgpu/.cursor/rules/README.md +184 -0
- package/packages/create-basement-app/templates/webgpu/.cursor/rules/architecture.mdc +437 -0
- package/packages/create-basement-app/templates/webgpu/.cursor/rules/components.mdc +436 -0
- package/packages/create-basement-app/templates/webgpu/.cursor/rules/integrations.mdc +447 -0
- package/packages/create-basement-app/templates/webgpu/.cursor/rules/main.mdc +278 -0
- package/packages/create-basement-app/templates/webgpu/.cursor/rules/styling.mdc +433 -0
- package/packages/create-basement-app/templates/webgpu/.editorconfig +40 -0
- package/packages/create-basement-app/templates/webgpu/.env.example +81 -0
- package/packages/create-basement-app/templates/webgpu/.gitattributes +19 -0
- package/packages/create-basement-app/templates/webgpu/.github/PULL_REQUEST_TEMPLATE.md +14 -0
- package/packages/create-basement-app/templates/webgpu/.github/workflows/lighthouse-to-slack.yml +136 -0
- package/packages/create-basement-app/templates/webgpu/.vscode/extensions.json +20 -0
- package/packages/create-basement-app/templates/webgpu/.vscode/settings.json +105 -0
- package/packages/create-basement-app/templates/webgpu/README.md +221 -0
- package/packages/create-basement-app/templates/webgpu/_gitignore +67 -0
- package/packages/create-basement-app/templates/webgpu/app/favicon.ico +0 -0
- package/packages/create-basement-app/templates/webgpu/app/layout.tsx +104 -0
- package/packages/create-basement-app/templates/webgpu/app/page.tsx +275 -0
- package/packages/create-basement-app/templates/webgpu/app/robots.ts +15 -0
- package/packages/create-basement-app/templates/webgpu/app/sitemap.ts +16 -0
- package/packages/create-basement-app/templates/webgpu/biome.json +250 -0
- package/packages/create-basement-app/templates/webgpu/components/basement.svg +1 -0
- package/packages/create-basement-app/templates/webgpu/components/layout/footer/index.tsx +27 -0
- package/packages/create-basement-app/templates/webgpu/components/layout/header/index.tsx +11 -0
- package/packages/create-basement-app/templates/webgpu/components/layout/theme/index.tsx +66 -0
- package/packages/create-basement-app/templates/webgpu/components/layout/wrapper/index.tsx +65 -0
- package/packages/create-basement-app/templates/webgpu/components/ui/README.md +77 -0
- package/packages/create-basement-app/templates/webgpu/components/ui/image/README.md +37 -0
- package/packages/create-basement-app/templates/webgpu/components/ui/image/index.tsx +224 -0
- package/packages/create-basement-app/templates/webgpu/components/ui/link/index.tsx +146 -0
- package/packages/create-basement-app/templates/webgpu/lib/README.md +33 -0
- package/packages/create-basement-app/templates/webgpu/lib/hooks/index.ts +12 -0
- package/packages/create-basement-app/templates/webgpu/lib/hooks/use-device-detection.ts +81 -0
- package/packages/create-basement-app/templates/webgpu/lib/hooks/use-media-breakpoint.ts +15 -0
- package/packages/create-basement-app/templates/webgpu/lib/hooks/use-prefetch.ts +74 -0
- package/packages/create-basement-app/templates/webgpu/lib/integrations/.gitkeep +0 -0
- package/packages/create-basement-app/templates/webgpu/lib/scripts/dev.ts +52 -0
- package/packages/create-basement-app/templates/webgpu/lib/scripts/generate-component.ts +322 -0
- package/packages/create-basement-app/templates/webgpu/lib/scripts/generate-page.ts +193 -0
- package/packages/create-basement-app/templates/webgpu/lib/scripts/generate.ts +79 -0
- package/packages/create-basement-app/templates/webgpu/lib/scripts/utils.ts +246 -0
- package/packages/create-basement-app/templates/webgpu/lib/store/app.ts +11 -0
- package/packages/create-basement-app/templates/webgpu/lib/store/index.ts +11 -0
- package/packages/create-basement-app/templates/webgpu/lib/styles/README.md +64 -0
- package/packages/create-basement-app/templates/webgpu/lib/styles/cn.ts +7 -0
- package/packages/create-basement-app/templates/webgpu/lib/styles/colors.ts +63 -0
- package/packages/create-basement-app/templates/webgpu/lib/styles/config.ts +34 -0
- package/packages/create-basement-app/templates/webgpu/lib/styles/css/global.css +85 -0
- package/packages/create-basement-app/templates/webgpu/lib/styles/css/index.css +6 -0
- package/packages/create-basement-app/templates/webgpu/lib/styles/css/reset.css +166 -0
- package/packages/create-basement-app/templates/webgpu/lib/styles/css/root.css +68 -0
- package/packages/create-basement-app/templates/webgpu/lib/styles/css/tailwind.css +132 -0
- package/packages/create-basement-app/templates/webgpu/lib/styles/easings.ts +21 -0
- package/packages/create-basement-app/templates/webgpu/lib/styles/fonts.ts +28 -0
- package/packages/create-basement-app/templates/webgpu/lib/styles/index.ts +12 -0
- package/packages/create-basement-app/templates/webgpu/lib/styles/layout.mjs +27 -0
- package/packages/create-basement-app/templates/webgpu/lib/styles/scripts/README.md +29 -0
- package/packages/create-basement-app/templates/webgpu/lib/styles/scripts/generate-root.ts +57 -0
- package/packages/create-basement-app/templates/webgpu/lib/styles/scripts/generate-tailwind.ts +162 -0
- package/packages/create-basement-app/templates/webgpu/lib/styles/scripts/postcss-functions.mjs +168 -0
- package/packages/create-basement-app/templates/webgpu/lib/styles/scripts/setup-styles.ts +24 -0
- package/packages/create-basement-app/templates/webgpu/lib/styles/scripts/utils.ts +20 -0
- package/packages/create-basement-app/templates/webgpu/lib/styles/typography.ts +36 -0
- package/packages/create-basement-app/templates/webgpu/lib/utils/README.md +40 -0
- package/packages/create-basement-app/templates/webgpu/lib/utils/css.d.ts +21 -0
- package/packages/create-basement-app/templates/webgpu/lib/utils/easings.ts +240 -0
- package/packages/create-basement-app/templates/webgpu/lib/utils/fetch.ts +84 -0
- package/packages/create-basement-app/templates/webgpu/lib/utils/math.test.ts +221 -0
- package/packages/create-basement-app/templates/webgpu/lib/utils/math.ts +236 -0
- package/packages/create-basement-app/templates/webgpu/lib/utils/metadata.ts +126 -0
- package/packages/create-basement-app/templates/webgpu/lib/utils/strings.test.ts +166 -0
- package/packages/create-basement-app/templates/webgpu/lib/utils/strings.ts +246 -0
- package/packages/create-basement-app/templates/webgpu/lib/utils/types.d.ts +15 -0
- package/packages/create-basement-app/templates/webgpu/lib/utils/viewport.test.ts +256 -0
- package/packages/create-basement-app/templates/webgpu/lib/utils/viewport.ts +193 -0
- package/packages/create-basement-app/templates/webgpu/next.config.ts +142 -0
- package/packages/create-basement-app/templates/webgpu/package.json +69 -0
- package/packages/create-basement-app/templates/webgpu/postcss.config.mjs +42 -0
- package/packages/create-basement-app/templates/webgpu/public/fonts/geist/Geist-Mono.woff2 +0 -0
- package/packages/create-basement-app/templates/webgpu/tsconfig.json +43 -0
- package/tasks/.last-branch +1 -0
- package/tasks/CLAUDE.md +104 -0
- package/tasks/archive/2026-02-09-next-starter-dynamic-layers/prd.json +153 -0
- package/tasks/archive/2026-02-09-next-starter-dynamic-layers/progress.txt +115 -0
- package/tasks/prd-project-restructure.md +375 -0
- package/tasks/prd.json +227 -91
- package/tasks/progress.txt +281 -87
- package/tasks/ralph.sh +113 -0
- package/layers/experiment/components/layout/header/index.tsx +0 -58
- package/layers/experiment/components/layout/navigation-menu.tsx +0 -127
- package/layers/experiment/lib/constants.ts +0 -12
- package/layers/webgl/app/page.tsx +0 -10
- package/layers/webgl/components/webgl/canvas/dynamic.tsx +0 -34
- package/layers/webgl/components/webgl/canvas/index.tsx +0 -43
- package/layers/webgl/components/webgl/components/scene/index.tsx +0 -21
- package/src/mergers/next-config-merger.js +0 -63
- /package/{src → packages/cli/src}/commands/setup-sanity.js +0 -0
- /package/{src → packages/cli/src}/commands/worktree.js +0 -0
- /package/{integrations/basehub → packages/create-basement-app/integrations/basehub/files}/README.md +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/api/draft-mode/disable/route.ts +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/api/draft-mode/enable/route.ts +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/api/revalidate/route.ts +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/layout.tsx +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/sitemap.ts +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/studio/[[...tool]]/page.tsx +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/studio/layout.tsx +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/components/ui/sanity-image/index.tsx +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/README.md +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/check-integration.ts +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/README.md +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/client.ts +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/components/disable-draft-mode.tsx +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/components/rich-text.tsx +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/env.ts +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/live/index.tsx +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/queries.ts +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/sanity.cli.ts +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/sanity.config.ts +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/sanity.types.ts +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schema.json +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/article.ts +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/example.ts +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/index.ts +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/link.ts +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/metadata.ts +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/navigation.ts +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/page.ts +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/richText.ts +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/structure.ts +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/utils/image.ts +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/utils/link.ts +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/scripts/copy-sanity-mcp.ts +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/scripts/generate-page.ts +0 -0
- /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/utils/metadata.ts +0 -0
- /package/{plugins → packages/create-basement-app/plugins}/README.md +0 -0
- /package/{plugins → packages/create-basement-app/plugins}/no-anchor-element.grit +0 -0
- /package/{plugins → packages/create-basement-app/plugins}/no-relative-parent-imports.grit +0 -0
- /package/{plugins → packages/create-basement-app/plugins}/no-unnecessary-forwardref.grit +0 -0
- /package/{template-hooks → packages/create-basement-app/template-hooks}/use-battery.ts +0 -0
- /package/{template-hooks → packages/create-basement-app/template-hooks}/use-device-perf.ts +0 -0
- /package/{template-hooks → packages/create-basement-app/template-hooks}/use-intersection-observer.ts +0 -0
- /package/{template-hooks → packages/create-basement-app/template-hooks}/use-media.ts +0 -0
- /package/{layers/webgpu → packages/create-basement-app/templates/default/lib/integrations}/.gitkeep +0 -0
package/tasks/progress.txt
CHANGED
|
@@ -5,111 +5,305 @@
|
|
|
5
5
|
- src/mergers/index.js holds injection/merge logic (injectIntegration for CMS, injectLayer for layers)
|
|
6
6
|
- src/commands/create.js is the main CLI flow
|
|
7
7
|
- next-starter uses package.json directly (no template rename needed)
|
|
8
|
-
- Layer files are
|
|
9
|
-
- ESM requires __dirname workaround: `path.dirname(fileURLToPath(import.meta.url))`
|
|
8
|
+
- Layer files are in templates/{type}/ directory, CMS integration files are LOCAL in integrations/{cms}/files/ (no more tiged remote clone)
|
|
9
|
+
- ESM requires __dirname workaround: `const __dirname = path.dirname(fileURLToPath(import.meta.url))`
|
|
10
10
|
- CLI binary is basement (defined in package.json bin field)
|
|
11
|
-
- Dependency injection order in create.js: layer deps
|
|
11
|
+
- Dependency injection order in create.js: layer deps -> CMS deps -> animation deps
|
|
12
|
+
- bin/index.js now uses picocolors (chalk replaced in US-002), all files use picocolors
|
|
13
|
+
- CMS deps now come from integration config manifests (sanityConfig, basehubConfig) imported in create.js and add-integration.js
|
|
14
|
+
- Layer deps still in LAYER_CONFIG in config.js — animation deps now in src/configs/animations.js (centralized in US-011)
|
|
15
|
+
- Animation config pattern: ANIMATION_CONFIG object + getAnimationConfig(name) helper in src/configs/animations.js
|
|
16
|
+
- Dependency injection order in create.js: layer deps -> CMS deps -> animation deps -> hook deps
|
|
17
|
+
- Hook deps are now injected into target package.json during hydration (from hooksConfig)
|
|
18
|
+
- Template prompt is dynamic: reads directory listing from create-basement-app/templates/
|
|
19
|
+
- Hook prompt choices are config-driven: from hooksConfig (not fs.readdir)
|
|
20
|
+
- inquirer and chalk removed from root package.json (unused — prompts and picocolors used instead)
|
|
21
|
+
- Integration config pattern: `integrations/{cms}/config.js` exports `{name}Config` with deps, devDeps, scripts, additivePaths, mergeFiles
|
|
22
|
+
- Sanity has 35 source files, 3 mergers, and a config manifest in packages/create-basement-app/integrations/sanity/
|
|
23
|
+
- Sanity deps: @sanity/asset-utils, @sanity/image-url, @sanity/visual-editing, @sanity/vision, next-sanity (deps) + sanity (devDep)
|
|
24
|
+
- next-config-merger.js was orphaned (deleted in US-003)
|
|
25
|
+
|
|
26
|
+
- Hook deps: use-battery -> lodash-es; use-device-perf -> detect-gpu, react-device-detect, zustand; use-intersection-observer -> none; use-media -> none
|
|
27
|
+
- BaseHub integration is minimal: basehub ^3.0.0 dep only, one additivePath, no mergeFiles, no scripts
|
|
28
|
+
- Root biome.json `includes` now covers packages/** (updated in US-002)
|
|
29
|
+
- `bun run lint` fails with "nested root configuration" error — templates/ contain their own biome.json with root:true, which conflicts with the root biome.json. This is pre-existing and expected (templates are standalone projects).
|
|
30
|
+
- Empty directories in packages/ won't be tracked by git unless they have files - each has package.json
|
|
31
|
+
- CLI commands now import mergers from ../../../create-basement-app/src/mergers/ (updated in US-003)
|
|
32
|
+
- Merger code lives in packages/create-basement-app/src/mergers/ with barrel export at src/index.js
|
|
33
|
+
- Old root dirs (layers, integrations, template-hooks, plugins, src, bin) deleted in US-013 — all code lives in packages/
|
|
34
|
+
- injectIntegration resolves integration files via: path.resolve(__dirname, "../../integrations", cms, "files")
|
|
35
|
+
- injectLayer resolves layer files via: path.resolve(__dirname, "../../templates", layer)
|
|
36
|
+
- CMS_MERGERS imports from ../../integrations/sanity/mergers/ (not co-located ./layout-merger.js)
|
|
37
|
+
- tiged fully removed from all packages (no longer needed anywhere)
|
|
38
|
+
- CMS_CONFIG no longer has `branch` field (files are local, no remote clone needed)
|
|
39
|
+
- Templates are standalone: fs.copy from create-basement-app/templates/{type}/ directly to target dir (no tiged, no layer overlay)
|
|
40
|
+
- _gitignore must be renamed to .gitignore after copying template to target dir
|
|
41
|
+
- Root package.json is now "basement-starter-cli" with private:true, no bin, no runtime deps — only workspaces + devDeps (biome, changesets)
|
|
42
|
+
- dotenv removed from CLI (was only for dev .env loading from source tree)
|
|
43
|
+
- packages/cli has workspace:* dep on @basementstudio/create-basement-app
|
|
44
|
+
- packages/create-basement-app has "main": "src/index.js"
|
|
12
45
|
|
|
13
46
|
---
|
|
14
47
|
|
|
15
|
-
## 2026-02-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
48
|
+
## 2026-02-11 - US-001
|
|
49
|
+
- What was implemented: Monorepo skeleton with bun workspaces
|
|
50
|
+
- Files changed:
|
|
51
|
+
- package.json (added "workspaces": ["packages/*"])
|
|
52
|
+
- packages/cli/package.json (new)
|
|
53
|
+
- packages/create-basement-app/package.json (new)
|
|
54
|
+
- packages/create-basement-app/templates/ (new dir)
|
|
55
|
+
- packages/create-basement-app/integrations/ (new dir)
|
|
56
|
+
- packages/create-basement-app/template-hooks/ (new dir)
|
|
57
|
+
- packages/create-basement-app/plugins/ (new dir)
|
|
21
58
|
- **Learnings for future iterations:**
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
59
|
+
- biome.json includes list doesn't cover packages/ - will need updating when code moves there
|
|
60
|
+
- bun workspaces use "workspaces" field in root package.json (same as npm/yarn)
|
|
61
|
+
- Empty subdirectories (templates, integrations, etc.) are created but won't be git-tracked until they contain files
|
|
25
62
|
---
|
|
26
63
|
|
|
27
|
-
## 2026-02-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
-
|
|
64
|
+
## 2026-02-11 - US-002
|
|
65
|
+
- What was implemented: Moved CLI code (bin/index.js, src/commands/*) to packages/cli/
|
|
66
|
+
- Files changed:
|
|
67
|
+
- packages/cli/bin/index.js (new - copied from bin/index.js, chalk replaced with picocolors)
|
|
68
|
+
- packages/cli/src/commands/create.js (new - copied from src/commands/create.js, merger paths updated)
|
|
69
|
+
- packages/cli/src/commands/add-integration.js (new - copied, merger paths updated)
|
|
70
|
+
- packages/cli/src/commands/worktree.js (new - copied as-is, no external imports to update)
|
|
71
|
+
- packages/cli/src/commands/setup-sanity.js (new - copied as-is)
|
|
72
|
+
- packages/cli/package.json (updated with runtime dependencies)
|
|
73
|
+
- biome.json (added packages/** to includes)
|
|
74
|
+
- package.json (fixed formatting for biome compliance)
|
|
33
75
|
- **Learnings for future iterations:**
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
-
|
|
44
|
-
-
|
|
45
|
-
-
|
|
46
|
-
-
|
|
76
|
+
- chalk.bold.hex("#FF4D00") has no picocolors equivalent - use ANSI escape codes: `\x1b[1m\x1b[38;2;255;77;0m${text}\x1b[0m`
|
|
77
|
+
- Static imports in ESM fail at module load time even for --help - merger imports in create.js are mostly dynamic (await import) except getLayerConfig which is static
|
|
78
|
+
- For intermediate stories, import paths to not-yet-moved modules use `../../../../src/mergers/` - these will be cleaned up in US-003
|
|
79
|
+
- `node --check file.js` validates syntax without executing (useful for ESM files that would fail on missing deps)
|
|
80
|
+
- dotenv path in create.js uses __dirname-relative resolution - needs updating when file moves
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## 2026-02-11 - US-003
|
|
84
|
+
- What was implemented: Moved all merger code to packages/create-basement-app/src/mergers/
|
|
85
|
+
- Files changed:
|
|
86
|
+
- packages/create-basement-app/src/mergers/index.js (new - copied from src/mergers/index.js)
|
|
87
|
+
- packages/create-basement-app/src/mergers/config.js (new - copied from src/mergers/config.js)
|
|
88
|
+
- packages/create-basement-app/src/mergers/layout-merger.js (new - copied from src/mergers/layout-merger.js)
|
|
89
|
+
- packages/create-basement-app/src/mergers/sitemap-merger.js (new - copied from src/mergers/sitemap-merger.js)
|
|
90
|
+
- packages/create-basement-app/src/mergers/check-integration-merger.js (new - copied from src/mergers/check-integration-merger.js)
|
|
91
|
+
- packages/create-basement-app/src/index.js (new - barrel re-export of public API)
|
|
92
|
+
- packages/create-basement-app/package.json (added fs-extra, picocolors, tiged deps)
|
|
93
|
+
- packages/cli/src/commands/create.js (3 import paths updated to create-basement-app)
|
|
94
|
+
- packages/cli/src/commands/add-integration.js (1 import path updated to create-basement-app)
|
|
95
|
+
- src/mergers/next-config-merger.js (DELETED - orphaned, never in CMS_MERGERS)
|
|
47
96
|
- **Learnings for future iterations:**
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
-
|
|
58
|
-
-
|
|
59
|
-
-
|
|
60
|
-
-
|
|
97
|
+
- From packages/cli/src/commands/ to packages/create-basement-app/src/mergers/ the relative path is ../../../create-basement-app/src/mergers/
|
|
98
|
+
- Old src/mergers/ files are preserved (not deleted) until US-013 cleanup to avoid breaking anything
|
|
99
|
+
- index.js barrel export pattern: re-export named exports from submodules for clean public API
|
|
100
|
+
- Merger code deps (fs-extra, tiged) need to be declared in create-basement-app's package.json since that's where the code now lives
|
|
101
|
+
- next-starter is a PRIVATE repo — tiged can't clone it. Use `gh repo clone` instead for authenticated access.
|
|
102
|
+
- Default template is the base for all other templates (webgl, webgpu, experiment will copy from it)
|
|
103
|
+
- Template cleanup: remove .tldr cache, .tldrignore; rename .gitignore to _gitignore; delete bun.lock
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 2026-02-11 - US-004
|
|
107
|
+
- What was implemented: Generated default template by cloning basementstudio/next-starter#main
|
|
108
|
+
- Files changed:
|
|
109
|
+
- packages/create-basement-app/templates/default/ (84 files — complete Next.js project)
|
|
110
|
+
- Renamed .gitignore to _gitignore (npm strips dotfiles)
|
|
111
|
+
- Deleted bun.lock (should not be committed in templates)
|
|
112
|
+
- Removed .tldr/ cache and .tldrignore (repo-specific caches)
|
|
61
113
|
- **Learnings for future iterations:**
|
|
62
|
-
-
|
|
63
|
-
-
|
|
114
|
+
- basementstudio/next-starter is a private repo — `npx tiged` fails. Use `gh repo clone` with `--depth 1` for auth.
|
|
115
|
+
- After cloning, remove .git/ before copying to template directory
|
|
116
|
+
- next-starter includes .biome/plugins (Grit lint rules), .cursor/rules, .vscode, .github, .editorconfig — all part of the project template
|
|
117
|
+
- Template package.json has: next 16.1.4, react 19.2.4, react-dom 19.2.4, plus tailwindcss, biome, zustand, etc.
|
|
118
|
+
- Template includes lib/scripts/ for code generation (generate-component.ts, generate-page.ts)
|
|
64
119
|
---
|
|
65
120
|
|
|
66
|
-
## 2026-02-
|
|
67
|
-
-
|
|
68
|
-
-
|
|
69
|
-
-
|
|
70
|
-
-
|
|
71
|
-
-
|
|
72
|
-
-
|
|
121
|
+
## 2026-02-11 - US-005
|
|
122
|
+
- What was implemented: Generated WebGL template from default template + layer overlay files
|
|
123
|
+
- Files changed:
|
|
124
|
+
- packages/create-basement-app/templates/webgl/ (87 files — complete Next.js project with WebGL)
|
|
125
|
+
- app/page.tsx overwritten with WebGL version (imports DynamicCanvas)
|
|
126
|
+
- components/webgl/canvas/dynamic.tsx (new — client-side dynamic loader for R3F canvas)
|
|
127
|
+
- components/webgl/canvas/index.tsx (new — R3F Canvas with production GL settings)
|
|
128
|
+
- components/webgl/components/scene/index.tsx (new — demo rotating orange cube)
|
|
129
|
+
- package.json updated with WebGL deps: @react-three/fiber ^9.5.0, @react-three/drei ^10.7.7, three ^0.182.0, @radix-ui/react-navigation-menu ^1.2.5, leva ^0.9.35, @types/three ^0.182.0
|
|
73
130
|
- **Learnings for future iterations:**
|
|
74
|
-
-
|
|
75
|
-
-
|
|
131
|
+
- Template generation pattern: cp -r default/ {name}/, overlay files, edit package.json deps
|
|
132
|
+
- WebGL layer has 1 replaceFile (app/page.tsx) and 3 additivePaths (canvas + scene components)
|
|
133
|
+
- Dependencies are alphabetically sorted in package.json to keep diffs clean
|
|
134
|
+
- _gitignore already present from default template copy (no need to rename again)
|
|
135
|
+
- No bun.lock in templates (already cleaned in default template)
|
|
76
136
|
---
|
|
77
137
|
|
|
78
|
-
## 2026-02-
|
|
79
|
-
-
|
|
80
|
-
-
|
|
81
|
-
-
|
|
82
|
-
-
|
|
83
|
-
- Project name and version still set correctly
|
|
84
|
-
- Files changed: src/commands/create.js
|
|
138
|
+
## 2026-02-11 - US-006
|
|
139
|
+
- What was implemented: Generated WebGPU template from default template + alpha R3F dependencies
|
|
140
|
+
- Files changed:
|
|
141
|
+
- packages/create-basement-app/templates/webgpu/ (84 files — complete Next.js project, deps-only)
|
|
142
|
+
- package.json updated with WebGPU deps: @react-three/fiber 10.0.0-alpha.2, @react-three/drei ^11.0.0-alpha.4, three ^0.182.0, leva ^0.9.35, lucide-react ^0.474.0, @radix-ui/react-navigation-menu ^1.2.5, @types/three ^0.182.0
|
|
85
143
|
- **Learnings for future iterations:**
|
|
86
|
-
-
|
|
87
|
-
-
|
|
144
|
+
- WebGPU is deps-only — no overlay files, simplest template generation (just copy + edit package.json)
|
|
145
|
+
- WebGPU uses ALPHA versions of R3F (10.0.0-alpha.2 for fiber, ^11.0.0-alpha.4 for drei) — different from webgl which uses stable versions
|
|
146
|
+
- File count matches default template exactly (84 files) since no components were added
|
|
88
147
|
---
|
|
89
148
|
|
|
90
|
-
## 2026-02-
|
|
91
|
-
-
|
|
92
|
-
-
|
|
93
|
-
-
|
|
94
|
-
-
|
|
95
|
-
-
|
|
149
|
+
## 2026-02-11 - US-007
|
|
150
|
+
- What was implemented: Generated experiment template from default template + experiment layer overlay files
|
|
151
|
+
- Files changed:
|
|
152
|
+
- packages/create-basement-app/templates/experiment/ (86 files — complete Next.js project with experiment nav)
|
|
153
|
+
- components/layout/header/index.tsx overwritten with experiment version (Radix NavigationMenu-based header with experiment links)
|
|
154
|
+
- components/layout/navigation-menu.tsx (new — full Radix NavigationMenu component library with CVA styling)
|
|
155
|
+
- lib/constants.ts (new — EXPERIMENTS array with route definitions)
|
|
156
|
+
- package.json updated with experiment deps: @radix-ui/react-navigation-menu ^1.2.5, @react-three/fiber ^9.5.0, @react-three/drei ^10.7.7, three ^0.182.0, leva ^0.9.35, lucide-react ^0.474.0, @types/three ^0.182.0
|
|
96
157
|
- **Learnings for future iterations:**
|
|
97
|
-
-
|
|
98
|
-
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
-
|
|
108
|
-
-
|
|
109
|
-
-
|
|
110
|
-
-
|
|
158
|
+
- Experiment layer has 1 replaceFile (header/index.tsx) and 2 additivePaths (navigation-menu.tsx, constants.ts) — different from webgl which has 1 replace + 3 additive
|
|
159
|
+
- class-variance-authority already exists in default template at ^0.7.1, LAYER_CONFIG declares ^0.7.0 — no need to downgrade, existing version satisfies the constraint
|
|
160
|
+
- PRD notes said three ^0.172.0 but actual LAYER_CONFIG uses ^0.182.0 — always check the source code config, not PRD notes
|
|
161
|
+
- Dependencies should be alphabetically sorted in package.json devDependencies too (caught and fixed @types/three ordering)
|
|
162
|
+
- 86 files = 84 default + 2 additive files (navigation-menu.tsx + constants.ts). replaceFile doesn't change count.
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 2026-02-11 - US-008
|
|
166
|
+
- What was implemented: Moved Sanity integration files locally into create-basement-app with a unified config manifest
|
|
167
|
+
- Files changed:
|
|
168
|
+
- packages/create-basement-app/integrations/sanity/config.js (new — single source of truth: deps, devDeps, scripts, additivePaths, mergeFiles)
|
|
169
|
+
- packages/create-basement-app/integrations/sanity/files/ (35 files — complete Sanity integration: app/, components/, lib/)
|
|
170
|
+
- packages/create-basement-app/integrations/sanity/mergers/layout-merger.js (copied from src/mergers/)
|
|
171
|
+
- packages/create-basement-app/integrations/sanity/mergers/sitemap-merger.js (copied from src/mergers/)
|
|
172
|
+
- packages/create-basement-app/integrations/sanity/mergers/check-integration-merger.js (copied from src/mergers/)
|
|
111
173
|
- **Learnings for future iterations:**
|
|
112
|
-
-
|
|
113
|
-
-
|
|
114
|
-
-
|
|
174
|
+
- Integration config pattern: export const {name}Config with name, dependencies, devDependencies, scripts, additivePaths, mergeFiles
|
|
175
|
+
- Sanity has 5 deps, 1 devDep, 2 scripts, 9 additivePaths, 3 mergeFiles
|
|
176
|
+
- additivePaths and mergeFiles were sourced from CMS_CONFIG.sanity in config.js; deps/scripts from hardcoded values in create.js lines 239-260
|
|
177
|
+
- PRD acceptance criteria listed @sanity/vision as a dep, but in create.js it's actually listed alongside other @sanity/* deps (version ^5.7.0)
|
|
178
|
+
- Mergers are COPIES (not moves) — originals in src/mergers/ stay until US-013 cleanup. US-010 will rewire imports.
|
|
115
179
|
---
|
|
180
|
+
|
|
181
|
+
## 2026-02-11 - US-009
|
|
182
|
+
- What was implemented: Moved BaseHub integration, template-hooks, and plugins into packages/create-basement-app
|
|
183
|
+
- Files changed:
|
|
184
|
+
- packages/create-basement-app/integrations/basehub/config.js (new — basehubConfig with deps, additivePaths, mergeFiles)
|
|
185
|
+
- packages/create-basement-app/integrations/basehub/files/README.md (copied from integrations/basehub/)
|
|
186
|
+
- packages/create-basement-app/template-hooks/config.js (new — hooksConfig array with 4 hook entries + deps)
|
|
187
|
+
- packages/create-basement-app/template-hooks/use-battery.ts (copied from template-hooks/)
|
|
188
|
+
- packages/create-basement-app/template-hooks/use-device-perf.ts (copied from template-hooks/)
|
|
189
|
+
- packages/create-basement-app/template-hooks/use-intersection-observer.ts (copied from template-hooks/)
|
|
190
|
+
- packages/create-basement-app/template-hooks/use-media.ts (copied from template-hooks/)
|
|
191
|
+
- packages/create-basement-app/plugins/no-anchor-element.grit (copied from plugins/)
|
|
192
|
+
- packages/create-basement-app/plugins/no-unnecessary-forwardref.grit (copied from plugins/)
|
|
193
|
+
- packages/create-basement-app/plugins/no-relative-parent-imports.grit (copied from plugins/)
|
|
194
|
+
- packages/create-basement-app/plugins/README.md (copied from plugins/)
|
|
195
|
+
- **Learnings for future iterations:**
|
|
196
|
+
- BaseHub integration is minimal — only adds basehub: ^3.0.0 as a dependency, no scripts, no mergeFiles, one additivePath
|
|
197
|
+
- Hook dependency discovery: use-battery imports lodash-es/isEqual; use-device-perf imports detect-gpu, react-device-detect, zustand; use-intersection-observer and use-media have zero npm deps
|
|
198
|
+
- use-device-perf also has an internal dependency on use-battery (imports ./use-battery) — this is a file-level dep, not an npm dep
|
|
199
|
+
- Hooks are currently just copied as files — create.js does NOT inject hook npm deps into the target project's package.json (that will need US-011 to wire up)
|
|
200
|
+
- The config.js pattern for hooks mirrors the integration config pattern: name, file, dependencies, devDependencies
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## 2026-02-11 - US-010
|
|
204
|
+
- What was implemented: Updated merger paths to use local create-basement-app locations instead of remote GitHub clones
|
|
205
|
+
- Files changed:
|
|
206
|
+
- packages/create-basement-app/src/mergers/index.js (replaced tiged remote clone with local fs.copy from integrations/{cms}/files/; updated injectLayer path from ../../layers to ../../templates; removed os and tiged imports)
|
|
207
|
+
- packages/create-basement-app/src/mergers/config.js (removed `branch` field from CMS_CONFIG for both sanity and basehub)
|
|
208
|
+
- packages/cli/src/commands/create.js (added imports for sanityConfig/basehubConfig; replaced hardcoded CMS deps/devDeps/scripts with config manifest reads)
|
|
209
|
+
- packages/cli/src/commands/add-integration.js (added imports for sanityConfig/basehubConfig; replaced hardcoded addDependencies function with config-driven approach)
|
|
210
|
+
- packages/create-basement-app/package.json (removed tiged dependency)
|
|
211
|
+
- CMS_MERGERS updated to import from ../../integrations/sanity/mergers/ instead of co-located ./layout-merger.js
|
|
212
|
+
- **Learnings for future iterations:**
|
|
213
|
+
- injectIntegration path resolution: path.resolve(__dirname, "../../integrations", cms, "files") from src/mergers/index.js
|
|
214
|
+
- injectLayer path resolution: path.resolve(__dirname, "../../templates", layer) from src/mergers/index.js
|
|
215
|
+
- CMS deps are now config-driven: import { sanityConfig } from "../../../create-basement-app/integrations/sanity/config.js"
|
|
216
|
+
- The addDependencies function in add-integration.js was duplicating deps from create.js — both now use config manifests
|
|
217
|
+
- tiged is still needed in packages/cli/ (for template download from GitHub in create.js) but NOT in create-basement-app
|
|
218
|
+
- With this change, adding a new integration only requires: 1) files in integrations/{name}/files/, 2) config.js with deps, 3) optional mergers
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## 2026-02-12 - US-011
|
|
222
|
+
- What was implemented: Centralized all dependency configs — zero hardcoded version strings remain in create.js
|
|
223
|
+
- Files changed:
|
|
224
|
+
- packages/create-basement-app/src/configs/animations.js (new — ANIMATION_CONFIG with gsap and motion deps + getAnimationConfig helper)
|
|
225
|
+
- packages/create-basement-app/src/index.js (added export for getAnimationConfig and ANIMATION_CONFIG)
|
|
226
|
+
- packages/cli/src/commands/create.js (replaced hardcoded animation deps with config; added hooksConfig import; dynamic template discovery; hook dep injection into package.json; updated hooks source path to create-basement-app)
|
|
227
|
+
- package.json (removed unused inquirer and chalk from root dependencies)
|
|
228
|
+
- **Learnings for future iterations:**
|
|
229
|
+
- Animation config follows same pattern as CMS config: ANIMATION_CONFIG object + getAnimationConfig(name) helper
|
|
230
|
+
- Hook dependency injection is a NEW behavior: previously hooks were copied as files but their npm deps were NOT injected. Now hooksConfig is used to inject deps during hydration step.
|
|
231
|
+
- Template prompt choices are dynamically generated from fs.readdir of templates/ dir, with a templateLabels lookup for friendly names
|
|
232
|
+
- dotenv is kept in root deps (not just devDeps) because create.js loads .env at runtime for CLI dev — could be moved in US-013 cleanup
|
|
233
|
+
- Biome auto-fix reorders imports alphabetically and formats long conditionals across multiple lines — run `biome check --write` after edits
|
|
234
|
+
- Hook source path: from packages/cli/src/commands/ to create-basement-app/template-hooks/ is ../../../create-basement-app/template-hooks
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## 2026-02-12 - US-012
|
|
238
|
+
- What was implemented: Replaced tiged remote clone with local fs.copy from standalone templates
|
|
239
|
+
- Files changed:
|
|
240
|
+
- packages/cli/src/commands/create.js (replaced tiged clone with fs.copy; removed layer injection step 3.2; removed layer dep injection from hydration; added _gitignore rename; updated error messages)
|
|
241
|
+
- packages/cli/package.json (removed tiged dependency)
|
|
242
|
+
- **Learnings for future iterations:**
|
|
243
|
+
- Templates are now fully standalone — no more two-step "download base + overlay layer" process
|
|
244
|
+
- _gitignore -> .gitignore rename is needed because npm strips dotfiles from published packages
|
|
245
|
+
- Layer deps no longer need injection during hydration — they're already in each template's package.json
|
|
246
|
+
- tiged is no longer needed anywhere in packages/ (still referenced in old root src/ which will be cleaned in US-013)
|
|
247
|
+
- The template copy is instant (no network call), making CLI significantly faster
|
|
248
|
+
- Template path resolution from create.js: path.resolve(__dirname, "../../../create-basement-app/templates", type)
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## 2026-02-12 - US-013
|
|
252
|
+
- What was implemented: Deleted all old root directories and cleaned up dead code/dependencies
|
|
253
|
+
- Files changed:
|
|
254
|
+
- DELETED: bin/ (262 lines — old CLI entry point, now in packages/cli/bin/)
|
|
255
|
+
- DELETED: src/ (4 commands + 5 mergers — all moved to packages/)
|
|
256
|
+
- DELETED: layers/ (3 layer directories — content in packages/create-basement-app/templates/)
|
|
257
|
+
- DELETED: integrations/ (sanity + basehub — content in packages/create-basement-app/integrations/)
|
|
258
|
+
- DELETED: template-hooks/ (4 hooks — content in packages/create-basement-app/template-hooks/)
|
|
259
|
+
- DELETED: plugins/ (3 grit rules + README — content in packages/create-basement-app/plugins/)
|
|
260
|
+
- package.json (cleaned: renamed to basement-starter-cli, added private:true, removed bin field, removed test script, removed all runtime deps)
|
|
261
|
+
- packages/cli/package.json (removed dotenv dep, added workspace:* dep on create-basement-app)
|
|
262
|
+
- packages/cli/src/commands/create.js (removed dotenv import and config call)
|
|
263
|
+
- packages/create-basement-app/package.json (removed unused picocolors dep, added "main": "src/index.js")
|
|
264
|
+
- bun.lock (regenerated — 4 packages installed, 8 removed)
|
|
265
|
+
- **Learnings for future iterations:**
|
|
266
|
+
- 67 files changed, 8605 lines deleted — the bulk of this story is deletions
|
|
267
|
+
- Root package.json should be private:true and have no bin/deps (those belong in workspace packages)
|
|
268
|
+
- dotenv was loading .env from CLI source tree for dev convenience — not needed in production, removed
|
|
269
|
+
- picocolors was declared in create-basement-app but never imported — always verify deps are actually used
|
|
270
|
+
- workspace:* protocol links packages without publishing — bun resolves it to the local package
|
|
271
|
+
- After cleanup, the project root only has: package.json, biome.json, bun.lock, .changeset/, .github/, packages/
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## 2026-02-12 - US-014
|
|
275
|
+
- What was implemented: Updated changeset config, CI workflow, CLAUDE.md, and README.md for workspace-aware publishing
|
|
276
|
+
- Files changed:
|
|
277
|
+
- .github/workflows/release.yml (added NPM_TOKEN and NODE_AUTH_TOKEN env vars for npm publishing)
|
|
278
|
+
- CLAUDE.md (rewrote Architecture section for monorepo, updated CLI flow, integration sources, plugin paths, dev commands)
|
|
279
|
+
- README.md (added Project Structure section with monorepo layout and package table)
|
|
280
|
+
- **Learnings for future iterations:**
|
|
281
|
+
- Changeset config was already workspace-ready — `access: "public"` and `updateInternalDependencies: "patch"` were set from the original single-package setup
|
|
282
|
+
- CI release workflow needs both GITHUB_TOKEN (for PR creation) and NPM_TOKEN/NODE_AUTH_TOKEN (for npm publishing) — the original only had GITHUB_TOKEN
|
|
283
|
+
- `changesets/action@v1` handles workspace publishing automatically — `changeset publish` publishes all packages with pending version bumps
|
|
284
|
+
- `workspace:*` is resolved at publish time — changesets replace it with the actual semver version in the published package.json
|
|
285
|
+
- Biome lint fails on this repo due to nested root configs in templates/ — this is pre-existing and not related to any story changes
|
|
286
|
+
- CLAUDE.md Architecture section should match actual directory structure — the old section described layers/, integrations/, template-hooks/ at root which no longer exist
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## 2026-02-12 - US-015
|
|
290
|
+
- What was implemented: End-to-end verification of all 4 template types
|
|
291
|
+
- Verification results:
|
|
292
|
+
- npm link from packages/cli/ succeeded
|
|
293
|
+
- basement -c /tmp/test-default -d -no-cms -no-animation -claude -no-hooks — SUCCESS
|
|
294
|
+
- basement -c /tmp/test-webgl -webgl -no-cms -no-animation -claude -no-hooks — SUCCESS
|
|
295
|
+
- basement -c /tmp/test-webgpu -webgpu -no-cms -no-animation -claude -no-hooks — SUCCESS
|
|
296
|
+
- basement -c /tmp/test-experiment -experiment -no-cms -no-animation -claude -no-hooks — SUCCESS
|
|
297
|
+
- 26/26 structural checks pass (deps, .gitignore rename, template-specific files/dirs)
|
|
298
|
+
- bun install succeeds on generated projects (392 packages, 5.25s)
|
|
299
|
+
- **Learnings:**
|
|
300
|
+
- All templates produce valid Next.js projects with react@19.2.4, next@16.1.4, react-dom@19.2.4
|
|
301
|
+
- _gitignore -> .gitignore rename works correctly for all templates
|
|
302
|
+
- Local template copy is instant (no network call) — significantly faster than the old tiged-based approach
|
|
303
|
+
- WebGL template includes components/webgl/ with canvas/ and components/ subdirectories
|
|
304
|
+
- WebGPU template is deps-only (alpha R3F versions, no extra component files)
|
|
305
|
+
- Experiment template includes navigation-menu.tsx and lib/constants.ts
|
|
306
|
+
|
|
307
|
+
## RESTRUCTURE COMPLETE — 15/15 stories pass
|
|
308
|
+
---
|
|
309
|
+
|
package/tasks/ralph.sh
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Ralph Wiggum - Long-running AI agent loop
|
|
3
|
+
# Usage: ./ralph.sh [--tool amp|claude] [max_iterations]
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
# Parse arguments
|
|
8
|
+
TOOL="amp" # Default to amp for backwards compatibility
|
|
9
|
+
MAX_ITERATIONS=10
|
|
10
|
+
|
|
11
|
+
while [[ $# -gt 0 ]]; do
|
|
12
|
+
case $1 in
|
|
13
|
+
--tool)
|
|
14
|
+
TOOL="$2"
|
|
15
|
+
shift 2
|
|
16
|
+
;;
|
|
17
|
+
--tool=*)
|
|
18
|
+
TOOL="${1#*=}"
|
|
19
|
+
shift
|
|
20
|
+
;;
|
|
21
|
+
*)
|
|
22
|
+
# Assume it's max_iterations if it's a number
|
|
23
|
+
if [[ "$1" =~ ^[0-9]+$ ]]; then
|
|
24
|
+
MAX_ITERATIONS="$1"
|
|
25
|
+
fi
|
|
26
|
+
shift
|
|
27
|
+
;;
|
|
28
|
+
esac
|
|
29
|
+
done
|
|
30
|
+
|
|
31
|
+
# Validate tool choice
|
|
32
|
+
if [[ "$TOOL" != "amp" && "$TOOL" != "claude" ]]; then
|
|
33
|
+
echo "Error: Invalid tool '$TOOL'. Must be 'amp' or 'claude'."
|
|
34
|
+
exit 1
|
|
35
|
+
fi
|
|
36
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
37
|
+
PRD_FILE="$SCRIPT_DIR/prd.json"
|
|
38
|
+
PROGRESS_FILE="$SCRIPT_DIR/progress.txt"
|
|
39
|
+
ARCHIVE_DIR="$SCRIPT_DIR/archive"
|
|
40
|
+
LAST_BRANCH_FILE="$SCRIPT_DIR/.last-branch"
|
|
41
|
+
|
|
42
|
+
# Archive previous run if branch changed
|
|
43
|
+
if [ -f "$PRD_FILE" ] && [ -f "$LAST_BRANCH_FILE" ]; then
|
|
44
|
+
CURRENT_BRANCH=$(jq -r '.branchName // empty' "$PRD_FILE" 2>/dev/null || echo "")
|
|
45
|
+
LAST_BRANCH=$(cat "$LAST_BRANCH_FILE" 2>/dev/null || echo "")
|
|
46
|
+
|
|
47
|
+
if [ -n "$CURRENT_BRANCH" ] && [ -n "$LAST_BRANCH" ] && [ "$CURRENT_BRANCH" != "$LAST_BRANCH" ]; then
|
|
48
|
+
# Archive the previous run
|
|
49
|
+
DATE=$(date +%Y-%m-%d)
|
|
50
|
+
# Strip "ralph/" prefix from branch name for folder
|
|
51
|
+
FOLDER_NAME=$(echo "$LAST_BRANCH" | sed 's|^ralph/||')
|
|
52
|
+
ARCHIVE_FOLDER="$ARCHIVE_DIR/$DATE-$FOLDER_NAME"
|
|
53
|
+
|
|
54
|
+
echo "Archiving previous run: $LAST_BRANCH"
|
|
55
|
+
mkdir -p "$ARCHIVE_FOLDER"
|
|
56
|
+
[ -f "$PRD_FILE" ] && cp "$PRD_FILE" "$ARCHIVE_FOLDER/"
|
|
57
|
+
[ -f "$PROGRESS_FILE" ] && cp "$PROGRESS_FILE" "$ARCHIVE_FOLDER/"
|
|
58
|
+
echo " Archived to: $ARCHIVE_FOLDER"
|
|
59
|
+
|
|
60
|
+
# Reset progress file for new run
|
|
61
|
+
echo "# Ralph Progress Log" > "$PROGRESS_FILE"
|
|
62
|
+
echo "Started: $(date)" >> "$PROGRESS_FILE"
|
|
63
|
+
echo "---" >> "$PROGRESS_FILE"
|
|
64
|
+
fi
|
|
65
|
+
fi
|
|
66
|
+
|
|
67
|
+
# Track current branch
|
|
68
|
+
if [ -f "$PRD_FILE" ]; then
|
|
69
|
+
CURRENT_BRANCH=$(jq -r '.branchName // empty' "$PRD_FILE" 2>/dev/null || echo "")
|
|
70
|
+
if [ -n "$CURRENT_BRANCH" ]; then
|
|
71
|
+
echo "$CURRENT_BRANCH" > "$LAST_BRANCH_FILE"
|
|
72
|
+
fi
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
# Initialize progress file if it doesn't exist
|
|
76
|
+
if [ ! -f "$PROGRESS_FILE" ]; then
|
|
77
|
+
echo "# Ralph Progress Log" > "$PROGRESS_FILE"
|
|
78
|
+
echo "Started: $(date)" >> "$PROGRESS_FILE"
|
|
79
|
+
echo "---" >> "$PROGRESS_FILE"
|
|
80
|
+
fi
|
|
81
|
+
|
|
82
|
+
echo "Starting Ralph - Tool: $TOOL - Max iterations: $MAX_ITERATIONS"
|
|
83
|
+
|
|
84
|
+
for i in $(seq 1 $MAX_ITERATIONS); do
|
|
85
|
+
echo ""
|
|
86
|
+
echo "==============================================================="
|
|
87
|
+
echo " Ralph Iteration $i of $MAX_ITERATIONS ($TOOL)"
|
|
88
|
+
echo "==============================================================="
|
|
89
|
+
|
|
90
|
+
# Run the selected tool with the ralph prompt
|
|
91
|
+
if [[ "$TOOL" == "amp" ]]; then
|
|
92
|
+
OUTPUT=$(cat "$SCRIPT_DIR/prompt.md" | amp --dangerously-allow-all 2>&1 | tee /dev/stderr) || true
|
|
93
|
+
else
|
|
94
|
+
# Claude Code: use --dangerously-skip-permissions for autonomous operation, --print for output
|
|
95
|
+
OUTPUT=$(claude --dangerously-skip-permissions --print < "$SCRIPT_DIR/CLAUDE.md" 2>&1 | tee /dev/stderr) || true
|
|
96
|
+
fi
|
|
97
|
+
|
|
98
|
+
# Check for completion signal
|
|
99
|
+
if echo "$OUTPUT" | grep -q "<promise>COMPLETE</promise>"; then
|
|
100
|
+
echo ""
|
|
101
|
+
echo "Ralph completed all tasks!"
|
|
102
|
+
echo "Completed at iteration $i of $MAX_ITERATIONS"
|
|
103
|
+
exit 0
|
|
104
|
+
fi
|
|
105
|
+
|
|
106
|
+
echo "Iteration $i complete. Continuing..."
|
|
107
|
+
sleep 2
|
|
108
|
+
done
|
|
109
|
+
|
|
110
|
+
echo ""
|
|
111
|
+
echo "Ralph reached max iterations ($MAX_ITERATIONS) without completing all tasks."
|
|
112
|
+
echo "Check $PROGRESS_FILE for status."
|
|
113
|
+
exit 1
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import { usePathname } from "next/navigation";
|
|
4
|
-
import { Link } from "@/components/ui/link";
|
|
5
|
-
import EXPERIMENTS from "@/lib/constants";
|
|
6
|
-
import { cn } from "@/lib/styles/cn";
|
|
7
|
-
import {
|
|
8
|
-
NavigationMenu,
|
|
9
|
-
NavigationMenuContent,
|
|
10
|
-
NavigationMenuItem,
|
|
11
|
-
NavigationMenuLink,
|
|
12
|
-
NavigationMenuList,
|
|
13
|
-
NavigationMenuTrigger,
|
|
14
|
-
} from "../navigation-menu";
|
|
15
|
-
|
|
16
|
-
export const Header = () => {
|
|
17
|
-
const pathname = usePathname();
|
|
18
|
-
|
|
19
|
-
return (
|
|
20
|
-
<nav className="fixed top-0 z-50 w-full py-2">
|
|
21
|
-
<div className="mx-auto flex items-center justify-between px-4">
|
|
22
|
-
<Link href="/" className="flex items-center gap-2 text-xl font-bold">
|
|
23
|
-
Basement Experiments Starter
|
|
24
|
-
</Link>
|
|
25
|
-
<NavigationMenu>
|
|
26
|
-
<NavigationMenuList>
|
|
27
|
-
<NavigationMenuItem>
|
|
28
|
-
<NavigationMenuTrigger className="text-sm font-medium px-8 py-6">
|
|
29
|
-
Experiments
|
|
30
|
-
</NavigationMenuTrigger>
|
|
31
|
-
<NavigationMenuContent>
|
|
32
|
-
<ul className="grid w-48 p-2 gap-1 bg-indigo-950/70 backdrop-blur-3xl text-white">
|
|
33
|
-
{EXPERIMENTS.map((experiment) => (
|
|
34
|
-
<li key={experiment.path}>
|
|
35
|
-
<NavigationMenuLink asChild>
|
|
36
|
-
<Link
|
|
37
|
-
href={experiment.path}
|
|
38
|
-
className={cn(
|
|
39
|
-
"block px-2 py-2 text-sm transition-colors duration-200 rounded-sm font-medium",
|
|
40
|
-
pathname === experiment.path
|
|
41
|
-
? "bg-purple-600 text-white"
|
|
42
|
-
: "text-white hover:bg-purple-500/20",
|
|
43
|
-
)}
|
|
44
|
-
>
|
|
45
|
-
{experiment.name}
|
|
46
|
-
</Link>
|
|
47
|
-
</NavigationMenuLink>
|
|
48
|
-
</li>
|
|
49
|
-
))}
|
|
50
|
-
</ul>
|
|
51
|
-
</NavigationMenuContent>
|
|
52
|
-
</NavigationMenuItem>
|
|
53
|
-
</NavigationMenuList>
|
|
54
|
-
</NavigationMenu>
|
|
55
|
-
</div>
|
|
56
|
-
</nav>
|
|
57
|
-
);
|
|
58
|
-
};
|