@codeyam/codeyam-cli 0.1.8 → 0.1.9

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 (335) hide show
  1. package/analyzer-template/.build-info.json +8 -8
  2. package/analyzer-template/log.txt +3 -3
  3. package/analyzer-template/package.json +4 -4
  4. package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +0 -33
  5. package/analyzer-template/packages/analyze/src/lib/ProjectAnalyzer.ts +13 -7
  6. package/analyzer-template/packages/analyze/src/lib/asts/index.ts +7 -2
  7. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +0 -98
  8. package/analyzer-template/packages/aws/package.json +1 -1
  9. package/analyzer-template/packages/database/src/lib/kysely/tables/editorScenariosTable.ts +31 -0
  10. package/analyzer-template/packages/database/src/lib/loadEntities.ts +0 -6
  11. package/analyzer-template/packages/database/src/lib/updateCommitMetadata.ts +0 -65
  12. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts +5 -0
  13. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts.map +1 -1
  14. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js +31 -0
  15. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -1
  16. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.d.ts.map +1 -1
  17. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js +0 -6
  18. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js.map +1 -1
  19. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.d.ts.map +1 -1
  20. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js +0 -25
  21. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js.map +1 -1
  22. package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.d.ts +2 -0
  23. package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.d.ts.map +1 -1
  24. package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.js +2 -0
  25. package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.js.map +1 -1
  26. package/analyzer-template/packages/types/src/enums/ProjectFramework.ts +2 -0
  27. package/analyzer-template/packages/ui-components/package.json +1 -1
  28. package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.d.ts +2 -0
  29. package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.d.ts.map +1 -1
  30. package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.js +2 -0
  31. package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.js.map +1 -1
  32. package/codeyam-cli/src/__tests__/memory-scripts/filter-session.test.js +196 -0
  33. package/codeyam-cli/src/__tests__/memory-scripts/filter-session.test.js.map +1 -0
  34. package/codeyam-cli/src/__tests__/memory-scripts/read-json-field.test.js +114 -0
  35. package/codeyam-cli/src/__tests__/memory-scripts/read-json-field.test.js.map +1 -0
  36. package/codeyam-cli/src/__tests__/memory-scripts/ripgrep-fallback.test.js +149 -0
  37. package/codeyam-cli/src/__tests__/memory-scripts/ripgrep-fallback.test.js.map +1 -0
  38. package/codeyam-cli/src/commands/__tests__/editor.stepDispatch.test.js +45 -0
  39. package/codeyam-cli/src/commands/__tests__/editor.stepDispatch.test.js.map +1 -0
  40. package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js +101 -47
  41. package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js.map +1 -1
  42. package/codeyam-cli/src/commands/default.js +3 -46
  43. package/codeyam-cli/src/commands/default.js.map +1 -1
  44. package/codeyam-cli/src/commands/editor.js +1619 -243
  45. package/codeyam-cli/src/commands/editor.js.map +1 -1
  46. package/codeyam-cli/src/commands/init.js +67 -34
  47. package/codeyam-cli/src/commands/init.js.map +1 -1
  48. package/codeyam-cli/src/data/techStacks.js +77 -0
  49. package/codeyam-cli/src/data/techStacks.js.map +1 -0
  50. package/codeyam-cli/src/utils/__tests__/analyzerFinalization.test.js +144 -0
  51. package/codeyam-cli/src/utils/__tests__/analyzerFinalization.test.js.map +1 -0
  52. package/codeyam-cli/src/utils/__tests__/backgroundServer.test.js +46 -0
  53. package/codeyam-cli/src/utils/__tests__/backgroundServer.test.js.map +1 -0
  54. package/codeyam-cli/src/utils/__tests__/devServerState.test.js +134 -0
  55. package/codeyam-cli/src/utils/__tests__/devServerState.test.js.map +1 -0
  56. package/codeyam-cli/src/utils/__tests__/editorApi.test.js +127 -0
  57. package/codeyam-cli/src/utils/__tests__/editorApi.test.js.map +1 -0
  58. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js +610 -1
  59. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js.map +1 -1
  60. package/codeyam-cli/src/utils/__tests__/editorCapture.test.js +93 -0
  61. package/codeyam-cli/src/utils/__tests__/editorCapture.test.js.map +1 -0
  62. package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js +181 -3
  63. package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js.map +1 -1
  64. package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js +121 -0
  65. package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js.map +1 -0
  66. package/codeyam-cli/src/utils/__tests__/editorImageVerifier.test.js +294 -0
  67. package/codeyam-cli/src/utils/__tests__/editorImageVerifier.test.js.map +1 -0
  68. package/codeyam-cli/src/utils/__tests__/editorJournal.test.js +249 -2
  69. package/codeyam-cli/src/utils/__tests__/editorJournal.test.js.map +1 -1
  70. package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js +520 -0
  71. package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js.map +1 -0
  72. package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js +118 -1
  73. package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js.map +1 -1
  74. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js +195 -3
  75. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js.map +1 -1
  76. package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js +153 -0
  77. package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js.map +1 -0
  78. package/codeyam-cli/src/utils/__tests__/editorScenarioLookup.test.js +139 -0
  79. package/codeyam-cli/src/utils/__tests__/editorScenarioLookup.test.js.map +1 -0
  80. package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js +221 -0
  81. package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js.map +1 -0
  82. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js +781 -2
  83. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js.map +1 -1
  84. package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js +213 -0
  85. package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js.map +1 -0
  86. package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js +1742 -0
  87. package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js.map +1 -0
  88. package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js +107 -0
  89. package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js.map +1 -0
  90. package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js +101 -0
  91. package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js.map +1 -0
  92. package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js +227 -0
  93. package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js.map +1 -0
  94. package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js +300 -0
  95. package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js.map +1 -0
  96. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +25 -5
  97. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
  98. package/codeyam-cli/src/utils/__tests__/templateConsistency.test.js +51 -0
  99. package/codeyam-cli/src/utils/__tests__/templateConsistency.test.js.map +1 -0
  100. package/codeyam-cli/src/utils/__tests__/webappDetection.test.js +142 -0
  101. package/codeyam-cli/src/utils/__tests__/webappDetection.test.js.map +1 -0
  102. package/codeyam-cli/src/utils/analyzer.js +9 -0
  103. package/codeyam-cli/src/utils/analyzer.js.map +1 -1
  104. package/codeyam-cli/src/utils/analyzerFinalization.js +96 -0
  105. package/codeyam-cli/src/utils/analyzerFinalization.js.map +1 -0
  106. package/codeyam-cli/src/utils/backgroundServer.js +94 -18
  107. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  108. package/codeyam-cli/src/utils/database.js +37 -2
  109. package/codeyam-cli/src/utils/database.js.map +1 -1
  110. package/codeyam-cli/src/utils/devServerState.js +71 -0
  111. package/codeyam-cli/src/utils/devServerState.js.map +1 -0
  112. package/codeyam-cli/src/utils/editorApi.js +73 -0
  113. package/codeyam-cli/src/utils/editorApi.js.map +1 -0
  114. package/codeyam-cli/src/utils/editorAudit.js +101 -7
  115. package/codeyam-cli/src/utils/editorAudit.js.map +1 -1
  116. package/codeyam-cli/src/utils/editorCapture.js +102 -0
  117. package/codeyam-cli/src/utils/editorCapture.js.map +1 -0
  118. package/codeyam-cli/src/utils/editorDevServer.js +100 -1
  119. package/codeyam-cli/src/utils/editorDevServer.js.map +1 -1
  120. package/codeyam-cli/src/utils/editorEntityChangeStatus.js +44 -0
  121. package/codeyam-cli/src/utils/editorEntityChangeStatus.js.map +1 -0
  122. package/codeyam-cli/src/utils/editorImageVerifier.js +155 -0
  123. package/codeyam-cli/src/utils/editorImageVerifier.js.map +1 -0
  124. package/codeyam-cli/src/utils/editorJournal.js +92 -4
  125. package/codeyam-cli/src/utils/editorJournal.js.map +1 -1
  126. package/codeyam-cli/src/utils/editorLoaderHelpers.js +113 -0
  127. package/codeyam-cli/src/utils/editorLoaderHelpers.js.map +1 -0
  128. package/codeyam-cli/src/utils/editorMockState.js +1 -1
  129. package/codeyam-cli/src/utils/editorPreloadHelpers.js +72 -1
  130. package/codeyam-cli/src/utils/editorPreloadHelpers.js.map +1 -1
  131. package/codeyam-cli/src/utils/editorPreview.js +67 -1
  132. package/codeyam-cli/src/utils/editorPreview.js.map +1 -1
  133. package/codeyam-cli/src/utils/editorScenarioSwitch.js +112 -0
  134. package/codeyam-cli/src/utils/editorScenarioSwitch.js.map +1 -0
  135. package/codeyam-cli/src/utils/editorScenarios.js +276 -0
  136. package/codeyam-cli/src/utils/editorScenarios.js.map +1 -1
  137. package/codeyam-cli/src/utils/editorSeedAdapter.js +173 -0
  138. package/codeyam-cli/src/utils/editorSeedAdapter.js.map +1 -0
  139. package/codeyam-cli/src/utils/entityChangeStatus.js +349 -0
  140. package/codeyam-cli/src/utils/entityChangeStatus.js.map +1 -0
  141. package/codeyam-cli/src/utils/entityChangeStatus.server.js +158 -0
  142. package/codeyam-cli/src/utils/entityChangeStatus.server.js.map +1 -0
  143. package/codeyam-cli/src/utils/install-skills.js +1 -1
  144. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  145. package/codeyam-cli/src/utils/parseRegisterArg.js +31 -0
  146. package/codeyam-cli/src/utils/parseRegisterArg.js.map +1 -0
  147. package/codeyam-cli/src/utils/scenarioCoverage.js +75 -0
  148. package/codeyam-cli/src/utils/scenarioCoverage.js.map +1 -0
  149. package/codeyam-cli/src/utils/scenariosManifest.js +159 -0
  150. package/codeyam-cli/src/utils/scenariosManifest.js.map +1 -0
  151. package/codeyam-cli/src/utils/serverState.js +30 -0
  152. package/codeyam-cli/src/utils/serverState.js.map +1 -1
  153. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +46 -16
  154. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
  155. package/codeyam-cli/src/utils/simulationGateMiddleware.js +8 -1
  156. package/codeyam-cli/src/utils/simulationGateMiddleware.js.map +1 -1
  157. package/codeyam-cli/src/utils/slugUtils.js +25 -0
  158. package/codeyam-cli/src/utils/slugUtils.js.map +1 -0
  159. package/codeyam-cli/src/utils/syncMocksMiddleware.js +2 -2
  160. package/codeyam-cli/src/utils/syncMocksMiddleware.js.map +1 -1
  161. package/codeyam-cli/src/utils/webappDetection.js +21 -0
  162. package/codeyam-cli/src/utils/webappDetection.js.map +1 -1
  163. package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js +40 -0
  164. package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js.map +1 -0
  165. package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js +567 -0
  166. package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js.map +1 -0
  167. package/codeyam-cli/src/webserver/app/lib/clientErrors.js +65 -0
  168. package/codeyam-cli/src/webserver/app/lib/clientErrors.js.map +1 -0
  169. package/codeyam-cli/src/webserver/app/lib/git.js +397 -0
  170. package/codeyam-cli/src/webserver/app/lib/git.js.map +1 -0
  171. package/codeyam-cli/src/webserver/build/client/assets/{CopyButton-DmJveP3T.js → CopyButton-BPXZwM4t.js} +1 -1
  172. package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-C76mRRiF.js → EntityItem-BcgbViKV.js} +3 -3
  173. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-CobE682z.js → EntityTypeIcon-CQIG2qda.js} +9 -9
  174. package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-djPLI-WV.js → ReportIssueModal-BzHcG7SE.js} +3 -3
  175. package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-B76aig_2.js → ScenarioViewer-Bd-hxofb.js} +3 -3
  176. package/codeyam-cli/src/webserver/build/client/assets/ViewportInspectBar-oAf2Kqsf.js +1 -0
  177. package/codeyam-cli/src/webserver/build/client/assets/{_index-C96V0n15.js → _index-DLxKhri3.js} +3 -3
  178. package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-BpKzcsJz.js → activity.(_tab)-BcY3q6nt.js} +6 -6
  179. package/codeyam-cli/src/webserver/build/client/assets/addon-canvas-DpzMmAy5.js +1 -0
  180. package/codeyam-cli/src/webserver/build/client/assets/addon-fit-YJmn1quW.js +12 -0
  181. package/codeyam-cli/src/webserver/build/client/assets/addon-webgl-DI8QOUvO.js +58 -0
  182. package/codeyam-cli/src/webserver/build/client/assets/{agent-transcripts-D9hemwl6.js → agent-transcripts-Bni3iiUj.js} +5 -5
  183. package/codeyam-cli/src/webserver/build/client/assets/api.editor-file-diff-l0sNRNKZ.js +1 -0
  184. package/codeyam-cli/src/webserver/build/client/assets/api.editor-file-l0sNRNKZ.js +1 -0
  185. package/codeyam-cli/src/webserver/build/client/assets/api.editor-project-info-l0sNRNKZ.js +1 -0
  186. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-coverage-l0sNRNKZ.js +1 -0
  187. package/codeyam-cli/src/webserver/build/client/assets/{book-open-D_nMCFmP.js → book-open-BYOypzCa.js} +2 -2
  188. package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-BH2h1Ea2.js → chevron-down-C_Pmso5S.js} +2 -2
  189. package/codeyam-cli/src/webserver/build/client/assets/{circle-check-DyIKORY6.js → circle-check-BVMi9VA5.js} +2 -2
  190. package/codeyam-cli/src/webserver/build/client/assets/{copy-NDbZjXao.js → copy-n2FB0_Sw.js} +3 -3
  191. package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-CC6AbExI.js +41 -0
  192. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BsDh6TSF.js +1 -0
  193. package/codeyam-cli/src/webserver/build/client/assets/editor-PBc_6L9R.js +10 -0
  194. package/codeyam-cli/src/webserver/build/client/assets/editorPreview-4FzHlcNn.js +41 -0
  195. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-CrjR3zZW.js → entity._sha._-BsDXNp45.js} +3 -3
  196. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-BgAqUtTZ.js +6 -0
  197. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-Bmshgrij.js +6 -0
  198. package/codeyam-cli/src/webserver/build/client/assets/{files-DO4CZ16O.js → files-BZrlFE1F.js} +1 -1
  199. package/codeyam-cli/src/webserver/build/client/assets/git-DdZcvjGh.js +1 -0
  200. package/codeyam-cli/src/webserver/build/client/assets/globals-B8vTTNy2.css +1 -0
  201. package/codeyam-cli/src/webserver/build/client/assets/index-yHOVb4rc.js +15 -0
  202. package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-BAXYRVEO.js → loader-circle-DaAZ_H2w.js} +2 -2
  203. package/codeyam-cli/src/webserver/build/client/assets/manifest-65850841.js +1 -0
  204. package/codeyam-cli/src/webserver/build/client/assets/memory-9gnxSZlb.js +101 -0
  205. package/codeyam-cli/src/webserver/build/client/assets/{pause-DTAcYxBt.js → pause-f5-1lKBt.js} +3 -3
  206. package/codeyam-cli/src/webserver/build/client/assets/root-BwX8YgFb.js +67 -0
  207. package/codeyam-cli/src/webserver/build/client/assets/{search-fKo7v0Zo.js → search-Di64LWVb.js} +2 -2
  208. package/codeyam-cli/src/webserver/build/client/assets/{settings-DfuTtcJP.js → settings-0OrEMU6J.js} +1 -1
  209. package/codeyam-cli/src/webserver/build/client/assets/{simulations-B3aOzpCZ.js → simulations-DWT-CvLy.js} +1 -1
  210. package/codeyam-cli/src/webserver/build/client/assets/{terminal-BG4heKCG.js → terminal-Br7MOqts.js} +3 -3
  211. package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-DtSmdtM4.js → triangle-alert-BLdiCuG-.js} +2 -2
  212. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-BE43Hjti.js +1 -0
  213. package/codeyam-cli/src/webserver/build/server/assets/index-DEEQf4pi.js +1 -0
  214. package/codeyam-cli/src/webserver/build/server/assets/init-CkWmyFY2.js +10 -0
  215. package/codeyam-cli/src/webserver/build/server/assets/server-build-BHi-9O8W.js +439 -0
  216. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  217. package/codeyam-cli/src/webserver/build-info.json +5 -5
  218. package/codeyam-cli/src/webserver/editorProxy.js +487 -50
  219. package/codeyam-cli/src/webserver/editorProxy.js.map +1 -1
  220. package/codeyam-cli/src/webserver/scripts/codeyam-preload.mjs +242 -3
  221. package/codeyam-cli/src/webserver/scripts/journalCapture.ts +94 -4
  222. package/codeyam-cli/src/webserver/server.js +46 -14
  223. package/codeyam-cli/src/webserver/server.js.map +1 -1
  224. package/codeyam-cli/src/webserver/terminalServer.js +39 -11
  225. package/codeyam-cli/src/webserver/terminalServer.js.map +1 -1
  226. package/codeyam-cli/templates/chrome-extension-react/EXTENSION_SETUP.md +75 -0
  227. package/codeyam-cli/templates/chrome-extension-react/README.md +46 -0
  228. package/codeyam-cli/templates/chrome-extension-react/gitignore +15 -0
  229. package/codeyam-cli/templates/chrome-extension-react/index.html +12 -0
  230. package/codeyam-cli/templates/chrome-extension-react/package.json +27 -0
  231. package/codeyam-cli/templates/chrome-extension-react/popup.html +12 -0
  232. package/codeyam-cli/templates/chrome-extension-react/public/manifest.json +15 -0
  233. package/codeyam-cli/templates/chrome-extension-react/src/background/service-worker.ts +7 -0
  234. package/codeyam-cli/templates/chrome-extension-react/src/globals.css +6 -0
  235. package/codeyam-cli/templates/chrome-extension-react/src/lib/storage.ts +37 -0
  236. package/codeyam-cli/templates/chrome-extension-react/src/popup/App.tsx +12 -0
  237. package/codeyam-cli/templates/chrome-extension-react/src/popup/main.tsx +10 -0
  238. package/codeyam-cli/templates/chrome-extension-react/tsconfig.json +24 -0
  239. package/codeyam-cli/templates/chrome-extension-react/vite.config.ts +41 -0
  240. package/codeyam-cli/templates/codeyam-editor-claude.md +84 -5
  241. package/codeyam-cli/templates/editor-step-hook.py +97 -8
  242. package/codeyam-cli/templates/expo-react-native/MOBILE_SETUP.md +89 -0
  243. package/codeyam-cli/templates/expo-react-native/README.md +41 -0
  244. package/codeyam-cli/templates/expo-react-native/app/(tabs)/_layout.tsx +33 -0
  245. package/codeyam-cli/templates/expo-react-native/app/(tabs)/index.tsx +12 -0
  246. package/codeyam-cli/templates/expo-react-native/app/(tabs)/settings.tsx +12 -0
  247. package/codeyam-cli/templates/expo-react-native/app/_layout.tsx +12 -0
  248. package/codeyam-cli/templates/expo-react-native/app.json +18 -0
  249. package/codeyam-cli/templates/expo-react-native/babel.config.js +9 -0
  250. package/codeyam-cli/templates/expo-react-native/gitignore +12 -0
  251. package/codeyam-cli/templates/expo-react-native/global.css +3 -0
  252. package/codeyam-cli/templates/expo-react-native/lib/storage.ts +32 -0
  253. package/codeyam-cli/templates/expo-react-native/metro.config.js +6 -0
  254. package/codeyam-cli/templates/expo-react-native/nativewind-env.d.ts +1 -0
  255. package/codeyam-cli/templates/expo-react-native/package.json +38 -0
  256. package/codeyam-cli/templates/expo-react-native/tailwind.config.js +10 -0
  257. package/codeyam-cli/templates/expo-react-native/tsconfig.json +10 -0
  258. package/codeyam-cli/templates/nextjs-prisma-sqlite/AUTH_PATTERNS.md +308 -0
  259. package/codeyam-cli/templates/nextjs-prisma-sqlite/AUTH_UPGRADE.md +304 -0
  260. package/codeyam-cli/templates/nextjs-prisma-sqlite/DATABASE.md +126 -0
  261. package/codeyam-cli/templates/nextjs-prisma-sqlite/FEATURE_PATTERNS.md +37 -0
  262. package/codeyam-cli/templates/nextjs-prisma-sqlite/README.md +53 -0
  263. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/codeyam-isolate/layout.tsx +12 -0
  264. package/codeyam-cli/templates/nextjs-prisma-sqlite/app/lib/prisma.ts +9 -4
  265. package/codeyam-cli/templates/nextjs-prisma-sqlite/env +4 -0
  266. package/codeyam-cli/templates/nextjs-prisma-sqlite/gitignore +21 -0
  267. package/codeyam-cli/templates/nextjs-prisma-sqlite/package.json +5 -1
  268. package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/seed.ts +4 -1
  269. package/codeyam-cli/templates/nextjs-prisma-sqlite/seed-adapter.ts +92 -0
  270. package/codeyam-cli/templates/nextjs-prisma-sqlite/vitest.config.ts +13 -0
  271. package/codeyam-cli/templates/nextjs-prisma-supabase/README.md +52 -0
  272. package/codeyam-cli/templates/{nextjs-prisma-sqlite/PRISMA_SETUP.md → nextjs-prisma-supabase/SUPABASE_SETUP.md} +37 -17
  273. package/codeyam-cli/templates/nextjs-prisma-supabase/app/api/todos/route.ts +17 -0
  274. package/codeyam-cli/templates/nextjs-prisma-supabase/app/globals.css +26 -0
  275. package/codeyam-cli/templates/nextjs-prisma-supabase/app/layout.tsx +34 -0
  276. package/codeyam-cli/templates/nextjs-prisma-supabase/app/lib/prisma.ts +20 -0
  277. package/codeyam-cli/templates/nextjs-prisma-supabase/app/lib/supabase.ts +12 -0
  278. package/codeyam-cli/templates/nextjs-prisma-supabase/app/page.tsx +10 -0
  279. package/codeyam-cli/templates/nextjs-prisma-supabase/env +9 -0
  280. package/codeyam-cli/templates/nextjs-prisma-supabase/eslint.config.mjs +11 -0
  281. package/codeyam-cli/templates/nextjs-prisma-supabase/gitignore +40 -0
  282. package/codeyam-cli/templates/nextjs-prisma-supabase/next.config.ts +11 -0
  283. package/codeyam-cli/templates/nextjs-prisma-supabase/package.json +37 -0
  284. package/codeyam-cli/templates/nextjs-prisma-supabase/postcss.config.mjs +7 -0
  285. package/codeyam-cli/templates/nextjs-prisma-supabase/prisma/schema.prisma +27 -0
  286. package/codeyam-cli/templates/nextjs-prisma-supabase/prisma/seed.ts +39 -0
  287. package/codeyam-cli/templates/nextjs-prisma-supabase/prisma.config.ts +12 -0
  288. package/codeyam-cli/templates/nextjs-prisma-supabase/tsconfig.json +34 -0
  289. package/codeyam-cli/templates/skills/codeyam-dev-mode/SKILL.md +2 -2
  290. package/codeyam-cli/templates/skills/codeyam-editor/SKILL.md +96 -17
  291. package/codeyam-cli/templates/skills/codeyam-memory/SKILL.md +10 -10
  292. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/detect-deprecated-patterns.mjs +139 -0
  293. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/find-exports.mjs +52 -0
  294. package/codeyam-cli/templates/skills/codeyam-memory/scripts/lib/read-json-field.mjs +61 -0
  295. package/codeyam-cli/templates/skills/codeyam-memory/scripts/lib/ripgrep-fallback.mjs +155 -0
  296. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/cleanup.mjs +13 -0
  297. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/filter-session.mjs +95 -0
  298. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/preprocess.mjs +160 -0
  299. package/package.json +14 -9
  300. package/packages/ai/src/lib/generateExecutionFlows.js +0 -11
  301. package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
  302. package/packages/analyze/src/lib/ProjectAnalyzer.js +10 -4
  303. package/packages/analyze/src/lib/ProjectAnalyzer.js.map +1 -1
  304. package/packages/analyze/src/lib/asts/index.js +4 -2
  305. package/packages/analyze/src/lib/asts/index.js.map +1 -1
  306. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +0 -40
  307. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -1
  308. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js +31 -0
  309. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -1
  310. package/packages/database/src/lib/loadEntities.js +0 -6
  311. package/packages/database/src/lib/loadEntities.js.map +1 -1
  312. package/packages/database/src/lib/updateCommitMetadata.js +0 -25
  313. package/packages/database/src/lib/updateCommitMetadata.js.map +1 -1
  314. package/packages/types/src/enums/ProjectFramework.js +2 -0
  315. package/packages/types/src/enums/ProjectFramework.js.map +1 -1
  316. package/codeyam-cli/src/webserver/build/client/assets/Terminal-Dnj5CY9R.js +0 -41
  317. package/codeyam-cli/src/webserver/build/client/assets/addon-fit-CUXOrorO.js +0 -1
  318. package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-CMT1jU2q.js +0 -21
  319. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BiM6z3Do.js +0 -1
  320. package/codeyam-cli/src/webserver/build/client/assets/editor-D1DAKXtT.js +0 -8
  321. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-DkzqFzFj.js +0 -6
  322. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-C28BiQzt.js +0 -6
  323. package/codeyam-cli/src/webserver/build/client/assets/git-CFCTYk9I.js +0 -15
  324. package/codeyam-cli/src/webserver/build/client/assets/globals-B17TBSS6.css +0 -1
  325. package/codeyam-cli/src/webserver/build/client/assets/manifest-a632de18.js +0 -1
  326. package/codeyam-cli/src/webserver/build/client/assets/memory-Dg0mvYrI.js +0 -96
  327. package/codeyam-cli/src/webserver/build/client/assets/root-DUKqhFlb.js +0 -67
  328. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-ByhSyh0W.js +0 -1
  329. package/codeyam-cli/src/webserver/build/server/assets/index-HfLydfDq.js +0 -1
  330. package/codeyam-cli/src/webserver/build/server/assets/server-build-CUu_F-oo.js +0 -366
  331. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/detect-deprecated-patterns.sh +0 -108
  332. package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/find-exports.sh +0 -69
  333. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/cleanup.sh +0 -12
  334. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/filter.jq +0 -45
  335. package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/preprocess.sh +0 -139
@@ -0,0 +1,126 @@
1
+ # Database
2
+
3
+ This project uses **Prisma 7 with SQLite** for local development. No external services needed.
4
+
5
+ All application code imports from `@/app/lib/prisma` — this is the only file that changes when you upgrade to a hosted database.
6
+
7
+ ## Quick Reference
8
+
9
+ ```bash
10
+ # Edit your schema
11
+ vim prisma/schema.prisma
12
+
13
+ # Push schema changes (also regenerates Prisma client)
14
+ npm run db:push
15
+
16
+ # Seed demo data
17
+ npm run db:seed
18
+
19
+ # Reset database (delete + recreate + seed)
20
+ npm run db:reset
21
+
22
+ # Browse data visually
23
+ npx prisma studio
24
+ ```
25
+
26
+ ## Adding Columns to Existing Tables
27
+
28
+ When adding a new **required** column to a table that already has data, `db push` will fail because existing rows have no value for the new column. To avoid this:
29
+
30
+ - **Add a `@default(...)` value** so Prisma can fill existing rows automatically:
31
+ ```prisma
32
+ model Rating {
33
+ userId String @default("anonymous") // existing rows get "anonymous"
34
+ }
35
+ ```
36
+ - Once all rows have real values, you can remove the default if desired.
37
+ - **Never use `--force-reset`** — it drops ALL tables and deletes all data.
38
+ - Optional columns (`String?`) don't need a default — existing rows get `null`.
39
+
40
+ ## Using the Database
41
+
42
+ ```typescript
43
+ import { prisma } from '@/app/lib/prisma';
44
+
45
+ // In API routes or server components:
46
+ const items = await prisma.todo.findMany();
47
+ const item = await prisma.todo.create({ data: { title: 'New item' } });
48
+ ```
49
+
50
+ ## Important: Do NOT Change These Settings
51
+
52
+ - **Generator must be `prisma-client-js`** (not `prisma-client`). The `prisma-client` generator requires a custom output path that breaks Turbopack.
53
+ - **Do NOT add an `output` field** to the generator.
54
+ - **Do NOT add `url` to the datasource block** in `schema.prisma`. Prisma 7 moved the URL to `prisma.config.ts`.
55
+ - **Keep `serverExternalPackages: ["better-sqlite3"]`** in `next.config.ts`.
56
+ - **Keep `turbopack: { root: "." }`** in `next.config.ts`.
57
+ - **Always run `npx prisma generate`** after `npx prisma db push` (or use `npm run db:push` which does both).
58
+ - **Database file is at project root** (`./dev.db`), not in `prisma/`.
59
+
60
+ ## Upgrading to a Hosted Database
61
+
62
+ When you're ready for production, you'll want a hosted database. SQLite is great for prototyping, but doesn't support concurrent connections or run in serverless environments (Vercel, etc.).
63
+
64
+ ### Option 1: Supabase (PostgreSQL)
65
+
66
+ Free tier available. Gives you PostgreSQL + auth + realtime + storage.
67
+
68
+ 1. Create a project at https://supabase.com/dashboard
69
+ 2. Get your credentials from Project Settings > Database > Connection string (URI)
70
+ 3. Replace packages:
71
+ ```bash
72
+ npm uninstall better-sqlite3 @prisma/adapter-better-sqlite3 @types/better-sqlite3
73
+ npm install @prisma/adapter-pg pg @supabase/supabase-js
74
+ npm install -D @types/pg
75
+ ```
76
+ 4. Update `prisma/schema.prisma`:
77
+ ```prisma
78
+ datasource db {
79
+ provider = "postgresql"
80
+ }
81
+ ```
82
+ 5. Update `app/lib/prisma.ts`:
83
+
84
+ ```typescript
85
+ import { PrismaClient } from '@prisma/client';
86
+ import { PrismaPg } from '@prisma/adapter-pg';
87
+
88
+ const globalForPrisma = globalThis as unknown as { prisma: PrismaClient };
89
+ const connectionString = process.env.DATABASE_URL!;
90
+ const adapter = new PrismaPg({ connectionString });
91
+ export const prisma =
92
+ globalForPrisma.prisma ?? new PrismaClient({ adapter });
93
+ if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma;
94
+ export default prisma;
95
+ ```
96
+
97
+ 6. Create `.env`:
98
+ ```
99
+ DATABASE_URL=postgresql://postgres.YOUR_PROJECT_ID:YOUR_PASSWORD@aws-0-us-east-1.pooler.supabase.com:6543/postgres
100
+ ```
101
+ 7. Remove `serverExternalPackages` from `next.config.ts`
102
+ 8. Run `npm run db:push` to create tables in Supabase
103
+ 9. Update `prisma/seed.ts` to use the new adapter (same pattern as `prisma.ts`)
104
+
105
+ ### Option 2: Other PostgreSQL Hosts (Neon, Railway, etc.)
106
+
107
+ Same steps as Supabase above (steps 3-9), just use your provider's connection string.
108
+
109
+ ### Option 3: PlanetScale / MySQL
110
+
111
+ 1. Replace packages:
112
+ ```bash
113
+ npm uninstall better-sqlite3 @prisma/adapter-better-sqlite3 @types/better-sqlite3
114
+ npm install @prisma/adapter-planetscale @planetscale/database
115
+ ```
116
+ 2. Update `schema.prisma` datasource to `provider = "mysql"`
117
+ 3. Update `app/lib/prisma.ts` to use `PrismaPlanetScale` adapter
118
+ 4. Follow PlanetScale setup docs for connection string
119
+
120
+ ### What Stays the Same
121
+
122
+ Your application code doesn't change at all. Every file that uses the database already imports from `@/app/lib/prisma`, which is the only file that gets updated. Your Prisma schema models, API routes, and server components all work identically regardless of which database backs them.
123
+
124
+ ## Writing Seed Scripts
125
+
126
+ Seed scripts run outside of Next.js, so they must create their own PrismaClient with the adapter (they cannot import from `@/app/lib/prisma`). See `prisma/seed.ts` for the correct pattern.
@@ -0,0 +1,37 @@
1
+ # Feature Patterns
2
+
3
+ When the feature you're building involves any of the patterns below, **read the linked doc before writing code**. These patterns are designed for the local SQLite dev environment and upgrade cleanly to production services later.
4
+
5
+ ## Authentication (login, sign-up, user sessions)
6
+
7
+ **Read:** `AUTH_PATTERNS.md`
8
+
9
+ Use the cookie + DB auth abstraction in `app/lib/auth.ts`. All consumer code imports from this single file. DO NOT use NextAuth, Clerk, better-auth, Supabase Auth, or any external auth provider during prototyping — they require infrastructure unavailable locally.
10
+
11
+ **For scenarios:** Include User and Session seed rows. Add `"session": {"cookieValue": "<token>"}` at the scenario top level to auto-log the user in. Omit `session` for a logged-out scenario.
12
+
13
+ **Upgrade path:** See `AUTH_UPGRADE.md` — only `app/lib/auth.ts` internals change; consumer code stays the same.
14
+
15
+ ## External Services (payments, email, maps, weather APIs, etc.)
16
+
17
+ If the user has dev/test credentials (e.g., Stripe test keys):
18
+
19
+ - Store them in `.codeyam/config.json` under `environmentVariables`
20
+ - Restart the dev server — credentials are injected into `process.env`
21
+
22
+ If no credentials are available:
23
+
24
+ - Build with real API calls in the code
25
+ - Mock responses per scenario using `externalApis` in scenario registration (Step 8)
26
+
27
+ ## File Storage / Uploads
28
+
29
+ For local prototyping, store files in the `public/uploads/` directory and serve them as static assets. Use `fs.writeFile` in API routes. For production, swap to S3/Cloudflare R2/Supabase Storage.
30
+
31
+ ## Email / Notifications
32
+
33
+ For prototyping, log emails to the console or write them to a `/api/dev/sent-emails` endpoint that stores in the database. For production, swap to Resend/SendGrid/Postmark.
34
+
35
+ ---
36
+
37
+ _This list will grow as new patterns are added. Each pattern follows the same principle: build with a simple local implementation, upgrade to a production service later by swapping one file._
@@ -0,0 +1,53 @@
1
+ # Project Name
2
+
3
+ Brief description of what this app does.
4
+
5
+ ## Setup
6
+
7
+ Run the setup script to install dependencies, initialize the database, and seed it with demo data:
8
+
9
+ ```bash
10
+ npm run setup
11
+ ```
12
+
13
+ ## Development
14
+
15
+ Start the dev server:
16
+
17
+ ```bash
18
+ npm run dev
19
+ ```
20
+
21
+ Open [http://localhost:3000](http://localhost:3000) in your browser.
22
+
23
+ ## Using CodeYam Editor
24
+
25
+ This project was built with [CodeYam](https://codeyam.com). To launch the editor:
26
+
27
+ ```bash
28
+ codeyam editor
29
+ ```
30
+
31
+ The editor provides a live preview alongside a Claude Code terminal for iterating on the app.
32
+
33
+ ## Database
34
+
35
+ This project uses SQLite via Prisma. Common commands:
36
+
37
+ ```bash
38
+ npm run db:push # Apply schema changes and generate Prisma client
39
+ npm run db:seed # Seed the database with demo data
40
+ npm run db:reset # Reset database: drop, recreate, and re-seed
41
+ ```
42
+
43
+ ## Scripts
44
+
45
+ | Script | Description |
46
+ | ------------------ | -------------------------------------------- |
47
+ | `npm run setup` | One-line project setup (install + db + seed) |
48
+ | `npm run dev` | Start the development server |
49
+ | `npm run build` | Build for production |
50
+ | `npm run test` | Run tests |
51
+ | `npm run db:push` | Apply Prisma schema changes |
52
+ | `npm run db:seed` | Seed the database |
53
+ | `npm run db:reset` | Reset and re-seed the database |
@@ -0,0 +1,12 @@
1
+ import { notFound } from 'next/navigation';
2
+
3
+ export default function CodeYamIsolateLayout({
4
+ children,
5
+ }: {
6
+ children: React.ReactNode;
7
+ }) {
8
+ if (process.env.NODE_ENV === 'production') {
9
+ notFound();
10
+ }
11
+ return <>{children}</>;
12
+ }
@@ -1,16 +1,21 @@
1
- // Prisma 7 requires a driver adapter for database access.
2
- // This file uses better-sqlite3 for SQLite.
1
+ // Database connection singleton.
2
+ // This is the ONLY file that changes when upgrading to a hosted database.
3
+ // All application code imports from here — API routes, server components, etc.
3
4
  //
4
- // Usage in API routes and server components:
5
+ // Usage:
5
6
  // import { prisma } from "@/app/lib/prisma";
6
7
  // const items = await prisma.todo.findMany();
8
+ //
9
+ // To upgrade to a hosted database (e.g., Supabase PostgreSQL), see DATABASE.md.
7
10
 
8
11
  import { PrismaClient } from '@prisma/client';
9
12
  import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3';
10
13
 
11
14
  const globalForPrisma = globalThis as unknown as { prisma: PrismaClient };
12
15
 
13
- const adapter = new PrismaBetterSqlite3({ url: 'file:./dev.db' });
16
+ const adapter = new PrismaBetterSqlite3({
17
+ url: process.env.DATABASE_URL || 'file:./dev.db',
18
+ });
14
19
 
15
20
  export const prisma = globalForPrisma.prisma ?? new PrismaClient({ adapter });
16
21
 
@@ -0,0 +1,4 @@
1
+ # Local SQLite database (no external services needed)
2
+ # This is used by Prisma CLI commands (db push, migrate, etc.)
3
+ # The app code in app/lib/prisma.ts also uses this path.
4
+ DATABASE_URL=file:./dev.db
@@ -41,3 +41,24 @@ next-env.d.ts
41
41
  # database
42
42
  dev.db
43
43
  dev.db-journal
44
+
45
+ # CodeYam - local only (not shared)
46
+ .codeyam/db.sqlite3
47
+ .codeyam/db.sqlite3-wal
48
+ .codeyam/db.sqlite3-shm
49
+ .codeyam/secrets.json
50
+ .codeyam/server.json
51
+ .codeyam/server-state.json
52
+ .codeyam/queue.json
53
+ .codeyam/active-scenario.json
54
+ .codeyam/editor-step.json
55
+ .codeyam/editor-user-prompt.txt
56
+ .codeyam/editor-mode-context.md
57
+ .codeyam/dev-mode-context.md
58
+ .codeyam/logs/
59
+ .codeyam/llm-calls/
60
+ .codeyam/captures/
61
+ .codeyam/results/
62
+ .codeyam/tmp/
63
+ .codeyam/rules/
64
+ .codeyam/bin/
@@ -3,10 +3,13 @@
3
3
  "version": "0.1.0",
4
4
  "private": true,
5
5
  "scripts": {
6
+ "setup": "npm install && npm run db:push && npm run db:seed",
6
7
  "dev": "next dev --turbopack",
7
8
  "build": "next build",
8
9
  "start": "next start",
9
10
  "lint": "eslint",
11
+ "test": "vitest run",
12
+ "test:watch": "vitest",
10
13
  "db:push": "npx prisma db push && npx prisma generate",
11
14
  "db:seed": "npx tsx prisma/seed.ts",
12
15
  "db:reset": "rm -f dev.db && npm run db:push && npx tsx prisma/seed.ts"
@@ -30,6 +33,7 @@
30
33
  "eslint-config-next": "^15.3.3",
31
34
  "tailwindcss": "^4",
32
35
  "tsx": "^4.19.4",
33
- "typescript": "^5"
36
+ "typescript": "^5",
37
+ "vitest": "^3"
34
38
  }
35
39
  }
@@ -6,10 +6,13 @@
6
6
  // IMPORTANT: This file must use the same adapter pattern as app/lib/prisma.ts.
7
7
  // Do NOT use `new PrismaClient()` without the adapter — Prisma 7 requires it.
8
8
 
9
+ import 'dotenv/config';
9
10
  import { PrismaClient } from '@prisma/client';
10
11
  import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3';
11
12
 
12
- const adapter = new PrismaBetterSqlite3({ url: 'file:./dev.db' });
13
+ const adapter = new PrismaBetterSqlite3({
14
+ url: process.env.DATABASE_URL || 'file:./dev.db',
15
+ });
13
16
  const prisma = new PrismaClient({ adapter });
14
17
 
15
18
  async function main() {
@@ -0,0 +1,92 @@
1
+ /**
2
+ * CodeYam Seed Adapter for Prisma + SQLite.
3
+ *
4
+ * Reads a JSON seed data file (path passed as CLI arg), wipes all tables,
5
+ * then inserts the seed data using Prisma.
6
+ *
7
+ * Usage: npx tsx .codeyam/seed-adapter.ts <path-to-seed-data.json>
8
+ *
9
+ * The JSON file has the format:
10
+ * {
11
+ * "type": "application",
12
+ * "seed": {
13
+ * "tableName": [{ "column": "value", ... }, ...]
14
+ * },
15
+ * "externalApis": { ... } // optional, not used by this adapter
16
+ * }
17
+ */
18
+
19
+ import 'dotenv/config';
20
+ import { PrismaClient } from '@prisma/client';
21
+ import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3';
22
+ import * as fs from 'fs';
23
+
24
+ const adapter = new PrismaBetterSqlite3({
25
+ url: process.env.DATABASE_URL || 'file:./dev.db',
26
+ });
27
+ const prisma = new PrismaClient({ adapter });
28
+
29
+ async function main() {
30
+ const seedDataPath = process.argv[2];
31
+ if (!seedDataPath) {
32
+ console.error('Usage: npx tsx .codeyam/seed-adapter.ts <seed-data.json>');
33
+ process.exit(1);
34
+ }
35
+
36
+ const raw = fs.readFileSync(seedDataPath, 'utf-8');
37
+ const data = JSON.parse(raw);
38
+ const seed = data.seed || data;
39
+
40
+ console.log(`Seeding tables: ${Object.keys(seed).join(', ')}`);
41
+
42
+ // Wipe all tables in reverse order (to respect foreign keys)
43
+ const tableNames = Object.keys(seed);
44
+ for (const table of [...tableNames].reverse()) {
45
+ try {
46
+ await (prisma as any)[table].deleteMany();
47
+ console.log(` Cleared ${table}`);
48
+ } catch (err) {
49
+ console.warn(
50
+ ` Could not clear ${table}: ${err instanceof Error ? err.message : err}`,
51
+ );
52
+ }
53
+ }
54
+
55
+ // Reset auto-increment counters so IDs start from 1 after each re-seed.
56
+ // Without this, SQLite IDs keep climbing (1, 2, ... then 9, 10, ...)
57
+ // across scenario switches, causing hardcoded URLs like /drinks/1 to 404.
58
+ for (const table of tableNames) {
59
+ try {
60
+ // Prisma uses PascalCase model names; sqlite_sequence stores the actual table name.
61
+ // Try both the seed key (which matches the Prisma model) and common casings.
62
+ await prisma.$executeRawUnsafe(
63
+ `DELETE FROM sqlite_sequence WHERE name = '${table}' OR name = '${table.charAt(0).toUpperCase() + table.slice(1)}'`,
64
+ );
65
+ } catch {
66
+ // sqlite_sequence may not exist if no autoincrement columns — safe to ignore
67
+ }
68
+ }
69
+
70
+ // Insert seed data
71
+ for (const [table, rows] of Object.entries(seed)) {
72
+ if (!Array.isArray(rows) || rows.length === 0) continue;
73
+ try {
74
+ await (prisma as any)[table].createMany({ data: rows });
75
+ console.log(` Seeded ${rows.length} rows into ${table}`);
76
+ } catch (err) {
77
+ console.error(
78
+ ` Failed to seed ${table}: ${err instanceof Error ? err.message : err}`,
79
+ );
80
+ process.exit(1);
81
+ }
82
+ }
83
+
84
+ console.log('Seed complete');
85
+ }
86
+
87
+ main()
88
+ .then(() => prisma.$disconnect())
89
+ .catch((e) => {
90
+ console.error('Seed adapter error:', e);
91
+ process.exit(1);
92
+ });
@@ -0,0 +1,13 @@
1
+ import { defineConfig } from 'vitest/config';
2
+ import path from 'path';
3
+
4
+ export default defineConfig({
5
+ test: {
6
+ globals: true,
7
+ },
8
+ resolve: {
9
+ alias: {
10
+ '@': path.resolve(__dirname, '.'),
11
+ },
12
+ },
13
+ });
@@ -0,0 +1,52 @@
1
+ # Project Name
2
+
3
+ Brief description of what this app does.
4
+
5
+ ## Setup
6
+
7
+ Run the setup script to install dependencies, initialize the database, and seed it with demo data:
8
+
9
+ ```bash
10
+ npm run setup
11
+ ```
12
+
13
+ ## Development
14
+
15
+ Start the dev server:
16
+
17
+ ```bash
18
+ npm run dev
19
+ ```
20
+
21
+ Open [http://localhost:3000](http://localhost:3000) in your browser.
22
+
23
+ ## Using CodeYam Editor
24
+
25
+ This project was built with [CodeYam](https://codeyam.com). To launch the editor:
26
+
27
+ ```bash
28
+ codeyam editor
29
+ ```
30
+
31
+ The editor provides a live preview alongside a Claude Code terminal for iterating on the app.
32
+
33
+ ## Database
34
+
35
+ This project uses Supabase (PostgreSQL) via Prisma. Common commands:
36
+
37
+ ```bash
38
+ npm run db:push # Apply schema changes and generate Prisma client
39
+ npm run db:seed # Seed the database with demo data
40
+ npm run db:reset # Reset database (runs prisma migrate reset)
41
+ ```
42
+
43
+ ## Scripts
44
+
45
+ | Script | Description |
46
+ | ------------------ | -------------------------------------------- |
47
+ | `npm run setup` | One-line project setup (install + db + seed) |
48
+ | `npm run dev` | Start the development server |
49
+ | `npm run build` | Build for production |
50
+ | `npm run db:push` | Apply Prisma schema changes |
51
+ | `npm run db:seed` | Seed the database |
52
+ | `npm run db:reset` | Reset the database |
@@ -1,19 +1,17 @@
1
- # Prisma 7 + SQLite Setup
1
+ # Supabase + Prisma 7 Setup
2
2
 
3
- This project uses Prisma 7 with SQLite via the `better-sqlite3` driver adapter.
3
+ This project uses Prisma 7 with PostgreSQL via Supabase.
4
4
 
5
- ## How it works
5
+ ## Quick start
6
6
 
7
- Prisma 7 requires a **driver adapter** you cannot use `new PrismaClient()` alone.
8
- Every file that creates a PrismaClient must use this pattern:
7
+ 1. Create a Supabase project at https://supabase.com/dashboard
8
+ 2. Copy `.env` and fill in your credentials (see comments in the file)
9
+ 3. Run `npm run db:push` to create tables
10
+ 4. Run `npm run db:seed` to populate demo data
9
11
 
10
- ```typescript
11
- import { PrismaClient } from '@prisma/client';
12
- import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3';
12
+ ## How it works
13
13
 
14
- const adapter = new PrismaBetterSqlite3({ url: 'file:./dev.db' });
15
- const prisma = new PrismaClient({ adapter });
16
- ```
14
+ Prisma 7 requires a **driver adapter**. This project uses `@prisma/adapter-pg` with the `pg` package to connect to Supabase's PostgreSQL.
17
15
 
18
16
  The singleton in `app/lib/prisma.ts` is already configured. Import it in your code:
19
17
 
@@ -21,6 +19,12 @@ The singleton in `app/lib/prisma.ts` is already configured. Import it in your co
21
19
  import { prisma } from '@/app/lib/prisma';
22
20
  ```
23
21
 
22
+ For Supabase-specific features (auth, realtime, storage), use the Supabase client:
23
+
24
+ ```typescript
25
+ import { supabase } from '@/app/lib/supabase';
26
+ ```
27
+
24
28
  ## Important: do NOT change these settings
25
29
 
26
30
  - **Generator must be `prisma-client-js`** (not `prisma-client`). The `prisma-client`
@@ -29,14 +33,19 @@ import { prisma } from '@/app/lib/prisma';
29
33
  `node_modules/@prisma/client` works with standard imports everywhere.
30
34
  - **Do NOT add `url` to the datasource block** in `schema.prisma`. Prisma 7
31
35
  moved the URL to `prisma.config.ts`. Adding it to the schema causes a validation error.
32
- - **Keep `serverExternalPackages: ["better-sqlite3"]`** in `next.config.ts`.
33
- Without it, Next.js tries to bundle the native module and fails.
34
36
  - **Keep `turbopack: { root: "." }`** in `next.config.ts`. Without it,
35
37
  Turbopack may infer a parent directory as root and break imports.
36
- - **Database file is at project root** (`./dev.db`), not in `prisma/`.
37
38
  - **Always run `npx prisma generate`** after `npx prisma db push` (or use
38
39
  `npm run db:push` which does both). Without this, the client module is missing.
39
40
 
41
+ ## Getting your Supabase credentials
42
+
43
+ 1. Go to https://supabase.com/dashboard and select your project
44
+ 2. **SUPABASE_URL** and **SUPABASE_ANON_KEY**: Project Settings → API
45
+ 3. **DATABASE_URL**: Project Settings → Database → Connection string (URI)
46
+ - For serverless (Vercel, etc.): use the "Transaction" pooler connection string (port 6543)
47
+ - For long-running servers: use the "Session" pooler connection string (port 5432)
48
+
40
49
  ## Common tasks
41
50
 
42
51
  ```bash
@@ -47,10 +56,9 @@ vim prisma/schema.prisma
47
56
  npm run db:push
48
57
 
49
58
  # Seed the database
50
- npx tsx prisma/seed.ts
51
- # or: npm run db:seed
59
+ npm run db:seed
52
60
 
53
- # Reset the database (delete + recreate + seed)
61
+ # Reset the database (drops all tables, re-creates, re-seeds)
54
62
  npm run db:reset
55
63
 
56
64
  # Open Prisma Studio (database browser)
@@ -82,3 +90,15 @@ export async function POST(request: Request) {
82
90
  return Response.json(todo);
83
91
  }
84
92
  ```
93
+
94
+ ## Deployment
95
+
96
+ This template is ready to deploy to Vercel:
97
+
98
+ 1. Push your code to GitHub
99
+ 2. Import the repo in Vercel
100
+ 3. Add the same environment variables from `.env` to Vercel's project settings
101
+ 4. Deploy
102
+
103
+ The DATABASE_URL should use Supabase's **Transaction** pooler connection string
104
+ (port 6543) for serverless environments like Vercel.
@@ -0,0 +1,17 @@
1
+ // Example API route using Prisma.
2
+ // Import prisma from the singleton — do NOT create a new PrismaClient here.
3
+
4
+ import { prisma } from '@/app/lib/prisma';
5
+
6
+ export async function GET() {
7
+ const todos = await prisma.todo.findMany({
8
+ orderBy: { createdAt: 'desc' },
9
+ });
10
+ return Response.json(todos);
11
+ }
12
+
13
+ export async function POST(request: Request) {
14
+ const { title } = await request.json();
15
+ const todo = await prisma.todo.create({ data: { title } });
16
+ return Response.json(todo);
17
+ }
@@ -0,0 +1,26 @@
1
+ @import "tailwindcss";
2
+
3
+ :root {
4
+ --background: #ffffff;
5
+ --foreground: #171717;
6
+ }
7
+
8
+ @theme inline {
9
+ --color-background: var(--background);
10
+ --color-foreground: var(--foreground);
11
+ --font-sans: var(--font-geist-sans);
12
+ --font-mono: var(--font-geist-mono);
13
+ }
14
+
15
+ @media (prefers-color-scheme: dark) {
16
+ :root {
17
+ --background: #0a0a0a;
18
+ --foreground: #ededed;
19
+ }
20
+ }
21
+
22
+ body {
23
+ background: var(--background);
24
+ color: var(--foreground);
25
+ font-family: Arial, Helvetica, sans-serif;
26
+ }
@@ -0,0 +1,34 @@
1
+ import type { Metadata } from 'next';
2
+ import { Geist, Geist_Mono } from 'next/font/google';
3
+ import './globals.css';
4
+
5
+ const geistSans = Geist({
6
+ variable: '--font-geist-sans',
7
+ subsets: ['latin'],
8
+ });
9
+
10
+ const geistMono = Geist_Mono({
11
+ variable: '--font-geist-mono',
12
+ subsets: ['latin'],
13
+ });
14
+
15
+ export const metadata: Metadata = {
16
+ title: 'CodeYam App',
17
+ description: 'Built with CodeYam Editor',
18
+ };
19
+
20
+ export default function RootLayout({
21
+ children,
22
+ }: Readonly<{
23
+ children: React.ReactNode;
24
+ }>) {
25
+ return (
26
+ <html lang="en">
27
+ <body
28
+ className={`${geistSans.variable} ${geistMono.variable} antialiased`}
29
+ >
30
+ {children}
31
+ </body>
32
+ </html>
33
+ );
34
+ }