@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,29 @@
1
+ import "~/styles/globals.css";
2
+
3
+ import { type Metadata } from "next";
4
+ import { Geist } from "next/font/google";
5
+
6
+ import { TRPCReactProvider } from "~/trpc/react";
7
+
8
+ export const metadata: Metadata = {
9
+ title: "Create T3 App",
10
+ description: "Generated by create-t3-app",
11
+ icons: [{ rel: "icon", url: "/favicon.ico" }],
12
+ };
13
+
14
+ const geist = Geist({
15
+ subsets: ["latin"],
16
+ variable: "--font-geist-sans",
17
+ });
18
+
19
+ export default function RootLayout({
20
+ children,
21
+ }: Readonly<{ children: React.ReactNode }>) {
22
+ return (
23
+ <html lang="en" className={`${geist.variable}`}>
24
+ <body>
25
+ <TRPCReactProvider>{children}</TRPCReactProvider>
26
+ </body>
27
+ </html>
28
+ );
29
+ }
@@ -0,0 +1,28 @@
1
+ import "~/styles/globals.css";
2
+
3
+ import { type Metadata } from "next";
4
+ import { Geist } from "next/font/google";
5
+
6
+ import { TRPCReactProvider } from "~/trpc/react";
7
+
8
+ export const metadata: Metadata = {
9
+ title: "Create T3 App",
10
+ description: "Generated by create-t3-app",
11
+ icons: [{ rel: "icon", url: "/favicon.ico" }],
12
+ };
13
+
14
+ const geist = Geist({
15
+ subsets: ["latin"],
16
+ });
17
+
18
+ export default function RootLayout({
19
+ children,
20
+ }: Readonly<{ children: React.ReactNode }>) {
21
+ return (
22
+ <html lang="en">
23
+ <body className={geist.className}>
24
+ <TRPCReactProvider>{children}</TRPCReactProvider>
25
+ </body>
26
+ </html>
27
+ );
28
+ }
@@ -0,0 +1,25 @@
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
+ variable: "--font-geist-sans",
15
+ });
16
+
17
+ export default function RootLayout({
18
+ children,
19
+ }: Readonly<{ children: React.ReactNode }>) {
20
+ return (
21
+ <html lang="en" className={`${geist.variable}`}>
22
+ <body>{children}</body>
23
+ </html>
24
+ );
25
+ }
@@ -0,0 +1,39 @@
1
+ import Link from "next/link";
2
+
3
+ import styles from "./index.module.css";
4
+
5
+ export default function Home() {
6
+ return (
7
+ <main className={styles.main}>
8
+ <div className={styles.container}>
9
+ <h1 className={styles.title}>
10
+ Create <span className={styles.pinkSpan}>T3</span> App
11
+ </h1>
12
+ <div className={styles.cardRow}>
13
+ <Link
14
+ className={styles.card}
15
+ href="https://create.t3.gg/en/usage/first-steps"
16
+ target="_blank"
17
+ >
18
+ <h3 className={styles.cardTitle}>First Steps →</h3>
19
+ <div className={styles.cardText}>
20
+ Just the basics - Everything you need to know to set up your
21
+ database and authentication.
22
+ </div>
23
+ </Link>
24
+ <Link
25
+ className={styles.card}
26
+ href="https://create.t3.gg/en/introduction"
27
+ target="_blank"
28
+ >
29
+ <h3 className={styles.cardTitle}>Documentation →</h3>
30
+ <div className={styles.cardText}>
31
+ Learn more about Create T3 App, the libraries it uses, and how to
32
+ deploy it.
33
+ </div>
34
+ </Link>
35
+ </div>
36
+ </div>
37
+ </main>
38
+ );
39
+ }
@@ -0,0 +1,69 @@
1
+ import Link from "next/link";
2
+
3
+ import { LatestPost } from "~/app/_components/post";
4
+ import { auth } from "~/server/auth";
5
+ import { api, HydrateClient } from "~/trpc/server";
6
+
7
+ export default async function Home() {
8
+ const hello = await api.post.hello({ text: "from tRPC" });
9
+ const session = await auth();
10
+
11
+ if (session?.user) {
12
+ void api.post.getLatest.prefetch();
13
+ }
14
+
15
+ return (
16
+ <HydrateClient>
17
+ <main className="flex min-h-screen flex-col items-center justify-center bg-gradient-to-b from-[#2e026d] to-[#15162c] text-white">
18
+ <div className="container flex flex-col items-center justify-center gap-12 px-4 py-16">
19
+ <h1 className="text-5xl font-extrabold tracking-tight sm:text-[5rem]">
20
+ Create <span className="text-[hsl(280,100%,70%)]">T3</span> App
21
+ </h1>
22
+ <div className="grid grid-cols-1 gap-4 sm:grid-cols-2 md:gap-8">
23
+ <Link
24
+ className="flex max-w-xs flex-col gap-4 rounded-xl bg-white/10 p-4 hover:bg-white/20"
25
+ href="https://create.t3.gg/en/usage/first-steps"
26
+ target="_blank"
27
+ >
28
+ <h3 className="text-2xl font-bold">First Steps →</h3>
29
+ <div className="text-lg">
30
+ Just the basics - Everything you need to know to set up your
31
+ database and authentication.
32
+ </div>
33
+ </Link>
34
+ <Link
35
+ className="flex max-w-xs flex-col gap-4 rounded-xl bg-white/10 p-4 hover:bg-white/20"
36
+ href="https://create.t3.gg/en/introduction"
37
+ target="_blank"
38
+ >
39
+ <h3 className="text-2xl font-bold">Documentation →</h3>
40
+ <div className="text-lg">
41
+ Learn more about Create T3 App, the libraries it uses, and how
42
+ to deploy it.
43
+ </div>
44
+ </Link>
45
+ </div>
46
+ <div className="flex flex-col items-center gap-2">
47
+ <p className="text-2xl text-white">
48
+ {hello ? hello.greeting : "Loading tRPC query..."}
49
+ </p>
50
+
51
+ <div className="flex flex-col items-center justify-center gap-4">
52
+ <p className="text-center text-2xl text-white">
53
+ {session && <span>Logged in as {session.user?.name}</span>}
54
+ </p>
55
+ <Link
56
+ href={session ? "/api/auth/signout" : "/api/auth/signin"}
57
+ className="rounded-full bg-white/10 px-10 py-3 font-semibold no-underline transition hover:bg-white/20"
58
+ >
59
+ {session ? "Sign out" : "Sign in"}
60
+ </Link>
61
+ </div>
62
+ </div>
63
+
64
+ {session?.user && <LatestPost />}
65
+ </div>
66
+ </main>
67
+ </HydrateClient>
68
+ );
69
+ }
@@ -0,0 +1,70 @@
1
+ import Link from "next/link";
2
+
3
+ import { LatestPost } from "~/app/_components/post";
4
+ import { auth } from "~/server/auth";
5
+ import { api, HydrateClient } from "~/trpc/server";
6
+ import styles from "./index.module.css";
7
+
8
+ export default async function Home() {
9
+ const hello = await api.post.hello({ text: "from tRPC" });
10
+ const session = await auth();
11
+
12
+ if (session?.user) {
13
+ void api.post.getLatest.prefetch();
14
+ }
15
+
16
+ return (
17
+ <HydrateClient>
18
+ <main className={styles.main}>
19
+ <div className={styles.container}>
20
+ <h1 className={styles.title}>
21
+ Create <span className={styles.pinkSpan}>T3</span> App
22
+ </h1>
23
+ <div className={styles.cardRow}>
24
+ <Link
25
+ className={styles.card}
26
+ href="https://create.t3.gg/en/usage/first-steps"
27
+ target="_blank"
28
+ >
29
+ <h3 className={styles.cardTitle}>First Steps →</h3>
30
+ <div className={styles.cardText}>
31
+ Just the basics - Everything you need to know to set up your
32
+ database and authentication.
33
+ </div>
34
+ </Link>
35
+ <Link
36
+ className={styles.card}
37
+ href="https://create.t3.gg/en/introduction"
38
+ target="_blank"
39
+ >
40
+ <h3 className={styles.cardTitle}>Documentation →</h3>
41
+ <div className={styles.cardText}>
42
+ Learn more about Create T3 App, the libraries it uses, and how
43
+ to deploy it.
44
+ </div>
45
+ </Link>
46
+ </div>
47
+ <div className={styles.showcaseContainer}>
48
+ <p className={styles.showcaseText}>
49
+ {hello ? hello.greeting : "Loading tRPC query..."}
50
+ </p>
51
+
52
+ <div className={styles.authContainer}>
53
+ <p className={styles.showcaseText}>
54
+ {session && <span>Logged in as {session.user?.name}</span>}
55
+ </p>
56
+ <Link
57
+ href={session ? "/api/auth/signout" : "/api/auth/signin"}
58
+ className={styles.loginButton}
59
+ >
60
+ {session ? "Sign out" : "Sign in"}
61
+ </Link>
62
+ </div>
63
+ </div>
64
+
65
+ {session?.user && <LatestPost />}
66
+ </div>
67
+ </main>
68
+ </HydrateClient>
69
+ );
70
+ }
@@ -0,0 +1,105 @@
1
+ import { headers } from "next/headers";
2
+ import Link from "next/link";
3
+ import { redirect } from "next/navigation";
4
+
5
+ import { LatestPost } from "~/app/_components/post";
6
+ import { auth } from "~/server/better-auth";
7
+ import { getSession } from "~/server/better-auth/server";
8
+ import { api, HydrateClient } from "~/trpc/server";
9
+
10
+ export default async function Home() {
11
+ const hello = await api.post.hello({ text: "from tRPC" });
12
+ const session = await getSession();
13
+
14
+ if (session) {
15
+ void api.post.getLatest.prefetch();
16
+ }
17
+
18
+ return (
19
+ <HydrateClient>
20
+ <main className="flex min-h-screen flex-col items-center justify-center bg-gradient-to-b from-[#2e026d] to-[#15162c] text-white">
21
+ <div className="container flex flex-col items-center justify-center gap-12 px-4 py-16">
22
+ <h1 className="text-5xl font-extrabold tracking-tight sm:text-[5rem]">
23
+ Create <span className="text-[hsl(280,100%,70%)]">T3</span> App
24
+ </h1>
25
+ <div className="grid grid-cols-1 gap-4 sm:grid-cols-2 md:gap-8">
26
+ <Link
27
+ className="flex max-w-xs flex-col gap-4 rounded-xl bg-white/10 p-4 hover:bg-white/20"
28
+ href="https://create.t3.gg/en/usage/first-steps"
29
+ target="_blank"
30
+ >
31
+ <h3 className="text-2xl font-bold">First Steps →</h3>
32
+ <div className="text-lg">
33
+ Just the basics - Everything you need to know to set up your
34
+ database and authentication.
35
+ </div>
36
+ </Link>
37
+ <Link
38
+ className="flex max-w-xs flex-col gap-4 rounded-xl bg-white/10 p-4 hover:bg-white/20"
39
+ href="https://create.t3.gg/en/introduction"
40
+ target="_blank"
41
+ >
42
+ <h3 className="text-2xl font-bold">Documentation →</h3>
43
+ <div className="text-lg">
44
+ Learn more about Create T3 App, the libraries it uses, and how
45
+ to deploy it.
46
+ </div>
47
+ </Link>
48
+ </div>
49
+ <div className="flex flex-col items-center gap-2">
50
+ <p className="text-2xl text-white">
51
+ {hello ? hello.greeting : "Loading tRPC query..."}
52
+ </p>
53
+
54
+ <div className="flex flex-col items-center justify-center gap-4">
55
+ <p className="text-center text-2xl text-white">
56
+ {session && <span>Logged in as {session.user?.name}</span>}
57
+ </p>
58
+ {!session ? (
59
+ <form>
60
+ <button
61
+ type="submit"
62
+ className="rounded-full bg-white/10 px-10 py-3 font-semibold no-underline transition hover:bg-white/20"
63
+ formAction={async () => {
64
+ "use server";
65
+ const res = await auth.api.signInSocial({
66
+ body: {
67
+ provider: "github",
68
+ callbackURL: "/",
69
+ },
70
+ });
71
+ if (!res.url) {
72
+ throw new Error("No URL returned from signInSocial");
73
+ }
74
+ redirect(res.url);
75
+ }}
76
+ >
77
+ Sign in with Github
78
+ </button>
79
+ </form>
80
+ ) : (
81
+ <form>
82
+ <button
83
+ type="submit"
84
+ className="rounded-full bg-white/10 px-10 py-3 font-semibold no-underline transition hover:bg-white/20"
85
+ formAction={async () => {
86
+ "use server";
87
+ await auth.api.signOut({
88
+ headers: await headers(),
89
+ });
90
+ redirect("/");
91
+ }}
92
+ >
93
+ Sign out
94
+ </button>
95
+ </form>
96
+ )}
97
+ </div>
98
+ </div>
99
+
100
+ {session?.user && <LatestPost />}
101
+ </div>
102
+ </main>
103
+ </HydrateClient>
104
+ );
105
+ }
@@ -0,0 +1,103 @@
1
+ import { headers } from "next/headers";
2
+ import Link from "next/link";
3
+ import { redirect } from "next/navigation";
4
+
5
+ import { LatestPost } from "~/app/_components/post";
6
+ import { auth } from "~/server/better-auth";
7
+ import { getSession } from "~/server/better-auth/server";
8
+ import { api, HydrateClient } from "~/trpc/server";
9
+ import styles from "./index.module.css";
10
+
11
+ export default async function Home() {
12
+ const hello = await api.post.hello({ text: "from tRPC" });
13
+ const session = await getSession();
14
+
15
+ if (session?.user) {
16
+ void api.post.getLatest.prefetch();
17
+ }
18
+
19
+ return (
20
+ <HydrateClient>
21
+ <main className={styles.main}>
22
+ <div className={styles.container}>
23
+ <h1 className={styles.title}>
24
+ Create <span className={styles.pinkSpan}>T3</span> App
25
+ </h1>
26
+ <div className={styles.cardRow}>
27
+ <Link
28
+ className={styles.card}
29
+ href="https://create.t3.gg/en/usage/first-steps"
30
+ target="_blank"
31
+ >
32
+ <h3 className={styles.cardTitle}>First Steps →</h3>
33
+ <div className={styles.cardText}>
34
+ Just the basics - Everything you need to know to set up your
35
+ database and authentication.
36
+ </div>
37
+ </Link>
38
+ <Link
39
+ className={styles.card}
40
+ href="https://create.t3.gg/en/introduction"
41
+ target="_blank"
42
+ >
43
+ <h3 className={styles.cardTitle}>Documentation →</h3>
44
+ <div className={styles.cardText}>
45
+ Learn more about Create T3 App, the libraries it uses, and how
46
+ to deploy it.
47
+ </div>
48
+ </Link>
49
+ </div>
50
+ <div className={styles.showcaseContainer}>
51
+ <p className={styles.showcaseText}>
52
+ {hello ? hello.greeting : "Loading tRPC query..."}
53
+ </p>
54
+
55
+ <div className={styles.authContainer}>
56
+ <p className={styles.showcaseText}>
57
+ {session && <span>Logged in as {session.user?.name}</span>}
58
+ </p>
59
+ {!session ? (
60
+ <form>
61
+ <button
62
+ type="submit"
63
+ className={styles.loginButton}
64
+ formAction={async () => {
65
+ "use server";
66
+ const res = await auth.api.signInSocial({
67
+ body: {
68
+ provider: "github",
69
+ callbackURL: "/",
70
+ },
71
+ });
72
+ if (!res.url)
73
+ throw new Error("No URL returned from signInSocial");
74
+ redirect(res.url);
75
+ }}
76
+ >
77
+ Sign in with Github
78
+ </button>
79
+ </form>
80
+ ) : (
81
+ <form>
82
+ <button
83
+ type="submit"
84
+ className={styles.loginButton}
85
+ formAction={async () => {
86
+ "use server";
87
+ await auth.api.signOut({ headers: await headers() });
88
+ redirect("/");
89
+ }}
90
+ >
91
+ Sign out
92
+ </button>
93
+ </form>
94
+ )}
95
+ </div>
96
+ </div>
97
+
98
+ {session?.user && <LatestPost />}
99
+ </div>
100
+ </main>
101
+ </HydrateClient>
102
+ );
103
+ }
@@ -0,0 +1,90 @@
1
+ import { headers } from "next/headers";
2
+ import Link from "next/link";
3
+ import { redirect } from "next/navigation";
4
+
5
+ import { auth } from "~/server/better-auth";
6
+ import { getSession } from "~/server/better-auth/server";
7
+
8
+ export default async function Home() {
9
+ const session = await getSession();
10
+
11
+ return (
12
+ <main className="flex min-h-screen flex-col items-center justify-center bg-gradient-to-b from-[#2e026d] to-[#15162c] text-white">
13
+ <div className="container flex flex-col items-center justify-center gap-12 px-4 py-16">
14
+ <h1 className="text-5xl font-extrabold tracking-tight sm:text-[5rem]">
15
+ Create <span className="text-[hsl(280,100%,70%)]">T3</span> App
16
+ </h1>
17
+ <div className="grid grid-cols-1 gap-4 sm:grid-cols-2 md:gap-8">
18
+ <Link
19
+ className="flex max-w-xs flex-col gap-4 rounded-xl bg-white/10 p-4 hover:bg-white/20"
20
+ href="https://create.t3.gg/en/usage/first-steps"
21
+ target="_blank"
22
+ >
23
+ <h3 className="text-2xl font-bold">First Steps →</h3>
24
+ <div className="text-lg">
25
+ Just the basics - Everything you need to know to set up your
26
+ database and authentication.
27
+ </div>
28
+ </Link>
29
+ <Link
30
+ className="flex max-w-xs flex-col gap-4 rounded-xl bg-white/10 p-4 hover:bg-white/20"
31
+ href="https://create.t3.gg/en/introduction"
32
+ target="_blank"
33
+ >
34
+ <h3 className="text-2xl font-bold">Documentation →</h3>
35
+ <div className="text-lg">
36
+ Learn more about Create T3 App, the libraries it uses, and how to
37
+ deploy it.
38
+ </div>
39
+ </Link>
40
+ </div>
41
+ <div className="flex flex-col items-center gap-2">
42
+ <div className="flex flex-col items-center justify-center gap-4">
43
+ <p className="text-center text-2xl text-white">
44
+ {session && <span>Logged in as {session.user?.name}</span>}
45
+ </p>
46
+ {!session ? (
47
+ <form>
48
+ <button
49
+ type="submit"
50
+ className="rounded-full bg-white/10 px-10 py-3 font-semibold no-underline transition hover:bg-white/20"
51
+ formAction={async () => {
52
+ "use server";
53
+ const res = await auth.api.signInSocial({
54
+ body: {
55
+ provider: "github",
56
+ callbackURL: "/",
57
+ },
58
+ });
59
+ if (!res.url) {
60
+ throw new Error("No URL returned from signInSocial");
61
+ }
62
+ redirect(res.url);
63
+ }}
64
+ >
65
+ Sign in with Github
66
+ </button>
67
+ </form>
68
+ ) : (
69
+ <form>
70
+ <button
71
+ type="submit"
72
+ className="rounded-full bg-white/10 px-10 py-3 font-semibold no-underline transition hover:bg-white/20"
73
+ formAction={async () => {
74
+ "use server";
75
+ await auth.api.signOut({
76
+ headers: await headers(),
77
+ });
78
+ redirect("/");
79
+ }}
80
+ >
81
+ Sign out
82
+ </button>
83
+ </form>
84
+ )}
85
+ </div>
86
+ </div>
87
+ </div>
88
+ </main>
89
+ );
90
+ }
@@ -0,0 +1,88 @@
1
+ import { headers } from "next/headers";
2
+ import Link from "next/link";
3
+ import { redirect } from "next/navigation";
4
+
5
+ import { auth } from "~/server/better-auth";
6
+ import { getSession } from "~/server/better-auth/server";
7
+ import styles from "./index.module.css";
8
+
9
+ export default async function Home() {
10
+ const session = await getSession();
11
+
12
+ return (
13
+ <main className={styles.main}>
14
+ <div className={styles.container}>
15
+ <h1 className={styles.title}>
16
+ Create <span className={styles.pinkSpan}>T3</span> App
17
+ </h1>
18
+ <div className={styles.cardRow}>
19
+ <Link
20
+ className={styles.card}
21
+ href="https://create.t3.gg/en/usage/first-steps"
22
+ target="_blank"
23
+ >
24
+ <h3 className={styles.cardTitle}>First Steps →</h3>
25
+ <div className={styles.cardText}>
26
+ Just the basics - Everything you need to know to set up your
27
+ database and authentication.
28
+ </div>
29
+ </Link>
30
+ <Link
31
+ className={styles.card}
32
+ href="https://create.t3.gg/en/introduction"
33
+ target="_blank"
34
+ >
35
+ <h3 className={styles.cardTitle}>Documentation →</h3>
36
+ <div className={styles.cardText}>
37
+ Learn more about Create T3 App, the libraries it uses, and how to
38
+ deploy it.
39
+ </div>
40
+ </Link>
41
+ </div>
42
+ <div className={styles.showcaseContainer}>
43
+ <div className={styles.authContainer}>
44
+ <p className={styles.showcaseText}>
45
+ {session && <span>Logged in as {session.user?.name}</span>}
46
+ </p>
47
+ {!session ? (
48
+ <form>
49
+ <button
50
+ type="submit"
51
+ className={styles.loginButton}
52
+ formAction={async () => {
53
+ "use server";
54
+ const res = await auth.api.signInSocial({
55
+ body: {
56
+ provider: "github",
57
+ callbackURL: "/",
58
+ },
59
+ });
60
+ if (!res.url)
61
+ throw new Error("No URL returned from signInSocial");
62
+ redirect(res.url);
63
+ }}
64
+ >
65
+ Sign in with Github
66
+ </button>
67
+ </form>
68
+ ) : (
69
+ <form>
70
+ <button
71
+ type="submit"
72
+ className={styles.loginButton}
73
+ formAction={async () => {
74
+ "use server";
75
+ await auth.api.signOut({ headers: await headers() });
76
+ redirect("/");
77
+ }}
78
+ >
79
+ Sign out
80
+ </button>
81
+ </form>
82
+ )}
83
+ </div>
84
+ </div>
85
+ </div>
86
+ </main>
87
+ );
88
+ }