@glxmart/boss-cli 1.0.0-beta.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 (506) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +134 -0
  3. package/assets/claude-folder/agents/.gitkeep +0 -0
  4. package/assets/claude-folder/commands/boss-commands.md +138 -0
  5. package/assets/claude-folder/rules/boss-workflow.md +33 -0
  6. package/assets/claude-folder/rules/code-style.md +23 -0
  7. package/assets/claude-folder/rules/security.md +22 -0
  8. package/assets/claude-folder/rules/testing.md +32 -0
  9. package/assets/claude-folder/settings.local.json +88 -0
  10. package/assets/claude-folder/skills/.gitkeep +0 -0
  11. package/assets/claude-md/docs/container-use.md +140 -0
  12. package/assets/claude-md/docs/github-operations.md +238 -0
  13. package/assets/claude-md/docs/initialization.md +186 -0
  14. package/assets/claude-md/docs/quality-standards.md +15 -0
  15. package/assets/claude-md/docs/spec-kit.md +46 -0
  16. package/assets/claude-md/docs/workers.md +174 -0
  17. package/assets/claude-md/docs/workflow.md +140 -0
  18. package/assets/claude-md/template.md +812 -0
  19. package/assets/docker-compose/docker-compose.yml +52 -0
  20. package/assets/git-hooks/commit-msg.sh +102 -0
  21. package/assets/git-hooks/pre-commit-check.sh +21 -0
  22. package/assets/git-hooks/pre-commit.sh +6 -0
  23. package/assets/git-hooks/pre-push.sh +154 -0
  24. package/assets/git-hooks/security-check.sh +40 -0
  25. package/assets/git-hooks/test-changed.sh +84 -0
  26. package/assets/github-workflows/CODEOWNERS +3 -0
  27. package/assets/github-workflows/boss-ci.yml +40 -0
  28. package/assets/github-workflows/boss-gates.yml +28 -0
  29. package/assets/start-boss-sh/start-boss.sh +471 -0
  30. package/assets/template-docs/api-service-fastify.md +98 -0
  31. package/assets/template-docs/blank.md +91 -0
  32. package/assets/template-docs/nextjs-app-turbo.md +102 -0
  33. package/assets/template-docs/t3-app.md +106 -0
  34. package/assets/template-loader/README.md +28 -0
  35. package/assets/template-loader/eslint.config.node.js +28 -0
  36. package/assets/template-loader/eslint.config.react.js +47 -0
  37. package/assets/template-loader/gitignore +42 -0
  38. package/assets/template-loader/index.test.ts +10 -0
  39. package/assets/template-loader/index.ts +13 -0
  40. package/assets/template-loader/prettierignore +8 -0
  41. package/assets/template-loader/vitest.config.ts +19 -0
  42. package/assets/worker-configs/architect/.claude/commands/.gitkeep +0 -0
  43. package/assets/worker-configs/architect/.claude/skills/.gitkeep +0 -0
  44. package/assets/worker-configs/architect/CLAUDE.md +106 -0
  45. package/assets/worker-configs/clarifier/.claude/commands/.gitkeep +1 -0
  46. package/assets/worker-configs/clarifier/.claude/skills/.gitkeep +1 -0
  47. package/assets/worker-configs/clarifier/CLAUDE.md +112 -0
  48. package/assets/worker-configs/code-reviewer/CLAUDE.md +113 -0
  49. package/assets/worker-configs/consolidator/.claude/commands/.gitkeep +1 -0
  50. package/assets/worker-configs/consolidator/.claude/skills/.gitkeep +1 -0
  51. package/assets/worker-configs/consolidator/CLAUDE.md +114 -0
  52. package/assets/worker-configs/developer-backend/.claude/commands/.gitkeep +1 -0
  53. package/assets/worker-configs/developer-backend/.claude/skills/.gitkeep +1 -0
  54. package/assets/worker-configs/developer-backend/CLAUDE.md +116 -0
  55. package/assets/worker-configs/developer-frontend/.claude/commands/.gitkeep +1 -0
  56. package/assets/worker-configs/developer-frontend/.claude/skills/.gitkeep +1 -0
  57. package/assets/worker-configs/developer-frontend/CLAUDE.md +116 -0
  58. package/assets/worker-configs/developer-fullstack/.claude/commands/.gitkeep +1 -0
  59. package/assets/worker-configs/developer-fullstack/.claude/skills/.gitkeep +1 -0
  60. package/assets/worker-configs/developer-fullstack/CLAUDE.md +116 -0
  61. package/assets/worker-configs/devops-engineer/CLAUDE.md +111 -0
  62. package/assets/worker-configs/planner/.claude/commands/.gitkeep +1 -0
  63. package/assets/worker-configs/planner/.claude/skills/.gitkeep +1 -0
  64. package/assets/worker-configs/planner/CLAUDE.md +111 -0
  65. package/assets/worker-configs/product-owner/CLAUDE.md +108 -0
  66. package/assets/worker-configs/reviewer/.claude/commands/.gitkeep +1 -0
  67. package/assets/worker-configs/reviewer/.claude/skills/.gitkeep +1 -0
  68. package/assets/worker-configs/reviewer/CLAUDE.md +110 -0
  69. package/assets/worker-configs/security-engineer/CLAUDE.md +109 -0
  70. package/assets/worker-configs/spec-writer/.claude/commands/.gitkeep +1 -0
  71. package/assets/worker-configs/spec-writer/.claude/skills/.gitkeep +1 -0
  72. package/assets/worker-configs/spec-writer/CLAUDE.md +110 -0
  73. package/assets/worker-configs/technical-writer/CLAUDE.md +107 -0
  74. package/assets/worker-configs/tester/CLAUDE.md +110 -0
  75. package/dist/assets/claude-folder/agents/.gitkeep +0 -0
  76. package/dist/assets/claude-folder/commands/boss-commands.md +138 -0
  77. package/dist/assets/claude-folder/rules/boss-workflow.md +33 -0
  78. package/dist/assets/claude-folder/rules/code-style.md +23 -0
  79. package/dist/assets/claude-folder/rules/security.md +22 -0
  80. package/dist/assets/claude-folder/rules/testing.md +32 -0
  81. package/dist/assets/claude-folder/settings.local.json +88 -0
  82. package/dist/assets/claude-folder/skills/.gitkeep +0 -0
  83. package/dist/assets/claude-md/docs/container-use.md +140 -0
  84. package/dist/assets/claude-md/docs/github-operations.md +238 -0
  85. package/dist/assets/claude-md/docs/initialization.md +186 -0
  86. package/dist/assets/claude-md/docs/quality-standards.md +15 -0
  87. package/dist/assets/claude-md/docs/spec-kit.md +46 -0
  88. package/dist/assets/claude-md/docs/workers.md +174 -0
  89. package/dist/assets/claude-md/docs/workflow.md +140 -0
  90. package/dist/assets/claude-md/template.md +812 -0
  91. package/dist/assets/docker-compose/docker-compose.yml +52 -0
  92. package/dist/assets/git-hooks/commit-msg.sh +102 -0
  93. package/dist/assets/git-hooks/pre-commit-check.sh +21 -0
  94. package/dist/assets/git-hooks/pre-commit.sh +6 -0
  95. package/dist/assets/git-hooks/pre-push.sh +154 -0
  96. package/dist/assets/git-hooks/security-check.sh +40 -0
  97. package/dist/assets/git-hooks/test-changed.sh +84 -0
  98. package/dist/assets/github-workflows/CODEOWNERS +3 -0
  99. package/dist/assets/github-workflows/boss-ci.yml +40 -0
  100. package/dist/assets/github-workflows/boss-gates.yml +28 -0
  101. package/dist/assets/start-boss-sh/start-boss.sh +471 -0
  102. package/dist/assets/template-docs/api-service-fastify.md +98 -0
  103. package/dist/assets/template-docs/blank.md +91 -0
  104. package/dist/assets/template-docs/nextjs-app-turbo.md +102 -0
  105. package/dist/assets/template-docs/t3-app.md +106 -0
  106. package/dist/assets/template-loader/README.md +28 -0
  107. package/dist/assets/template-loader/eslint.config.node.js +28 -0
  108. package/dist/assets/template-loader/eslint.config.react.js +47 -0
  109. package/dist/assets/template-loader/gitignore +42 -0
  110. package/dist/assets/template-loader/index.test.ts +10 -0
  111. package/dist/assets/template-loader/index.ts +13 -0
  112. package/dist/assets/template-loader/prettierignore +8 -0
  113. package/dist/assets/template-loader/vitest.config.ts +19 -0
  114. package/dist/assets/worker-configs/architect/.claude/commands/.gitkeep +0 -0
  115. package/dist/assets/worker-configs/architect/.claude/skills/.gitkeep +0 -0
  116. package/dist/assets/worker-configs/architect/CLAUDE.md +106 -0
  117. package/dist/assets/worker-configs/clarifier/.claude/commands/.gitkeep +1 -0
  118. package/dist/assets/worker-configs/clarifier/.claude/skills/.gitkeep +1 -0
  119. package/dist/assets/worker-configs/clarifier/CLAUDE.md +112 -0
  120. package/dist/assets/worker-configs/code-reviewer/CLAUDE.md +113 -0
  121. package/dist/assets/worker-configs/consolidator/.claude/commands/.gitkeep +1 -0
  122. package/dist/assets/worker-configs/consolidator/.claude/skills/.gitkeep +1 -0
  123. package/dist/assets/worker-configs/consolidator/CLAUDE.md +114 -0
  124. package/dist/assets/worker-configs/developer-backend/.claude/commands/.gitkeep +1 -0
  125. package/dist/assets/worker-configs/developer-backend/.claude/skills/.gitkeep +1 -0
  126. package/dist/assets/worker-configs/developer-backend/CLAUDE.md +116 -0
  127. package/dist/assets/worker-configs/developer-frontend/.claude/commands/.gitkeep +1 -0
  128. package/dist/assets/worker-configs/developer-frontend/.claude/skills/.gitkeep +1 -0
  129. package/dist/assets/worker-configs/developer-frontend/CLAUDE.md +116 -0
  130. package/dist/assets/worker-configs/developer-fullstack/.claude/commands/.gitkeep +1 -0
  131. package/dist/assets/worker-configs/developer-fullstack/.claude/skills/.gitkeep +1 -0
  132. package/dist/assets/worker-configs/developer-fullstack/CLAUDE.md +116 -0
  133. package/dist/assets/worker-configs/devops-engineer/CLAUDE.md +111 -0
  134. package/dist/assets/worker-configs/planner/.claude/commands/.gitkeep +1 -0
  135. package/dist/assets/worker-configs/planner/.claude/skills/.gitkeep +1 -0
  136. package/dist/assets/worker-configs/planner/CLAUDE.md +111 -0
  137. package/dist/assets/worker-configs/product-owner/CLAUDE.md +108 -0
  138. package/dist/assets/worker-configs/reviewer/.claude/commands/.gitkeep +1 -0
  139. package/dist/assets/worker-configs/reviewer/.claude/skills/.gitkeep +1 -0
  140. package/dist/assets/worker-configs/reviewer/CLAUDE.md +110 -0
  141. package/dist/assets/worker-configs/security-engineer/CLAUDE.md +109 -0
  142. package/dist/assets/worker-configs/spec-writer/.claude/commands/.gitkeep +1 -0
  143. package/dist/assets/worker-configs/spec-writer/.claude/skills/.gitkeep +1 -0
  144. package/dist/assets/worker-configs/spec-writer/CLAUDE.md +110 -0
  145. package/dist/assets/worker-configs/technical-writer/CLAUDE.md +107 -0
  146. package/dist/assets/worker-configs/tester/CLAUDE.md +110 -0
  147. package/dist/commands/__tests__/bootstrap.test.d.ts +2 -0
  148. package/dist/commands/__tests__/bootstrap.test.d.ts.map +1 -0
  149. package/dist/commands/__tests__/bootstrap.test.js +379 -0
  150. package/dist/commands/__tests__/bootstrap.test.js.map +1 -0
  151. package/dist/commands/__tests__/doctor.test.d.ts +2 -0
  152. package/dist/commands/__tests__/doctor.test.d.ts.map +1 -0
  153. package/dist/commands/__tests__/doctor.test.js +13 -0
  154. package/dist/commands/__tests__/doctor.test.js.map +1 -0
  155. package/dist/commands/bootstrap.d.ts +3 -0
  156. package/dist/commands/bootstrap.d.ts.map +1 -0
  157. package/dist/commands/bootstrap.js +390 -0
  158. package/dist/commands/bootstrap.js.map +1 -0
  159. package/dist/commands/doctor.d.ts +2 -0
  160. package/dist/commands/doctor.d.ts.map +1 -0
  161. package/dist/commands/doctor.js +171 -0
  162. package/dist/commands/doctor.js.map +1 -0
  163. package/dist/commands/templates.d.ts +2 -0
  164. package/dist/commands/templates.d.ts.map +1 -0
  165. package/dist/commands/templates.js +12 -0
  166. package/dist/commands/templates.js.map +1 -0
  167. package/dist/constants.d.ts +23 -0
  168. package/dist/constants.d.ts.map +1 -0
  169. package/dist/constants.js +23 -0
  170. package/dist/constants.js.map +1 -0
  171. package/dist/generators/__tests__/boss-config.test.d.ts +2 -0
  172. package/dist/generators/__tests__/boss-config.test.d.ts.map +1 -0
  173. package/dist/generators/__tests__/boss-config.test.js +61 -0
  174. package/dist/generators/__tests__/boss-config.test.js.map +1 -0
  175. package/dist/generators/__tests__/claude-folder.test.d.ts +2 -0
  176. package/dist/generators/__tests__/claude-folder.test.d.ts.map +1 -0
  177. package/dist/generators/__tests__/claude-folder.test.js +128 -0
  178. package/dist/generators/__tests__/claude-folder.test.js.map +1 -0
  179. package/dist/generators/__tests__/claude-md.test.d.ts +2 -0
  180. package/dist/generators/__tests__/claude-md.test.d.ts.map +1 -0
  181. package/dist/generators/__tests__/claude-md.test.js +55 -0
  182. package/dist/generators/__tests__/claude-md.test.js.map +1 -0
  183. package/dist/generators/__tests__/container-use-config.test.d.ts +2 -0
  184. package/dist/generators/__tests__/container-use-config.test.d.ts.map +1 -0
  185. package/dist/generators/__tests__/container-use-config.test.js +80 -0
  186. package/dist/generators/__tests__/container-use-config.test.js.map +1 -0
  187. package/dist/generators/__tests__/docker-compose.test.d.ts +2 -0
  188. package/dist/generators/__tests__/docker-compose.test.d.ts.map +1 -0
  189. package/dist/generators/__tests__/docker-compose.test.js +39 -0
  190. package/dist/generators/__tests__/docker-compose.test.js.map +1 -0
  191. package/dist/generators/__tests__/git-hooks.test.d.ts +2 -0
  192. package/dist/generators/__tests__/git-hooks.test.d.ts.map +1 -0
  193. package/dist/generators/__tests__/git-hooks.test.js +118 -0
  194. package/dist/generators/__tests__/git-hooks.test.js.map +1 -0
  195. package/dist/generators/__tests__/github-workflows.test.d.ts +2 -0
  196. package/dist/generators/__tests__/github-workflows.test.d.ts.map +1 -0
  197. package/dist/generators/__tests__/github-workflows.test.js +86 -0
  198. package/dist/generators/__tests__/github-workflows.test.js.map +1 -0
  199. package/dist/generators/__tests__/mcp-config.test.d.ts +2 -0
  200. package/dist/generators/__tests__/mcp-config.test.d.ts.map +1 -0
  201. package/dist/generators/__tests__/mcp-config.test.js +131 -0
  202. package/dist/generators/__tests__/mcp-config.test.js.map +1 -0
  203. package/dist/generators/__tests__/project-structure.test.d.ts +2 -0
  204. package/dist/generators/__tests__/project-structure.test.d.ts.map +1 -0
  205. package/dist/generators/__tests__/project-structure.test.js +40 -0
  206. package/dist/generators/__tests__/project-structure.test.js.map +1 -0
  207. package/dist/generators/__tests__/quality-gates.test.d.ts +2 -0
  208. package/dist/generators/__tests__/quality-gates.test.d.ts.map +1 -0
  209. package/dist/generators/__tests__/quality-gates.test.js +71 -0
  210. package/dist/generators/__tests__/quality-gates.test.js.map +1 -0
  211. package/dist/generators/__tests__/specify-structure.test.d.ts +2 -0
  212. package/dist/generators/__tests__/specify-structure.test.d.ts.map +1 -0
  213. package/dist/generators/__tests__/specify-structure.test.js +63 -0
  214. package/dist/generators/__tests__/specify-structure.test.js.map +1 -0
  215. package/dist/generators/__tests__/start-boss-sh.test.d.ts +2 -0
  216. package/dist/generators/__tests__/start-boss-sh.test.d.ts.map +1 -0
  217. package/dist/generators/__tests__/start-boss-sh.test.js +36 -0
  218. package/dist/generators/__tests__/start-boss-sh.test.js.map +1 -0
  219. package/dist/generators/__tests__/template-docs.test.d.ts +2 -0
  220. package/dist/generators/__tests__/template-docs.test.d.ts.map +1 -0
  221. package/dist/generators/__tests__/template-docs.test.js +92 -0
  222. package/dist/generators/__tests__/template-docs.test.js.map +1 -0
  223. package/dist/generators/__tests__/template-loader.test.d.ts +2 -0
  224. package/dist/generators/__tests__/template-loader.test.d.ts.map +1 -0
  225. package/dist/generators/__tests__/template-loader.test.js +215 -0
  226. package/dist/generators/__tests__/template-loader.test.js.map +1 -0
  227. package/dist/generators/__tests__/worker-configs.test.d.ts +2 -0
  228. package/dist/generators/__tests__/worker-configs.test.d.ts.map +1 -0
  229. package/dist/generators/__tests__/worker-configs.test.js +122 -0
  230. package/dist/generators/__tests__/worker-configs.test.js.map +1 -0
  231. package/dist/generators/boss-config.d.ts +3 -0
  232. package/dist/generators/boss-config.d.ts.map +1 -0
  233. package/dist/generators/boss-config.js +242 -0
  234. package/dist/generators/boss-config.js.map +1 -0
  235. package/dist/generators/claude-folder.d.ts +3 -0
  236. package/dist/generators/claude-folder.d.ts.map +1 -0
  237. package/dist/generators/claude-folder.js +94 -0
  238. package/dist/generators/claude-folder.js.map +1 -0
  239. package/dist/generators/claude-md.d.ts +3 -0
  240. package/dist/generators/claude-md.d.ts.map +1 -0
  241. package/dist/generators/claude-md.js +64 -0
  242. package/dist/generators/claude-md.js.map +1 -0
  243. package/dist/generators/container-use-config.d.ts +13 -0
  244. package/dist/generators/container-use-config.d.ts.map +1 -0
  245. package/dist/generators/container-use-config.js +60 -0
  246. package/dist/generators/container-use-config.js.map +1 -0
  247. package/dist/generators/docker-compose.d.ts +2 -0
  248. package/dist/generators/docker-compose.d.ts.map +1 -0
  249. package/dist/generators/docker-compose.js +8 -0
  250. package/dist/generators/docker-compose.js.map +1 -0
  251. package/dist/generators/git-hooks.d.ts +3 -0
  252. package/dist/generators/git-hooks.d.ts.map +1 -0
  253. package/dist/generators/git-hooks.js +58 -0
  254. package/dist/generators/git-hooks.js.map +1 -0
  255. package/dist/generators/github-workflows.d.ts +3 -0
  256. package/dist/generators/github-workflows.d.ts.map +1 -0
  257. package/dist/generators/github-workflows.js +27 -0
  258. package/dist/generators/github-workflows.js.map +1 -0
  259. package/dist/generators/mcp-config.d.ts +3 -0
  260. package/dist/generators/mcp-config.d.ts.map +1 -0
  261. package/dist/generators/mcp-config.js +183 -0
  262. package/dist/generators/mcp-config.js.map +1 -0
  263. package/dist/generators/project-structure.d.ts +3 -0
  264. package/dist/generators/project-structure.d.ts.map +1 -0
  265. package/dist/generators/project-structure.js +24 -0
  266. package/dist/generators/project-structure.js.map +1 -0
  267. package/dist/generators/quality-gates.d.ts +3 -0
  268. package/dist/generators/quality-gates.d.ts.map +1 -0
  269. package/dist/generators/quality-gates.js +32 -0
  270. package/dist/generators/quality-gates.js.map +1 -0
  271. package/dist/generators/specify-structure.d.ts +2 -0
  272. package/dist/generators/specify-structure.d.ts.map +1 -0
  273. package/dist/generators/specify-structure.js +43 -0
  274. package/dist/generators/specify-structure.js.map +1 -0
  275. package/dist/generators/start-boss-sh.d.ts +2 -0
  276. package/dist/generators/start-boss-sh.d.ts.map +1 -0
  277. package/dist/generators/start-boss-sh.js +10 -0
  278. package/dist/generators/start-boss-sh.js.map +1 -0
  279. package/dist/generators/template-docs.d.ts +3 -0
  280. package/dist/generators/template-docs.d.ts.map +1 -0
  281. package/dist/generators/template-docs.js +19 -0
  282. package/dist/generators/template-docs.js.map +1 -0
  283. package/dist/generators/template-loader.d.ts +3 -0
  284. package/dist/generators/template-loader.d.ts.map +1 -0
  285. package/dist/generators/template-loader.js +308 -0
  286. package/dist/generators/template-loader.js.map +1 -0
  287. package/dist/generators/worker-configs.d.ts +3 -0
  288. package/dist/generators/worker-configs.d.ts.map +1 -0
  289. package/dist/generators/worker-configs.js +119 -0
  290. package/dist/generators/worker-configs.js.map +1 -0
  291. package/dist/index.d.ts +3 -0
  292. package/dist/index.d.ts.map +1 -0
  293. package/dist/index.js +57 -0
  294. package/dist/index.js.map +1 -0
  295. package/dist/presets/__tests__/quality-presets.test.d.ts +2 -0
  296. package/dist/presets/__tests__/quality-presets.test.d.ts.map +1 -0
  297. package/dist/presets/__tests__/quality-presets.test.js +152 -0
  298. package/dist/presets/__tests__/quality-presets.test.js.map +1 -0
  299. package/dist/presets/quality-presets.d.ts +3 -0
  300. package/dist/presets/quality-presets.d.ts.map +1 -0
  301. package/dist/presets/quality-presets.js +65 -0
  302. package/dist/presets/quality-presets.js.map +1 -0
  303. package/dist/types/index.d.ts +42 -0
  304. package/dist/types/index.d.ts.map +1 -0
  305. package/dist/types/index.js +2 -0
  306. package/dist/types/index.js.map +1 -0
  307. package/dist/utils/__tests__/file-system.test.d.ts +2 -0
  308. package/dist/utils/__tests__/file-system.test.d.ts.map +1 -0
  309. package/dist/utils/__tests__/file-system.test.js +83 -0
  310. package/dist/utils/__tests__/file-system.test.js.map +1 -0
  311. package/dist/utils/__tests__/git.test.d.ts +2 -0
  312. package/dist/utils/__tests__/git.test.d.ts.map +1 -0
  313. package/dist/utils/__tests__/git.test.js +79 -0
  314. package/dist/utils/__tests__/git.test.js.map +1 -0
  315. package/dist/utils/__tests__/template-loader.test.d.ts +2 -0
  316. package/dist/utils/__tests__/template-loader.test.d.ts.map +1 -0
  317. package/dist/utils/__tests__/template-loader.test.js +109 -0
  318. package/dist/utils/__tests__/template-loader.test.js.map +1 -0
  319. package/dist/utils/__tests__/validators.test.d.ts +2 -0
  320. package/dist/utils/__tests__/validators.test.d.ts.map +1 -0
  321. package/dist/utils/__tests__/validators.test.js +118 -0
  322. package/dist/utils/__tests__/validators.test.js.map +1 -0
  323. package/dist/utils/file-system.d.ts +8 -0
  324. package/dist/utils/file-system.d.ts.map +1 -0
  325. package/dist/utils/file-system.js +54 -0
  326. package/dist/utils/file-system.js.map +1 -0
  327. package/dist/utils/git.d.ts +7 -0
  328. package/dist/utils/git.d.ts.map +1 -0
  329. package/dist/utils/git.js +98 -0
  330. package/dist/utils/git.js.map +1 -0
  331. package/dist/utils/logger.d.ts +13 -0
  332. package/dist/utils/logger.d.ts.map +1 -0
  333. package/dist/utils/logger.js +42 -0
  334. package/dist/utils/logger.js.map +1 -0
  335. package/dist/utils/prompts.d.ts +18 -0
  336. package/dist/utils/prompts.d.ts.map +1 -0
  337. package/dist/utils/prompts.js +197 -0
  338. package/dist/utils/prompts.js.map +1 -0
  339. package/dist/utils/template-loader.d.ts +18 -0
  340. package/dist/utils/template-loader.d.ts.map +1 -0
  341. package/dist/utils/template-loader.js +92 -0
  342. package/dist/utils/template-loader.js.map +1 -0
  343. package/dist/utils/validators.d.ts +21 -0
  344. package/dist/utils/validators.d.ts.map +1 -0
  345. package/dist/utils/validators.js +50 -0
  346. package/dist/utils/validators.js.map +1 -0
  347. package/package.json +79 -0
  348. package/templates/spec-kit/README.md +17 -0
  349. package/templates/spec-kit/memory/constitution.md +50 -0
  350. package/templates/spec-kit/scripts/bash/check-prerequisites.sh +166 -0
  351. package/templates/spec-kit/scripts/bash/common.sh +156 -0
  352. package/templates/spec-kit/scripts/bash/create-new-feature.sh +297 -0
  353. package/templates/spec-kit/scripts/bash/setup-plan.sh +61 -0
  354. package/templates/spec-kit/scripts/bash/update-agent-context.sh +799 -0
  355. package/templates/spec-kit/scripts/powershell/check-prerequisites.ps1 +148 -0
  356. package/templates/spec-kit/scripts/powershell/common.ps1 +137 -0
  357. package/templates/spec-kit/scripts/powershell/create-new-feature.ps1 +283 -0
  358. package/templates/spec-kit/scripts/powershell/setup-plan.ps1 +61 -0
  359. package/templates/spec-kit/scripts/powershell/update-agent-context.ps1 +448 -0
  360. package/templates/spec-kit/src/specify_cli/__init__.py +1369 -0
  361. package/templates/spec-kit/templates/agent-file-template.md +28 -0
  362. package/templates/spec-kit/templates/checklist-template.md +40 -0
  363. package/templates/spec-kit/templates/commands/analyze.md +187 -0
  364. package/templates/spec-kit/templates/commands/checklist.md +297 -0
  365. package/templates/spec-kit/templates/commands/clarify.md +184 -0
  366. package/templates/spec-kit/templates/commands/constitution.md +82 -0
  367. package/templates/spec-kit/templates/commands/implement.md +138 -0
  368. package/templates/spec-kit/templates/commands/plan.md +95 -0
  369. package/templates/spec-kit/templates/commands/specify.md +261 -0
  370. package/templates/spec-kit/templates/commands/tasks.md +140 -0
  371. package/templates/spec-kit/templates/commands/taskstoissues.md +33 -0
  372. package/templates/spec-kit/templates/plan-template.md +104 -0
  373. package/templates/spec-kit/templates/spec-template.md +115 -0
  374. package/templates/spec-kit/templates/tasks-template.md +251 -0
  375. package/templates/spec-kit/templates/vscode-settings.json +14 -0
  376. package/templates/t3-app/README.md +41 -0
  377. package/templates/t3-app/base/README.md +29 -0
  378. package/templates/t3-app/base/_gitignore +47 -0
  379. package/templates/t3-app/base/next-env.d.ts +5 -0
  380. package/templates/t3-app/base/next.config.js +22 -0
  381. package/templates/t3-app/base/package.json +26 -0
  382. package/templates/t3-app/base/public/favicon.ico +0 -0
  383. package/templates/t3-app/base/src/env.js +40 -0
  384. package/templates/t3-app/base/src/styles/globals.css +16 -0
  385. package/templates/t3-app/base/tsconfig.json +42 -0
  386. package/templates/t3-app/extras/config/_eslint.base.js +45 -0
  387. package/templates/t3-app/extras/config/_eslint.drizzle.js +58 -0
  388. package/templates/t3-app/extras/config/_prettier.config.js +2 -0
  389. package/templates/t3-app/extras/config/_tailwind.prettier.config.js +4 -0
  390. package/templates/t3-app/extras/config/biome.jsonc +69 -0
  391. package/templates/t3-app/extras/config/drizzle-config-mysql.ts +12 -0
  392. package/templates/t3-app/extras/config/drizzle-config-postgres.ts +12 -0
  393. package/templates/t3-app/extras/config/drizzle-config-sqlite.ts +12 -0
  394. package/templates/t3-app/extras/config/next-config-appdir.js +10 -0
  395. package/templates/t3-app/extras/config/postcss.config.js +5 -0
  396. package/templates/t3-app/extras/pnpm/_npmrc +2 -0
  397. package/templates/t3-app/extras/prisma/schema/base-planetscale.prisma +25 -0
  398. package/templates/t3-app/extras/prisma/schema/base.prisma +21 -0
  399. package/templates/t3-app/extras/prisma/schema/with-auth-planetscale.prisma +79 -0
  400. package/templates/t3-app/extras/prisma/schema/with-auth.prisma +75 -0
  401. package/templates/t3-app/extras/prisma/schema/with-better-auth-planetscale.prisma +90 -0
  402. package/templates/t3-app/extras/prisma/schema/with-better-auth.prisma +89 -0
  403. package/templates/t3-app/extras/src/app/_components/post-tw.tsx +50 -0
  404. package/templates/t3-app/extras/src/app/_components/post.tsx +54 -0
  405. package/templates/t3-app/extras/src/app/api/auth/[...all]/route.ts +5 -0
  406. package/templates/t3-app/extras/src/app/api/auth/[...nextauth]/route.ts +3 -0
  407. package/templates/t3-app/extras/src/app/api/trpc/[trpc]/route.ts +34 -0
  408. package/templates/t3-app/extras/src/app/layout/base.tsx +24 -0
  409. package/templates/t3-app/extras/src/app/layout/with-trpc-tw.tsx +29 -0
  410. package/templates/t3-app/extras/src/app/layout/with-trpc.tsx +28 -0
  411. package/templates/t3-app/extras/src/app/layout/with-tw.tsx +25 -0
  412. package/templates/t3-app/extras/src/app/page/base.tsx +39 -0
  413. package/templates/t3-app/extras/src/app/page/with-auth-trpc-tw.tsx +69 -0
  414. package/templates/t3-app/extras/src/app/page/with-auth-trpc.tsx +70 -0
  415. package/templates/t3-app/extras/src/app/page/with-better-auth-trpc-tw.tsx +105 -0
  416. package/templates/t3-app/extras/src/app/page/with-better-auth-trpc.tsx +103 -0
  417. package/templates/t3-app/extras/src/app/page/with-better-auth-tw.tsx +90 -0
  418. package/templates/t3-app/extras/src/app/page/with-better-auth.tsx +88 -0
  419. package/templates/t3-app/extras/src/app/page/with-trpc-tw.tsx +53 -0
  420. package/templates/t3-app/extras/src/app/page/with-trpc.tsx +54 -0
  421. package/templates/t3-app/extras/src/app/page/with-tw.tsx +37 -0
  422. package/templates/t3-app/extras/src/env/with-auth-db-planetscale.js +58 -0
  423. package/templates/t3-app/extras/src/env/with-auth-db.js +52 -0
  424. package/templates/t3-app/extras/src/env/with-auth.js +51 -0
  425. package/templates/t3-app/extras/src/env/with-better-auth-db-planetscale.js +58 -0
  426. package/templates/t3-app/extras/src/env/with-better-auth-db.js +50 -0
  427. package/templates/t3-app/extras/src/env/with-better-auth.js +49 -0
  428. package/templates/t3-app/extras/src/env/with-db-planetscale.js +50 -0
  429. package/templates/t3-app/extras/src/env/with-db.js +44 -0
  430. package/templates/t3-app/extras/src/index.module.css +177 -0
  431. package/templates/t3-app/extras/src/pages/_app/base.tsx +18 -0
  432. package/templates/t3-app/extras/src/pages/_app/with-auth-trpc-tw.tsx +27 -0
  433. package/templates/t3-app/extras/src/pages/_app/with-auth-trpc.tsx +27 -0
  434. package/templates/t3-app/extras/src/pages/_app/with-auth-tw.tsx +25 -0
  435. package/templates/t3-app/extras/src/pages/_app/with-auth.tsx +25 -0
  436. package/templates/t3-app/extras/src/pages/_app/with-better-auth-trpc-tw.tsx +20 -0
  437. package/templates/t3-app/extras/src/pages/_app/with-better-auth-trpc.tsx +20 -0
  438. package/templates/t3-app/extras/src/pages/_app/with-trpc-tw.tsx +20 -0
  439. package/templates/t3-app/extras/src/pages/_app/with-trpc.tsx +20 -0
  440. package/templates/t3-app/extras/src/pages/_app/with-tw.tsx +18 -0
  441. package/templates/t3-app/extras/src/pages/api/auth/[...all].ts +8 -0
  442. package/templates/t3-app/extras/src/pages/api/trpc/[trpc].ts +19 -0
  443. package/templates/t3-app/extras/src/pages/index/base.tsx +47 -0
  444. package/templates/t3-app/extras/src/pages/index/with-auth-trpc-tw.tsx +81 -0
  445. package/templates/t3-app/extras/src/pages/index/with-auth-trpc.tsx +82 -0
  446. package/templates/t3-app/extras/src/pages/index/with-better-auth-trpc-tw.tsx +99 -0
  447. package/templates/t3-app/extras/src/pages/index/with-better-auth-trpc.tsx +100 -0
  448. package/templates/t3-app/extras/src/pages/index/with-better-auth-tw.tsx +87 -0
  449. package/templates/t3-app/extras/src/pages/index/with-better-auth.tsx +88 -0
  450. package/templates/t3-app/extras/src/pages/index/with-trpc-tw.tsx +52 -0
  451. package/templates/t3-app/extras/src/pages/index/with-trpc.tsx +53 -0
  452. package/templates/t3-app/extras/src/pages/index/with-tw.tsx +45 -0
  453. package/templates/t3-app/extras/src/server/api/root.ts +23 -0
  454. package/templates/t3-app/extras/src/server/api/routers/post/base.ts +40 -0
  455. package/templates/t3-app/extras/src/server/api/routers/post/with-auth-drizzle.ts +39 -0
  456. package/templates/t3-app/extras/src/server/api/routers/post/with-auth-prisma.ts +41 -0
  457. package/templates/t3-app/extras/src/server/api/routers/post/with-auth.ts +37 -0
  458. package/templates/t3-app/extras/src/server/api/routers/post/with-drizzle.ts +30 -0
  459. package/templates/t3-app/extras/src/server/api/routers/post/with-prisma.ts +31 -0
  460. package/templates/t3-app/extras/src/server/api/trpc-app/base.ts +103 -0
  461. package/templates/t3-app/extras/src/server/api/trpc-app/with-auth-db.ts +133 -0
  462. package/templates/t3-app/extras/src/server/api/trpc-app/with-auth.ts +130 -0
  463. package/templates/t3-app/extras/src/server/api/trpc-app/with-better-auth-db.ts +134 -0
  464. package/templates/t3-app/extras/src/server/api/trpc-app/with-better-auth.ts +131 -0
  465. package/templates/t3-app/extras/src/server/api/trpc-app/with-db.ts +106 -0
  466. package/templates/t3-app/extras/src/server/api/trpc-pages/base.ts +122 -0
  467. package/templates/t3-app/extras/src/server/api/trpc-pages/with-auth-db.ts +160 -0
  468. package/templates/t3-app/extras/src/server/api/trpc-pages/with-auth.ts +158 -0
  469. package/templates/t3-app/extras/src/server/api/trpc-pages/with-better-auth-db.ts +168 -0
  470. package/templates/t3-app/extras/src/server/api/trpc-pages/with-better-auth.ts +166 -0
  471. package/templates/t3-app/extras/src/server/api/trpc-pages/with-db.ts +125 -0
  472. package/templates/t3-app/extras/src/server/auth/config/base.ts +52 -0
  473. package/templates/t3-app/extras/src/server/auth/config/with-drizzle.ts +67 -0
  474. package/templates/t3-app/extras/src/server/auth/config/with-prisma.ts +56 -0
  475. package/templates/t3-app/extras/src/server/auth/index.ts +10 -0
  476. package/templates/t3-app/extras/src/server/better-auth/client.ts +5 -0
  477. package/templates/t3-app/extras/src/server/better-auth/config/base.ts +12 -0
  478. package/templates/t3-app/extras/src/server/better-auth/config/with-drizzle.ts +26 -0
  479. package/templates/t3-app/extras/src/server/better-auth/config/with-prisma.ts +26 -0
  480. package/templates/t3-app/extras/src/server/better-auth/index.ts +1 -0
  481. package/templates/t3-app/extras/src/server/better-auth/server.ts +7 -0
  482. package/templates/t3-app/extras/src/server/db/db-prisma-planetscale.ts +19 -0
  483. package/templates/t3-app/extras/src/server/db/db-prisma.ts +16 -0
  484. package/templates/t3-app/extras/src/server/db/index-drizzle/with-mysql.ts +18 -0
  485. package/templates/t3-app/extras/src/server/db/index-drizzle/with-planetscale.ts +7 -0
  486. package/templates/t3-app/extras/src/server/db/index-drizzle/with-postgres.ts +18 -0
  487. package/templates/t3-app/extras/src/server/db/index-drizzle/with-sqlite.ts +19 -0
  488. package/templates/t3-app/extras/src/server/db/schema-drizzle/base-mysql.ts +26 -0
  489. package/templates/t3-app/extras/src/server/db/schema-drizzle/base-planetscale.ts +26 -0
  490. package/templates/t3-app/extras/src/server/db/schema-drizzle/base-postgres.ts +26 -0
  491. package/templates/t3-app/extras/src/server/db/schema-drizzle/base-sqlite.ts +27 -0
  492. package/templates/t3-app/extras/src/server/db/schema-drizzle/with-auth-mysql.ts +111 -0
  493. package/templates/t3-app/extras/src/server/db/schema-drizzle/with-auth-planetscale.ts +100 -0
  494. package/templates/t3-app/extras/src/server/db/schema-drizzle/with-auth-postgres.ts +108 -0
  495. package/templates/t3-app/extras/src/server/db/schema-drizzle/with-auth-sqlite.ts +105 -0
  496. package/templates/t3-app/extras/src/server/db/schema-drizzle/with-better-auth-mysql.ts +106 -0
  497. package/templates/t3-app/extras/src/server/db/schema-drizzle/with-better-auth-planetscale.ts +106 -0
  498. package/templates/t3-app/extras/src/server/db/schema-drizzle/with-better-auth-postgres.ts +105 -0
  499. package/templates/t3-app/extras/src/server/db/schema-drizzle/with-better-auth-sqlite.ts +134 -0
  500. package/templates/t3-app/extras/src/styles/globals.css +6 -0
  501. package/templates/t3-app/extras/src/trpc/query-client.ts +25 -0
  502. package/templates/t3-app/extras/src/trpc/react.tsx +78 -0
  503. package/templates/t3-app/extras/src/trpc/server.ts +30 -0
  504. package/templates/t3-app/extras/src/utils/api.ts +68 -0
  505. package/templates/t3-app/extras/start-database/mysql.sh +86 -0
  506. package/templates/t3-app/extras/start-database/postgres.sh +88 -0
@@ -0,0 +1,69 @@
1
+ {
2
+ "$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
3
+ "root": true,
4
+ "vcs": {
5
+ "enabled": true,
6
+ "useIgnoreFile": true,
7
+ "clientKind": "git",
8
+ },
9
+ "assist": {
10
+ "enabled": true,
11
+ "actions": {
12
+ "recommended": true,
13
+ "source": {
14
+ "recommended": true,
15
+ "organizeImports": "on",
16
+ "useSortedAttributes": "on",
17
+ },
18
+ },
19
+ },
20
+ "formatter": {
21
+ "enabled": true,
22
+ },
23
+ "linter": {
24
+ "enabled": true,
25
+ "rules": {
26
+ "recommended": true,
27
+ "nursery": {
28
+ "useSortedClasses": {
29
+ "level": "warn",
30
+ "fix": "safe",
31
+ "options": {
32
+ "functions": ["clsx", "cva", "cn"],
33
+ },
34
+ },
35
+ },
36
+ },
37
+ },
38
+ "html": {
39
+ "formatter": {
40
+ "enabled": true,
41
+ },
42
+ },
43
+ "javascript": {
44
+ "assist": {
45
+ "enabled": true,
46
+ },
47
+ "formatter": {
48
+ "enabled": true,
49
+ },
50
+ "linter": {
51
+ "enabled": true,
52
+ },
53
+ },
54
+ "css": {
55
+ "assist": {
56
+ "enabled": true,
57
+ },
58
+ "formatter": {
59
+ "enabled": true,
60
+ },
61
+ "linter": {
62
+ "enabled": true,
63
+ },
64
+ "parser": {
65
+ "cssModules": true,
66
+ "tailwindDirectives": true,
67
+ },
68
+ },
69
+ }
@@ -0,0 +1,12 @@
1
+ import { type Config } from "drizzle-kit";
2
+
3
+ import { env } from "~/env";
4
+
5
+ export default {
6
+ schema: "./src/server/db/schema.ts",
7
+ dialect: "mysql",
8
+ dbCredentials: {
9
+ url: env.DATABASE_URL,
10
+ },
11
+ tablesFilter: ["project1_*"],
12
+ } satisfies Config;
@@ -0,0 +1,12 @@
1
+ import { type Config } from "drizzle-kit";
2
+
3
+ import { env } from "~/env";
4
+
5
+ export default {
6
+ schema: "./src/server/db/schema.ts",
7
+ dialect: "postgresql",
8
+ dbCredentials: {
9
+ url: env.DATABASE_URL,
10
+ },
11
+ tablesFilter: ["project1_*"],
12
+ } satisfies Config;
@@ -0,0 +1,12 @@
1
+ import { type Config } from "drizzle-kit";
2
+
3
+ import { env } from "~/env";
4
+
5
+ export default {
6
+ schema: "./src/server/db/schema.ts",
7
+ dialect: "sqlite",
8
+ dbCredentials: {
9
+ url: env.DATABASE_URL,
10
+ },
11
+ tablesFilter: ["project1_*"],
12
+ } satisfies Config;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. This is especially useful
3
+ * for Docker builds.
4
+ */
5
+ import "./src/env.js";
6
+
7
+ /** @type {import("next").NextConfig} */
8
+ const config = {};
9
+
10
+ export default config;
@@ -0,0 +1,5 @@
1
+ export default {
2
+ plugins: {
3
+ "@tailwindcss/postcss": {},
4
+ },
5
+ };
@@ -0,0 +1,2 @@
1
+ public-hoist-pattern[]=*eslint*
2
+ public-hoist-pattern[]=*prettier*
@@ -0,0 +1,25 @@
1
+ // This is your Prisma schema file,
2
+ // learn more about it in the docs: https://pris.ly/d/prisma-schema
3
+
4
+ generator client {
5
+ provider = "prisma-client-js"
6
+ previewFeatures = ["driverAdapters"]
7
+ output = "../generated/prisma"
8
+ }
9
+
10
+ datasource db {
11
+ provider = "mysql"
12
+ url = env("DATABASE_URL")
13
+
14
+ // If you have enabled foreign key constraints for your database, remove this line.
15
+ relationMode = "prisma"
16
+ }
17
+
18
+ model Post {
19
+ id Int @id @default(autoincrement())
20
+ name String
21
+ createdAt DateTime @default(now())
22
+ updatedAt DateTime @updatedAt
23
+
24
+ @@index([name])
25
+ }
@@ -0,0 +1,21 @@
1
+ // This is your Prisma schema file,
2
+ // learn more about it in the docs: https://pris.ly/d/prisma-schema
3
+
4
+ generator client {
5
+ provider = "prisma-client-js"
6
+ output = "../generated/prisma"
7
+ }
8
+
9
+ datasource db {
10
+ provider = "sqlite"
11
+ url = env("DATABASE_URL")
12
+ }
13
+
14
+ model Post {
15
+ id Int @id @default(autoincrement())
16
+ name String
17
+ createdAt DateTime @default(now())
18
+ updatedAt DateTime @updatedAt
19
+
20
+ @@index([name])
21
+ }
@@ -0,0 +1,79 @@
1
+ // This is your Prisma schema file,
2
+ // learn more about it in the docs: https://pris.ly/d/prisma-schema
3
+
4
+ generator client {
5
+ provider = "prisma-client-js"
6
+ output = "../generated/prisma"
7
+
8
+ previewFeatures = ["driverAdapters"]
9
+ }
10
+
11
+ datasource db {
12
+ provider = "mysql"
13
+ url = env("DATABASE_URL")
14
+
15
+ // If you have enabled foreign key constraints for your database, remove this line.
16
+ relationMode = "prisma"
17
+ }
18
+
19
+ model Post {
20
+ id Int @id @default(autoincrement())
21
+ name String
22
+ createdAt DateTime @default(now())
23
+ updatedAt DateTime @updatedAt
24
+
25
+ createdBy User @relation(fields: [createdById], references: [id])
26
+ createdById String
27
+
28
+ @@index([name])
29
+ @@index([createdById])
30
+ }
31
+
32
+ // Necessary for Next auth
33
+ model Account {
34
+ id String @id @default(cuid())
35
+ userId String
36
+ type String
37
+ provider String
38
+ providerAccountId String
39
+ refresh_token String? @db.Text
40
+ access_token String? @db.Text
41
+ expires_at Int?
42
+ token_type String?
43
+ scope String?
44
+ id_token String? @db.Text
45
+ session_state String?
46
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
47
+
48
+ @@unique([provider, providerAccountId])
49
+ @@index([userId])
50
+ }
51
+
52
+ model Session {
53
+ id String @id @default(cuid())
54
+ sessionToken String @unique
55
+ userId String
56
+ expires DateTime
57
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
58
+
59
+ @@index([userId])
60
+ }
61
+
62
+ model User {
63
+ id String @id @default(cuid())
64
+ name String?
65
+ email String? @unique
66
+ emailVerified DateTime?
67
+ image String?
68
+ accounts Account[]
69
+ sessions Session[]
70
+ posts Post[]
71
+ }
72
+
73
+ model VerificationToken {
74
+ identifier String
75
+ token String @unique
76
+ expires DateTime
77
+
78
+ @@unique([identifier, token])
79
+ }
@@ -0,0 +1,75 @@
1
+ // This is your Prisma schema file,
2
+ // learn more about it in the docs: https://pris.ly/d/prisma-schema
3
+
4
+ generator client {
5
+ provider = "prisma-client-js"
6
+ output = "../generated/prisma"
7
+ }
8
+
9
+ datasource db {
10
+ provider = "sqlite"
11
+ // NOTE: When using mysql or sqlserver, uncomment the @db.Text annotations in model Account below
12
+ // Further reading:
13
+ // https://next-auth.js.org/adapters/prisma#create-the-prisma-schema
14
+ // https://www.prisma.io/docs/reference/api-reference/prisma-schema-reference#string
15
+ url = env("DATABASE_URL")
16
+ }
17
+
18
+ model Post {
19
+ id Int @id @default(autoincrement())
20
+ name String
21
+ createdAt DateTime @default(now())
22
+ updatedAt DateTime @updatedAt
23
+
24
+ createdBy User @relation(fields: [createdById], references: [id])
25
+ createdById String
26
+
27
+ @@index([name])
28
+ }
29
+
30
+ // Necessary for Next auth
31
+ model Account {
32
+ id String @id @default(cuid())
33
+ userId String
34
+ type String
35
+ provider String
36
+ providerAccountId String
37
+ refresh_token String? // @db.Text
38
+ access_token String? // @db.Text
39
+ expires_at Int?
40
+ token_type String?
41
+ scope String?
42
+ id_token String? // @db.Text
43
+ session_state String?
44
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
45
+ refresh_token_expires_in Int?
46
+
47
+ @@unique([provider, providerAccountId])
48
+ }
49
+
50
+ model Session {
51
+ id String @id @default(cuid())
52
+ sessionToken String @unique
53
+ userId String
54
+ expires DateTime
55
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
56
+ }
57
+
58
+ model User {
59
+ id String @id @default(cuid())
60
+ name String?
61
+ email String? @unique
62
+ emailVerified DateTime?
63
+ image String?
64
+ accounts Account[]
65
+ sessions Session[]
66
+ posts Post[]
67
+ }
68
+
69
+ model VerificationToken {
70
+ identifier String
71
+ token String @unique
72
+ expires DateTime
73
+
74
+ @@unique([identifier, token])
75
+ }
@@ -0,0 +1,90 @@
1
+ // Prisma schema for Better Auth
2
+ // learn more: https://better-auth.com/docs/concepts/database
3
+
4
+ generator client {
5
+ provider = "prisma-client-js"
6
+ output = "../generated/prisma"
7
+ }
8
+
9
+ // NOTE: When using mysql or sqlserver, uncomment the @db.Text annotations in model Account below
10
+ // Further reading:
11
+ // https://www.prisma.io/docs/reference/api-reference/prisma-schema-reference#string
12
+
13
+ datasource db {
14
+ provider = "mysql"
15
+ relationMode = "prisma"
16
+ url = env("DATABASE_URL")
17
+ }
18
+
19
+ model Post {
20
+ id String @id @default(cuid())
21
+ name String
22
+ createdAt DateTime @default(now())
23
+ updatedAt DateTime @updatedAt
24
+
25
+ createdBy User @relation(fields: [createdById], references: [id])
26
+ createdById String
27
+
28
+ @@index([name])
29
+ }
30
+
31
+ model User {
32
+ id String @id
33
+ name String @db.Text
34
+ email String
35
+ emailVerified Boolean @default(false)
36
+ image String? @db.Text
37
+ createdAt DateTime @default(now())
38
+ updatedAt DateTime @default(now()) @updatedAt
39
+ sessions Session[]
40
+ accounts Account[]
41
+ posts Post[]
42
+
43
+ @@unique([email])
44
+ @@map("user")
45
+ }
46
+
47
+ model Session {
48
+ id String @id
49
+ expiresAt DateTime
50
+ token String
51
+ createdAt DateTime @default(now())
52
+ updatedAt DateTime @updatedAt
53
+ ipAddress String? @db.Text
54
+ userAgent String? @db.Text
55
+ userId String
56
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
57
+
58
+ @@unique([token])
59
+ @@map("session")
60
+ }
61
+
62
+ model Account {
63
+ id String @id
64
+ accountId String @db.Text
65
+ providerId String @db.Text
66
+ userId String
67
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
68
+ accessToken String? @db.Text
69
+ refreshToken String? @db.Text
70
+ idToken String? @db.Text
71
+ accessTokenExpiresAt DateTime?
72
+ refreshTokenExpiresAt DateTime?
73
+ scope String? @db.Text
74
+ password String? @db.Text
75
+ createdAt DateTime @default(now())
76
+ updatedAt DateTime @updatedAt
77
+
78
+ @@map("account")
79
+ }
80
+
81
+ model Verification {
82
+ id String @id
83
+ identifier String @db.Text
84
+ value String @db.Text
85
+ expiresAt DateTime
86
+ createdAt DateTime @default(now())
87
+ updatedAt DateTime @default(now()) @updatedAt
88
+
89
+ @@map("verification")
90
+ }
@@ -0,0 +1,89 @@
1
+ // Prisma schema for Better Auth
2
+ // learn more: https://better-auth.com/docs/concepts/database
3
+
4
+ generator client {
5
+ provider = "prisma-client-js"
6
+ output = "../generated/prisma"
7
+ }
8
+
9
+ // NOTE: When using mysql or sqlserver, uncomment the //@db.Text annotations in model Account below
10
+ // Further reading:
11
+ // https://www.prisma.io/docs/reference/api-reference/prisma-schema-reference#string
12
+
13
+ datasource db {
14
+ provider = "sqlite"
15
+ url = env("DATABASE_URL")
16
+ }
17
+
18
+ model Post {
19
+ id String @id @default(cuid())
20
+ name String
21
+ createdAt DateTime @default(now())
22
+ updatedAt DateTime @updatedAt
23
+
24
+ createdBy User @relation(fields: [createdById], references: [id])
25
+ createdById String
26
+
27
+ @@index([name])
28
+ }
29
+
30
+ model User {
31
+ id String @id
32
+ name String //@db.Text
33
+ email String
34
+ emailVerified Boolean @default(false)
35
+ image String? //@db.Text
36
+ createdAt DateTime @default(now())
37
+ updatedAt DateTime @default(now()) @updatedAt
38
+ sessions Session[]
39
+ accounts Account[]
40
+ posts Post[]
41
+
42
+ @@unique([email])
43
+ @@map("user")
44
+ }
45
+
46
+ model Session {
47
+ id String @id
48
+ expiresAt DateTime
49
+ token String
50
+ createdAt DateTime @default(now())
51
+ updatedAt DateTime @updatedAt
52
+ ipAddress String? //@db.Text
53
+ userAgent String? //@db.Text
54
+ userId String
55
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
56
+
57
+ @@unique([token])
58
+ @@map("session")
59
+ }
60
+
61
+ model Account {
62
+ id String @id
63
+ accountId String //@db.Text
64
+ providerId String //@db.Text
65
+ userId String
66
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
67
+ accessToken String? //@db.Text
68
+ refreshToken String? //@db.Text
69
+ idToken String? //@db.Text
70
+ accessTokenExpiresAt DateTime?
71
+ refreshTokenExpiresAt DateTime?
72
+ scope String? //@db.Text
73
+ password String? //@db.Text
74
+ createdAt DateTime @default(now())
75
+ updatedAt DateTime @updatedAt
76
+
77
+ @@map("account")
78
+ }
79
+
80
+ model Verification {
81
+ id String @id
82
+ identifier String //@db.Text
83
+ value String //@db.Text
84
+ expiresAt DateTime
85
+ createdAt DateTime @default(now())
86
+ updatedAt DateTime @default(now()) @updatedAt
87
+
88
+ @@map("verification")
89
+ }
@@ -0,0 +1,50 @@
1
+ "use client";
2
+
3
+ import { useState } from "react";
4
+
5
+ import { api } from "~/trpc/react";
6
+
7
+ export function LatestPost() {
8
+ const [latestPost] = api.post.getLatest.useSuspenseQuery();
9
+
10
+ const utils = api.useUtils();
11
+ const [name, setName] = useState("");
12
+ const createPost = api.post.create.useMutation({
13
+ onSuccess: async () => {
14
+ await utils.post.invalidate();
15
+ setName("");
16
+ },
17
+ });
18
+
19
+ return (
20
+ <div className="w-full max-w-xs">
21
+ {latestPost ? (
22
+ <p className="truncate">Your most recent post: {latestPost.name}</p>
23
+ ) : (
24
+ <p>You have no posts yet.</p>
25
+ )}
26
+ <form
27
+ onSubmit={(e) => {
28
+ e.preventDefault();
29
+ createPost.mutate({ name });
30
+ }}
31
+ className="flex flex-col gap-2"
32
+ >
33
+ <input
34
+ type="text"
35
+ placeholder="Title"
36
+ value={name}
37
+ onChange={(e) => setName(e.target.value)}
38
+ className="w-full rounded-full bg-white/10 px-4 py-2 text-white"
39
+ />
40
+ <button
41
+ type="submit"
42
+ className="rounded-full bg-white/10 px-10 py-3 font-semibold transition hover:bg-white/20"
43
+ disabled={createPost.isPending}
44
+ >
45
+ {createPost.isPending ? "Submitting..." : "Submit"}
46
+ </button>
47
+ </form>
48
+ </div>
49
+ );
50
+ }
@@ -0,0 +1,54 @@
1
+ "use client";
2
+
3
+ import { useState } from "react";
4
+
5
+ import { api } from "~/trpc/react";
6
+ import styles from "../index.module.css";
7
+
8
+ export function LatestPost() {
9
+ const [latestPost] = api.post.getLatest.useSuspenseQuery();
10
+
11
+ const utils = api.useUtils();
12
+ const [name, setName] = useState("");
13
+ const createPost = api.post.create.useMutation({
14
+ onSuccess: async () => {
15
+ await utils.post.invalidate();
16
+ setName("");
17
+ },
18
+ });
19
+
20
+ return (
21
+ <div className={styles.showcaseContainer}>
22
+ {latestPost ? (
23
+ <p className={styles.showcaseText}>
24
+ Your most recent post: {latestPost.name}
25
+ </p>
26
+ ) : (
27
+ <p className={styles.showcaseText}>You have no posts yet.</p>
28
+ )}
29
+
30
+ <form
31
+ onSubmit={(e) => {
32
+ e.preventDefault();
33
+ createPost.mutate({ name });
34
+ }}
35
+ className={styles.form}
36
+ >
37
+ <input
38
+ type="text"
39
+ placeholder="Title"
40
+ value={name}
41
+ onChange={(e) => setName(e.target.value)}
42
+ className={styles.input}
43
+ />
44
+ <button
45
+ type="submit"
46
+ className={styles.submitButton}
47
+ disabled={createPost.isPending}
48
+ >
49
+ {createPost.isPending ? "Submitting..." : "Submit"}
50
+ </button>
51
+ </form>
52
+ </div>
53
+ );
54
+ }
@@ -0,0 +1,5 @@
1
+ import { toNextJsHandler } from "better-auth/next-js";
2
+
3
+ import { auth } from "~/server/better-auth";
4
+
5
+ export const { GET, POST } = toNextJsHandler(auth.handler);
@@ -0,0 +1,3 @@
1
+ import { handlers } from "~/server/auth";
2
+
3
+ export const { GET, POST } = handlers;
@@ -0,0 +1,34 @@
1
+ import { fetchRequestHandler } from "@trpc/server/adapters/fetch";
2
+ import { type NextRequest } from "next/server";
3
+
4
+ import { env } from "~/env";
5
+ import { appRouter } from "~/server/api/root";
6
+ import { createTRPCContext } from "~/server/api/trpc";
7
+
8
+ /**
9
+ * This wraps the `createTRPCContext` helper and provides the required context for the tRPC API when
10
+ * handling a HTTP request (e.g. when you make requests from Client Components).
11
+ */
12
+ const createContext = async (req: NextRequest) => {
13
+ return createTRPCContext({
14
+ headers: req.headers,
15
+ });
16
+ };
17
+
18
+ const handler = (req: NextRequest) =>
19
+ fetchRequestHandler({
20
+ endpoint: "/api/trpc",
21
+ req,
22
+ router: appRouter,
23
+ createContext: () => createContext(req),
24
+ onError:
25
+ env.NODE_ENV === "development"
26
+ ? ({ path, error }) => {
27
+ console.error(
28
+ `❌ tRPC failed on ${path ?? "<no-path>"}: ${error.message}`
29
+ );
30
+ }
31
+ : undefined,
32
+ });
33
+
34
+ export { handler as GET, handler as POST };
@@ -0,0 +1,24 @@
1
+ import "~/styles/globals.css";
2
+
3
+ import { type Metadata } from "next";
4
+ import { Geist } from "next/font/google";
5
+
6
+ export const metadata: Metadata = {
7
+ title: "Create T3 App",
8
+ description: "Generated by create-t3-app",
9
+ icons: [{ rel: "icon", url: "/favicon.ico" }],
10
+ };
11
+
12
+ const geist = Geist({
13
+ subsets: ["latin"],
14
+ });
15
+
16
+ export default function RootLayout({
17
+ children,
18
+ }: Readonly<{ children: React.ReactNode }>) {
19
+ return (
20
+ <html lang="en">
21
+ <body className={geist.className}>{children}</body>
22
+ </html>
23
+ );
24
+ }