@nebulit/embuilder 0.1.39

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 (212) hide show
  1. package/README.md +254 -0
  2. package/dist/cli.d.ts +2 -0
  3. package/dist/cli.js +138 -0
  4. package/package.json +49 -0
  5. package/templates/.claude/hooks/QUICKSTART.md +256 -0
  6. package/templates/.claude/hooks/README.md +533 -0
  7. package/templates/.claude/hooks/analyze-commit.sh +22 -0
  8. package/templates/.claude/hooks/analyze-commit.ts +518 -0
  9. package/templates/.claude/hooks/analyzers/README.md +198 -0
  10. package/templates/.claude/hooks/analyzers/code-quality-checker.ts +154 -0
  11. package/templates/.claude/hooks/analyzers/code-quality.md +54 -0
  12. package/templates/.claude/hooks/analyzers/commit-blocker-example.ts.disabled +110 -0
  13. package/templates/.claude/hooks/analyzers/commit-policy.md +49 -0
  14. package/templates/.claude/hooks/analyzers/event-model-validator.md +49 -0
  15. package/templates/.claude/hooks/analyzers/event-model-validator.ts +169 -0
  16. package/templates/.claude/hooks/analyzers/example-logger.ts +70 -0
  17. package/templates/.claude/hooks/analyzers/slice-scope-validator.md +81 -0
  18. package/templates/.claude/hooks/check-review-result.sh +47 -0
  19. package/templates/.claude/hooks/prepare-review.sh +34 -0
  20. package/templates/.claude/hooks/review-agent-prompt.md +42 -0
  21. package/templates/.claude/hooks/run-review-agent.sh +124 -0
  22. package/templates/.claude/settings.local.json +37 -0
  23. package/templates/.claude/skills/help/README.md +84 -0
  24. package/templates/.claude/skills/help/SKILL.md +393 -0
  25. package/templates/.claude/skills/help/templates/demo-config.json +6753 -0
  26. package/templates/.claude/skills/sample-slices/SKILL.md +8 -0
  27. package/templates/.claude/skills/sample-slices/templates/.slices/Library/addbook/code-slice.json +124 -0
  28. package/templates/.claude/skills/sample-slices/templates/.slices/Library/addbook/slice.json +255 -0
  29. package/templates/.claude/skills/sample-slices/templates/.slices/Library/availablebooks/slice.json +107 -0
  30. package/templates/.claude/skills/sample-slices/templates/.slices/index.json +20 -0
  31. package/templates/.claude/skills/sample-slices/templates/Cart/additem/slice.json +979 -0
  32. package/templates/.claude/skills/sample-slices/templates/Cart/archiveitem/slice.json +529 -0
  33. package/templates/.claude/skills/sample-slices/templates/Cart/cartitems/slice.json +1072 -0
  34. package/templates/.claude/skills/sample-slices/templates/Cart/cartwithproducts/slice.json +394 -0
  35. package/templates/.claude/skills/sample-slices/templates/Cart/changedprices/slice.json +88 -0
  36. package/templates/.claude/skills/sample-slices/templates/Cart/changeinventory/slice.json +264 -0
  37. package/templates/.claude/skills/sample-slices/templates/Cart/changeprice/slice.json +308 -0
  38. package/templates/.claude/skills/sample-slices/templates/Cart/clearcart/slice.json +358 -0
  39. package/templates/.claude/skills/sample-slices/templates/Cart/inventories/slice.json +203 -0
  40. package/templates/.claude/skills/sample-slices/templates/Cart/publishcart/slice.json +876 -0
  41. package/templates/.claude/skills/sample-slices/templates/Cart/removeitem/slice.json +560 -0
  42. package/templates/.claude/skills/sample-slices/templates/Cart/submitcart/slice.json +708 -0
  43. package/templates/.claude/skills/sample-slices/templates/Cart/submittedcartdata/slice.json +399 -0
  44. package/templates/.claude/skills/sample-slices/templates/index.json +108 -0
  45. package/templates/.claude/skills/slice-automation/SKILL.md +49 -0
  46. package/templates/.claude/skills/slice-state-change/SKILL.md +369 -0
  47. package/templates/.claude/skills/slice-state-change/templates/AddLocation/AddLocation.test.ts.sample +76 -0
  48. package/templates/.claude/skills/slice-state-change/templates/AddLocation/AddLocationCommand.ts.sample +84 -0
  49. package/templates/.claude/skills/slice-state-change/templates/AddLocation/routes.ts.sample +73 -0
  50. package/templates/.claude/skills/slice-state-change/templates/README.md +46 -0
  51. package/templates/.claude/skills/slice-state-view/SKILL.md +336 -0
  52. package/templates/.claude/skills/slice-state-view/templates/Locations/Locations.test.ts.sample +84 -0
  53. package/templates/.claude/skills/slice-state-view/templates/Locations/LocationsProjection.ts.sample +50 -0
  54. package/templates/.claude/skills/slice-state-view/templates/Locations/routes.ts.sample +46 -0
  55. package/templates/.claude/skills/slice-state-view/templates/README.md +109 -0
  56. package/templates/.claude/skills/slice-state-view/templates/Tables/Tables.test.ts.sample +104 -0
  57. package/templates/.claude/skills/slice-state-view/templates/Tables/TablesProjection.ts.sample +59 -0
  58. package/templates/.claude/skills/slice-state-view/templates/Tables/routes.ts.sample +46 -0
  59. package/templates/.claude/skills/slice-state-view/templates/V2__tables.sql +7 -0
  60. package/templates/.claude/skills/slice-state-view/templates/V8__locations.sql +7 -0
  61. package/templates/.claude/skills/test-analyzer/SKILL.md +373 -0
  62. package/templates/.claude/skills/test-analyzer/examples/specification-format.md +143 -0
  63. package/templates/.claude/skills/test-analyzer/examples/state-change-example.md +111 -0
  64. package/templates/.claude/skills/test-analyzer/examples/state-view-example.md +122 -0
  65. package/templates/AGENTS.md +110 -0
  66. package/templates/Claude.md +58 -0
  67. package/templates/README.md +178 -0
  68. package/templates/backend/.env +9 -0
  69. package/templates/backend/BACKEND_AUTH_SETUP.md +183 -0
  70. package/templates/backend/SWAGGER.md +213 -0
  71. package/templates/backend/eslint.config.mjs +31 -0
  72. package/templates/backend/flyway.conf +17 -0
  73. package/templates/backend/package.json +44 -0
  74. package/templates/backend/prd.json.example +64 -0
  75. package/templates/backend/public/assets/images/banner.png +0 -0
  76. package/templates/backend/public/assets/logo.png +0 -0
  77. package/templates/backend/public/file.svg +4 -0
  78. package/templates/backend/public/globe.svg +12 -0
  79. package/templates/backend/public/next.svg +6 -0
  80. package/templates/backend/public/vercel.svg +3 -0
  81. package/templates/backend/public/window.svg +5 -0
  82. package/templates/backend/server.ts +129 -0
  83. package/templates/backend/setup-env.sh +50 -0
  84. package/templates/backend/src/common/assertions.ts +6 -0
  85. package/templates/backend/src/common/db.ts +1 -0
  86. package/templates/backend/src/common/loadPostgresEventstore.ts +16 -0
  87. package/templates/backend/src/common/parseEndpoint.ts +51 -0
  88. package/templates/backend/src/common/replay.ts +9 -0
  89. package/templates/backend/src/common/routes.ts +19 -0
  90. package/templates/backend/src/common/testHelpers.ts +53 -0
  91. package/templates/backend/src/core/readmodel.ts +28 -0
  92. package/templates/backend/src/core/types.ts +26 -0
  93. package/templates/backend/src/process/process.ts +53 -0
  94. package/templates/backend/src/supabase/LoginHandler.ts +36 -0
  95. package/templates/backend/src/supabase/ProtectedPageProps.ts +21 -0
  96. package/templates/backend/src/supabase/README.md +171 -0
  97. package/templates/backend/src/supabase/api.ts +63 -0
  98. package/templates/backend/src/supabase/authMiddleware.ts +53 -0
  99. package/templates/backend/src/supabase/component.ts +12 -0
  100. package/templates/backend/src/supabase/requireUser.ts +72 -0
  101. package/templates/backend/src/supabase/serverProps.ts +25 -0
  102. package/templates/backend/src/supabase/staticProps.ts +10 -0
  103. package/templates/backend/src/swagger.ts +34 -0
  104. package/templates/backend/src/util/assertions.ts +6 -0
  105. package/templates/backend/supabase/config.toml +295 -0
  106. package/templates/backend/supabase/migrations/20260121155918593_catalogentries.sql.sample +23 -0
  107. package/templates/backend/supabase/seed.sql +1 -0
  108. package/templates/backend/tsconfig.json +31 -0
  109. package/templates/frontend/.env.development +3 -0
  110. package/templates/frontend/AGENTS.md +7 -0
  111. package/templates/frontend/README.md +73 -0
  112. package/templates/frontend/components.json +20 -0
  113. package/templates/frontend/eslint.config.js +26 -0
  114. package/templates/frontend/index.html +18 -0
  115. package/templates/frontend/package-lock.json +8347 -0
  116. package/templates/frontend/package.json +94 -0
  117. package/templates/frontend/postcss.config.js +6 -0
  118. package/templates/frontend/public/favicon.ico +0 -0
  119. package/templates/frontend/public/logo.png +0 -0
  120. package/templates/frontend/public/placeholder.svg +1 -0
  121. package/templates/frontend/public/robots.txt +14 -0
  122. package/templates/frontend/src/App.css +42 -0
  123. package/templates/frontend/src/App.tsx +47 -0
  124. package/templates/frontend/src/components/NavLink.tsx +28 -0
  125. package/templates/frontend/src/components/ProtectedRoute.tsx +24 -0
  126. package/templates/frontend/src/components/calendar/Calendar.tsx +302 -0
  127. package/templates/frontend/src/components/layout/DashboardLayout.tsx +21 -0
  128. package/templates/frontend/src/components/layout/Header.tsx +45 -0
  129. package/templates/frontend/src/components/layout/Sidebar.tsx +82 -0
  130. package/templates/frontend/src/components/tables/ReservationTemplates.tsx +189 -0
  131. package/templates/frontend/src/components/ui/accordion.tsx +52 -0
  132. package/templates/frontend/src/components/ui/alert-dialog.tsx +104 -0
  133. package/templates/frontend/src/components/ui/alert.tsx +43 -0
  134. package/templates/frontend/src/components/ui/aspect-ratio.tsx +5 -0
  135. package/templates/frontend/src/components/ui/avatar.tsx +38 -0
  136. package/templates/frontend/src/components/ui/badge.tsx +29 -0
  137. package/templates/frontend/src/components/ui/breadcrumb.tsx +90 -0
  138. package/templates/frontend/src/components/ui/button.tsx +47 -0
  139. package/templates/frontend/src/components/ui/calendar.tsx +54 -0
  140. package/templates/frontend/src/components/ui/card.tsx +43 -0
  141. package/templates/frontend/src/components/ui/carousel.tsx +224 -0
  142. package/templates/frontend/src/components/ui/chart.tsx +303 -0
  143. package/templates/frontend/src/components/ui/checkbox.tsx +26 -0
  144. package/templates/frontend/src/components/ui/collapsible.tsx +9 -0
  145. package/templates/frontend/src/components/ui/command.tsx +132 -0
  146. package/templates/frontend/src/components/ui/context-menu.tsx +178 -0
  147. package/templates/frontend/src/components/ui/dialog.tsx +95 -0
  148. package/templates/frontend/src/components/ui/drawer.tsx +87 -0
  149. package/templates/frontend/src/components/ui/dropdown-menu.tsx +179 -0
  150. package/templates/frontend/src/components/ui/form.tsx +129 -0
  151. package/templates/frontend/src/components/ui/hover-card.tsx +27 -0
  152. package/templates/frontend/src/components/ui/input-otp.tsx +61 -0
  153. package/templates/frontend/src/components/ui/input.tsx +22 -0
  154. package/templates/frontend/src/components/ui/label.tsx +17 -0
  155. package/templates/frontend/src/components/ui/menubar.tsx +207 -0
  156. package/templates/frontend/src/components/ui/navigation-menu.tsx +120 -0
  157. package/templates/frontend/src/components/ui/pagination.tsx +81 -0
  158. package/templates/frontend/src/components/ui/popover.tsx +29 -0
  159. package/templates/frontend/src/components/ui/progress.tsx +23 -0
  160. package/templates/frontend/src/components/ui/radio-group.tsx +36 -0
  161. package/templates/frontend/src/components/ui/resizable.tsx +37 -0
  162. package/templates/frontend/src/components/ui/scroll-area.tsx +38 -0
  163. package/templates/frontend/src/components/ui/select.tsx +143 -0
  164. package/templates/frontend/src/components/ui/separator.tsx +20 -0
  165. package/templates/frontend/src/components/ui/sheet.tsx +107 -0
  166. package/templates/frontend/src/components/ui/sidebar.tsx +637 -0
  167. package/templates/frontend/src/components/ui/skeleton.tsx +7 -0
  168. package/templates/frontend/src/components/ui/slider.tsx +23 -0
  169. package/templates/frontend/src/components/ui/sonner.tsx +27 -0
  170. package/templates/frontend/src/components/ui/stat-card.tsx +44 -0
  171. package/templates/frontend/src/components/ui/switch.tsx +27 -0
  172. package/templates/frontend/src/components/ui/table.tsx +72 -0
  173. package/templates/frontend/src/components/ui/tabs.tsx +53 -0
  174. package/templates/frontend/src/components/ui/textarea.tsx +21 -0
  175. package/templates/frontend/src/components/ui/toast.tsx +111 -0
  176. package/templates/frontend/src/components/ui/toaster.tsx +24 -0
  177. package/templates/frontend/src/components/ui/toggle-group.tsx +49 -0
  178. package/templates/frontend/src/components/ui/toggle.tsx +37 -0
  179. package/templates/frontend/src/components/ui/tooltip.tsx +28 -0
  180. package/templates/frontend/src/components/ui/use-toast.ts +3 -0
  181. package/templates/frontend/src/contexts/AuthContext.tsx +94 -0
  182. package/templates/frontend/src/contexts/RefreshContext.tsx +236 -0
  183. package/templates/frontend/src/hooks/api/index.ts +2 -0
  184. package/templates/frontend/src/hooks/api/useLocations.ts +15 -0
  185. package/templates/frontend/src/hooks/use-mobile.tsx +19 -0
  186. package/templates/frontend/src/hooks/use-toast.ts +186 -0
  187. package/templates/frontend/src/hooks/useApiContext.ts +11 -0
  188. package/templates/frontend/src/index.css +118 -0
  189. package/templates/frontend/src/integrations/supabase/client.ts +9 -0
  190. package/templates/frontend/src/lib/api-client.ts +136 -0
  191. package/templates/frontend/src/lib/api.ts +1028 -0
  192. package/templates/frontend/src/lib/utils.ts +6 -0
  193. package/templates/frontend/src/main.tsx +5 -0
  194. package/templates/frontend/src/pages/Auth.tsx +408 -0
  195. package/templates/frontend/src/pages/Dashboard.tsx +168 -0
  196. package/templates/frontend/src/pages/Menus.tsx +224 -0
  197. package/templates/frontend/src/pages/NotFound.tsx +24 -0
  198. package/templates/frontend/src/pages/Register.tsx +285 -0
  199. package/templates/frontend/src/test/example.test.ts +0 -0
  200. package/templates/frontend/src/test/setup.ts +15 -0
  201. package/templates/frontend/src/types/index.ts +8 -0
  202. package/templates/frontend/src/vite-env.d.ts +1 -0
  203. package/templates/frontend/tailwind.config.ts +101 -0
  204. package/templates/frontend/tsconfig.app.json +31 -0
  205. package/templates/frontend/tsconfig.json +16 -0
  206. package/templates/frontend/tsconfig.node.json +22 -0
  207. package/templates/frontend/vite.config.ts +21 -0
  208. package/templates/frontend/vitest.config.ts +16 -0
  209. package/templates/init.sh +1 -0
  210. package/templates/prompt.md +139 -0
  211. package/templates/ralph.sh +120 -0
  212. package/templates/server.mjs +505 -0
@@ -0,0 +1,399 @@
1
+ {
2
+ "id": "3458764596112606680",
3
+ "status": "Done",
4
+ "title": "slice: submitted cart data",
5
+ "context": "Cart",
6
+ "sliceType": "STATE_VIEW",
7
+ "commands": [],
8
+ "events": [],
9
+ "readmodels": [
10
+ {
11
+ "id": "3458764596111217572",
12
+ "tags": [],
13
+ "domain": "Cart",
14
+ "elementContext": "INTERNAL",
15
+ "modelContext": "Cart",
16
+ "context": "INTERNAL",
17
+ "slice": "slice: submitted cart data",
18
+ "title": "Submitted Cart Data",
19
+ "fields": [
20
+ {
21
+ "name": "aggregateId",
22
+ "type": "UUID",
23
+ "example": "",
24
+ "mapping": "",
25
+ "optional": false,
26
+ "cardinality": "Single",
27
+ "idAttribute": false
28
+ },
29
+ {
30
+ "name": "orderedProducts",
31
+ "type": "Custom",
32
+ "example": "productId, price",
33
+ "mapping": "",
34
+ "optional": false,
35
+ "cardinality": "List",
36
+ "idAttribute": false
37
+ },
38
+ {
39
+ "name": "totalPrice",
40
+ "type": "Double",
41
+ "example": "",
42
+ "mapping": "orderedProducts",
43
+ "optional": false,
44
+ "cardinality": "Single",
45
+ "idAttribute": false
46
+ }
47
+ ],
48
+ "type": "READMODEL",
49
+ "description": "",
50
+ "aggregate": "Cart",
51
+ "aggregateDependencies": [
52
+ "Cart"
53
+ ],
54
+ "dependencies": [
55
+ {
56
+ "id": "3458764596112734108",
57
+ "type": "OUTBOUND",
58
+ "title": "automation",
59
+ "elementType": "AUTOMATION"
60
+ },
61
+ {
62
+ "id": "3458764595641022547",
63
+ "type": "INBOUND",
64
+ "title": "Cart Submitted",
65
+ "elementType": "EVENT"
66
+ }
67
+ ],
68
+ "apiEndpoint": "",
69
+ "createsAggregate": false,
70
+ "triggers": [],
71
+ "sketched": false,
72
+ "prototype": {
73
+ "activeByDefault": false
74
+ }
75
+ }
76
+ ],
77
+ "screens": [],
78
+ "screenImages": [],
79
+ "screenLayouts": [],
80
+ "processors": [],
81
+ "tables": [],
82
+ "specifications": [
83
+ {
84
+ "vertical": false,
85
+ "id": "3458764598754654370",
86
+ "sliceName": "slice: submitted cart data",
87
+ "title": "spec: empty submitted cart data",
88
+ "given": [
89
+ {
90
+ "title": "Item Added",
91
+ "tags": [],
92
+ "id": "3458764598754654373",
93
+ "index": 1,
94
+ "type": "SPEC_EVENT",
95
+ "fields": [
96
+ {
97
+ "name": "aggregateId",
98
+ "type": "UUID",
99
+ "example": "",
100
+ "mapping": "",
101
+ "optional": false,
102
+ "cardinality": "Single",
103
+ "subfields": []
104
+ },
105
+ {
106
+ "name": "description",
107
+ "type": "String",
108
+ "example": "",
109
+ "mapping": "",
110
+ "optional": false,
111
+ "cardinality": "Single",
112
+ "subfields": []
113
+ },
114
+ {
115
+ "name": "image",
116
+ "type": "String",
117
+ "example": "",
118
+ "mapping": "",
119
+ "optional": false,
120
+ "cardinality": "Single",
121
+ "subfields": []
122
+ },
123
+ {
124
+ "name": "price",
125
+ "type": "Double",
126
+ "example": "",
127
+ "mapping": "",
128
+ "optional": false,
129
+ "cardinality": "Single",
130
+ "subfields": []
131
+ },
132
+ {
133
+ "name": "itemId",
134
+ "type": "UUID",
135
+ "example": "",
136
+ "mapping": "",
137
+ "optional": false,
138
+ "cardinality": "Single",
139
+ "subfields": []
140
+ },
141
+ {
142
+ "name": "productId",
143
+ "type": "UUID",
144
+ "example": "",
145
+ "mapping": "",
146
+ "optional": false,
147
+ "cardinality": "Single",
148
+ "subfields": []
149
+ }
150
+ ],
151
+ "linkedId": "3458764595631345476"
152
+ },
153
+ {
154
+ "title": "Cart Created",
155
+ "tags": [],
156
+ "id": "3458764598754654371",
157
+ "index": 0,
158
+ "type": "SPEC_EVENT",
159
+ "fields": [
160
+ {
161
+ "name": "aggregateId",
162
+ "type": "UUID",
163
+ "example": "",
164
+ "mapping": "",
165
+ "optional": false,
166
+ "cardinality": "Single",
167
+ "subfields": []
168
+ }
169
+ ],
170
+ "linkedId": "3458764596402400430"
171
+ }
172
+ ],
173
+ "when": [],
174
+ "then": [
175
+ {
176
+ "title": "Submitted Cart Data",
177
+ "tags": [],
178
+ "id": "3458764598754654374",
179
+ "index": 0,
180
+ "type": "SPEC_READMODEL",
181
+ "fields": [
182
+ {
183
+ "name": "aggregateId",
184
+ "type": "UUID",
185
+ "example": "",
186
+ "mapping": "",
187
+ "optional": false,
188
+ "cardinality": "Single",
189
+ "subfields": []
190
+ },
191
+ {
192
+ "name": "orderedProducts",
193
+ "type": "Custom",
194
+ "example": "productId, price",
195
+ "mapping": "",
196
+ "optional": false,
197
+ "cardinality": "List",
198
+ "subfields": []
199
+ },
200
+ {
201
+ "name": "totalPrice",
202
+ "type": "Double",
203
+ "example": "",
204
+ "mapping": "orderedProducts",
205
+ "optional": false,
206
+ "cardinality": "Single",
207
+ "subfields": []
208
+ }
209
+ ],
210
+ "linkedId": "3458764596111217572"
211
+ }
212
+ ],
213
+ "comments": [
214
+ {
215
+ "description": "contains no data if cart was not submitted"
216
+ }
217
+ ],
218
+ "linkedId": "3458764596112606680"
219
+ },
220
+ {
221
+ "vertical": false,
222
+ "id": "3458764598754621998",
223
+ "sliceName": "slice: submitted cart data",
224
+ "title": "spec: submitted cart data",
225
+ "given": [
226
+ {
227
+ "title": "Cart Submitted",
228
+ "tags": [],
229
+ "id": "3458764598754622002",
230
+ "index": 2,
231
+ "type": "SPEC_EVENT",
232
+ "fields": [
233
+ {
234
+ "name": "aggregateId",
235
+ "type": "UUID",
236
+ "example": "",
237
+ "mapping": "",
238
+ "optional": false,
239
+ "cardinality": "Single",
240
+ "subfields": []
241
+ },
242
+ {
243
+ "name": "orderedProducts",
244
+ "type": "Custom",
245
+ "example": "productId, price",
246
+ "mapping": "",
247
+ "optional": false,
248
+ "cardinality": "List",
249
+ "subfields": []
250
+ },
251
+ {
252
+ "name": "totalPrice",
253
+ "type": "Double",
254
+ "example": "",
255
+ "mapping": "orderedProducts",
256
+ "optional": false,
257
+ "cardinality": "Single",
258
+ "subfields": []
259
+ }
260
+ ],
261
+ "linkedId": "3458764595641022547"
262
+ },
263
+ {
264
+ "title": "Item Added",
265
+ "tags": [],
266
+ "id": "3458764598754622001",
267
+ "index": 1,
268
+ "type": "SPEC_EVENT",
269
+ "fields": [
270
+ {
271
+ "name": "aggregateId",
272
+ "type": "UUID",
273
+ "example": "",
274
+ "mapping": "",
275
+ "optional": false,
276
+ "cardinality": "Single",
277
+ "subfields": []
278
+ },
279
+ {
280
+ "name": "description",
281
+ "type": "String",
282
+ "example": "",
283
+ "mapping": "",
284
+ "optional": false,
285
+ "cardinality": "Single",
286
+ "subfields": []
287
+ },
288
+ {
289
+ "name": "image",
290
+ "type": "String",
291
+ "example": "",
292
+ "mapping": "",
293
+ "optional": false,
294
+ "cardinality": "Single",
295
+ "subfields": []
296
+ },
297
+ {
298
+ "name": "price",
299
+ "type": "Double",
300
+ "example": "",
301
+ "mapping": "",
302
+ "optional": false,
303
+ "cardinality": "Single",
304
+ "subfields": []
305
+ },
306
+ {
307
+ "name": "itemId",
308
+ "type": "UUID",
309
+ "example": "",
310
+ "mapping": "",
311
+ "optional": false,
312
+ "cardinality": "Single",
313
+ "subfields": []
314
+ },
315
+ {
316
+ "name": "productId",
317
+ "type": "UUID",
318
+ "example": "",
319
+ "mapping": "",
320
+ "optional": false,
321
+ "cardinality": "Single",
322
+ "subfields": []
323
+ }
324
+ ],
325
+ "linkedId": "3458764595631345476"
326
+ },
327
+ {
328
+ "title": "Cart Created",
329
+ "tags": [],
330
+ "id": "3458764598754621999",
331
+ "index": 0,
332
+ "type": "SPEC_EVENT",
333
+ "fields": [
334
+ {
335
+ "name": "aggregateId",
336
+ "type": "UUID",
337
+ "example": "",
338
+ "mapping": "",
339
+ "optional": false,
340
+ "cardinality": "Single",
341
+ "subfields": []
342
+ }
343
+ ],
344
+ "linkedId": "3458764596402400430"
345
+ }
346
+ ],
347
+ "when": [],
348
+ "then": [
349
+ {
350
+ "title": "Submitted Cart Data",
351
+ "tags": [],
352
+ "id": "3458764598754622003",
353
+ "index": 0,
354
+ "type": "SPEC_READMODEL",
355
+ "fields": [
356
+ {
357
+ "name": "aggregateId",
358
+ "type": "UUID",
359
+ "example": "",
360
+ "mapping": "",
361
+ "optional": false,
362
+ "cardinality": "Single",
363
+ "subfields": []
364
+ },
365
+ {
366
+ "name": "orderedProducts",
367
+ "type": "Custom",
368
+ "example": "productId, price",
369
+ "mapping": "",
370
+ "optional": false,
371
+ "cardinality": "List",
372
+ "subfields": []
373
+ },
374
+ {
375
+ "name": "totalPrice",
376
+ "type": "Double",
377
+ "example": "",
378
+ "mapping": "orderedProducts",
379
+ "optional": false,
380
+ "cardinality": "Single",
381
+ "subfields": []
382
+ }
383
+ ],
384
+ "linkedId": "3458764596111217572"
385
+ }
386
+ ],
387
+ "comments": [
388
+ {
389
+ "description": "contains submitted cart data"
390
+ }
391
+ ],
392
+ "linkedId": "3458764596112606680"
393
+ }
394
+ ],
395
+ "actors": [],
396
+ "aggregates": [
397
+ "Cart"
398
+ ]
399
+ }
@@ -0,0 +1,108 @@
1
+ {
2
+ "slices": [
3
+ {
4
+ "id": "3458764595831815141",
5
+ "slice": "slice: add item",
6
+ "index": 1,
7
+ "context": "Cart",
8
+ "folder": "additem",
9
+ "status": "Done"
10
+ },
11
+ {
12
+ "id": "3458764595831815463",
13
+ "slice": "slice: remove item",
14
+ "index": 2,
15
+ "context": "Cart",
16
+ "folder": "removeitem",
17
+ "status": "Done"
18
+ },
19
+ {
20
+ "id": "3458764595831815528",
21
+ "slice": "slice: cart items",
22
+ "index": 3,
23
+ "context": "Cart",
24
+ "folder": "cartitems",
25
+ "status": "Done"
26
+ },
27
+ {
28
+ "id": "3458764595935790438",
29
+ "slice": "slice: clear cart",
30
+ "index": 4,
31
+ "context": "Cart",
32
+ "folder": "clearcart",
33
+ "status": "Done"
34
+ },
35
+ {
36
+ "id": "3458764596700878567",
37
+ "slice": "slice: change inventory",
38
+ "index": 5,
39
+ "context": "Cart",
40
+ "folder": "changeinventory",
41
+ "status": "Done"
42
+ },
43
+ {
44
+ "id": "3458764596700878694",
45
+ "slice": "slice: Inventories",
46
+ "index": 6,
47
+ "context": "Cart",
48
+ "folder": "inventories",
49
+ "status": "Done"
50
+ },
51
+ {
52
+ "id": "3458764596700962283",
53
+ "slice": "slice: change price",
54
+ "index": 7,
55
+ "context": "Cart",
56
+ "folder": "changeprice",
57
+ "status": "Done"
58
+ },
59
+ {
60
+ "id": "3458764597396562122",
61
+ "slice": "slice: cart with products",
62
+ "index": 8,
63
+ "context": "Cart",
64
+ "folder": "cartwithproducts",
65
+ "status": "Done"
66
+ },
67
+ {
68
+ "id": "3458764596700962150",
69
+ "slice": "slice: Changed Prices",
70
+ "index": 9,
71
+ "context": "Cart",
72
+ "folder": "changedprices",
73
+ "status": "Created"
74
+ },
75
+ {
76
+ "id": "3458764596700962479",
77
+ "slice": "slice: Archive Item",
78
+ "index": 10,
79
+ "context": "Cart",
80
+ "folder": "archiveitem",
81
+ "status": "Done"
82
+ },
83
+ {
84
+ "id": "3458764596110806982",
85
+ "slice": "slice: submit cart",
86
+ "index": 11,
87
+ "context": "Cart",
88
+ "folder": "submitcart",
89
+ "status": "Done"
90
+ },
91
+ {
92
+ "id": "3458764596112606680",
93
+ "slice": "slice: submitted cart data",
94
+ "index": 12,
95
+ "context": "Cart",
96
+ "folder": "submittedcartdata",
97
+ "status": "Done"
98
+ },
99
+ {
100
+ "id": "3458764596112734544",
101
+ "slice": "slice: publish cart",
102
+ "index": 13,
103
+ "context": "Cart",
104
+ "folder": "publishcart",
105
+ "status": "Done"
106
+ }
107
+ ]
108
+ }
@@ -0,0 +1,49 @@
1
+ ---
2
+ name: skeleton-automation
3
+ description: Generate automation slices from config.json
4
+ ---
5
+
6
+ # Generate Automation Slice
7
+
8
+ Generate automation slices (background processors with CRON scheduling) from your event model configuration.
9
+
10
+ ## Task
11
+
12
+ You are tasked with generating one or more automation slices using the emmet-supabase Yeoman generator.
13
+
14
+ ## Steps
15
+
16
+ 1. Check if a `config.json` file exists in the current directory
17
+ - If not found, inform the user they need a config.json file
18
+ - Exit with instructions on creating one
19
+
20
+ 2. Read the config.json to find available AUTOMATION slices:
21
+ - Look for slices with `"sliceType": "AUTOMATION"`
22
+ - Extract their IDs and titles
23
+
24
+ 3. Show the user available automation slices and ask which ones to generate
25
+ - Allow multiple selections
26
+ - Or accept slice IDs from the user's original request
27
+
28
+ 4. Run the local generator with selected slices:
29
+ ```bash
30
+ npx yo ./.claude/skills/gen-skeleton/generators/emmet-supabase/app --action AUTOMATION --slices <slice-id-1>,<slice-id-2>
31
+ ```
32
+
33
+ 5. After generation completes:
34
+ - List the files that were created
35
+ - Run tests for the generated slices if available
36
+ - Explain the CRON configuration if applicable
37
+ - Suggest next steps
38
+
39
+ ## Important Notes
40
+
41
+ - The generator is located in `.claude/skills/gen-skeleton/generators/emmet-supabase`
42
+ - Multiple slices can be generated in one command (comma-separated)
43
+ - Slice IDs must exactly match those in config.json
44
+ - Generated files typically include:
45
+ - processor.ts (background automation logic)
46
+ - CRON configuration
47
+ - Tests
48
+ - Automation slices read from TODO lists (work queues) and fire commands on a schedule
49
+ - Common use cases: auto-confirm invitations, process checkouts, send notifications