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.
Files changed (291) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +267 -0
  3. package/bin/dk-harness +206 -0
  4. package/package.json +36 -0
  5. package/templates/next-axum-monorepo/.eslintrc.js +13 -0
  6. package/templates/next-axum-monorepo/.github/workflows/ci.yml +92 -0
  7. package/templates/next-axum-monorepo/.gitleaks.toml +5 -0
  8. package/templates/next-axum-monorepo/.prettierignore +7 -0
  9. package/templates/next-axum-monorepo/.prettierrc +11 -0
  10. package/templates/next-axum-monorepo/AGENTS.md +35 -0
  11. package/templates/next-axum-monorepo/ARCHITECTURE.md +58 -0
  12. package/templates/next-axum-monorepo/README.md +45 -0
  13. package/templates/next-axum-monorepo/apps/axum/Cargo.lock +1041 -0
  14. package/templates/next-axum-monorepo/apps/axum/Cargo.toml +12 -0
  15. package/templates/next-axum-monorepo/apps/axum/deny.toml +13 -0
  16. package/templates/next-axum-monorepo/apps/axum/src/api/mod.rs +1 -0
  17. package/templates/next-axum-monorepo/apps/axum/src/api/router.rs +53 -0
  18. package/templates/next-axum-monorepo/apps/axum/src/core/config.rs +17 -0
  19. package/templates/next-axum-monorepo/apps/axum/src/core/mod.rs +1 -0
  20. package/templates/next-axum-monorepo/apps/axum/src/domain/health.rs +22 -0
  21. package/templates/next-axum-monorepo/apps/axum/src/domain/mod.rs +1 -0
  22. package/templates/next-axum-monorepo/apps/axum/src/lib.rs +6 -0
  23. package/templates/next-axum-monorepo/apps/axum/src/main.rs +15 -0
  24. package/templates/next-axum-monorepo/apps/web/app/favicon.ico +0 -0
  25. package/templates/next-axum-monorepo/apps/web/app/layout.tsx +43 -0
  26. package/templates/next-axum-monorepo/apps/web/app/page.tsx +19 -0
  27. package/templates/next-axum-monorepo/apps/web/biome.json +16 -0
  28. package/templates/next-axum-monorepo/apps/web/components/.gitkeep +0 -0
  29. package/templates/next-axum-monorepo/apps/web/components/theme-provider.tsx +71 -0
  30. package/templates/next-axum-monorepo/apps/web/components.json +23 -0
  31. package/templates/next-axum-monorepo/apps/web/dependency-cruiser.cjs +66 -0
  32. package/templates/next-axum-monorepo/apps/web/eslint.config.js +4 -0
  33. package/templates/next-axum-monorepo/apps/web/hooks/.gitkeep +0 -0
  34. package/templates/next-axum-monorepo/apps/web/knip.json +17 -0
  35. package/templates/next-axum-monorepo/apps/web/lib/.gitkeep +0 -0
  36. package/templates/next-axum-monorepo/apps/web/lighthouserc.json +23 -0
  37. package/templates/next-axum-monorepo/apps/web/next-env.d.ts +6 -0
  38. package/templates/next-axum-monorepo/apps/web/next.config.mjs +6 -0
  39. package/templates/next-axum-monorepo/apps/web/package.json +46 -0
  40. package/templates/next-axum-monorepo/apps/web/playwright.config.ts +18 -0
  41. package/templates/next-axum-monorepo/apps/web/postcss.config.mjs +1 -0
  42. package/templates/next-axum-monorepo/apps/web/skills-lock.json +15 -0
  43. package/templates/next-axum-monorepo/apps/web/tests/e2e/smoke.spec.ts +13 -0
  44. package/templates/next-axum-monorepo/apps/web/tests/unit/page.test.tsx +16 -0
  45. package/templates/next-axum-monorepo/apps/web/tsconfig.json +23 -0
  46. package/templates/next-axum-monorepo/apps/web/vitest.config.ts +13 -0
  47. package/templates/next-axum-monorepo/apps/web/vitest.setup.ts +1 -0
  48. package/templates/next-axum-monorepo/docs/DESIGN.md +10 -0
  49. package/templates/next-axum-monorepo/docs/FRONTEND.md +26 -0
  50. package/templates/next-axum-monorepo/docs/PLANS.md +25 -0
  51. package/templates/next-axum-monorepo/docs/PRODUCT_SENSE.md +11 -0
  52. package/templates/next-axum-monorepo/docs/QUALITY_SCORE.md +16 -0
  53. package/templates/next-axum-monorepo/docs/RELIABILITY.md +39 -0
  54. package/templates/next-axum-monorepo/docs/SECURITY.md +16 -0
  55. package/templates/next-axum-monorepo/docs/design-docs/core-beliefs.md +6 -0
  56. package/templates/next-axum-monorepo/docs/design-docs/included-skills.md +16 -0
  57. package/templates/next-axum-monorepo/docs/design-docs/index.md +6 -0
  58. package/templates/next-axum-monorepo/docs/exec-plans/active/.gitkeep +1 -0
  59. package/templates/next-axum-monorepo/docs/exec-plans/completed/.gitkeep +1 -0
  60. package/templates/next-axum-monorepo/docs/exec-plans/repeated-work.md +15 -0
  61. package/templates/next-axum-monorepo/docs/exec-plans/tech-debt-tracker.md +3 -0
  62. package/templates/next-axum-monorepo/docs/generated/db-schema.md +3 -0
  63. package/templates/next-axum-monorepo/docs/product-specs/index.md +5 -0
  64. package/templates/next-axum-monorepo/docs/product-specs/new-user-onboarding.md +12 -0
  65. package/templates/next-axum-monorepo/docs/references/design-system-reference-llms.txt +13 -0
  66. package/templates/next-axum-monorepo/justfile +36 -0
  67. package/templates/next-axum-monorepo/lefthook.yml +8 -0
  68. package/templates/next-axum-monorepo/mise.toml +5 -0
  69. package/templates/next-axum-monorepo/package.json +41 -0
  70. package/templates/next-axum-monorepo/packages/eslint-config/README.md +3 -0
  71. package/templates/next-axum-monorepo/packages/eslint-config/base.js +32 -0
  72. package/templates/next-axum-monorepo/packages/eslint-config/next.js +51 -0
  73. package/templates/next-axum-monorepo/packages/eslint-config/package.json +26 -0
  74. package/templates/next-axum-monorepo/packages/eslint-config/react-internal.js +41 -0
  75. package/templates/next-axum-monorepo/packages/typescript-config/README.md +3 -0
  76. package/templates/next-axum-monorepo/packages/typescript-config/base.json +20 -0
  77. package/templates/next-axum-monorepo/packages/typescript-config/nextjs.json +13 -0
  78. package/templates/next-axum-monorepo/packages/typescript-config/package.json +9 -0
  79. package/templates/next-axum-monorepo/packages/typescript-config/react-library.json +8 -0
  80. package/templates/next-axum-monorepo/packages/ui/components.json +23 -0
  81. package/templates/next-axum-monorepo/packages/ui/dependency-cruiser.cjs +100 -0
  82. package/templates/next-axum-monorepo/packages/ui/eslint.config.js +4 -0
  83. package/templates/next-axum-monorepo/packages/ui/package.json +49 -0
  84. package/templates/next-axum-monorepo/packages/ui/postcss.config.mjs +6 -0
  85. package/templates/next-axum-monorepo/packages/ui/src/config/.gitkeep +1 -0
  86. package/templates/next-axum-monorepo/packages/ui/src/providers/.gitkeep +1 -0
  87. package/templates/next-axum-monorepo/packages/ui/src/repo/.gitkeep +1 -0
  88. package/templates/next-axum-monorepo/packages/ui/src/runtime/hooks/.gitkeep +1 -0
  89. package/templates/next-axum-monorepo/packages/ui/src/runtime/utils.ts +6 -0
  90. package/templates/next-axum-monorepo/packages/ui/src/service/.gitkeep +1 -0
  91. package/templates/next-axum-monorepo/packages/ui/src/styles/globals.css +129 -0
  92. package/templates/next-axum-monorepo/packages/ui/src/types/.gitkeep +1 -0
  93. package/templates/next-axum-monorepo/packages/ui/src/ui/button.tsx +65 -0
  94. package/templates/next-axum-monorepo/packages/ui/src/utils/.gitkeep +1 -0
  95. package/templates/next-axum-monorepo/packages/ui/tsconfig.json +10 -0
  96. package/templates/next-axum-monorepo/packages/ui/tsconfig.lint.json +8 -0
  97. package/templates/next-axum-monorepo/pnpm-lock.yaml +12402 -0
  98. package/templates/next-axum-monorepo/pnpm-workspace.yaml +3 -0
  99. package/templates/next-axum-monorepo/renovate.json +6 -0
  100. package/templates/next-axum-monorepo/scripts/check-rust-layers.mjs +149 -0
  101. package/templates/next-axum-monorepo/skills-lock.json +30 -0
  102. package/templates/next-axum-monorepo/tsconfig.json +4 -0
  103. package/templates/next-axum-monorepo/turbo.json +27 -0
  104. package/templates/next-fastapi-monorepo/.eslintrc.js +13 -0
  105. package/templates/next-fastapi-monorepo/.github/workflows/ci.yml +92 -0
  106. package/templates/next-fastapi-monorepo/.gitleaks.toml +5 -0
  107. package/templates/next-fastapi-monorepo/.prettierignore +7 -0
  108. package/templates/next-fastapi-monorepo/.prettierrc +11 -0
  109. package/templates/next-fastapi-monorepo/AGENTS.md +35 -0
  110. package/templates/next-fastapi-monorepo/ARCHITECTURE.md +55 -0
  111. package/templates/next-fastapi-monorepo/README.md +65 -0
  112. package/templates/next-fastapi-monorepo/apps/api/.python-version +1 -0
  113. package/templates/next-fastapi-monorepo/apps/api/README.md +17 -0
  114. package/templates/next-fastapi-monorepo/apps/api/app/__init__.py +1 -0
  115. package/templates/next-fastapi-monorepo/apps/api/app/api/__init__.py +2 -0
  116. package/templates/next-fastapi-monorepo/apps/api/app/api/routes.py +16 -0
  117. package/templates/next-fastapi-monorepo/apps/api/app/core/__init__.py +2 -0
  118. package/templates/next-fastapi-monorepo/apps/api/app/core/config.py +11 -0
  119. package/templates/next-fastapi-monorepo/apps/api/app/domain/__init__.py +2 -0
  120. package/templates/next-fastapi-monorepo/apps/api/app/domain/health.py +7 -0
  121. package/templates/next-fastapi-monorepo/apps/api/app/main.py +8 -0
  122. package/templates/next-fastapi-monorepo/apps/api/package.json +14 -0
  123. package/templates/next-fastapi-monorepo/apps/api/pyproject.toml +54 -0
  124. package/templates/next-fastapi-monorepo/apps/api/tests/test_main.py +27 -0
  125. package/templates/next-fastapi-monorepo/apps/api/uv.lock +1797 -0
  126. package/templates/next-fastapi-monorepo/apps/web/app/favicon.ico +0 -0
  127. package/templates/next-fastapi-monorepo/apps/web/app/layout.tsx +43 -0
  128. package/templates/next-fastapi-monorepo/apps/web/app/page.tsx +19 -0
  129. package/templates/next-fastapi-monorepo/apps/web/biome.json +16 -0
  130. package/templates/next-fastapi-monorepo/apps/web/components/.gitkeep +0 -0
  131. package/templates/next-fastapi-monorepo/apps/web/components/theme-provider.tsx +71 -0
  132. package/templates/next-fastapi-monorepo/apps/web/components.json +23 -0
  133. package/templates/next-fastapi-monorepo/apps/web/dependency-cruiser.cjs +66 -0
  134. package/templates/next-fastapi-monorepo/apps/web/eslint.config.js +4 -0
  135. package/templates/next-fastapi-monorepo/apps/web/hooks/.gitkeep +0 -0
  136. package/templates/next-fastapi-monorepo/apps/web/knip.json +17 -0
  137. package/templates/next-fastapi-monorepo/apps/web/lib/.gitkeep +0 -0
  138. package/templates/next-fastapi-monorepo/apps/web/lighthouserc.json +23 -0
  139. package/templates/next-fastapi-monorepo/apps/web/next-env.d.ts +6 -0
  140. package/templates/next-fastapi-monorepo/apps/web/next.config.mjs +6 -0
  141. package/templates/next-fastapi-monorepo/apps/web/package.json +46 -0
  142. package/templates/next-fastapi-monorepo/apps/web/playwright.config.ts +18 -0
  143. package/templates/next-fastapi-monorepo/apps/web/postcss.config.mjs +1 -0
  144. package/templates/next-fastapi-monorepo/apps/web/skills-lock.json +40 -0
  145. package/templates/next-fastapi-monorepo/apps/web/tests/e2e/smoke.spec.ts +13 -0
  146. package/templates/next-fastapi-monorepo/apps/web/tests/unit/page.test.tsx +16 -0
  147. package/templates/next-fastapi-monorepo/apps/web/tsconfig.json +23 -0
  148. package/templates/next-fastapi-monorepo/apps/web/vitest.config.ts +13 -0
  149. package/templates/next-fastapi-monorepo/apps/web/vitest.setup.ts +1 -0
  150. package/templates/next-fastapi-monorepo/docs/DESIGN.md +10 -0
  151. package/templates/next-fastapi-monorepo/docs/FRONTEND.md +26 -0
  152. package/templates/next-fastapi-monorepo/docs/PLANS.md +25 -0
  153. package/templates/next-fastapi-monorepo/docs/PRODUCT_SENSE.md +11 -0
  154. package/templates/next-fastapi-monorepo/docs/QUALITY_SCORE.md +16 -0
  155. package/templates/next-fastapi-monorepo/docs/RELIABILITY.md +38 -0
  156. package/templates/next-fastapi-monorepo/docs/SECURITY.md +15 -0
  157. package/templates/next-fastapi-monorepo/docs/design-docs/core-beliefs.md +6 -0
  158. package/templates/next-fastapi-monorepo/docs/design-docs/included-skills.md +13 -0
  159. package/templates/next-fastapi-monorepo/docs/design-docs/index.md +6 -0
  160. package/templates/next-fastapi-monorepo/docs/exec-plans/active/.gitkeep +1 -0
  161. package/templates/next-fastapi-monorepo/docs/exec-plans/completed/.gitkeep +1 -0
  162. package/templates/next-fastapi-monorepo/docs/exec-plans/repeated-work.md +15 -0
  163. package/templates/next-fastapi-monorepo/docs/exec-plans/tech-debt-tracker.md +3 -0
  164. package/templates/next-fastapi-monorepo/docs/generated/db-schema.md +3 -0
  165. package/templates/next-fastapi-monorepo/docs/product-specs/index.md +5 -0
  166. package/templates/next-fastapi-monorepo/docs/product-specs/new-user-onboarding.md +12 -0
  167. package/templates/next-fastapi-monorepo/docs/references/design-system-reference-llms.txt +13 -0
  168. package/templates/next-fastapi-monorepo/docs/references/uv-llms.txt +7 -0
  169. package/templates/next-fastapi-monorepo/justfile +31 -0
  170. package/templates/next-fastapi-monorepo/lefthook.yml +8 -0
  171. package/templates/next-fastapi-monorepo/mise.toml +6 -0
  172. package/templates/next-fastapi-monorepo/package.json +41 -0
  173. package/templates/next-fastapi-monorepo/packages/eslint-config/README.md +3 -0
  174. package/templates/next-fastapi-monorepo/packages/eslint-config/base.js +32 -0
  175. package/templates/next-fastapi-monorepo/packages/eslint-config/next.js +51 -0
  176. package/templates/next-fastapi-monorepo/packages/eslint-config/package.json +26 -0
  177. package/templates/next-fastapi-monorepo/packages/eslint-config/react-internal.js +41 -0
  178. package/templates/next-fastapi-monorepo/packages/typescript-config/README.md +3 -0
  179. package/templates/next-fastapi-monorepo/packages/typescript-config/base.json +20 -0
  180. package/templates/next-fastapi-monorepo/packages/typescript-config/nextjs.json +13 -0
  181. package/templates/next-fastapi-monorepo/packages/typescript-config/package.json +9 -0
  182. package/templates/next-fastapi-monorepo/packages/typescript-config/react-library.json +8 -0
  183. package/templates/next-fastapi-monorepo/packages/ui/components.json +23 -0
  184. package/templates/next-fastapi-monorepo/packages/ui/dependency-cruiser.cjs +100 -0
  185. package/templates/next-fastapi-monorepo/packages/ui/eslint.config.js +4 -0
  186. package/templates/next-fastapi-monorepo/packages/ui/package.json +49 -0
  187. package/templates/next-fastapi-monorepo/packages/ui/postcss.config.mjs +6 -0
  188. package/templates/next-fastapi-monorepo/packages/ui/src/config/.gitkeep +1 -0
  189. package/templates/next-fastapi-monorepo/packages/ui/src/providers/.gitkeep +1 -0
  190. package/templates/next-fastapi-monorepo/packages/ui/src/repo/.gitkeep +1 -0
  191. package/templates/next-fastapi-monorepo/packages/ui/src/runtime/hooks/.gitkeep +1 -0
  192. package/templates/next-fastapi-monorepo/packages/ui/src/runtime/utils.ts +6 -0
  193. package/templates/next-fastapi-monorepo/packages/ui/src/service/.gitkeep +1 -0
  194. package/templates/next-fastapi-monorepo/packages/ui/src/styles/globals.css +129 -0
  195. package/templates/next-fastapi-monorepo/packages/ui/src/types/.gitkeep +1 -0
  196. package/templates/next-fastapi-monorepo/packages/ui/src/ui/button.tsx +65 -0
  197. package/templates/next-fastapi-monorepo/packages/ui/src/utils/.gitkeep +1 -0
  198. package/templates/next-fastapi-monorepo/packages/ui/tsconfig.json +10 -0
  199. package/templates/next-fastapi-monorepo/packages/ui/tsconfig.lint.json +8 -0
  200. package/templates/next-fastapi-monorepo/pnpm-lock.yaml +12404 -0
  201. package/templates/next-fastapi-monorepo/pnpm-workspace.yaml +3 -0
  202. package/templates/next-fastapi-monorepo/renovate.json +6 -0
  203. package/templates/next-fastapi-monorepo/tsconfig.json +4 -0
  204. package/templates/next-fastapi-monorepo/turbo.json +27 -0
  205. package/templates/next-monorepo/.eslintrc.js +13 -0
  206. package/templates/next-monorepo/.github/workflows/ci.yml +76 -0
  207. package/templates/next-monorepo/.gitleaks.toml +5 -0
  208. package/templates/next-monorepo/.prettierignore +7 -0
  209. package/templates/next-monorepo/.prettierrc +11 -0
  210. package/templates/next-monorepo/AGENTS.md +35 -0
  211. package/templates/next-monorepo/ARCHITECTURE.md +67 -0
  212. package/templates/next-monorepo/README.md +45 -0
  213. package/templates/next-monorepo/apps/web/app/favicon.ico +0 -0
  214. package/templates/next-monorepo/apps/web/app/layout.tsx +43 -0
  215. package/templates/next-monorepo/apps/web/app/page.tsx +19 -0
  216. package/templates/next-monorepo/apps/web/biome.json +16 -0
  217. package/templates/next-monorepo/apps/web/components/.gitkeep +0 -0
  218. package/templates/next-monorepo/apps/web/components/theme-provider.tsx +71 -0
  219. package/templates/next-monorepo/apps/web/components.json +23 -0
  220. package/templates/next-monorepo/apps/web/dependency-cruiser.cjs +66 -0
  221. package/templates/next-monorepo/apps/web/eslint.config.js +4 -0
  222. package/templates/next-monorepo/apps/web/hooks/.gitkeep +0 -0
  223. package/templates/next-monorepo/apps/web/knip.json +17 -0
  224. package/templates/next-monorepo/apps/web/lib/.gitkeep +0 -0
  225. package/templates/next-monorepo/apps/web/lighthouserc.json +23 -0
  226. package/templates/next-monorepo/apps/web/next-env.d.ts +6 -0
  227. package/templates/next-monorepo/apps/web/next.config.mjs +6 -0
  228. package/templates/next-monorepo/apps/web/package.json +46 -0
  229. package/templates/next-monorepo/apps/web/playwright.config.ts +18 -0
  230. package/templates/next-monorepo/apps/web/postcss.config.mjs +1 -0
  231. package/templates/next-monorepo/apps/web/skills-lock.json +40 -0
  232. package/templates/next-monorepo/apps/web/tests/e2e/smoke.spec.ts +13 -0
  233. package/templates/next-monorepo/apps/web/tests/unit/page.test.tsx +16 -0
  234. package/templates/next-monorepo/apps/web/tsconfig.json +23 -0
  235. package/templates/next-monorepo/apps/web/vitest.config.ts +13 -0
  236. package/templates/next-monorepo/apps/web/vitest.setup.ts +1 -0
  237. package/templates/next-monorepo/docs/DESIGN.md +11 -0
  238. package/templates/next-monorepo/docs/FRONTEND.md +32 -0
  239. package/templates/next-monorepo/docs/PLANS.md +25 -0
  240. package/templates/next-monorepo/docs/PRODUCT_SENSE.md +11 -0
  241. package/templates/next-monorepo/docs/QUALITY_SCORE.md +18 -0
  242. package/templates/next-monorepo/docs/RELIABILITY.md +37 -0
  243. package/templates/next-monorepo/docs/SECURITY.md +14 -0
  244. package/templates/next-monorepo/docs/design-docs/core-beliefs.md +6 -0
  245. package/templates/next-monorepo/docs/design-docs/included-skills.md +13 -0
  246. package/templates/next-monorepo/docs/design-docs/index.md +6 -0
  247. package/templates/next-monorepo/docs/exec-plans/active/.gitkeep +1 -0
  248. package/templates/next-monorepo/docs/exec-plans/completed/.gitkeep +1 -0
  249. package/templates/next-monorepo/docs/exec-plans/repeated-work.md +15 -0
  250. package/templates/next-monorepo/docs/exec-plans/tech-debt-tracker.md +3 -0
  251. package/templates/next-monorepo/docs/generated/db-schema.md +3 -0
  252. package/templates/next-monorepo/docs/product-specs/index.md +5 -0
  253. package/templates/next-monorepo/docs/product-specs/new-user-onboarding.md +12 -0
  254. package/templates/next-monorepo/docs/references/design-system-reference-llms.txt +13 -0
  255. package/templates/next-monorepo/justfile +26 -0
  256. package/templates/next-monorepo/lefthook.yml +8 -0
  257. package/templates/next-monorepo/mise.toml +4 -0
  258. package/templates/next-monorepo/package.json +41 -0
  259. package/templates/next-monorepo/packages/eslint-config/README.md +3 -0
  260. package/templates/next-monorepo/packages/eslint-config/base.js +32 -0
  261. package/templates/next-monorepo/packages/eslint-config/next.js +51 -0
  262. package/templates/next-monorepo/packages/eslint-config/package.json +26 -0
  263. package/templates/next-monorepo/packages/eslint-config/react-internal.js +41 -0
  264. package/templates/next-monorepo/packages/typescript-config/README.md +3 -0
  265. package/templates/next-monorepo/packages/typescript-config/base.json +20 -0
  266. package/templates/next-monorepo/packages/typescript-config/nextjs.json +13 -0
  267. package/templates/next-monorepo/packages/typescript-config/package.json +9 -0
  268. package/templates/next-monorepo/packages/typescript-config/react-library.json +8 -0
  269. package/templates/next-monorepo/packages/ui/components.json +23 -0
  270. package/templates/next-monorepo/packages/ui/dependency-cruiser.cjs +100 -0
  271. package/templates/next-monorepo/packages/ui/eslint.config.js +4 -0
  272. package/templates/next-monorepo/packages/ui/package.json +49 -0
  273. package/templates/next-monorepo/packages/ui/postcss.config.mjs +6 -0
  274. package/templates/next-monorepo/packages/ui/src/config/.gitkeep +1 -0
  275. package/templates/next-monorepo/packages/ui/src/providers/.gitkeep +1 -0
  276. package/templates/next-monorepo/packages/ui/src/repo/.gitkeep +1 -0
  277. package/templates/next-monorepo/packages/ui/src/runtime/hooks/.gitkeep +1 -0
  278. package/templates/next-monorepo/packages/ui/src/runtime/utils.ts +6 -0
  279. package/templates/next-monorepo/packages/ui/src/service/.gitkeep +1 -0
  280. package/templates/next-monorepo/packages/ui/src/styles/globals.css +129 -0
  281. package/templates/next-monorepo/packages/ui/src/types/.gitkeep +1 -0
  282. package/templates/next-monorepo/packages/ui/src/ui/button.tsx +65 -0
  283. package/templates/next-monorepo/packages/ui/src/utils/.gitkeep +1 -0
  284. package/templates/next-monorepo/packages/ui/tsconfig.json +10 -0
  285. package/templates/next-monorepo/packages/ui/tsconfig.lint.json +8 -0
  286. package/templates/next-monorepo/pnpm-lock.yaml +12402 -0
  287. package/templates/next-monorepo/pnpm-workspace.yaml +3 -0
  288. package/templates/next-monorepo/renovate.json +6 -0
  289. package/templates/next-monorepo/tsconfig.json +4 -0
  290. package/templates/next-monorepo/turbo.json +27 -0
  291. package/templates/registry.json +22 -0
@@ -0,0 +1,12 @@
1
+ [package]
2
+ name = "axum-server"
3
+ version = "0.1.0"
4
+ edition = "2021"
5
+ license = "MIT"
6
+
7
+ [dependencies]
8
+ axum = "0.8"
9
+ tokio = { version = "1", features = ["full"] }
10
+
11
+ [dev-dependencies]
12
+ tower = { version = "0.5", features = ["util"] }
@@ -0,0 +1,13 @@
1
+ [licenses]
2
+ allow = [
3
+ "Apache-2.0",
4
+ "BSD-3-Clause",
5
+ "ISC",
6
+ "MIT",
7
+ "Unicode-3.0",
8
+ "Zlib"
9
+ ]
10
+
11
+ [advisories]
12
+ db-path = "~/.cargo/advisory-db"
13
+ db-urls = ["https://github.com/rustsec/advisory-db"]
@@ -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,6 @@
1
+ pub mod api;
2
+ pub mod core;
3
+ pub mod domain;
4
+
5
+ pub use api::router::app_router;
6
+ pub use core::config::server_address;
@@ -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
+ }
@@ -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&apos;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
+ }
@@ -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
+ }
@@ -0,0 +1,4 @@
1
+ import { nextJsConfig } from "@workspace/eslint-config/next-js"
2
+
3
+ /** @type {import("eslint").Linter.Config} */
4
+ export default nextJsConfig
@@ -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
+ }
@@ -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,6 @@
1
+ /// <reference types="next" />
2
+ /// <reference types="next/image-types/global" />
3
+ import "./.next/dev/types/routes.d.ts"
4
+
5
+ // NOTE: This file should not be edited
6
+ // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
@@ -0,0 +1,6 @@
1
+ /** @type {import('next').NextConfig} */
2
+ const nextConfig = {
3
+ transpilePackages: ["@workspace/ui"],
4
+ }
5
+
6
+ export default nextConfig
@@ -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.