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,3 @@
1
+ packages:
2
+ - "apps/*"
3
+ - "packages/*"
@@ -0,0 +1,6 @@
1
+ {
2
+ "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3
+ "extends": ["config:best-practices"],
4
+ "labels": ["dependencies"]
5
+ }
6
+
@@ -0,0 +1,4 @@
1
+ {
2
+ "extends": "@workspace/typescript-config/base.json"
3
+ }
4
+
@@ -0,0 +1,27 @@
1
+ {
2
+ "$schema": "https://turbo.build/schema.json",
3
+ "ui": "tui",
4
+ "tasks": {
5
+ "build": {
6
+ "dependsOn": ["^build"],
7
+ "inputs": ["$TURBO_DEFAULT$", ".env*"],
8
+ "outputs": [".next/**", "!.next/cache/**"]
9
+ },
10
+ "lint": {
11
+ "dependsOn": ["^lint"]
12
+ },
13
+ "format": {
14
+ "dependsOn": ["^format"]
15
+ },
16
+ "typecheck": {
17
+ "dependsOn": ["^typecheck"]
18
+ },
19
+ "test": {
20
+ "dependsOn": ["^test"]
21
+ },
22
+ "dev": {
23
+ "cache": false,
24
+ "persistent": true
25
+ }
26
+ }
27
+ }
@@ -0,0 +1,13 @@
1
+ // Root-level ESLint config for a Turborepo workspace.
2
+ // App/package lint rules live in each workspace's eslint.config.js.
3
+ /** @type {import("eslint").Linter.Config} */
4
+ module.exports = {
5
+ root: true,
6
+ ignorePatterns: [
7
+ "**/node_modules/**",
8
+ "**/.next/**",
9
+ "**/dist/**",
10
+ "**/.turbo/**",
11
+ "**/coverage/**",
12
+ ],
13
+ }
@@ -0,0 +1,76 @@
1
+ name: CI
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches:
7
+ - main
8
+
9
+ jobs:
10
+ fast:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ - uses: actions/setup-node@v4
15
+ with:
16
+ node-version: 20
17
+ - uses: extractions/setup-just@v2
18
+ - uses: pnpm/action-setup@v4
19
+ with:
20
+ version: 9.15.9
21
+ - run: pnpm install --frozen-lockfile
22
+ - run: just lint
23
+ - run: just typecheck
24
+
25
+ test:
26
+ runs-on: ubuntu-latest
27
+ steps:
28
+ - uses: actions/checkout@v4
29
+ - uses: actions/setup-node@v4
30
+ with:
31
+ node-version: 20
32
+ - uses: extractions/setup-just@v2
33
+ - uses: pnpm/action-setup@v4
34
+ with:
35
+ version: 9.15.9
36
+ - run: pnpm install --frozen-lockfile
37
+ - run: just test
38
+
39
+ ux:
40
+ runs-on: ubuntu-latest
41
+ steps:
42
+ - uses: actions/checkout@v4
43
+ - uses: actions/setup-node@v4
44
+ with:
45
+ node-version: 20
46
+ - uses: extractions/setup-just@v2
47
+ - uses: pnpm/action-setup@v4
48
+ with:
49
+ version: 9.15.9
50
+ - run: pnpm install --frozen-lockfile
51
+ - run: pnpm exec playwright install --with-deps chromium
52
+ - run: just ux
53
+
54
+ supply-chain:
55
+ runs-on: ubuntu-latest
56
+ steps:
57
+ - uses: actions/checkout@v4
58
+ with:
59
+ fetch-depth: 0
60
+ - uses: actions/setup-node@v4
61
+ with:
62
+ node-version: 20
63
+ - uses: actions/setup-go@v5
64
+ with:
65
+ go-version: "1.24"
66
+ - uses: pnpm/action-setup@v4
67
+ with:
68
+ version: 9.15.9
69
+ - run: pnpm install --frozen-lockfile
70
+ - run: go install github.com/google/osv-scanner/v2/cmd/osv-scanner@v2.3.5
71
+ - uses: gitleaks/gitleaks-action@v2
72
+ env:
73
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
74
+ GITLEAKS_CONFIG: .gitleaks.toml
75
+ - run: $(go env GOPATH)/bin/osv-scanner scan source -r .
76
+ - run: pnpm audit --audit-level=high
@@ -0,0 +1,5 @@
1
+ title = "next-monorepo gitleaks config"
2
+
3
+ [extend]
4
+ useDefault = true
5
+
@@ -0,0 +1,7 @@
1
+ dist/
2
+ node_modules/
3
+ .next/
4
+ .turbo/
5
+ coverage/
6
+ pnpm-lock.yaml
7
+ .pnpm-store/
@@ -0,0 +1,11 @@
1
+ {
2
+ "endOfLine": "lf",
3
+ "semi": false,
4
+ "singleQuote": false,
5
+ "tabWidth": 2,
6
+ "trailingComma": "es5",
7
+ "printWidth": 80,
8
+ "plugins": ["prettier-plugin-tailwindcss"],
9
+ "tailwindStylesheet": "packages/ui/src/styles/globals.css",
10
+ "tailwindFunctions": ["cn", "cva"]
11
+ }
@@ -0,0 +1,35 @@
1
+ # Project Context
2
+
3
+ This file is a short table of contents for the template knowledge base.
4
+
5
+ ## Architecture
6
+
7
+ System structure and enforced dependency layers: [ARCHITECTURE.md](ARCHITECTURE.md)
8
+
9
+ ## Design
10
+
11
+ Design notes and core beliefs: [docs/DESIGN.md](docs/DESIGN.md), [docs/design-docs/index.md](docs/design-docs/index.md)
12
+
13
+ ## Frontend
14
+
15
+ Frontend conventions, UI package structure, and shared component rules: [docs/FRONTEND.md](docs/FRONTEND.md)
16
+
17
+ ## Product
18
+
19
+ Starter goals and onboarding expectations: [docs/PRODUCT_SENSE.md](docs/PRODUCT_SENSE.md), [docs/product-specs/index.md](docs/product-specs/index.md)
20
+
21
+ ## Plans
22
+
23
+ Execution plans and tech debt tracking: [docs/PLANS.md](docs/PLANS.md), [docs/exec-plans/tech-debt-tracker.md](docs/exec-plans/tech-debt-tracker.md)
24
+
25
+ ## Reliability
26
+
27
+ Build, test, CI, and operational expectations: [docs/RELIABILITY.md](docs/RELIABILITY.md)
28
+
29
+ ## Quality And Security
30
+
31
+ Quality rubric and security posture: [docs/QUALITY_SCORE.md](docs/QUALITY_SCORE.md), [docs/SECURITY.md](docs/SECURITY.md)
32
+
33
+ ## References And Generated Artifacts
34
+
35
+ Reference material and generated snapshots: [docs/references/design-system-reference-llms.txt](docs/references/design-system-reference-llms.txt), [docs/generated/db-schema.md](docs/generated/db-schema.md)
@@ -0,0 +1,67 @@
1
+ # Architecture
2
+
3
+ ## Repository Shape
4
+
5
+ - `apps/web`: the main Next.js application
6
+ - `packages/ui`: the shared UI package used by the app
7
+ - `packages/eslint-config`: shared lint config
8
+ - `packages/typescript-config`: shared TypeScript config
9
+
10
+ ## Web App Layers
11
+
12
+ `apps/web` uses `dependency-cruiser` to enforce a small app-level stack:
13
+
14
+ - `app`
15
+ - `components`
16
+ - `hooks`
17
+ - `lib`
18
+
19
+ The important constraints are:
20
+
21
+ - `components` must not import `app`
22
+ - `hooks` may only import `lib`
23
+ - `lib` stays leaf-like
24
+
25
+ The rules live in `apps/web/dependency-cruiser.cjs` and run through `just lint`.
26
+
27
+ ## Shared UI Domain Stack
28
+
29
+ `packages/ui` follows the business-domain stack:
30
+
31
+ - `Types`
32
+ - `Config`
33
+ - `Repo`
34
+ - `Service`
35
+ - `Runtime`
36
+ - `UI`
37
+
38
+ In filesystem terms that is:
39
+
40
+ - `src/types`
41
+ - `src/config`
42
+ - `src/repo`
43
+ - `src/service`
44
+ - `src/runtime`
45
+ - `src/ui`
46
+
47
+ Imports must only move forward through that chain.
48
+
49
+ ## Explicit Cross-Cutting Boundary
50
+
51
+ Cross-cutting concerns do not enter the stack directly.
52
+ They enter through:
53
+
54
+ - `src/providers`
55
+
56
+ Provider-only helper code lives in:
57
+
58
+ - `src/utils`
59
+
60
+ `src/providers` may support `src/service` and `src/ui`.
61
+ `src/utils` is reserved for provider support and must not depend on domain code.
62
+
63
+ The rules live in `packages/ui/dependency-cruiser.cjs` and run through `just lint`.
64
+
65
+ ## No Backend By Default
66
+
67
+ This template does not include a separate API server or database by default.
@@ -0,0 +1,45 @@
1
+ # Next.js Monorepo Template
2
+
3
+ This template ships a README-aligned harness for `apps/web`.
4
+
5
+ ## Harness Commands
6
+
7
+ Run all top-level checks from the template root:
8
+
9
+ ```bash
10
+ just install
11
+ just lint
12
+ just typecheck
13
+ just test
14
+ just ux
15
+ just supply-chain
16
+ just ci
17
+ ```
18
+
19
+ `packages/ui` is still generated and updated through `shadcn` commands, but its internal layer boundaries are checked as part of the harness.
20
+
21
+ ## What Each Lane Covers
22
+
23
+ - `just lint`: Biome, dependency-cruiser, and knip for `apps/web`; dependency-cruiser layer checks for `packages/ui`
24
+ - `just typecheck`: `tsc --noEmit` for `apps/web`
25
+ - `just test`: Vitest smoke coverage for `apps/web`
26
+ - `just ux`: Playwright, axe, and Lighthouse against the running Next.js app
27
+ - `just supply-chain`: gitleaks, osv-scanner, and `pnpm audit`
28
+
29
+ ## Adding Components
30
+
31
+ To add components to your app, run the following command at the root of your `web` app:
32
+
33
+ ```bash
34
+ pnpm dlx shadcn@latest add button -c apps/web
35
+ ```
36
+
37
+ This places generated UI components in `packages/ui/src/ui`.
38
+
39
+ ## Using Components
40
+
41
+ Import shared components from the `ui` package.
42
+
43
+ ```tsx
44
+ import { Button } from "@workspace/ui/ui/button"
45
+ ```
@@ -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
+ }
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,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
+ }