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,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,40 @@
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
+ "vercel-composition-patterns": {
15
+ "source": "vercel-labs/agent-skills",
16
+ "sourceType": "github",
17
+ "computedHash": "575757e3e25761c8c562d6e395d29f0b76c98b1273c0bd72d88e6ab1bc9c7d42"
18
+ },
19
+ "vercel-react-best-practices": {
20
+ "source": "vercel-labs/agent-skills",
21
+ "sourceType": "github",
22
+ "computedHash": "43ca6c197f8ec13055079da7053232d477068b03ca443f9ac1bc819b95cdd432"
23
+ },
24
+ "vercel-react-native-skills": {
25
+ "source": "vercel-labs/agent-skills",
26
+ "sourceType": "github",
27
+ "computedHash": "41d24eafa7c3d82e270439808f7cfbc4d51aeb2d14f2809a2267c16275784d06"
28
+ },
29
+ "vercel-react-view-transitions": {
30
+ "source": "vercel-labs/agent-skills",
31
+ "sourceType": "github",
32
+ "computedHash": "c8952fc9127fa0564d0cb71dccb4215a5608ac933b5831104f09173a97a46f85"
33
+ },
34
+ "web-design-guidelines": {
35
+ "source": "vercel-labs/agent-skills",
36
+ "sourceType": "github",
37
+ "computedHash": "f3bc47f890f42a44db1007ab390709ec368e4b8c089baee6b0007182236ac474"
38
+ }
39
+ }
40
+ }
@@ -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.
@@ -0,0 +1,26 @@
1
+ # Frontend
2
+
3
+ ## Scope
4
+
5
+ Frontend work lives in `apps/web` and `packages/ui`.
6
+ Backend work lives separately in `apps/api`.
7
+
8
+ ## Shared UI Package
9
+
10
+ Use these public paths from `@workspace/ui`:
11
+
12
+ - `@workspace/ui/ui/*`
13
+ - `@workspace/ui/runtime/*`
14
+ - `@workspace/ui/providers/*`
15
+
16
+ Keep shared UI work aligned with the enforced stack and do not reintroduce the old `components/hooks/lib` package layers.
17
+
18
+ ## Component Workflow
19
+
20
+ Add shared primitives with:
21
+
22
+ ```bash
23
+ pnpm dlx shadcn@latest add button -c apps/web
24
+ ```
25
+
26
+ Generated shared components should land in `packages/ui/src/ui`.
@@ -0,0 +1,25 @@
1
+ # Plans
2
+
3
+ Plans are first-class artifacts in this template.
4
+
5
+ ## Planning Model
6
+
7
+ - small, transient work may use a short local plan without a committed plan file
8
+ - complex or multi-step work should create an execution plan in `docs/exec-plans/active/`
9
+ - finished execution plans move to `docs/exec-plans/completed/`
10
+ - known cleanup and follow-up items live in `docs/exec-plans/tech-debt-tracker.md`
11
+ - repeated operational work belongs in `docs/exec-plans/repeated-work.md`
12
+
13
+ ## Required Sections For Execution Plans
14
+
15
+ Every execution plan in `active/` or `completed/` should include:
16
+
17
+ - `## Status`
18
+ - `## Scope`
19
+ - `## Steps`
20
+ - `## Progress Log`
21
+ - `## Decision Log`
22
+
23
+ ## Operating Rule
24
+
25
+ Execution plans, completed plans, and tech debt are all versioned and stored in the repository so agents can work without hidden external context.
@@ -0,0 +1,11 @@
1
+ # Product Sense
2
+
3
+ This starter is optimized for teams that want a Next.js frontend and a Python API with strict boundaries from day one.
4
+
5
+ The default experience should communicate:
6
+
7
+ - the frontend is ready immediately
8
+ - the API has a minimal health surface
9
+ - architecture boundaries are not optional
10
+
11
+ Detailed specs live in `product-specs/`.
@@ -0,0 +1,16 @@
1
+ # Quality Score
2
+
3
+ Use this rubric when reviewing the starter or changes to it.
4
+
5
+ ## High Quality Means
6
+
7
+ - frontend and backend layer rules are mechanically enforced
8
+ - shared UI imports are obvious
9
+ - route code stays thin
10
+ - docs match the actual command surface
11
+
12
+ ## Red Flags
13
+
14
+ - UI code bypassing `providers`
15
+ - domain logic drifting into route files
16
+ - docs that lag behind the template
@@ -0,0 +1,38 @@
1
+ # Reliability
2
+
3
+ ## Local Commands
4
+
5
+ Run from the repository root:
6
+
7
+ ```bash
8
+ just install
9
+ pnpm dev
10
+ just lint
11
+ just typecheck
12
+ just test
13
+ just ux
14
+ just supply-chain
15
+ just ci
16
+ ```
17
+
18
+ Run the API directly when needed:
19
+
20
+ ```bash
21
+ pnpm --filter api dev
22
+ ```
23
+
24
+ ## Lane Responsibilities
25
+
26
+ - `just lint`: web lint, shared UI layer checks, Ruff, deptry, and import-linter
27
+ - `just typecheck`: Next.js typecheck plus `basedpyright`
28
+ - `just test`: Vitest plus `pytest`
29
+ - `just ux`: Playwright, axe, and Lighthouse for the web app
30
+ - `just supply-chain`: gitleaks, osv-scanner, `pnpm audit`, and `pip-audit`
31
+
32
+ ## CI
33
+
34
+ GitHub Actions runs the build and test lanes defined in `.github/workflows/ci.yml`.
35
+
36
+ ## Doc Gardening
37
+
38
+ Doc gardening is a repeated manual task tracked in `docs/exec-plans/repeated-work.md`.
@@ -0,0 +1,15 @@
1
+ # Security
2
+
3
+ This starter includes basic Node and Python supply-chain checks.
4
+
5
+ ## Included Checks
6
+
7
+ - `gitleaks`
8
+ - `osv-scanner`
9
+ - `pnpm audit`
10
+ - `pip-audit`
11
+
12
+ ## Expectations
13
+
14
+ - do not commit secrets
15
+ - keep Node and Python dependencies current
@@ -0,0 +1,6 @@
1
+ # Core Beliefs
2
+
3
+ - the starter should feel production-minded without feeling heavy
4
+ - frontend and backend boundaries should be explicit from the first commit
5
+ - API code should stay layered and easy to reason about
6
+ - shared UI should remain easy to extend safely