@l4yercak3/cli 1.3.1 → 2.0.0-alpha.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 (357) hide show
  1. package/README.md +10 -220
  2. package/dist/api/client.d.ts +12 -0
  3. package/dist/api/client.d.ts.map +1 -0
  4. package/dist/api/client.js +37 -0
  5. package/dist/api/client.js.map +1 -0
  6. package/dist/api/platform.d.ts +161 -0
  7. package/dist/api/platform.d.ts.map +1 -0
  8. package/dist/api/platform.js +70 -0
  9. package/dist/api/platform.js.map +1 -0
  10. package/dist/bin/sevenlayers.d.ts +3 -0
  11. package/dist/bin/sevenlayers.d.ts.map +1 -0
  12. package/dist/bin/sevenlayers.js +198 -0
  13. package/dist/bin/sevenlayers.js.map +1 -0
  14. package/dist/commands/agent/catalog.d.ts +5 -0
  15. package/dist/commands/agent/catalog.d.ts.map +1 -0
  16. package/dist/commands/agent/catalog.js +142 -0
  17. package/dist/commands/agent/catalog.js.map +1 -0
  18. package/dist/commands/agent/drift.d.ts +5 -0
  19. package/dist/commands/agent/drift.d.ts.map +1 -0
  20. package/dist/commands/agent/drift.js +113 -0
  21. package/dist/commands/agent/drift.js.map +1 -0
  22. package/dist/commands/agent/init.d.ts +5 -0
  23. package/dist/commands/agent/init.d.ts.map +1 -0
  24. package/dist/commands/agent/init.js +75 -0
  25. package/dist/commands/agent/init.js.map +1 -0
  26. package/dist/commands/agent/permissions.d.ts +5 -0
  27. package/dist/commands/agent/permissions.d.ts.map +1 -0
  28. package/dist/commands/agent/permissions.js +88 -0
  29. package/dist/commands/agent/permissions.js.map +1 -0
  30. package/dist/commands/agent/runner.d.ts +14 -0
  31. package/dist/commands/agent/runner.d.ts.map +1 -0
  32. package/dist/commands/agent/runner.js +59 -0
  33. package/dist/commands/agent/runner.js.map +1 -0
  34. package/dist/commands/agent/shared.d.ts +13 -0
  35. package/dist/commands/agent/shared.d.ts.map +1 -0
  36. package/dist/commands/agent/shared.js +31 -0
  37. package/dist/commands/agent/shared.js.map +1 -0
  38. package/dist/commands/agent/template.d.ts +5 -0
  39. package/dist/commands/agent/template.d.ts.map +1 -0
  40. package/dist/commands/agent/template.js +104 -0
  41. package/dist/commands/agent/template.js.map +1 -0
  42. package/dist/commands/app/connect.d.ts +7 -0
  43. package/dist/commands/app/connect.d.ts.map +1 -0
  44. package/dist/commands/app/connect.js +12 -0
  45. package/dist/commands/app/connect.js.map +1 -0
  46. package/dist/commands/app/init.d.ts +7 -0
  47. package/dist/commands/app/init.d.ts.map +1 -0
  48. package/dist/commands/app/init.js +12 -0
  49. package/dist/commands/app/init.js.map +1 -0
  50. package/dist/commands/app/link.d.ts +3 -0
  51. package/dist/commands/app/link.d.ts.map +1 -0
  52. package/dist/commands/app/link.js +92 -0
  53. package/dist/commands/app/link.js.map +1 -0
  54. package/dist/commands/app/pages.d.ts +15 -0
  55. package/dist/commands/app/pages.d.ts.map +1 -0
  56. package/dist/commands/app/pages.js +180 -0
  57. package/dist/commands/app/pages.js.map +1 -0
  58. package/dist/commands/app/register.d.ts +3 -0
  59. package/dist/commands/app/register.d.ts.map +1 -0
  60. package/dist/commands/app/register.js +120 -0
  61. package/dist/commands/app/register.js.map +1 -0
  62. package/dist/commands/app/remote.d.ts +14 -0
  63. package/dist/commands/app/remote.d.ts.map +1 -0
  64. package/dist/commands/app/remote.js +44 -0
  65. package/dist/commands/app/remote.js.map +1 -0
  66. package/dist/commands/app/setup.d.ts +3 -0
  67. package/dist/commands/app/setup.d.ts.map +1 -0
  68. package/dist/commands/app/setup.js +299 -0
  69. package/dist/commands/app/setup.js.map +1 -0
  70. package/dist/commands/app/shared.d.ts +9 -0
  71. package/dist/commands/app/shared.d.ts.map +1 -0
  72. package/dist/commands/app/shared.js +122 -0
  73. package/dist/commands/app/shared.js.map +1 -0
  74. package/dist/commands/app/sync.d.ts +7 -0
  75. package/dist/commands/app/sync.d.ts.map +1 -0
  76. package/dist/commands/app/sync.js +107 -0
  77. package/dist/commands/app/sync.js.map +1 -0
  78. package/dist/commands/booking/check.d.ts +3 -0
  79. package/dist/commands/booking/check.d.ts.map +1 -0
  80. package/dist/commands/booking/check.js +68 -0
  81. package/dist/commands/booking/check.js.map +1 -0
  82. package/dist/commands/booking/setup.d.ts +3 -0
  83. package/dist/commands/booking/setup.d.ts.map +1 -0
  84. package/dist/commands/booking/setup.js +95 -0
  85. package/dist/commands/booking/setup.js.map +1 -0
  86. package/dist/commands/booking/shared.d.ts +31 -0
  87. package/dist/commands/booking/shared.d.ts.map +1 -0
  88. package/dist/commands/booking/shared.js +112 -0
  89. package/dist/commands/booking/shared.js.map +1 -0
  90. package/dist/commands/booking/smoke.d.ts +3 -0
  91. package/dist/commands/booking/smoke.d.ts.map +1 -0
  92. package/dist/commands/booking/smoke.js +101 -0
  93. package/dist/commands/booking/smoke.js.map +1 -0
  94. package/dist/commands/cms/bind.d.ts +3 -0
  95. package/dist/commands/cms/bind.d.ts.map +1 -0
  96. package/dist/commands/cms/bind.js +212 -0
  97. package/dist/commands/cms/bind.js.map +1 -0
  98. package/dist/commands/cms/content.d.ts +40 -0
  99. package/dist/commands/cms/content.d.ts.map +1 -0
  100. package/dist/commands/cms/content.js +169 -0
  101. package/dist/commands/cms/content.js.map +1 -0
  102. package/dist/commands/cms/doctor.d.ts +3 -0
  103. package/dist/commands/cms/doctor.d.ts.map +1 -0
  104. package/dist/commands/cms/doctor.js +69 -0
  105. package/dist/commands/cms/doctor.js.map +1 -0
  106. package/dist/commands/cms/migrate.d.ts +3 -0
  107. package/dist/commands/cms/migrate.d.ts.map +1 -0
  108. package/dist/commands/cms/migrate.js +78 -0
  109. package/dist/commands/cms/migrate.js.map +1 -0
  110. package/dist/commands/cms/registry.d.ts +3 -0
  111. package/dist/commands/cms/registry.d.ts.map +1 -0
  112. package/dist/commands/cms/registry.js +161 -0
  113. package/dist/commands/cms/registry.js.map +1 -0
  114. package/dist/commands/cms/seed.d.ts +3 -0
  115. package/dist/commands/cms/seed.d.ts.map +1 -0
  116. package/dist/commands/cms/seed.js +102 -0
  117. package/dist/commands/cms/seed.js.map +1 -0
  118. package/dist/commands/cms/shared.d.ts +22 -0
  119. package/dist/commands/cms/shared.d.ts.map +1 -0
  120. package/dist/commands/cms/shared.js +82 -0
  121. package/dist/commands/cms/shared.js.map +1 -0
  122. package/dist/commands/doctor/target.d.ts +3 -0
  123. package/dist/commands/doctor/target.d.ts.map +1 -0
  124. package/dist/commands/doctor/target.js +46 -0
  125. package/dist/commands/doctor/target.js.map +1 -0
  126. package/dist/commands/env/list.d.ts +3 -0
  127. package/dist/commands/env/list.d.ts.map +1 -0
  128. package/dist/commands/env/list.js +28 -0
  129. package/dist/commands/env/list.js.map +1 -0
  130. package/dist/commands/env/set.d.ts +3 -0
  131. package/dist/commands/env/set.d.ts.map +1 -0
  132. package/dist/commands/env/set.js +36 -0
  133. package/dist/commands/env/set.js.map +1 -0
  134. package/dist/commands/env/use.d.ts +3 -0
  135. package/dist/commands/env/use.d.ts.map +1 -0
  136. package/dist/commands/env/use.js +15 -0
  137. package/dist/commands/env/use.js.map +1 -0
  138. package/dist/commands/legacy/connect.d.ts +3 -0
  139. package/dist/commands/legacy/connect.d.ts.map +1 -0
  140. package/dist/commands/legacy/connect.js +8 -0
  141. package/dist/commands/legacy/connect.js.map +1 -0
  142. package/dist/commands/legacy/pages.d.ts +3 -0
  143. package/dist/commands/legacy/pages.d.ts.map +1 -0
  144. package/dist/commands/legacy/pages.js +16 -0
  145. package/dist/commands/legacy/pages.js.map +1 -0
  146. package/dist/commands/legacy/spread.d.ts +3 -0
  147. package/dist/commands/legacy/spread.d.ts.map +1 -0
  148. package/dist/commands/legacy/spread.js +8 -0
  149. package/dist/commands/legacy/spread.js.map +1 -0
  150. package/dist/commands/legacy/sync.d.ts +3 -0
  151. package/dist/commands/legacy/sync.d.ts.map +1 -0
  152. package/dist/commands/legacy/sync.js +8 -0
  153. package/dist/commands/legacy/sync.js.map +1 -0
  154. package/dist/config/env-diff.d.ts +10 -0
  155. package/dist/config/env-diff.d.ts.map +1 -0
  156. package/dist/config/env-diff.js +24 -0
  157. package/dist/config/env-diff.js.map +1 -0
  158. package/dist/config/env-parser.d.ts +20 -0
  159. package/dist/config/env-parser.d.ts.map +1 -0
  160. package/dist/config/env-parser.js +70 -0
  161. package/dist/config/env-parser.js.map +1 -0
  162. package/dist/config/env-writer.d.ts +22 -0
  163. package/dist/config/env-writer.d.ts.map +1 -0
  164. package/dist/config/env-writer.js +172 -0
  165. package/dist/config/env-writer.js.map +1 -0
  166. package/dist/config/profile-store.d.ts +29 -0
  167. package/dist/config/profile-store.d.ts.map +1 -0
  168. package/dist/config/profile-store.js +257 -0
  169. package/dist/config/profile-store.js.map +1 -0
  170. package/dist/core/args.d.ts +11 -0
  171. package/dist/core/args.d.ts.map +1 -0
  172. package/dist/core/args.js +106 -0
  173. package/dist/core/args.js.map +1 -0
  174. package/dist/core/colors.d.ts +6 -0
  175. package/dist/core/colors.d.ts.map +1 -0
  176. package/dist/core/colors.js +29 -0
  177. package/dist/core/colors.js.map +1 -0
  178. package/dist/safety/target-guard.d.ts +16 -0
  179. package/dist/safety/target-guard.d.ts.map +1 -0
  180. package/dist/safety/target-guard.js +55 -0
  181. package/dist/safety/target-guard.js.map +1 -0
  182. package/dist/testing/booking-smoke.d.ts +17 -0
  183. package/dist/testing/booking-smoke.d.ts.map +1 -0
  184. package/dist/testing/booking-smoke.js +43 -0
  185. package/dist/testing/booking-smoke.js.map +1 -0
  186. package/dist/tests/agent-commands.test.d.ts +2 -0
  187. package/dist/tests/agent-commands.test.d.ts.map +1 -0
  188. package/dist/tests/agent-commands.test.js +180 -0
  189. package/dist/tests/agent-commands.test.js.map +1 -0
  190. package/dist/tests/agent-governance.test.d.ts +2 -0
  191. package/dist/tests/agent-governance.test.d.ts.map +1 -0
  192. package/dist/tests/agent-governance.test.js +233 -0
  193. package/dist/tests/agent-governance.test.js.map +1 -0
  194. package/dist/tests/app-commands.test.d.ts +2 -0
  195. package/dist/tests/app-commands.test.d.ts.map +1 -0
  196. package/dist/tests/app-commands.test.js +462 -0
  197. package/dist/tests/app-commands.test.js.map +1 -0
  198. package/dist/tests/booking-commands.test.d.ts +2 -0
  199. package/dist/tests/booking-commands.test.d.ts.map +1 -0
  200. package/dist/tests/booking-commands.test.js +204 -0
  201. package/dist/tests/booking-commands.test.js.map +1 -0
  202. package/dist/tests/booking-smoke.test.d.ts +2 -0
  203. package/dist/tests/booking-smoke.test.d.ts.map +1 -0
  204. package/dist/tests/booking-smoke.test.js +183 -0
  205. package/dist/tests/booking-smoke.test.js.map +1 -0
  206. package/dist/tests/cms-commands.test.d.ts +2 -0
  207. package/dist/tests/cms-commands.test.d.ts.map +1 -0
  208. package/dist/tests/cms-commands.test.js +254 -0
  209. package/dist/tests/cms-commands.test.js.map +1 -0
  210. package/dist/tests/cms-ops.test.d.ts +2 -0
  211. package/dist/tests/cms-ops.test.d.ts.map +1 -0
  212. package/dist/tests/cms-ops.test.js +125 -0
  213. package/dist/tests/cms-ops.test.js.map +1 -0
  214. package/dist/tests/env-writer.test.d.ts +2 -0
  215. package/dist/tests/env-writer.test.d.ts.map +1 -0
  216. package/dist/tests/env-writer.test.js +90 -0
  217. package/dist/tests/env-writer.test.js.map +1 -0
  218. package/dist/tests/profile-store.test.d.ts +2 -0
  219. package/dist/tests/profile-store.test.d.ts.map +1 -0
  220. package/dist/tests/profile-store.test.js +88 -0
  221. package/dist/tests/profile-store.test.js.map +1 -0
  222. package/dist/tests/target-guard.test.d.ts +2 -0
  223. package/dist/tests/target-guard.test.d.ts.map +1 -0
  224. package/dist/tests/target-guard.test.js +132 -0
  225. package/dist/tests/target-guard.test.js.map +1 -0
  226. package/dist/ui/logo.d.ts +2 -0
  227. package/dist/ui/logo.d.ts.map +1 -0
  228. package/dist/ui/logo.js +22 -0
  229. package/dist/ui/logo.js.map +1 -0
  230. package/package.json +17 -53
  231. package/.claude/settings.local.json +0 -36
  232. package/.cursor/rules.md +0 -203
  233. package/.eslintrc.js +0 -31
  234. package/CLAUDE.md +0 -100
  235. package/bin/cli.js +0 -116
  236. package/docs/ADDING_FRAMEWORK_DETECTORS.md +0 -391
  237. package/docs/ADDING_NEW_PROJECT_TYPE.md +0 -156
  238. package/docs/ARCHITECTURE_RELATIONSHIPS.md +0 -411
  239. package/docs/CLI_AUTHENTICATION.md +0 -214
  240. package/docs/CLI_PAGE_DETECTION_REQUIREMENTS.md +0 -519
  241. package/docs/CRM-PIPELINES-SEQUENCES-SPEC.md +0 -429
  242. package/docs/DETECTOR_ARCHITECTURE.md +0 -326
  243. package/docs/DEVELOPMENT.md +0 -194
  244. package/docs/IMPLEMENTATION_PHASES.md +0 -468
  245. package/docs/INTEGRATION_PATHS_ARCHITECTURE.md +0 -1543
  246. package/docs/OAUTH_CLARIFICATION.md +0 -258
  247. package/docs/OAUTH_SETUP_GUIDE_TEMPLATE.md +0 -211
  248. package/docs/PHASE_0_PROGRESS.md +0 -120
  249. package/docs/PHASE_1_COMPLETE.md +0 -366
  250. package/docs/PHASE_SUMMARY.md +0 -149
  251. package/docs/PLAN.md +0 -511
  252. package/docs/README.md +0 -56
  253. package/docs/STRIPE_INTEGRATION.md +0 -447
  254. package/docs/SUMMARY.md +0 -230
  255. package/docs/UPDATED_PLAN.md +0 -447
  256. package/docs/mcp_server/MCP_EXTENSION_GUIDE.md +0 -1313
  257. package/docs/mcp_server/MCP_SERVER_ARCHITECTURE.md +0 -1481
  258. package/docs/mcp_server/applicationOntology.ts +0 -817
  259. package/docs/mcp_server/cliApplications.ts +0 -639
  260. package/docs/mcp_server/crmOntology.ts +0 -1063
  261. package/docs/mcp_server/eventOntology.ts +0 -1183
  262. package/docs/mcp_server/formsOntology.ts +0 -1401
  263. package/docs/mcp_server/ontologySchemas.ts +0 -185
  264. package/docs/mcp_server/schema.ts +0 -250
  265. package/docs/microsass_production_machine/CLI_API_REFERENCE.md +0 -1197
  266. package/docs/microsass_production_machine/CLI_PRODUCT_VISION.md +0 -676
  267. package/docs/microsass_production_machine/CLI_REQUIREMENTS.md +0 -606
  268. package/docs/microsass_production_machine/CONNECTED_APPLICATIONS_SPEC.md +0 -390
  269. package/docs/microsass_production_machine/IMPLEMENTATION_ROADMAP.md +0 -725
  270. package/docs/microsass_production_machine/OBJECT_MAPPINGS.md +0 -808
  271. package/docs/microsass_production_machine/REFERENCE_IMPLEMENTATION.md +0 -532
  272. package/src/api/backend-client.js +0 -449
  273. package/src/commands/api-keys.js +0 -119
  274. package/src/commands/connect.js +0 -243
  275. package/src/commands/login.js +0 -332
  276. package/src/commands/logout.js +0 -30
  277. package/src/commands/mcp-server.js +0 -85
  278. package/src/commands/mcp-setup.js +0 -686
  279. package/src/commands/pages.js +0 -317
  280. package/src/commands/scaffold.js +0 -409
  281. package/src/commands/spread.js +0 -861
  282. package/src/commands/status.js +0 -62
  283. package/src/commands/sync.js +0 -169
  284. package/src/commands/upgrade.js +0 -48
  285. package/src/config/config-manager.js +0 -206
  286. package/src/detectors/api-client-detector.js +0 -85
  287. package/src/detectors/base-detector.js +0 -77
  288. package/src/detectors/database-detector.js +0 -245
  289. package/src/detectors/expo-detector.js +0 -166
  290. package/src/detectors/github-detector.js +0 -74
  291. package/src/detectors/index.js +0 -106
  292. package/src/detectors/mapping-suggestor.js +0 -119
  293. package/src/detectors/model-detector.js +0 -318
  294. package/src/detectors/nextjs-detector.js +0 -139
  295. package/src/detectors/oauth-detector.js +0 -122
  296. package/src/detectors/page-detector.js +0 -480
  297. package/src/detectors/registry.js +0 -121
  298. package/src/generators/api-client-generator.js +0 -223
  299. package/src/generators/api-only/client.js +0 -683
  300. package/src/generators/api-only/index.js +0 -96
  301. package/src/generators/api-only/types.js +0 -618
  302. package/src/generators/api-only/webhooks.js +0 -377
  303. package/src/generators/env-generator.js +0 -191
  304. package/src/generators/expo-auth-generator.js +0 -1009
  305. package/src/generators/gitignore-generator.js +0 -92
  306. package/src/generators/index.js +0 -166
  307. package/src/generators/manifest-generator.js +0 -154
  308. package/src/generators/mcp-guide-generator.js +0 -256
  309. package/src/generators/nextauth-generator.js +0 -247
  310. package/src/generators/oauth-guide-generator.js +0 -277
  311. package/src/generators/quickstart/components/index.js +0 -1699
  312. package/src/generators/quickstart/components-mobile/index.js +0 -1440
  313. package/src/generators/quickstart/database/convex.js +0 -1257
  314. package/src/generators/quickstart/database/index.js +0 -34
  315. package/src/generators/quickstart/database/supabase.js +0 -1132
  316. package/src/generators/quickstart/hooks/index.js +0 -1065
  317. package/src/generators/quickstart/index.js +0 -191
  318. package/src/generators/quickstart/pages/index.js +0 -1466
  319. package/src/generators/quickstart/screens/index.js +0 -1498
  320. package/src/logo.js +0 -116
  321. package/src/mcp/auth.js +0 -127
  322. package/src/mcp/registry/domains/applications.js +0 -516
  323. package/src/mcp/registry/domains/benefits.js +0 -798
  324. package/src/mcp/registry/domains/codegen.js +0 -894
  325. package/src/mcp/registry/domains/core.js +0 -324
  326. package/src/mcp/registry/domains/crm.js +0 -591
  327. package/src/mcp/registry/domains/events.js +0 -649
  328. package/src/mcp/registry/domains/forms.js +0 -696
  329. package/src/mcp/registry/index.js +0 -164
  330. package/src/mcp/server.js +0 -116
  331. package/src/utils/file-utils.js +0 -117
  332. package/src/utils/init-helpers.js +0 -243
  333. package/src/utils/prompt-utils.js +0 -195
  334. package/templates/CLAUDE.md +0 -86
  335. package/tests/api-client-detector.test.js +0 -214
  336. package/tests/api-client-generator.test.js +0 -176
  337. package/tests/backend-client.test.js +0 -640
  338. package/tests/base-detector.test.js +0 -101
  339. package/tests/commands/login.test.js +0 -143
  340. package/tests/commands/logout.test.js +0 -84
  341. package/tests/commands/status.test.js +0 -167
  342. package/tests/config-manager.test.js +0 -321
  343. package/tests/database-detector.test.js +0 -221
  344. package/tests/detector-index.test.js +0 -209
  345. package/tests/detector-registry.test.js +0 -93
  346. package/tests/env-generator.test.js +0 -278
  347. package/tests/expo-detector.test.js +0 -263
  348. package/tests/file-utils.test.js +0 -194
  349. package/tests/generators-index.test.js +0 -454
  350. package/tests/github-detector.test.js +0 -145
  351. package/tests/gitignore-generator.test.js +0 -109
  352. package/tests/logo.test.js +0 -96
  353. package/tests/nextauth-generator.test.js +0 -255
  354. package/tests/nextjs-detector.test.js +0 -235
  355. package/tests/oauth-detector.test.js +0 -264
  356. package/tests/oauth-guide-generator.test.js +0 -273
  357. package/tests/page-detector.test.js +0 -371
@@ -1,532 +0,0 @@
1
- # L4YERCAK3 CLI - Reference Implementation Analysis
2
-
3
- **Source:** HaffNet L4YerCak3 Frontend (`/.kiro/haffnet-l4yercak3/`)
4
-
5
- This document analyzes the real-world HaffNet integration to inform CLI code generation.
6
-
7
- ---
8
-
9
- ## Overview
10
-
11
- HaffNet is a **medical education platform** (CME courses) built on:
12
- - **Next.js 16** + TypeScript
13
- - **Convex** (frontend real-time database + auth)
14
- - **L4YERCAK3 Backend** (CRM, events, checkout, invoicing)
15
-
16
- This is the **gold standard** for how external apps should connect to L4YERCAK3.
17
-
18
- ---
19
-
20
- ## Architecture Pattern: Dual Database
21
-
22
- ### The Key Insight
23
-
24
- HaffNet uses **TWO databases**:
25
-
26
- 1. **Convex (Frontend)** - Fast, real-time, local to the app
27
- - User authentication (sessions, passwords)
28
- - CMS content (page configs, checkout instances)
29
- - Local user profiles
30
-
31
- 2. **L4YERCAK3 Backend** - Business logic, shared data
32
- - CRM contacts
33
- - Events & products
34
- - Checkout & transactions
35
- - Invoicing
36
- - Workflows
37
-
38
- ### Why This Pattern?
39
-
40
- | Concern | Convex (Frontend) | L4YERCAK3 (Backend) |
41
- |---------|-------------------|---------------------|
42
- | **Auth speed** | ✅ < 50ms | ❌ ~200ms |
43
- | **Real-time** | ✅ Native | ❌ Polling |
44
- | **CRM data** | ❌ Duplication | ✅ Source of truth |
45
- | **Business logic** | ❌ None | ✅ Workflows |
46
- | **Invoicing** | ❌ None | ✅ Full system |
47
- | **Multi-app sharing** | ❌ Isolated | ✅ Central |
48
-
49
- ### User Sync Pattern
50
-
51
- ```typescript
52
- // STEP 1: Create Convex auth user (fast)
53
- const convexUser = await convexAuth.register({
54
- email, password, firstName, lastName
55
- });
56
-
57
- // STEP 2: Create Backend user (links to CRM)
58
- const backendUser = await userApi.registerUser({
59
- email, firstName, lastName,
60
- convexUserId: convexUser._id // Link for sync
61
- });
62
-
63
- // Result: User exists in both systems, linked by IDs
64
- // convexUser._id ↔ backendUser.frontendUserId
65
- // backendUser.crmContactId → CRM contact
66
- ```
67
-
68
- ---
69
-
70
- ## API Client Structure
71
-
72
- The CLI should generate an API client similar to HaffNet's `src/lib/api-client.ts`:
73
-
74
- ### Core Pattern
75
-
76
- ```typescript
77
- // Environment variables
78
- const API_URL = process.env.NEXT_PUBLIC_API_URL;
79
- const API_KEY = process.env.NEXT_PUBLIC_API_KEY;
80
- const ORG_ID = process.env.NEXT_PUBLIC_ORG_ID;
81
-
82
- // Base fetch wrapper
83
- async function apiFetch<T>(endpoint: string, options: RequestInit = {}): Promise<T> {
84
- const response = await fetch(`${API_URL}${endpoint}`, {
85
- ...options,
86
- headers: {
87
- 'Content-Type': 'application/json',
88
- 'Authorization': `Bearer ${API_KEY}`,
89
- ...options.headers,
90
- },
91
- });
92
-
93
- if (!response.ok) {
94
- const error = await response.json();
95
- throw new Error(error.message || `API Error: ${response.status}`);
96
- }
97
-
98
- return response.json();
99
- }
100
- ```
101
-
102
- ### Module Organization
103
-
104
- ```typescript
105
- // Event API
106
- export const eventApi = {
107
- getEvents(params?: { status?, upcoming?, limit? }),
108
- getEvent(eventId: string),
109
- getEventProducts(eventId: string),
110
- };
111
-
112
- // Form API
113
- export const formApi = {
114
- getPublicForm(formId: string),
115
- submitForm({ formId, responses, metadata }),
116
- };
117
-
118
- // Checkout API (main registration flow)
119
- export const checkoutApi = {
120
- submitRegistration(data: RegistrationInput, checkoutInstanceId: string),
121
- };
122
-
123
- // Ticket API
124
- export const ticketApi = {
125
- getTicket(ticketId: string),
126
- verifyTicket(ticketId: string),
127
- };
128
-
129
- // Transaction API
130
- export const transactionApi = {
131
- getTransaction(transactionId: string),
132
- getTicketByTransaction(transactionId: string),
133
- };
134
-
135
- // User API (sync with Backend)
136
- export const userApi = {
137
- registerUser(userData: {
138
- email, firstName, lastName, convexUserId
139
- }),
140
- };
141
- ```
142
-
143
- ---
144
-
145
- ## Universal Event Pattern
146
-
147
- The most important pattern from HaffNet is the **workflow trigger API**:
148
-
149
- ```typescript
150
- POST /api/v1/workflows/trigger
151
- Authorization: Bearer {API_KEY}
152
-
153
- {
154
- "trigger": "registration_complete",
155
- "inputData": {
156
- "eventType": "seminar_registration",
157
- "source": "haffnet_website",
158
- "eventId": "event_xxx",
159
-
160
- "customerData": {
161
- "email": "user@example.com",
162
- "firstName": "John",
163
- "lastName": "Doe",
164
- "phone": "+49123456789",
165
- "organization": "Hospital Name"
166
- },
167
-
168
- "formResponses": {
169
- "specialty": "Cardiology",
170
- "dietary_requirements": "vegetarian"
171
- },
172
-
173
- "transactionData": {
174
- "productId": "product_xxx",
175
- "price": 0,
176
- "currency": "EUR"
177
- }
178
- }
179
- }
180
- ```
181
-
182
- **Response:**
183
- ```typescript
184
- {
185
- "success": true,
186
- "ticketId": "ticket_xxx",
187
- "invoiceId": "invoice_xxx",
188
- "crmContactId": "contact_xxx",
189
- "frontendUserId": "user_xxx",
190
- "isGuestRegistration": true,
191
- "downloadUrls": {
192
- "tickets": "https://...",
193
- "invoice": "https://..."
194
- }
195
- }
196
- ```
197
-
198
- ---
199
-
200
- ## Type Definitions to Generate
201
-
202
- ### Event Type
203
- ```typescript
204
- interface Event {
205
- id: string;
206
- name: string;
207
- description?: string;
208
- subtype: string; // "symposium", "workshop", etc.
209
- status: string; // "draft", "published", "completed"
210
-
211
- // Flattened from customProperties
212
- startDate?: number;
213
- endDate?: number;
214
- location?: string;
215
- capacity?: number;
216
- registrations?: number;
217
- registrationFormId?: string;
218
- checkoutInstanceId?: string;
219
- agenda?: AgendaItem[];
220
-
221
- // Legacy nested format
222
- customProperties?: {
223
- startDate?: number;
224
- endDate?: number;
225
- location?: string;
226
- venue?: string;
227
- address?: Address;
228
- registration?: {
229
- enabled: boolean;
230
- openDate: number;
231
- closeDate: number;
232
- };
233
- };
234
- }
235
- ```
236
-
237
- ### Product Type
238
- ```typescript
239
- interface Product {
240
- id: string;
241
- name: string;
242
- description: string;
243
- type: string;
244
- subtype: string;
245
- status: string;
246
- customProperties: {
247
- price: number;
248
- currency: string;
249
- sold: number;
250
- categoryCode: string;
251
- categoryLabel: string;
252
- invoiceConfig?: {
253
- employerSourceField: string;
254
- employerMapping: Record<string, string>;
255
- defaultPaymentTerms: string;
256
- };
257
- addons: ProductAddon[];
258
- };
259
- }
260
- ```
261
-
262
- ### Registration Input
263
- ```typescript
264
- interface RegistrationInput {
265
- eventId: string;
266
- formId: string;
267
-
268
- products: Array<{
269
- productId: string;
270
- quantity: number;
271
- }>;
272
-
273
- customerData: {
274
- email: string;
275
- firstName: string;
276
- lastName: string;
277
- phone?: string;
278
- salutation?: string;
279
- title?: string;
280
- organization?: string;
281
- };
282
-
283
- formResponses: Record<string, unknown>;
284
-
285
- transactionData: {
286
- currency: string;
287
- breakdown: {
288
- basePrice: number;
289
- addons?: Array<{
290
- id: string;
291
- name: string;
292
- quantity: number;
293
- pricePerUnit: number;
294
- total: number;
295
- }>;
296
- subtotal: number;
297
- tax?: number;
298
- total: number;
299
- };
300
- };
301
-
302
- metadata?: {
303
- source: string;
304
- ipAddress?: string;
305
- userAgent?: string;
306
- };
307
- }
308
- ```
309
-
310
- ---
311
-
312
- ## Files CLI Should Generate
313
-
314
- Based on HaffNet, the CLI `spread` command should generate:
315
-
316
- ### 1. API Client (`src/lib/layercake.ts`)
317
- ```
318
- - Base fetch wrapper with auth
319
- - Event API module
320
- - Form API module
321
- - Checkout API module
322
- - Ticket API module
323
- - Transaction API module
324
- - User API module (if auth feature selected)
325
- - Full TypeScript types
326
- ```
327
-
328
- ### 2. Environment File (`.env.local`)
329
- ```bash
330
- # L4YERCAK3 Backend
331
- NEXT_PUBLIC_API_URL=https://agreeable-lion-828.convex.site/api/v1
332
- NEXT_PUBLIC_API_KEY=org_xxx_yyy
333
- NEXT_PUBLIC_ORG_ID=xxx
334
-
335
- # Optional: Convex (if dual-db pattern)
336
- NEXT_PUBLIC_CONVEX_URL=https://xxx.convex.cloud
337
- CONVEX_DEPLOYMENT=dev:xxx
338
- ```
339
-
340
- ### 3. Auth Integration (`src/lib/layercake-auth.ts`)
341
- ```typescript
342
- // Only if OAuth feature selected
343
- // User sync between frontend auth and Backend CRM
344
- ```
345
-
346
- ### 4. Hooks (`src/hooks/useLayercake.ts`)
347
- ```typescript
348
- // React hooks for common operations
349
- useEvents()
350
- useEvent(id)
351
- useCheckout()
352
- ```
353
-
354
- ### 5. Types (`src/types/layercake.ts`)
355
- ```typescript
356
- // All type definitions
357
- Event, Product, Ticket, Transaction, Form, etc.
358
- ```
359
-
360
- ---
361
-
362
- ## Feature Flags from HaffNet
363
-
364
- Features that can be enabled/disabled:
365
-
366
- | Feature | Files Generated |
367
- |---------|-----------------|
368
- | **events** | Event API, Event types |
369
- | **forms** | Form API, Form types |
370
- | **checkout** | Checkout API, Registration types |
371
- | **tickets** | Ticket API, Ticket types |
372
- | **invoicing** | Invoice types (accessed via checkout) |
373
- | **user-sync** | User API, Auth sync hooks |
374
- | **crm** | Contact API, CRM types |
375
-
376
- ---
377
-
378
- ## Convex CMS Pattern
379
-
380
- HaffNet uses Convex for CMS content. The CLI could generate:
381
-
382
- ### convex-client.ts
383
- ```typescript
384
- import { useQuery } from 'convex/react';
385
- import { api } from '@convex/_generated/api';
386
-
387
- /**
388
- * Get published page content from CMS
389
- */
390
- export async function getPageContent(orgSlug: string, pagePath: string) {
391
- // Fetch from Convex CMS
392
- }
393
-
394
- /**
395
- * Extract checkout instance ID from page content
396
- */
397
- export function getCheckoutInstanceId(pageContent: PageContent): string | null {
398
- return pageContent?.content?.checkout?.checkoutInstanceId || null;
399
- }
400
-
401
- /**
402
- * Check if page has checkout configured
403
- */
404
- export function hasCheckoutConfigured(pageContent: PageContent): boolean {
405
- return !!getCheckoutInstanceId(pageContent);
406
- }
407
- ```
408
-
409
- ---
410
-
411
- ## Error Handling Patterns
412
-
413
- From HaffNet:
414
-
415
- ```typescript
416
- // API Error class
417
- export class ApiError extends Error {
418
- constructor(
419
- message: string,
420
- public code?: string,
421
- public errors?: Array<{ field: string; message: string }>
422
- ) {
423
- super(message);
424
- this.name = 'ApiError';
425
- }
426
- }
427
-
428
- // Response handling
429
- async function apiFetch<T>(endpoint: string, options: RequestInit = {}): Promise<T> {
430
- // Check content type before parsing
431
- const contentType = response.headers.get('content-type');
432
- const isJson = contentType?.includes('application/json');
433
-
434
- if (!response.ok) {
435
- if (isJson) {
436
- const errorData = await response.json();
437
- throw new Error(errorData.message || `API Error: ${response.status}`);
438
- } else {
439
- const errorText = await response.text();
440
- console.error('API Error Response (non-JSON):', errorText.substring(0, 500));
441
- throw new Error(`API Error: ${response.status}`);
442
- }
443
- }
444
-
445
- if (!isJson) {
446
- throw new Error('API returned non-JSON response');
447
- }
448
-
449
- return response.json();
450
- }
451
- ```
452
-
453
- ---
454
-
455
- ## Security Practices
456
-
457
- From HaffNet:
458
-
459
- 1. **API key in server-side only**
460
- - Use `NEXT_PUBLIC_` prefix carefully
461
- - Server actions for sensitive operations
462
-
463
- 2. **Honeypot spam protection**
464
- ```typescript
465
- body: JSON.stringify({
466
- responses: data.responses,
467
- bot_trap: '', // Must be empty for legitimate submissions
468
- })
469
- ```
470
-
471
- 3. **Rate limiting awareness**
472
- - Document: 5 submissions/hour per IP for public forms
473
-
474
- 4. **Input validation**
475
- - Zod schemas before API calls
476
- - Field-level error messages
477
-
478
- ---
479
-
480
- ## Documentation Structure
481
-
482
- HaffNet has 25+ documentation files. Key ones:
483
-
484
- | Document | Purpose |
485
- |----------|---------|
486
- | `README.md` | Overview & navigation |
487
- | `QUICK_REFERENCE.md` | One-page cheat sheet |
488
- | `API_SPECIFICATION.md` | Complete API reference |
489
- | `UNIVERSAL_EVENT_PAYLOAD.md` | Event structure |
490
- | `FRONTEND_INTEGRATION.md` | Code examples |
491
- | `USER_SYNC_ARCHITECTURE.md` | Dual-DB pattern |
492
-
493
- **CLI should generate similar docs for each project.**
494
-
495
- ---
496
-
497
- ## CLI Generation Templates
498
-
499
- Based on HaffNet, create templates:
500
-
501
- ### Template: `api-client.template.ts`
502
- Full API client with all modules
503
-
504
- ### Template: `types.template.ts`
505
- All TypeScript type definitions
506
-
507
- ### Template: `hooks.template.ts`
508
- React hooks for data fetching
509
-
510
- ### Template: `auth-sync.template.ts`
511
- User sync between auth systems
512
-
513
- ### Template: `README.template.md`
514
- Project-specific documentation
515
-
516
- ---
517
-
518
- ## Summary: What CLI Should Do
519
-
520
- 1. **Detect** existing project structure (Next.js, Convex, etc.)
521
- 2. **Ask** which features to enable (events, forms, checkout, etc.)
522
- 3. **Generate** API client with only needed modules
523
- 4. **Generate** TypeScript types for enabled features
524
- 5. **Generate** hooks for common operations
525
- 6. **Generate** auth sync if user-sync enabled
526
- 7. **Create** environment template
527
- 8. **Create** documentation for the integration
528
- 9. **Register** the connection in L4YERCAK3 backend
529
-
530
- ---
531
-
532
- *This analysis based on production code from HaffNet L4YerCak3 Frontend*