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.
- package/README.md +18 -18
- package/dist/configs/animations.d.ts +25 -0
- package/dist/configs/animations.d.ts.map +1 -0
- package/dist/configs/animations.js +29 -0
- package/dist/configs/animations.js.map +1 -0
- package/dist/helpers/add/hooks-config.d.ts +22 -0
- package/dist/helpers/add/hooks-config.d.ts.map +1 -0
- package/dist/helpers/add/hooks-config.js +37 -0
- package/dist/helpers/add/hooks-config.js.map +1 -0
- package/dist/helpers/add/index.d.ts +18 -0
- package/dist/helpers/add/index.d.ts.map +1 -0
- package/dist/helpers/add/index.js +152 -0
- package/dist/helpers/add/index.js.map +1 -0
- package/dist/helpers/create/copy-template.d.ts +11 -0
- package/dist/helpers/create/copy-template.d.ts.map +1 -0
- package/dist/helpers/create/copy-template.js +19 -0
- package/dist/helpers/create/copy-template.js.map +1 -0
- package/dist/helpers/create/index.d.ts +22 -0
- package/dist/helpers/create/index.d.ts.map +1 -0
- package/dist/helpers/create/index.js +81 -0
- package/dist/helpers/create/index.js.map +1 -0
- package/dist/helpers/create/install.d.ts +8 -0
- package/dist/helpers/create/install.d.ts.map +1 -0
- package/dist/helpers/create/install.js +20 -0
- package/dist/helpers/create/install.js.map +1 -0
- package/dist/helpers/create/rename-files.d.ts +10 -0
- package/dist/helpers/create/rename-files.d.ts.map +1 -0
- package/dist/helpers/create/rename-files.js +17 -0
- package/dist/helpers/create/rename-files.js.map +1 -0
- package/dist/helpers/create/setup-agent.d.ts +21 -0
- package/dist/helpers/create/setup-agent.d.ts.map +1 -0
- package/dist/helpers/create/setup-agent.js +65 -0
- package/dist/helpers/create/setup-agent.js.map +1 -0
- package/dist/helpers/create/setup-sanity.d.ts +23 -0
- package/dist/helpers/create/setup-sanity.d.ts.map +1 -0
- package/dist/helpers/create/setup-sanity.js +354 -0
- package/dist/helpers/create/setup-sanity.js.map +1 -0
- package/dist/helpers/create/update-package.d.ts +20 -0
- package/dist/helpers/create/update-package.d.ts.map +1 -0
- package/dist/helpers/create/update-package.js +87 -0
- package/dist/helpers/create/update-package.js.map +1 -0
- package/dist/helpers/integrate/index.d.ts +13 -0
- package/dist/helpers/integrate/index.d.ts.map +1 -0
- package/dist/helpers/integrate/index.js +204 -0
- package/dist/helpers/integrate/index.js.map +1 -0
- package/dist/helpers/integrate/merge-config.d.ts +21 -0
- package/dist/helpers/integrate/merge-config.d.ts.map +1 -0
- package/dist/helpers/integrate/merge-config.js +38 -0
- package/dist/helpers/integrate/merge-config.js.map +1 -0
- package/dist/helpers/integrate/merge-orchestrator.d.ts +10 -0
- package/dist/helpers/integrate/merge-orchestrator.d.ts.map +1 -0
- package/dist/helpers/integrate/merge-orchestrator.js +188 -0
- package/dist/helpers/integrate/merge-orchestrator.js.map +1 -0
- package/dist/helpers/integrate/sanity/config.d.ts +14 -0
- package/dist/helpers/integrate/sanity/config.d.ts.map +1 -0
- package/dist/helpers/integrate/sanity/config.js +38 -0
- package/dist/helpers/integrate/sanity/config.js.map +1 -0
- package/dist/helpers/integrate/sanity/mergers/check-integration-merger.d.ts +13 -0
- package/dist/helpers/integrate/sanity/mergers/check-integration-merger.d.ts.map +1 -0
- package/dist/helpers/integrate/sanity/mergers/check-integration-merger.js +84 -0
- package/dist/helpers/integrate/sanity/mergers/check-integration-merger.js.map +1 -0
- package/dist/helpers/integrate/sanity/mergers/layout-merger.d.ts +23 -0
- package/dist/helpers/integrate/sanity/mergers/layout-merger.d.ts.map +1 -0
- package/dist/helpers/integrate/sanity/mergers/layout-merger.js +161 -0
- package/dist/helpers/integrate/sanity/mergers/layout-merger.js.map +1 -0
- package/dist/helpers/integrate/sanity/mergers/sitemap-merger.d.ts +13 -0
- package/dist/helpers/integrate/sanity/mergers/sitemap-merger.d.ts.map +1 -0
- package/{packages/create-basement-app/src → dist/helpers/integrate/sanity}/mergers/sitemap-merger.js +33 -45
- package/dist/helpers/integrate/sanity/mergers/sitemap-merger.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +337 -0
- package/dist/index.js.map +1 -0
- package/dist/paths.d.ts +14 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +24 -0
- package/dist/paths.js.map +1 -0
- package/dist/utils/detect-project.d.ts +40 -0
- package/dist/utils/detect-project.d.ts.map +1 -0
- package/dist/utils/detect-project.js +69 -0
- package/dist/utils/detect-project.js.map +1 -0
- package/dist/utils/format-results.d.ts +24 -0
- package/dist/utils/format-results.d.ts.map +1 -0
- package/dist/utils/format-results.js +27 -0
- package/dist/utils/format-results.js.map +1 -0
- package/index.js +25 -0
- package/package.json +25 -12
- package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/package.json +1 -1
- package/src/templates/next-webgl/lib/renderer.ts +7 -0
- package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/package.json +1 -1
- package/.changeset/README.md +0 -10
- package/.changeset/config.json +0 -16
- package/.github/workflows/ci.yml +0 -37
- package/.github/workflows/release.yml +0 -56
- package/.tldr/cache/call_graph.json +0 -7
- package/.tldr/languages.json +0 -6
- package/.tldr/status +0 -1
- package/.tldrignore +0 -84
- package/.vscode/settings.json +0 -98
- package/CHANGELOG.md +0 -68
- package/CLAUDE.md +0 -156
- package/biome.json +0 -45
- package/bun.lock +0 -496
- package/changelog/04-02-26.md +0 -86
- package/changelog/05-02-26.md +0 -101
- package/changelog/09-02-26.md +0 -83
- package/docs/architecture.drawio +0 -250
- package/docs/architecture.mermaid +0 -85
- package/docs/fix-studio-hydration.md +0 -46
- package/docs/plans/2026-01-29-sanity-smart-merge-design.md +0 -196
- package/docs/plans/2026-01-29-sanity-smart-merge-implementation.md +0 -695
- package/docs/sanity-setup-steps.md +0 -199
- package/packages/cli/bin/index.js +0 -259
- package/packages/cli/package.json +0 -16
- package/packages/cli/src/commands/add-integration.js +0 -310
- package/packages/cli/src/commands/create.js +0 -409
- package/packages/cli/src/commands/setup-sanity.js +0 -426
- package/packages/cli/src/commands/worktree.js +0 -805
- package/packages/create-basement-app/integrations/sanity/config.js +0 -46
- package/packages/create-basement-app/integrations/sanity/files/app/api/draft-mode/disable/route.ts +0 -7
- package/packages/create-basement-app/integrations/sanity/files/app/api/draft-mode/enable/route.ts +0 -21
- package/packages/create-basement-app/integrations/sanity/files/app/api/revalidate/route.ts +0 -37
- package/packages/create-basement-app/integrations/sanity/files/app/layout.tsx +0 -111
- package/packages/create-basement-app/integrations/sanity/files/app/sitemap.ts +0 -80
- package/packages/create-basement-app/integrations/sanity/files/app/studio/[[...tool]]/page.tsx +0 -8
- package/packages/create-basement-app/integrations/sanity/files/app/studio/layout.tsx +0 -7
- package/packages/create-basement-app/integrations/sanity/files/components/ui/sanity-image/index.tsx +0 -37
- package/packages/create-basement-app/integrations/sanity/files/lib/integrations/README.md +0 -58
- package/packages/create-basement-app/integrations/sanity/files/lib/integrations/check-integration.ts +0 -62
- package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/README.md +0 -144
- package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/client.ts +0 -30
- package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/components/disable-draft-mode.tsx +0 -29
- package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/components/rich-text.tsx +0 -73
- package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/env.ts +0 -38
- package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/live/index.tsx +0 -34
- package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/queries.ts +0 -99
- package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/sanity.cli.ts +0 -20
- package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/sanity.config.ts +0 -94
- package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/sanity.types.ts +0 -337
- package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schema.json +0 -1850
- package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/article.ts +0 -132
- package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/example.ts +0 -203
- package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/index.ts +0 -37
- package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/link.ts +0 -127
- package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/metadata.ts +0 -68
- package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/navigation.ts +0 -39
- package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/page.ts +0 -77
- package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/richText.ts +0 -59
- package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/structure.ts +0 -5
- package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/utils/image.ts +0 -11
- package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/utils/link.ts +0 -61
- package/packages/create-basement-app/integrations/sanity/files/lib/scripts/copy-sanity-mcp.ts +0 -23
- package/packages/create-basement-app/integrations/sanity/files/lib/scripts/generate-page.ts +0 -310
- package/packages/create-basement-app/integrations/sanity/files/lib/utils/metadata.ts +0 -190
- package/packages/create-basement-app/integrations/sanity/mergers/check-integration-merger.js +0 -105
- package/packages/create-basement-app/integrations/sanity/mergers/layout-merger.js +0 -223
- package/packages/create-basement-app/integrations/sanity/mergers/sitemap-merger.js +0 -121
- package/packages/create-basement-app/package.json +0 -10
- package/packages/create-basement-app/src/configs/animations.js +0 -28
- package/packages/create-basement-app/src/index.js +0 -15
- package/packages/create-basement-app/src/mergers/check-integration-merger.js +0 -105
- package/packages/create-basement-app/src/mergers/config.js +0 -109
- package/packages/create-basement-app/src/mergers/index.js +0 -346
- package/packages/create-basement-app/src/mergers/layout-merger.js +0 -223
- package/packages/create-basement-app/templates/experiment/.cursor/rules/README.md +0 -184
- package/packages/create-basement-app/templates/experiment/.cursor/rules/architecture.mdc +0 -437
- package/packages/create-basement-app/templates/experiment/.cursor/rules/components.mdc +0 -436
- package/packages/create-basement-app/templates/experiment/.cursor/rules/integrations.mdc +0 -447
- package/packages/create-basement-app/templates/experiment/.cursor/rules/main.mdc +0 -278
- package/packages/create-basement-app/templates/experiment/.cursor/rules/styling.mdc +0 -433
- package/packages/create-basement-app/templates/experiment/.github/PULL_REQUEST_TEMPLATE.md +0 -14
- package/packages/create-basement-app/templates/experiment/.vscode/extensions.json +0 -20
- package/packages/create-basement-app/templates/experiment/app/page.tsx +0 -275
- package/packages/create-basement-app/templates/webgl/.biome/plugins/README.md +0 -21
- package/packages/create-basement-app/templates/webgl/.biome/plugins/no-anchor-element.grit +0 -12
- package/packages/create-basement-app/templates/webgl/.biome/plugins/no-relative-parent-imports.grit +0 -10
- package/packages/create-basement-app/templates/webgl/.biome/plugins/no-unnecessary-forwardref.grit +0 -9
- package/packages/create-basement-app/templates/webgl/.cursor/rules/README.md +0 -184
- package/packages/create-basement-app/templates/webgl/.cursor/rules/architecture.mdc +0 -437
- package/packages/create-basement-app/templates/webgl/.cursor/rules/components.mdc +0 -436
- package/packages/create-basement-app/templates/webgl/.cursor/rules/integrations.mdc +0 -447
- package/packages/create-basement-app/templates/webgl/.cursor/rules/main.mdc +0 -278
- package/packages/create-basement-app/templates/webgl/.cursor/rules/styling.mdc +0 -433
- package/packages/create-basement-app/templates/webgl/.github/PULL_REQUEST_TEMPLATE.md +0 -14
- package/packages/create-basement-app/templates/webgl/.github/workflows/lighthouse-to-slack.yml +0 -136
- package/packages/create-basement-app/templates/webgl/.vscode/extensions.json +0 -20
- package/packages/create-basement-app/templates/webgl/.vscode/settings.json +0 -105
- package/packages/create-basement-app/templates/webgl/app/favicon.ico +0 -0
- package/packages/create-basement-app/templates/webgl/app/layout.tsx +0 -104
- package/packages/create-basement-app/templates/webgl/app/robots.ts +0 -15
- package/packages/create-basement-app/templates/webgl/app/sitemap.ts +0 -16
- package/packages/create-basement-app/templates/webgl/components/layout/footer/index.tsx +0 -27
- package/packages/create-basement-app/templates/webgl/components/layout/header/index.tsx +0 -11
- package/packages/create-basement-app/templates/webgl/components/layout/theme/index.tsx +0 -66
- package/packages/create-basement-app/templates/webgl/components/layout/wrapper/index.tsx +0 -65
- package/packages/create-basement-app/templates/webgl/components/ui/README.md +0 -77
- package/packages/create-basement-app/templates/webgl/components/ui/image/README.md +0 -37
- package/packages/create-basement-app/templates/webgl/components/ui/image/index.tsx +0 -224
- package/packages/create-basement-app/templates/webgl/components/ui/link/index.tsx +0 -146
- package/packages/create-basement-app/templates/webgl/lib/integrations/.gitkeep +0 -0
- package/packages/create-basement-app/templates/webgl/public/fonts/geist/Geist-Mono.woff2 +0 -0
- package/tasks/.last-branch +0 -1
- package/tasks/CLAUDE.md +0 -104
- package/tasks/archive/2026-02-09-next-starter-dynamic-layers/prd.json +0 -153
- package/tasks/archive/2026-02-09-next-starter-dynamic-layers/progress.txt +0 -115
- package/tasks/prd-next-starter-dynamic-layers.md +0 -184
- package/tasks/prd-project-restructure.md +0 -375
- package/tasks/prd.json +0 -289
- package/tasks/progress.txt +0 -309
- package/tasks/ralph.sh +0 -113
- /package/{packages/create-basement-app/plugins → plugins}/no-anchor-element.grit +0 -0
- /package/{packages/create-basement-app/plugins → plugins}/no-relative-parent-imports.grit +0 -0
- /package/{packages/create-basement-app/plugins → plugins}/no-unnecessary-forwardref.grit +0 -0
- /package/{packages/create-basement-app → src}/template-hooks/config.js +0 -0
- /package/{packages/create-basement-app → src}/template-hooks/use-battery.ts +0 -0
- /package/{packages/create-basement-app → src}/template-hooks/use-device-perf.ts +0 -0
- /package/{packages/create-basement-app → src}/template-hooks/use-intersection-observer.ts +0 -0
- /package/{packages/create-basement-app → src}/template-hooks/use-media.ts +0 -0
- /package/{packages/create-basement-app → src/templates/next-default/.biome}/plugins/README.md +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.editorconfig +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.env.example +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.gitattributes +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/README.md +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/_gitignore +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/biome.json +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/components/basement.svg +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/README.md +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/index.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/use-device-detection.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/use-media-breakpoint.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/use-prefetch.ts +0 -0
- /package/{.github/workflows → src/templates/next-default/lib/integrations}/.gitkeep +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-default}/lib/renderer.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/dev.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/generate-component.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/generate-page.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/generate.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/utils.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/store/app.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/store/index.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/README.md +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/cn.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/colors.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/config.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/global.css +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/index.css +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/reset.css +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/root.css +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/tailwind.css +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/easings.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/fonts.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/index.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/layout.mjs +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/README.md +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/generate-root.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/generate-tailwind.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/postcss-functions.mjs +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/setup-styles.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/utils.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/typography.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/README.md +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/css.d.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/easings.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/fetch.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/math.test.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/math.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/metadata.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/strings.test.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/strings.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/types.d.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/viewport.test.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/viewport.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/next.config.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/package.json +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/postcss.config.mjs +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-default}/tsconfig.json +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.biome/plugins/README.md +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.biome/plugins/no-anchor-element.grit +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.biome/plugins/no-relative-parent-imports.grit +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.biome/plugins/no-unnecessary-forwardref.grit +0 -0
- /package/{.cursor → src/templates/next-experiments/.cursor}/rules/README.md +0 -0
- /package/{.cursor → src/templates/next-experiments/.cursor}/rules/architecture.mdc +0 -0
- /package/{.cursor → src/templates/next-experiments/.cursor}/rules/components.mdc +0 -0
- /package/{.cursor → src/templates/next-experiments/.cursor}/rules/integrations.mdc +0 -0
- /package/{.cursor → src/templates/next-experiments/.cursor}/rules/main.mdc +0 -0
- /package/{.cursor → src/templates/next-experiments/.cursor}/rules/styling.mdc +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.editorconfig +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.env.example +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.gitattributes +0 -0
- /package/{.github → src/templates/next-experiments/.github}/PULL_REQUEST_TEMPLATE.md +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.github/workflows/lighthouse-to-slack.yml +0 -0
- /package/{.vscode → src/templates/next-experiments/.vscode}/extensions.json +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.vscode/settings.json +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/README.md +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/_gitignore +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/favicon.ico +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/layout.tsx +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/page.tsx +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/robots.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/sitemap.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/biome.json +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/basement.svg +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/layout/footer/index.tsx +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/layout/header/index.tsx +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/layout/navigation-menu.tsx +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/layout/theme/index.tsx +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/layout/wrapper/index.tsx +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/ui/README.md +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/ui/image/README.md +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/ui/image/index.tsx +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/ui/link/index.tsx +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/README.md +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/constants.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/index.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/use-device-detection.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/use-media-breakpoint.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/use-prefetch.ts +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/lib/integrations/.gitkeep +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/dev.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/generate-component.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/generate-page.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/generate.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/utils.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/store/app.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/store/index.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/README.md +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/cn.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/colors.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/config.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/global.css +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/index.css +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/reset.css +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/root.css +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/tailwind.css +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/easings.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/fonts.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/index.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/layout.mjs +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/README.md +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/generate-root.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/generate-tailwind.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/postcss-functions.mjs +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/setup-styles.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/utils.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/typography.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/README.md +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/css.d.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/easings.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/fetch.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/math.test.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/math.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/metadata.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/strings.test.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/strings.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/types.d.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/viewport.test.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/viewport.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/next.config.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/postcss.config.mjs +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/public/fonts/geist/Geist-Mono.woff2 +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/tsconfig.json +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.biome/plugins/README.md +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.biome/plugins/no-anchor-element.grit +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.biome/plugins/no-relative-parent-imports.grit +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.biome/plugins/no-unnecessary-forwardref.grit +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/.cursor/rules/README.md +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/.cursor/rules/architecture.mdc +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/.cursor/rules/components.mdc +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/.cursor/rules/integrations.mdc +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/.cursor/rules/main.mdc +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/.cursor/rules/styling.mdc +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.editorconfig +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.env.example +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.gitattributes +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.github/workflows/lighthouse-to-slack.yml +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/.vscode/extensions.json +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.vscode/settings.json +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/README.md +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/_gitignore +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/app/favicon.ico +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/app/layout.tsx +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/app/page.tsx +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/app/robots.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/app/sitemap.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/biome.json +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/basement.svg +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/layout/footer/index.tsx +0 -0
- /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/components/layout/header/index.tsx +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/layout/theme/index.tsx +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/layout/wrapper/index.tsx +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/ui/README.md +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/ui/image/README.md +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/ui/image/index.tsx +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/ui/link/index.tsx +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/webgl/canvas/dynamic.tsx +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/webgl/canvas/index.tsx +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/webgl/components/scene/index.tsx +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/README.md +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/index.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/use-device-detection.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/use-media-breakpoint.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/use-prefetch.ts +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/lib/integrations/.gitkeep +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/dev.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/generate-component.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/generate-page.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/generate.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/utils.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/store/app.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/store/index.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/README.md +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/cn.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/colors.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/config.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/global.css +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/index.css +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/reset.css +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/root.css +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/tailwind.css +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/easings.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/fonts.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/index.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/layout.mjs +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/README.md +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/generate-root.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/generate-tailwind.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/postcss-functions.mjs +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/setup-styles.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/utils.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/typography.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/README.md +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/css.d.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/easings.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/fetch.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/math.test.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/math.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/metadata.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/strings.test.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/strings.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/types.d.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/viewport.test.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/viewport.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/next.config.ts +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/postcss.config.mjs +0 -0
- /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/public/fonts/geist/Geist-Mono.woff2 +0 -0
- /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/tsconfig.json +0 -0
package/packages/create-basement-app/templates/webgl/.github/workflows/lighthouse-to-slack.yml
DELETED
|
@@ -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
|
-
}
|
|
Binary file
|
|
@@ -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,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)
|