dk-harness 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/LICENSE +201 -0
- package/README.md +267 -0
- package/bin/dk-harness +206 -0
- package/package.json +36 -0
- package/templates/next-axum-monorepo/.eslintrc.js +13 -0
- package/templates/next-axum-monorepo/.github/workflows/ci.yml +92 -0
- package/templates/next-axum-monorepo/.gitleaks.toml +5 -0
- package/templates/next-axum-monorepo/.prettierignore +7 -0
- package/templates/next-axum-monorepo/.prettierrc +11 -0
- package/templates/next-axum-monorepo/AGENTS.md +35 -0
- package/templates/next-axum-monorepo/ARCHITECTURE.md +58 -0
- package/templates/next-axum-monorepo/README.md +45 -0
- package/templates/next-axum-monorepo/apps/axum/Cargo.lock +1041 -0
- package/templates/next-axum-monorepo/apps/axum/Cargo.toml +12 -0
- package/templates/next-axum-monorepo/apps/axum/deny.toml +13 -0
- package/templates/next-axum-monorepo/apps/axum/src/api/mod.rs +1 -0
- package/templates/next-axum-monorepo/apps/axum/src/api/router.rs +53 -0
- package/templates/next-axum-monorepo/apps/axum/src/core/config.rs +17 -0
- package/templates/next-axum-monorepo/apps/axum/src/core/mod.rs +1 -0
- package/templates/next-axum-monorepo/apps/axum/src/domain/health.rs +22 -0
- package/templates/next-axum-monorepo/apps/axum/src/domain/mod.rs +1 -0
- package/templates/next-axum-monorepo/apps/axum/src/lib.rs +6 -0
- package/templates/next-axum-monorepo/apps/axum/src/main.rs +15 -0
- package/templates/next-axum-monorepo/apps/web/app/favicon.ico +0 -0
- package/templates/next-axum-monorepo/apps/web/app/layout.tsx +43 -0
- package/templates/next-axum-monorepo/apps/web/app/page.tsx +19 -0
- package/templates/next-axum-monorepo/apps/web/biome.json +16 -0
- package/templates/next-axum-monorepo/apps/web/components/.gitkeep +0 -0
- package/templates/next-axum-monorepo/apps/web/components/theme-provider.tsx +71 -0
- package/templates/next-axum-monorepo/apps/web/components.json +23 -0
- package/templates/next-axum-monorepo/apps/web/dependency-cruiser.cjs +66 -0
- package/templates/next-axum-monorepo/apps/web/eslint.config.js +4 -0
- package/templates/next-axum-monorepo/apps/web/hooks/.gitkeep +0 -0
- package/templates/next-axum-monorepo/apps/web/knip.json +17 -0
- package/templates/next-axum-monorepo/apps/web/lib/.gitkeep +0 -0
- package/templates/next-axum-monorepo/apps/web/lighthouserc.json +23 -0
- package/templates/next-axum-monorepo/apps/web/next-env.d.ts +6 -0
- package/templates/next-axum-monorepo/apps/web/next.config.mjs +6 -0
- package/templates/next-axum-monorepo/apps/web/package.json +46 -0
- package/templates/next-axum-monorepo/apps/web/playwright.config.ts +18 -0
- package/templates/next-axum-monorepo/apps/web/postcss.config.mjs +1 -0
- package/templates/next-axum-monorepo/apps/web/skills-lock.json +15 -0
- package/templates/next-axum-monorepo/apps/web/tests/e2e/smoke.spec.ts +13 -0
- package/templates/next-axum-monorepo/apps/web/tests/unit/page.test.tsx +16 -0
- package/templates/next-axum-monorepo/apps/web/tsconfig.json +23 -0
- package/templates/next-axum-monorepo/apps/web/vitest.config.ts +13 -0
- package/templates/next-axum-monorepo/apps/web/vitest.setup.ts +1 -0
- package/templates/next-axum-monorepo/docs/DESIGN.md +10 -0
- package/templates/next-axum-monorepo/docs/FRONTEND.md +26 -0
- package/templates/next-axum-monorepo/docs/PLANS.md +25 -0
- package/templates/next-axum-monorepo/docs/PRODUCT_SENSE.md +11 -0
- package/templates/next-axum-monorepo/docs/QUALITY_SCORE.md +16 -0
- package/templates/next-axum-monorepo/docs/RELIABILITY.md +39 -0
- package/templates/next-axum-monorepo/docs/SECURITY.md +16 -0
- package/templates/next-axum-monorepo/docs/design-docs/core-beliefs.md +6 -0
- package/templates/next-axum-monorepo/docs/design-docs/included-skills.md +16 -0
- package/templates/next-axum-monorepo/docs/design-docs/index.md +6 -0
- package/templates/next-axum-monorepo/docs/exec-plans/active/.gitkeep +1 -0
- package/templates/next-axum-monorepo/docs/exec-plans/completed/.gitkeep +1 -0
- package/templates/next-axum-monorepo/docs/exec-plans/repeated-work.md +15 -0
- package/templates/next-axum-monorepo/docs/exec-plans/tech-debt-tracker.md +3 -0
- package/templates/next-axum-monorepo/docs/generated/db-schema.md +3 -0
- package/templates/next-axum-monorepo/docs/product-specs/index.md +5 -0
- package/templates/next-axum-monorepo/docs/product-specs/new-user-onboarding.md +12 -0
- package/templates/next-axum-monorepo/docs/references/design-system-reference-llms.txt +13 -0
- package/templates/next-axum-monorepo/justfile +36 -0
- package/templates/next-axum-monorepo/lefthook.yml +8 -0
- package/templates/next-axum-monorepo/mise.toml +5 -0
- package/templates/next-axum-monorepo/package.json +41 -0
- package/templates/next-axum-monorepo/packages/eslint-config/README.md +3 -0
- package/templates/next-axum-monorepo/packages/eslint-config/base.js +32 -0
- package/templates/next-axum-monorepo/packages/eslint-config/next.js +51 -0
- package/templates/next-axum-monorepo/packages/eslint-config/package.json +26 -0
- package/templates/next-axum-monorepo/packages/eslint-config/react-internal.js +41 -0
- package/templates/next-axum-monorepo/packages/typescript-config/README.md +3 -0
- package/templates/next-axum-monorepo/packages/typescript-config/base.json +20 -0
- package/templates/next-axum-monorepo/packages/typescript-config/nextjs.json +13 -0
- package/templates/next-axum-monorepo/packages/typescript-config/package.json +9 -0
- package/templates/next-axum-monorepo/packages/typescript-config/react-library.json +8 -0
- package/templates/next-axum-monorepo/packages/ui/components.json +23 -0
- package/templates/next-axum-monorepo/packages/ui/dependency-cruiser.cjs +100 -0
- package/templates/next-axum-monorepo/packages/ui/eslint.config.js +4 -0
- package/templates/next-axum-monorepo/packages/ui/package.json +49 -0
- package/templates/next-axum-monorepo/packages/ui/postcss.config.mjs +6 -0
- package/templates/next-axum-monorepo/packages/ui/src/config/.gitkeep +1 -0
- package/templates/next-axum-monorepo/packages/ui/src/providers/.gitkeep +1 -0
- package/templates/next-axum-monorepo/packages/ui/src/repo/.gitkeep +1 -0
- package/templates/next-axum-monorepo/packages/ui/src/runtime/hooks/.gitkeep +1 -0
- package/templates/next-axum-monorepo/packages/ui/src/runtime/utils.ts +6 -0
- package/templates/next-axum-monorepo/packages/ui/src/service/.gitkeep +1 -0
- package/templates/next-axum-monorepo/packages/ui/src/styles/globals.css +129 -0
- package/templates/next-axum-monorepo/packages/ui/src/types/.gitkeep +1 -0
- package/templates/next-axum-monorepo/packages/ui/src/ui/button.tsx +65 -0
- package/templates/next-axum-monorepo/packages/ui/src/utils/.gitkeep +1 -0
- package/templates/next-axum-monorepo/packages/ui/tsconfig.json +10 -0
- package/templates/next-axum-monorepo/packages/ui/tsconfig.lint.json +8 -0
- package/templates/next-axum-monorepo/pnpm-lock.yaml +12402 -0
- package/templates/next-axum-monorepo/pnpm-workspace.yaml +3 -0
- package/templates/next-axum-monorepo/renovate.json +6 -0
- package/templates/next-axum-monorepo/scripts/check-rust-layers.mjs +149 -0
- package/templates/next-axum-monorepo/skills-lock.json +30 -0
- package/templates/next-axum-monorepo/tsconfig.json +4 -0
- package/templates/next-axum-monorepo/turbo.json +27 -0
- package/templates/next-fastapi-monorepo/.eslintrc.js +13 -0
- package/templates/next-fastapi-monorepo/.github/workflows/ci.yml +92 -0
- package/templates/next-fastapi-monorepo/.gitleaks.toml +5 -0
- package/templates/next-fastapi-monorepo/.prettierignore +7 -0
- package/templates/next-fastapi-monorepo/.prettierrc +11 -0
- package/templates/next-fastapi-monorepo/AGENTS.md +35 -0
- package/templates/next-fastapi-monorepo/ARCHITECTURE.md +55 -0
- package/templates/next-fastapi-monorepo/README.md +65 -0
- package/templates/next-fastapi-monorepo/apps/api/.python-version +1 -0
- package/templates/next-fastapi-monorepo/apps/api/README.md +17 -0
- package/templates/next-fastapi-monorepo/apps/api/app/__init__.py +1 -0
- package/templates/next-fastapi-monorepo/apps/api/app/api/__init__.py +2 -0
- package/templates/next-fastapi-monorepo/apps/api/app/api/routes.py +16 -0
- package/templates/next-fastapi-monorepo/apps/api/app/core/__init__.py +2 -0
- package/templates/next-fastapi-monorepo/apps/api/app/core/config.py +11 -0
- package/templates/next-fastapi-monorepo/apps/api/app/domain/__init__.py +2 -0
- package/templates/next-fastapi-monorepo/apps/api/app/domain/health.py +7 -0
- package/templates/next-fastapi-monorepo/apps/api/app/main.py +8 -0
- package/templates/next-fastapi-monorepo/apps/api/package.json +14 -0
- package/templates/next-fastapi-monorepo/apps/api/pyproject.toml +54 -0
- package/templates/next-fastapi-monorepo/apps/api/tests/test_main.py +27 -0
- package/templates/next-fastapi-monorepo/apps/api/uv.lock +1797 -0
- package/templates/next-fastapi-monorepo/apps/web/app/favicon.ico +0 -0
- package/templates/next-fastapi-monorepo/apps/web/app/layout.tsx +43 -0
- package/templates/next-fastapi-monorepo/apps/web/app/page.tsx +19 -0
- package/templates/next-fastapi-monorepo/apps/web/biome.json +16 -0
- package/templates/next-fastapi-monorepo/apps/web/components/.gitkeep +0 -0
- package/templates/next-fastapi-monorepo/apps/web/components/theme-provider.tsx +71 -0
- package/templates/next-fastapi-monorepo/apps/web/components.json +23 -0
- package/templates/next-fastapi-monorepo/apps/web/dependency-cruiser.cjs +66 -0
- package/templates/next-fastapi-monorepo/apps/web/eslint.config.js +4 -0
- package/templates/next-fastapi-monorepo/apps/web/hooks/.gitkeep +0 -0
- package/templates/next-fastapi-monorepo/apps/web/knip.json +17 -0
- package/templates/next-fastapi-monorepo/apps/web/lib/.gitkeep +0 -0
- package/templates/next-fastapi-monorepo/apps/web/lighthouserc.json +23 -0
- package/templates/next-fastapi-monorepo/apps/web/next-env.d.ts +6 -0
- package/templates/next-fastapi-monorepo/apps/web/next.config.mjs +6 -0
- package/templates/next-fastapi-monorepo/apps/web/package.json +46 -0
- package/templates/next-fastapi-monorepo/apps/web/playwright.config.ts +18 -0
- package/templates/next-fastapi-monorepo/apps/web/postcss.config.mjs +1 -0
- package/templates/next-fastapi-monorepo/apps/web/skills-lock.json +40 -0
- package/templates/next-fastapi-monorepo/apps/web/tests/e2e/smoke.spec.ts +13 -0
- package/templates/next-fastapi-monorepo/apps/web/tests/unit/page.test.tsx +16 -0
- package/templates/next-fastapi-monorepo/apps/web/tsconfig.json +23 -0
- package/templates/next-fastapi-monorepo/apps/web/vitest.config.ts +13 -0
- package/templates/next-fastapi-monorepo/apps/web/vitest.setup.ts +1 -0
- package/templates/next-fastapi-monorepo/docs/DESIGN.md +10 -0
- package/templates/next-fastapi-monorepo/docs/FRONTEND.md +26 -0
- package/templates/next-fastapi-monorepo/docs/PLANS.md +25 -0
- package/templates/next-fastapi-monorepo/docs/PRODUCT_SENSE.md +11 -0
- package/templates/next-fastapi-monorepo/docs/QUALITY_SCORE.md +16 -0
- package/templates/next-fastapi-monorepo/docs/RELIABILITY.md +38 -0
- package/templates/next-fastapi-monorepo/docs/SECURITY.md +15 -0
- package/templates/next-fastapi-monorepo/docs/design-docs/core-beliefs.md +6 -0
- package/templates/next-fastapi-monorepo/docs/design-docs/included-skills.md +13 -0
- package/templates/next-fastapi-monorepo/docs/design-docs/index.md +6 -0
- package/templates/next-fastapi-monorepo/docs/exec-plans/active/.gitkeep +1 -0
- package/templates/next-fastapi-monorepo/docs/exec-plans/completed/.gitkeep +1 -0
- package/templates/next-fastapi-monorepo/docs/exec-plans/repeated-work.md +15 -0
- package/templates/next-fastapi-monorepo/docs/exec-plans/tech-debt-tracker.md +3 -0
- package/templates/next-fastapi-monorepo/docs/generated/db-schema.md +3 -0
- package/templates/next-fastapi-monorepo/docs/product-specs/index.md +5 -0
- package/templates/next-fastapi-monorepo/docs/product-specs/new-user-onboarding.md +12 -0
- package/templates/next-fastapi-monorepo/docs/references/design-system-reference-llms.txt +13 -0
- package/templates/next-fastapi-monorepo/docs/references/uv-llms.txt +7 -0
- package/templates/next-fastapi-monorepo/justfile +31 -0
- package/templates/next-fastapi-monorepo/lefthook.yml +8 -0
- package/templates/next-fastapi-monorepo/mise.toml +6 -0
- package/templates/next-fastapi-monorepo/package.json +41 -0
- package/templates/next-fastapi-monorepo/packages/eslint-config/README.md +3 -0
- package/templates/next-fastapi-monorepo/packages/eslint-config/base.js +32 -0
- package/templates/next-fastapi-monorepo/packages/eslint-config/next.js +51 -0
- package/templates/next-fastapi-monorepo/packages/eslint-config/package.json +26 -0
- package/templates/next-fastapi-monorepo/packages/eslint-config/react-internal.js +41 -0
- package/templates/next-fastapi-monorepo/packages/typescript-config/README.md +3 -0
- package/templates/next-fastapi-monorepo/packages/typescript-config/base.json +20 -0
- package/templates/next-fastapi-monorepo/packages/typescript-config/nextjs.json +13 -0
- package/templates/next-fastapi-monorepo/packages/typescript-config/package.json +9 -0
- package/templates/next-fastapi-monorepo/packages/typescript-config/react-library.json +8 -0
- package/templates/next-fastapi-monorepo/packages/ui/components.json +23 -0
- package/templates/next-fastapi-monorepo/packages/ui/dependency-cruiser.cjs +100 -0
- package/templates/next-fastapi-monorepo/packages/ui/eslint.config.js +4 -0
- package/templates/next-fastapi-monorepo/packages/ui/package.json +49 -0
- package/templates/next-fastapi-monorepo/packages/ui/postcss.config.mjs +6 -0
- package/templates/next-fastapi-monorepo/packages/ui/src/config/.gitkeep +1 -0
- package/templates/next-fastapi-monorepo/packages/ui/src/providers/.gitkeep +1 -0
- package/templates/next-fastapi-monorepo/packages/ui/src/repo/.gitkeep +1 -0
- package/templates/next-fastapi-monorepo/packages/ui/src/runtime/hooks/.gitkeep +1 -0
- package/templates/next-fastapi-monorepo/packages/ui/src/runtime/utils.ts +6 -0
- package/templates/next-fastapi-monorepo/packages/ui/src/service/.gitkeep +1 -0
- package/templates/next-fastapi-monorepo/packages/ui/src/styles/globals.css +129 -0
- package/templates/next-fastapi-monorepo/packages/ui/src/types/.gitkeep +1 -0
- package/templates/next-fastapi-monorepo/packages/ui/src/ui/button.tsx +65 -0
- package/templates/next-fastapi-monorepo/packages/ui/src/utils/.gitkeep +1 -0
- package/templates/next-fastapi-monorepo/packages/ui/tsconfig.json +10 -0
- package/templates/next-fastapi-monorepo/packages/ui/tsconfig.lint.json +8 -0
- package/templates/next-fastapi-monorepo/pnpm-lock.yaml +12404 -0
- package/templates/next-fastapi-monorepo/pnpm-workspace.yaml +3 -0
- package/templates/next-fastapi-monorepo/renovate.json +6 -0
- package/templates/next-fastapi-monorepo/tsconfig.json +4 -0
- package/templates/next-fastapi-monorepo/turbo.json +27 -0
- package/templates/next-monorepo/.eslintrc.js +13 -0
- package/templates/next-monorepo/.github/workflows/ci.yml +76 -0
- package/templates/next-monorepo/.gitleaks.toml +5 -0
- package/templates/next-monorepo/.prettierignore +7 -0
- package/templates/next-monorepo/.prettierrc +11 -0
- package/templates/next-monorepo/AGENTS.md +35 -0
- package/templates/next-monorepo/ARCHITECTURE.md +67 -0
- package/templates/next-monorepo/README.md +45 -0
- package/templates/next-monorepo/apps/web/app/favicon.ico +0 -0
- package/templates/next-monorepo/apps/web/app/layout.tsx +43 -0
- package/templates/next-monorepo/apps/web/app/page.tsx +19 -0
- package/templates/next-monorepo/apps/web/biome.json +16 -0
- package/templates/next-monorepo/apps/web/components/.gitkeep +0 -0
- package/templates/next-monorepo/apps/web/components/theme-provider.tsx +71 -0
- package/templates/next-monorepo/apps/web/components.json +23 -0
- package/templates/next-monorepo/apps/web/dependency-cruiser.cjs +66 -0
- package/templates/next-monorepo/apps/web/eslint.config.js +4 -0
- package/templates/next-monorepo/apps/web/hooks/.gitkeep +0 -0
- package/templates/next-monorepo/apps/web/knip.json +17 -0
- package/templates/next-monorepo/apps/web/lib/.gitkeep +0 -0
- package/templates/next-monorepo/apps/web/lighthouserc.json +23 -0
- package/templates/next-monorepo/apps/web/next-env.d.ts +6 -0
- package/templates/next-monorepo/apps/web/next.config.mjs +6 -0
- package/templates/next-monorepo/apps/web/package.json +46 -0
- package/templates/next-monorepo/apps/web/playwright.config.ts +18 -0
- package/templates/next-monorepo/apps/web/postcss.config.mjs +1 -0
- package/templates/next-monorepo/apps/web/skills-lock.json +40 -0
- package/templates/next-monorepo/apps/web/tests/e2e/smoke.spec.ts +13 -0
- package/templates/next-monorepo/apps/web/tests/unit/page.test.tsx +16 -0
- package/templates/next-monorepo/apps/web/tsconfig.json +23 -0
- package/templates/next-monorepo/apps/web/vitest.config.ts +13 -0
- package/templates/next-monorepo/apps/web/vitest.setup.ts +1 -0
- package/templates/next-monorepo/docs/DESIGN.md +11 -0
- package/templates/next-monorepo/docs/FRONTEND.md +32 -0
- package/templates/next-monorepo/docs/PLANS.md +25 -0
- package/templates/next-monorepo/docs/PRODUCT_SENSE.md +11 -0
- package/templates/next-monorepo/docs/QUALITY_SCORE.md +18 -0
- package/templates/next-monorepo/docs/RELIABILITY.md +37 -0
- package/templates/next-monorepo/docs/SECURITY.md +14 -0
- package/templates/next-monorepo/docs/design-docs/core-beliefs.md +6 -0
- package/templates/next-monorepo/docs/design-docs/included-skills.md +13 -0
- package/templates/next-monorepo/docs/design-docs/index.md +6 -0
- package/templates/next-monorepo/docs/exec-plans/active/.gitkeep +1 -0
- package/templates/next-monorepo/docs/exec-plans/completed/.gitkeep +1 -0
- package/templates/next-monorepo/docs/exec-plans/repeated-work.md +15 -0
- package/templates/next-monorepo/docs/exec-plans/tech-debt-tracker.md +3 -0
- package/templates/next-monorepo/docs/generated/db-schema.md +3 -0
- package/templates/next-monorepo/docs/product-specs/index.md +5 -0
- package/templates/next-monorepo/docs/product-specs/new-user-onboarding.md +12 -0
- package/templates/next-monorepo/docs/references/design-system-reference-llms.txt +13 -0
- package/templates/next-monorepo/justfile +26 -0
- package/templates/next-monorepo/lefthook.yml +8 -0
- package/templates/next-monorepo/mise.toml +4 -0
- package/templates/next-monorepo/package.json +41 -0
- package/templates/next-monorepo/packages/eslint-config/README.md +3 -0
- package/templates/next-monorepo/packages/eslint-config/base.js +32 -0
- package/templates/next-monorepo/packages/eslint-config/next.js +51 -0
- package/templates/next-monorepo/packages/eslint-config/package.json +26 -0
- package/templates/next-monorepo/packages/eslint-config/react-internal.js +41 -0
- package/templates/next-monorepo/packages/typescript-config/README.md +3 -0
- package/templates/next-monorepo/packages/typescript-config/base.json +20 -0
- package/templates/next-monorepo/packages/typescript-config/nextjs.json +13 -0
- package/templates/next-monorepo/packages/typescript-config/package.json +9 -0
- package/templates/next-monorepo/packages/typescript-config/react-library.json +8 -0
- package/templates/next-monorepo/packages/ui/components.json +23 -0
- package/templates/next-monorepo/packages/ui/dependency-cruiser.cjs +100 -0
- package/templates/next-monorepo/packages/ui/eslint.config.js +4 -0
- package/templates/next-monorepo/packages/ui/package.json +49 -0
- package/templates/next-monorepo/packages/ui/postcss.config.mjs +6 -0
- package/templates/next-monorepo/packages/ui/src/config/.gitkeep +1 -0
- package/templates/next-monorepo/packages/ui/src/providers/.gitkeep +1 -0
- package/templates/next-monorepo/packages/ui/src/repo/.gitkeep +1 -0
- package/templates/next-monorepo/packages/ui/src/runtime/hooks/.gitkeep +1 -0
- package/templates/next-monorepo/packages/ui/src/runtime/utils.ts +6 -0
- package/templates/next-monorepo/packages/ui/src/service/.gitkeep +1 -0
- package/templates/next-monorepo/packages/ui/src/styles/globals.css +129 -0
- package/templates/next-monorepo/packages/ui/src/types/.gitkeep +1 -0
- package/templates/next-monorepo/packages/ui/src/ui/button.tsx +65 -0
- package/templates/next-monorepo/packages/ui/src/utils/.gitkeep +1 -0
- package/templates/next-monorepo/packages/ui/tsconfig.json +10 -0
- package/templates/next-monorepo/packages/ui/tsconfig.lint.json +8 -0
- package/templates/next-monorepo/pnpm-lock.yaml +12402 -0
- package/templates/next-monorepo/pnpm-workspace.yaml +3 -0
- package/templates/next-monorepo/renovate.json +6 -0
- package/templates/next-monorepo/tsconfig.json +4 -0
- package/templates/next-monorepo/turbo.json +27 -0
- package/templates/registry.json +22 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
pub mod router;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
use axum::{routing::get, Router};
|
|
2
|
+
|
|
3
|
+
use crate::domain::health::{health_message, root_message};
|
|
4
|
+
|
|
5
|
+
pub fn app_router() -> Router {
|
|
6
|
+
Router::new()
|
|
7
|
+
.route("/", get(root))
|
|
8
|
+
.route("/health", get(health))
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
async fn root() -> &'static str {
|
|
12
|
+
root_message()
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
async fn health() -> &'static str {
|
|
16
|
+
health_message()
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
#[cfg(test)]
|
|
20
|
+
mod tests {
|
|
21
|
+
use axum::{
|
|
22
|
+
body::Body,
|
|
23
|
+
http::{Request, StatusCode},
|
|
24
|
+
};
|
|
25
|
+
use tower::ServiceExt;
|
|
26
|
+
|
|
27
|
+
use super::app_router;
|
|
28
|
+
|
|
29
|
+
#[tokio::test]
|
|
30
|
+
async fn root_route_returns_ok() {
|
|
31
|
+
let response = app_router()
|
|
32
|
+
.oneshot(Request::builder().uri("/").body(Body::empty()).unwrap())
|
|
33
|
+
.await
|
|
34
|
+
.unwrap();
|
|
35
|
+
|
|
36
|
+
assert_eq!(response.status(), StatusCode::OK);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
#[tokio::test]
|
|
40
|
+
async fn health_route_returns_ok() {
|
|
41
|
+
let response = app_router()
|
|
42
|
+
.oneshot(
|
|
43
|
+
Request::builder()
|
|
44
|
+
.uri("/health")
|
|
45
|
+
.body(Body::empty())
|
|
46
|
+
.unwrap(),
|
|
47
|
+
)
|
|
48
|
+
.await
|
|
49
|
+
.unwrap();
|
|
50
|
+
|
|
51
|
+
assert_eq!(response.status(), StatusCode::OK);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
use std::net::{AddrParseError, SocketAddr};
|
|
2
|
+
|
|
3
|
+
const SERVER_ADDRESS: &str = "127.0.0.1:3001";
|
|
4
|
+
|
|
5
|
+
pub fn server_address() -> Result<SocketAddr, AddrParseError> {
|
|
6
|
+
SERVER_ADDRESS.parse()
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
#[cfg(test)]
|
|
10
|
+
mod tests {
|
|
11
|
+
use super::server_address;
|
|
12
|
+
|
|
13
|
+
#[test]
|
|
14
|
+
fn server_address_parses_to_the_expected_port() {
|
|
15
|
+
assert_eq!(server_address().unwrap().port(), 3001);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
pub mod config;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
pub fn root_message() -> &'static str {
|
|
2
|
+
"axum server"
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
pub fn health_message() -> &'static str {
|
|
6
|
+
"ok"
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
#[cfg(test)]
|
|
10
|
+
mod tests {
|
|
11
|
+
use super::{health_message, root_message};
|
|
12
|
+
|
|
13
|
+
#[test]
|
|
14
|
+
fn health_message_is_ok() {
|
|
15
|
+
assert_eq!(health_message(), "ok");
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
#[test]
|
|
19
|
+
fn root_message_is_not_empty() {
|
|
20
|
+
assert!(!root_message().is_empty());
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
pub mod health;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
use axum_server::{app_router, server_address};
|
|
2
|
+
|
|
3
|
+
#[tokio::main]
|
|
4
|
+
async fn main() {
|
|
5
|
+
let address = server_address().expect("failed to parse server address");
|
|
6
|
+
let listener = tokio::net::TcpListener::bind(address)
|
|
7
|
+
.await
|
|
8
|
+
.expect("failed to bind TCP listener");
|
|
9
|
+
|
|
10
|
+
println!("axum server listening on http://{address}");
|
|
11
|
+
|
|
12
|
+
axum::serve(listener, app_router())
|
|
13
|
+
.await
|
|
14
|
+
.expect("axum server failed");
|
|
15
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { Metadata } from "next"
|
|
2
|
+
import { Geist_Mono, Inter } from "next/font/google"
|
|
3
|
+
|
|
4
|
+
import "@workspace/ui/globals.css"
|
|
5
|
+
import { ThemeProvider } from "@/components/theme-provider"
|
|
6
|
+
import { cn } from "@workspace/ui/runtime/utils"
|
|
7
|
+
|
|
8
|
+
const inter = Inter({
|
|
9
|
+
subsets: ["latin"],
|
|
10
|
+
variable: "--font-sans",
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
const fontMono = Geist_Mono({
|
|
14
|
+
subsets: ["latin"],
|
|
15
|
+
variable: "--font-mono",
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
export const metadata: Metadata = {
|
|
19
|
+
title: "Project ready",
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export default function RootLayout({
|
|
23
|
+
children,
|
|
24
|
+
}: Readonly<{
|
|
25
|
+
children: React.ReactNode
|
|
26
|
+
}>) {
|
|
27
|
+
return (
|
|
28
|
+
<html
|
|
29
|
+
lang="en"
|
|
30
|
+
suppressHydrationWarning
|
|
31
|
+
className={cn(
|
|
32
|
+
"antialiased",
|
|
33
|
+
fontMono.variable,
|
|
34
|
+
"font-sans",
|
|
35
|
+
inter.variable,
|
|
36
|
+
)}
|
|
37
|
+
>
|
|
38
|
+
<body>
|
|
39
|
+
<ThemeProvider>{children}</ThemeProvider>
|
|
40
|
+
</body>
|
|
41
|
+
</html>
|
|
42
|
+
)
|
|
43
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Button } from "@workspace/ui/ui/button"
|
|
2
|
+
|
|
3
|
+
export default function Page() {
|
|
4
|
+
return (
|
|
5
|
+
<main className="flex min-h-svh p-6">
|
|
6
|
+
<div className="flex max-w-md min-w-0 flex-col gap-4 text-sm leading-loose">
|
|
7
|
+
<section>
|
|
8
|
+
<h1 className="font-medium">Project ready!</h1>
|
|
9
|
+
<p>You may now add components and start building.</p>
|
|
10
|
+
<p>We've already added the button component for you.</p>
|
|
11
|
+
<Button className="mt-2">Button</Button>
|
|
12
|
+
</section>
|
|
13
|
+
<div className="text-muted-foreground font-mono text-xs">
|
|
14
|
+
(Press <kbd>d</kbd> to toggle dark mode)
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
</main>
|
|
18
|
+
)
|
|
19
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
|
|
3
|
+
"formatter": {
|
|
4
|
+
"enabled": true,
|
|
5
|
+
"indentStyle": "space"
|
|
6
|
+
},
|
|
7
|
+
"linter": {
|
|
8
|
+
"enabled": true
|
|
9
|
+
},
|
|
10
|
+
"javascript": {
|
|
11
|
+
"formatter": {
|
|
12
|
+
"quoteStyle": "double",
|
|
13
|
+
"semicolons": "asNeeded"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import { ThemeProvider as NextThemesProvider, useTheme } from "next-themes"
|
|
4
|
+
import * as React from "react"
|
|
5
|
+
|
|
6
|
+
function ThemeProvider({
|
|
7
|
+
children,
|
|
8
|
+
...props
|
|
9
|
+
}: React.ComponentProps<typeof NextThemesProvider>) {
|
|
10
|
+
return (
|
|
11
|
+
<NextThemesProvider
|
|
12
|
+
attribute="class"
|
|
13
|
+
defaultTheme="system"
|
|
14
|
+
enableSystem
|
|
15
|
+
disableTransitionOnChange
|
|
16
|
+
{...props}
|
|
17
|
+
>
|
|
18
|
+
<ThemeHotkey />
|
|
19
|
+
{children}
|
|
20
|
+
</NextThemesProvider>
|
|
21
|
+
)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function isTypingTarget(target: EventTarget | null) {
|
|
25
|
+
if (!(target instanceof HTMLElement)) {
|
|
26
|
+
return false
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return (
|
|
30
|
+
target.isContentEditable ||
|
|
31
|
+
target.tagName === "INPUT" ||
|
|
32
|
+
target.tagName === "TEXTAREA" ||
|
|
33
|
+
target.tagName === "SELECT"
|
|
34
|
+
)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function ThemeHotkey() {
|
|
38
|
+
const { resolvedTheme, setTheme } = useTheme()
|
|
39
|
+
|
|
40
|
+
React.useEffect(() => {
|
|
41
|
+
function onKeyDown(event: KeyboardEvent) {
|
|
42
|
+
if (event.defaultPrevented || event.repeat) {
|
|
43
|
+
return
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (event.metaKey || event.ctrlKey || event.altKey) {
|
|
47
|
+
return
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (event.key.toLowerCase() !== "d") {
|
|
51
|
+
return
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (isTypingTarget(event.target)) {
|
|
55
|
+
return
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
setTheme(resolvedTheme === "dark" ? "light" : "dark")
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
window.addEventListener("keydown", onKeyDown)
|
|
62
|
+
|
|
63
|
+
return () => {
|
|
64
|
+
window.removeEventListener("keydown", onKeyDown)
|
|
65
|
+
}
|
|
66
|
+
}, [resolvedTheme, setTheme])
|
|
67
|
+
|
|
68
|
+
return null
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export { ThemeProvider }
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema.json",
|
|
3
|
+
"style": "radix-lyra",
|
|
4
|
+
"rsc": true,
|
|
5
|
+
"tsx": true,
|
|
6
|
+
"tailwind": {
|
|
7
|
+
"config": "",
|
|
8
|
+
"css": "../../packages/ui/src/styles/globals.css",
|
|
9
|
+
"baseColor": "neutral",
|
|
10
|
+
"cssVariables": true
|
|
11
|
+
},
|
|
12
|
+
"iconLibrary": "lucide",
|
|
13
|
+
"aliases": {
|
|
14
|
+
"components": "@/components",
|
|
15
|
+
"hooks": "@/hooks",
|
|
16
|
+
"lib": "@/lib",
|
|
17
|
+
"utils": "@workspace/ui/runtime/utils",
|
|
18
|
+
"ui": "@workspace/ui/ui"
|
|
19
|
+
},
|
|
20
|
+
"rtl": true,
|
|
21
|
+
"menuColor": "default",
|
|
22
|
+
"menuAccent": "subtle"
|
|
23
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/** @type {import("dependency-cruiser").IConfiguration} */
|
|
2
|
+
module.exports = {
|
|
3
|
+
forbidden: [
|
|
4
|
+
{
|
|
5
|
+
name: "no-circular",
|
|
6
|
+
severity: "error",
|
|
7
|
+
from: {},
|
|
8
|
+
to: {
|
|
9
|
+
circular: true,
|
|
10
|
+
},
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
name: "app-does-not-import-upwards",
|
|
14
|
+
severity: "error",
|
|
15
|
+
from: {
|
|
16
|
+
path: "^app/",
|
|
17
|
+
},
|
|
18
|
+
to: {
|
|
19
|
+
path: "^(?!app/|components/|hooks/|lib/)",
|
|
20
|
+
dependencyTypesNot: ["npm", "npm-dev", "core"],
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: "components-do-not-import-app",
|
|
25
|
+
severity: "error",
|
|
26
|
+
from: {
|
|
27
|
+
path: "^components/",
|
|
28
|
+
},
|
|
29
|
+
to: {
|
|
30
|
+
path: "^(app/|(?!(components/|hooks/|lib/)).+)",
|
|
31
|
+
dependencyTypesNot: ["npm", "npm-dev", "core"],
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: "hooks-only-import-lib",
|
|
36
|
+
severity: "error",
|
|
37
|
+
from: {
|
|
38
|
+
path: "^hooks/",
|
|
39
|
+
},
|
|
40
|
+
to: {
|
|
41
|
+
path: "^(app/|components/|hooks/|(?!(lib/)).+)",
|
|
42
|
+
dependencyTypesNot: ["npm", "npm-dev", "core"],
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: "lib-does-not-import-upwards",
|
|
47
|
+
severity: "error",
|
|
48
|
+
from: {
|
|
49
|
+
path: "^lib/",
|
|
50
|
+
},
|
|
51
|
+
to: {
|
|
52
|
+
path: "^(app/|components/|hooks/|(?!(lib/)).+)",
|
|
53
|
+
dependencyTypesNot: ["npm", "npm-dev", "core"],
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
options: {
|
|
58
|
+
doNotFollow: {
|
|
59
|
+
path: "node_modules",
|
|
60
|
+
},
|
|
61
|
+
includeOnly: "^(app|components|hooks|lib)",
|
|
62
|
+
tsConfig: {
|
|
63
|
+
fileName: "tsconfig.json",
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://unpkg.com/knip@5/schema.json",
|
|
3
|
+
"entry": [
|
|
4
|
+
"app/page.tsx",
|
|
5
|
+
"components/theme-provider.tsx",
|
|
6
|
+
"next.config.mjs",
|
|
7
|
+
"postcss.config.mjs",
|
|
8
|
+
"playwright.config.ts",
|
|
9
|
+
"vitest.config.ts"
|
|
10
|
+
],
|
|
11
|
+
"project": [
|
|
12
|
+
"app/**/*.{ts,tsx}",
|
|
13
|
+
"components/**/*.{ts,tsx}",
|
|
14
|
+
"tests/**/*.{ts,tsx}"
|
|
15
|
+
],
|
|
16
|
+
"ignoreDependencies": ["@workspace/ui", "@tailwindcss/postcss"]
|
|
17
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"ci": {
|
|
3
|
+
"collect": {
|
|
4
|
+
"numberOfRuns": 1,
|
|
5
|
+
"url": ["http://127.0.0.1:3000/"],
|
|
6
|
+
"settings": {
|
|
7
|
+
"preset": "desktop",
|
|
8
|
+
"chromeFlags": "--headless --no-sandbox"
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"assert": {
|
|
12
|
+
"assertions": {
|
|
13
|
+
"categories:accessibility": ["error", { "minScore": 0.9 }],
|
|
14
|
+
"categories:best-practices": ["error", { "minScore": 0.9 }],
|
|
15
|
+
"categories:performance": ["warn", { "minScore": 0.6 }],
|
|
16
|
+
"categories:seo": "off"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"upload": {
|
|
20
|
+
"target": "temporary-public-storage"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "web",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"private": true,
|
|
6
|
+
"scripts": {
|
|
7
|
+
"dev": "next dev --turbopack",
|
|
8
|
+
"build": "next build",
|
|
9
|
+
"start": "next start",
|
|
10
|
+
"lint": "biome check . && depcruise --config dependency-cruiser.cjs . && knip --config knip.json --no-config-hints",
|
|
11
|
+
"format": "biome format --write .",
|
|
12
|
+
"typecheck": "tsc --noEmit",
|
|
13
|
+
"test": "vitest run --config vitest.config.ts",
|
|
14
|
+
"test:e2e": "playwright test",
|
|
15
|
+
"lighthouse": "lhci autorun --config ./lighthouserc.json",
|
|
16
|
+
"ux": "start-server-and-test \"pnpm dev\" http://127.0.0.1:3000 \"pnpm test:e2e && pnpm lighthouse\""
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@workspace/ui": "workspace:*",
|
|
20
|
+
"next": "16.1.6",
|
|
21
|
+
"next-themes": "^0.4.6",
|
|
22
|
+
"react": "^19.2.4",
|
|
23
|
+
"react-dom": "^19.2.4"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@axe-core/playwright": "^4.11.0",
|
|
27
|
+
"@biomejs/biome": "^1.9.4",
|
|
28
|
+
"@lhci/cli": "^0.15.1",
|
|
29
|
+
"@playwright/test": "^1.51.1",
|
|
30
|
+
"@tailwindcss/postcss": "^4.1.18",
|
|
31
|
+
"@testing-library/jest-dom": "^6.8.0",
|
|
32
|
+
"@testing-library/react": "^16.3.0",
|
|
33
|
+
"@vitejs/plugin-react": "^5.0.4",
|
|
34
|
+
"@types/node": "^25.1.0",
|
|
35
|
+
"@types/react": "^19.2.10",
|
|
36
|
+
"@types/react-dom": "^19.2.3",
|
|
37
|
+
"@workspace/typescript-config": "workspace:*",
|
|
38
|
+
"dependency-cruiser": "^17.1.0",
|
|
39
|
+
"jsdom": "^26.1.0",
|
|
40
|
+
"knip": "^5.44.4",
|
|
41
|
+
"start-server-and-test": "^3.0.2",
|
|
42
|
+
"typescript": "^5.9.3",
|
|
43
|
+
"vite-tsconfig-paths": "^5.1.4",
|
|
44
|
+
"vitest": "^3.2.4"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { defineConfig, devices } from "@playwright/test"
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
testDir: "./tests/e2e",
|
|
5
|
+
timeout: 30_000,
|
|
6
|
+
use: {
|
|
7
|
+
baseURL: "http://127.0.0.1:3000",
|
|
8
|
+
trace: "retain-on-failure",
|
|
9
|
+
},
|
|
10
|
+
projects: [
|
|
11
|
+
{
|
|
12
|
+
name: "chromium",
|
|
13
|
+
use: {
|
|
14
|
+
...devices["Desktop Chrome"],
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
],
|
|
18
|
+
})
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "@workspace/ui/postcss.config"
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"skills": {
|
|
4
|
+
"frontend-design": {
|
|
5
|
+
"source": "anthropics/skills",
|
|
6
|
+
"sourceType": "github",
|
|
7
|
+
"computedHash": "063a0e6448123cd359ad0044cc46b0e490cc7964d45ef4bb9fd842bd2ffbca67"
|
|
8
|
+
},
|
|
9
|
+
"shadcn": {
|
|
10
|
+
"source": "shadcn/ui",
|
|
11
|
+
"sourceType": "github",
|
|
12
|
+
"computedHash": "873c67922d80775a9fdf596db7964b579f0408c30ec6e3d11989f6055bbec89f"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import AxeBuilder from "@axe-core/playwright"
|
|
2
|
+
import { expect, test } from "@playwright/test"
|
|
3
|
+
|
|
4
|
+
test("homepage smoke flow passes accessibility checks", async ({ page }) => {
|
|
5
|
+
await page.goto("/")
|
|
6
|
+
|
|
7
|
+
await expect(
|
|
8
|
+
page.getByRole("heading", { name: "Project ready!" }),
|
|
9
|
+
).toBeVisible()
|
|
10
|
+
|
|
11
|
+
const results = await new AxeBuilder({ page }).analyze()
|
|
12
|
+
expect(results.violations).toEqual([])
|
|
13
|
+
})
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { render, screen } from "@testing-library/react"
|
|
2
|
+
|
|
3
|
+
import Page from "@/app/page"
|
|
4
|
+
|
|
5
|
+
describe("Page", () => {
|
|
6
|
+
it("renders the starter copy", () => {
|
|
7
|
+
render(<Page />)
|
|
8
|
+
|
|
9
|
+
expect(
|
|
10
|
+
screen.getByRole("heading", { name: "Project ready!" }),
|
|
11
|
+
).toBeInTheDocument()
|
|
12
|
+
expect(
|
|
13
|
+
screen.getByText("You may now add components and start building."),
|
|
14
|
+
).toBeInTheDocument()
|
|
15
|
+
})
|
|
16
|
+
})
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "@workspace/typescript-config/nextjs.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"paths": {
|
|
5
|
+
"@/*": ["./*"],
|
|
6
|
+
"@workspace/ui/*": ["../../packages/ui/src/*"]
|
|
7
|
+
},
|
|
8
|
+
"types": ["vitest/globals"],
|
|
9
|
+
"plugins": [
|
|
10
|
+
{
|
|
11
|
+
"name": "next"
|
|
12
|
+
}
|
|
13
|
+
]
|
|
14
|
+
},
|
|
15
|
+
"include": [
|
|
16
|
+
"next-env.d.ts",
|
|
17
|
+
"next.config.ts",
|
|
18
|
+
"**/*.ts",
|
|
19
|
+
"**/*.tsx",
|
|
20
|
+
".next/types/**/*.ts"
|
|
21
|
+
],
|
|
22
|
+
"exclude": ["node_modules"]
|
|
23
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import react from "@vitejs/plugin-react"
|
|
2
|
+
import tsconfigPaths from "vite-tsconfig-paths"
|
|
3
|
+
import { defineConfig } from "vitest/config"
|
|
4
|
+
|
|
5
|
+
export default defineConfig({
|
|
6
|
+
plugins: [react(), tsconfigPaths()],
|
|
7
|
+
test: {
|
|
8
|
+
environment: "jsdom",
|
|
9
|
+
globals: true,
|
|
10
|
+
include: ["tests/unit/**/*.test.ts?(x)"],
|
|
11
|
+
setupFiles: ["./vitest.setup.ts"],
|
|
12
|
+
},
|
|
13
|
+
})
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "@testing-library/jest-dom/vitest"
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Design
|
|
2
|
+
|
|
3
|
+
Use this file as the entrypoint for design-oriented knowledge.
|
|
4
|
+
|
|
5
|
+
- Design document index: `design-docs/index.md`
|
|
6
|
+
- Core beliefs: `design-docs/core-beliefs.md`
|
|
7
|
+
- Included design and frontend skills: `design-docs/included-skills.md`
|
|
8
|
+
- Design-system references for agents: `references/design-system-reference-llms.txt`
|
|
9
|
+
|
|
10
|
+
The starter should stay visually minimal while keeping room for product-specific styling.
|