@cloudgrid-io/mcp 0.12.0 → 0.14.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 (390) hide show
  1. package/package.json +1 -1
  2. package/src/corpus/capability-map.md +82 -2
  3. package/src/corpus/examples/crm/index.md +273 -0
  4. package/src/corpus/examples/kanban/index.md +256 -0
  5. package/src/corpus/templates/_cloudgrid.yaml.reference +228 -0
  6. package/src/corpus/templates/admin-dashboard/README.md +75 -0
  7. package/src/corpus/templates/admin-dashboard/cloudgrid.yaml +233 -0
  8. package/src/corpus/templates/admin-dashboard/index.md +81 -0
  9. package/src/corpus/templates/admin-dashboard/services/web/app/api/orders/route.js +64 -0
  10. package/src/corpus/templates/admin-dashboard/services/web/app/api/users/route.js +63 -0
  11. package/src/corpus/templates/admin-dashboard/services/web/app/layout.js +39 -0
  12. package/src/corpus/templates/admin-dashboard/services/web/app/page.js +73 -0
  13. package/src/corpus/templates/admin-dashboard/services/web/app/resource-table.js +94 -0
  14. package/src/corpus/templates/admin-dashboard/services/web/lib/db.js +32 -0
  15. package/src/corpus/templates/admin-dashboard/services/web/package.json +16 -0
  16. package/src/corpus/templates/ai-app/cloudgrid.yaml +225 -11
  17. package/src/corpus/templates/ai-app/index.md +3 -11
  18. package/src/corpus/templates/ai-knowledge-base/AGENTS.md +254 -0
  19. package/src/corpus/templates/ai-knowledge-base/README.md +28 -0
  20. package/src/corpus/templates/ai-knowledge-base/cloudgrid.yaml +238 -0
  21. package/src/corpus/templates/ai-knowledge-base/index.md +81 -0
  22. package/src/corpus/templates/analytics-dashboard/README.md +85 -0
  23. package/src/corpus/templates/analytics-dashboard/cloudgrid.yaml +232 -0
  24. package/src/corpus/templates/analytics-dashboard/index.md +316 -0
  25. package/src/corpus/templates/analytics-dashboard/services/web/app/api/events/route.js +60 -0
  26. package/src/corpus/templates/analytics-dashboard/services/web/app/event-form.js +100 -0
  27. package/src/corpus/templates/analytics-dashboard/services/web/app/layout.js +41 -0
  28. package/src/corpus/templates/analytics-dashboard/services/web/app/page.js +54 -0
  29. package/src/corpus/templates/analytics-dashboard/services/web/lib/db.js +32 -0
  30. package/src/corpus/templates/analytics-dashboard/services/web/package.json +16 -0
  31. package/src/corpus/templates/api-dashboard/README.md +84 -0
  32. package/src/corpus/templates/api-dashboard/cloudgrid.yaml +233 -0
  33. package/src/corpus/templates/api-dashboard/index.md +310 -0
  34. package/src/corpus/templates/api-dashboard/services/web/app/api/requests/route.js +62 -0
  35. package/src/corpus/templates/api-dashboard/services/web/app/dashboard.js +156 -0
  36. package/src/corpus/templates/api-dashboard/services/web/app/layout.js +42 -0
  37. package/src/corpus/templates/api-dashboard/services/web/app/page.js +39 -0
  38. package/src/corpus/templates/api-dashboard/services/web/lib/db.js +32 -0
  39. package/src/corpus/templates/api-dashboard/services/web/package.json +16 -0
  40. package/src/corpus/templates/api-docs/README.md +28 -0
  41. package/src/corpus/templates/api-docs/cloudgrid.yaml +228 -0
  42. package/src/corpus/templates/api-docs/index.html +136 -0
  43. package/src/corpus/templates/api-docs/index.md +28 -0
  44. package/src/corpus/templates/api-service/cloudgrid.yaml +224 -9
  45. package/src/corpus/templates/api-service/index.md +3 -11
  46. package/src/corpus/templates/app-with-data/cloudgrid.yaml +226 -8
  47. package/src/corpus/templates/app-with-data/index.md +3 -8
  48. package/src/corpus/templates/appointment-booking/AGENTS.md +223 -0
  49. package/src/corpus/templates/appointment-booking/README.md +16 -0
  50. package/src/corpus/templates/appointment-booking/cloudgrid.yaml +250 -0
  51. package/src/corpus/templates/appointment-booking/index.md +72 -0
  52. package/src/corpus/templates/approval-workflow/AGENTS.md +170 -0
  53. package/src/corpus/templates/approval-workflow/README.md +12 -0
  54. package/src/corpus/templates/approval-workflow/cloudgrid.yaml +237 -0
  55. package/src/corpus/templates/approval-workflow/index.md +58 -0
  56. package/src/corpus/templates/billing-dashboard/AGENTS.md +199 -0
  57. package/src/corpus/templates/billing-dashboard/README.md +18 -0
  58. package/src/corpus/templates/billing-dashboard/cloudgrid.yaml +235 -0
  59. package/src/corpus/templates/billing-dashboard/index.md +87 -0
  60. package/src/corpus/templates/blog-cms/README.md +94 -0
  61. package/src/corpus/templates/blog-cms/cloudgrid.yaml +233 -0
  62. package/src/corpus/templates/blog-cms/index.md +358 -0
  63. package/src/corpus/templates/blog-cms/services/web/app/admin/admin-editor.js +133 -0
  64. package/src/corpus/templates/blog-cms/services/web/app/admin/page.js +33 -0
  65. package/src/corpus/templates/blog-cms/services/web/app/api/posts/route.js +84 -0
  66. package/src/corpus/templates/blog-cms/services/web/app/layout.js +47 -0
  67. package/src/corpus/templates/blog-cms/services/web/app/page.js +56 -0
  68. package/src/corpus/templates/blog-cms/services/web/app/posts/[slug]/page.js +45 -0
  69. package/src/corpus/templates/blog-cms/services/web/lib/db.js +32 -0
  70. package/src/corpus/templates/blog-cms/services/web/package.json +16 -0
  71. package/src/corpus/templates/booking-system/AGENTS.md +189 -0
  72. package/src/corpus/templates/booking-system/README.md +17 -0
  73. package/src/corpus/templates/booking-system/cloudgrid.yaml +248 -0
  74. package/src/corpus/templates/booking-system/index.md +86 -0
  75. package/src/corpus/templates/calendar-scheduler/AGENTS.md +226 -0
  76. package/src/corpus/templates/calendar-scheduler/README.md +25 -0
  77. package/src/corpus/templates/calendar-scheduler/cloudgrid.yaml +259 -0
  78. package/src/corpus/templates/calendar-scheduler/index.md +85 -0
  79. package/src/corpus/templates/changelog/README.md +27 -0
  80. package/src/corpus/templates/changelog/cloudgrid.yaml +228 -0
  81. package/src/corpus/templates/changelog/index.html +80 -0
  82. package/src/corpus/templates/changelog/index.md +28 -0
  83. package/src/corpus/templates/company-website/README.md +54 -0
  84. package/src/corpus/templates/company-website/cloudgrid.yaml +233 -0
  85. package/src/corpus/templates/company-website/index.html +309 -0
  86. package/src/corpus/templates/company-website/index.md +29 -0
  87. package/src/corpus/templates/course-platform/AGENTS.md +161 -0
  88. package/src/corpus/templates/course-platform/README.md +26 -0
  89. package/src/corpus/templates/course-platform/cloudgrid.yaml +237 -0
  90. package/src/corpus/templates/course-platform/index.md +70 -0
  91. package/src/corpus/templates/crm/README.md +72 -0
  92. package/src/corpus/templates/crm/cloudgrid.yaml +233 -0
  93. package/src/corpus/templates/crm/index.md +71 -0
  94. package/src/corpus/templates/crm/services/web/app/api/contacts/route.js +80 -0
  95. package/src/corpus/templates/crm/services/web/app/contact-manager.js +102 -0
  96. package/src/corpus/templates/crm/services/web/app/layout.js +35 -0
  97. package/src/corpus/templates/crm/services/web/app/page.js +34 -0
  98. package/src/corpus/templates/crm/services/web/lib/db.js +32 -0
  99. package/src/corpus/templates/crm/services/web/package.json +16 -0
  100. package/src/corpus/templates/dashboard/cloudgrid.yaml +228 -4
  101. package/src/corpus/templates/dashboard/index.md +3 -5
  102. package/src/corpus/templates/deck/cloudgrid.yaml +228 -4
  103. package/src/corpus/templates/deck/index.md +3 -5
  104. package/src/corpus/templates/directory/README.md +75 -0
  105. package/src/corpus/templates/directory/cloudgrid.yaml +233 -0
  106. package/src/corpus/templates/directory/index.md +334 -0
  107. package/src/corpus/templates/directory/services/web/app/api/entries/route.js +63 -0
  108. package/src/corpus/templates/directory/services/web/app/directory-list.js +146 -0
  109. package/src/corpus/templates/directory/services/web/app/layout.js +44 -0
  110. package/src/corpus/templates/directory/services/web/app/page.js +38 -0
  111. package/src/corpus/templates/directory/services/web/lib/db.js +32 -0
  112. package/src/corpus/templates/directory/services/web/package.json +16 -0
  113. package/src/corpus/templates/docs-site/README.md +28 -0
  114. package/src/corpus/templates/docs-site/cloudgrid.yaml +228 -0
  115. package/src/corpus/templates/docs-site/index.html +122 -0
  116. package/src/corpus/templates/docs-site/index.md +28 -0
  117. package/src/corpus/templates/erp/AGENTS.md +116 -0
  118. package/src/corpus/templates/erp/README.md +17 -0
  119. package/src/corpus/templates/erp/cloudgrid.yaml +235 -0
  120. package/src/corpus/templates/erp/index.md +81 -0
  121. package/src/corpus/templates/event-board/README.md +74 -0
  122. package/src/corpus/templates/event-board/cloudgrid.yaml +233 -0
  123. package/src/corpus/templates/event-board/index.md +299 -0
  124. package/src/corpus/templates/event-board/services/web/app/api/events/route.js +61 -0
  125. package/src/corpus/templates/event-board/services/web/app/event-form.js +118 -0
  126. package/src/corpus/templates/event-board/services/web/app/layout.js +39 -0
  127. package/src/corpus/templates/event-board/services/web/app/page.js +34 -0
  128. package/src/corpus/templates/event-board/services/web/lib/db.js +32 -0
  129. package/src/corpus/templates/event-board/services/web/package.json +16 -0
  130. package/src/corpus/templates/expense-tracker/README.md +76 -0
  131. package/src/corpus/templates/expense-tracker/cloudgrid.yaml +233 -0
  132. package/src/corpus/templates/expense-tracker/index.md +305 -0
  133. package/src/corpus/templates/expense-tracker/services/web/app/api/expenses/route.js +61 -0
  134. package/src/corpus/templates/expense-tracker/services/web/app/expense-form.js +145 -0
  135. package/src/corpus/templates/expense-tracker/services/web/app/layout.js +42 -0
  136. package/src/corpus/templates/expense-tracker/services/web/app/page.js +34 -0
  137. package/src/corpus/templates/expense-tracker/services/web/lib/db.js +32 -0
  138. package/src/corpus/templates/expense-tracker/services/web/package.json +16 -0
  139. package/src/corpus/templates/feature-request-board/README.md +87 -0
  140. package/src/corpus/templates/feature-request-board/cloudgrid.yaml +233 -0
  141. package/src/corpus/templates/feature-request-board/index.md +317 -0
  142. package/src/corpus/templates/feature-request-board/services/web/app/api/requests/route.js +92 -0
  143. package/src/corpus/templates/feature-request-board/services/web/app/board.js +91 -0
  144. package/src/corpus/templates/feature-request-board/services/web/app/layout.js +43 -0
  145. package/src/corpus/templates/feature-request-board/services/web/app/page.js +35 -0
  146. package/src/corpus/templates/feature-request-board/services/web/lib/db.js +32 -0
  147. package/src/corpus/templates/feature-request-board/services/web/package.json +16 -0
  148. package/src/corpus/templates/financial-dashboard/README.md +80 -0
  149. package/src/corpus/templates/financial-dashboard/cloudgrid.yaml +233 -0
  150. package/src/corpus/templates/financial-dashboard/index.md +326 -0
  151. package/src/corpus/templates/financial-dashboard/services/web/app/api/entries/route.js +63 -0
  152. package/src/corpus/templates/financial-dashboard/services/web/app/entry-board.js +130 -0
  153. package/src/corpus/templates/financial-dashboard/services/web/app/layout.js +46 -0
  154. package/src/corpus/templates/financial-dashboard/services/web/app/page.js +31 -0
  155. package/src/corpus/templates/financial-dashboard/services/web/lib/db.js +32 -0
  156. package/src/corpus/templates/financial-dashboard/services/web/package.json +16 -0
  157. package/src/corpus/templates/forum/AGENTS.md +196 -0
  158. package/src/corpus/templates/forum/README.md +12 -0
  159. package/src/corpus/templates/forum/cloudgrid.yaml +237 -0
  160. package/src/corpus/templates/forum/index.md +66 -0
  161. package/src/corpus/templates/hr-portal/AGENTS.md +174 -0
  162. package/src/corpus/templates/hr-portal/README.md +14 -0
  163. package/src/corpus/templates/hr-portal/cloudgrid.yaml +237 -0
  164. package/src/corpus/templates/hr-portal/index.md +56 -0
  165. package/src/corpus/templates/internal-tools-portal/AGENTS.md +201 -0
  166. package/src/corpus/templates/internal-tools-portal/README.md +17 -0
  167. package/src/corpus/templates/internal-tools-portal/cloudgrid.yaml +237 -0
  168. package/src/corpus/templates/internal-tools-portal/index.md +62 -0
  169. package/src/corpus/templates/inventory/README.md +71 -0
  170. package/src/corpus/templates/inventory/cloudgrid.yaml +233 -0
  171. package/src/corpus/templates/inventory/index.md +68 -0
  172. package/src/corpus/templates/inventory/services/web/app/api/items/route.js +88 -0
  173. package/src/corpus/templates/inventory/services/web/app/inventory-manager.js +101 -0
  174. package/src/corpus/templates/inventory/services/web/app/layout.js +36 -0
  175. package/src/corpus/templates/inventory/services/web/app/page.js +37 -0
  176. package/src/corpus/templates/inventory/services/web/lib/db.js +32 -0
  177. package/src/corpus/templates/inventory/services/web/package.json +16 -0
  178. package/src/corpus/templates/invoice/README.md +71 -0
  179. package/src/corpus/templates/invoice/cloudgrid.yaml +233 -0
  180. package/src/corpus/templates/invoice/index.md +68 -0
  181. package/src/corpus/templates/invoice/services/web/app/api/invoices/route.js +82 -0
  182. package/src/corpus/templates/invoice/services/web/app/invoice-manager.js +101 -0
  183. package/src/corpus/templates/invoice/services/web/app/layout.js +35 -0
  184. package/src/corpus/templates/invoice/services/web/app/page.js +34 -0
  185. package/src/corpus/templates/invoice/services/web/lib/db.js +32 -0
  186. package/src/corpus/templates/invoice/services/web/package.json +16 -0
  187. package/src/corpus/templates/job-board/README.md +71 -0
  188. package/src/corpus/templates/job-board/cloudgrid.yaml +233 -0
  189. package/src/corpus/templates/job-board/index.md +68 -0
  190. package/src/corpus/templates/job-board/services/web/app/api/jobs/route.js +66 -0
  191. package/src/corpus/templates/job-board/services/web/app/job-board.js +73 -0
  192. package/src/corpus/templates/job-board/services/web/app/layout.js +35 -0
  193. package/src/corpus/templates/job-board/services/web/app/page.js +32 -0
  194. package/src/corpus/templates/job-board/services/web/lib/db.js +32 -0
  195. package/src/corpus/templates/job-board/services/web/package.json +16 -0
  196. package/src/corpus/templates/kanban/README.md +72 -0
  197. package/src/corpus/templates/kanban/cloudgrid.yaml +233 -0
  198. package/src/corpus/templates/kanban/index.md +71 -0
  199. package/src/corpus/templates/kanban/services/web/app/api/cards/route.js +70 -0
  200. package/src/corpus/templates/kanban/services/web/app/board.js +93 -0
  201. package/src/corpus/templates/kanban/services/web/app/layout.js +37 -0
  202. package/src/corpus/templates/kanban/services/web/app/page.js +32 -0
  203. package/src/corpus/templates/kanban/services/web/lib/db.js +32 -0
  204. package/src/corpus/templates/kanban/services/web/package.json +16 -0
  205. package/src/corpus/templates/landing-page/cloudgrid.yaml +228 -4
  206. package/src/corpus/templates/landing-page/index.md +3 -5
  207. package/src/corpus/templates/lms/AGENTS.md +193 -0
  208. package/src/corpus/templates/lms/README.md +27 -0
  209. package/src/corpus/templates/lms/cloudgrid.yaml +237 -0
  210. package/src/corpus/templates/lms/index.md +79 -0
  211. package/src/corpus/templates/marketplace/AGENTS.md +208 -0
  212. package/src/corpus/templates/marketplace/README.md +22 -0
  213. package/src/corpus/templates/marketplace/cloudgrid.yaml +233 -0
  214. package/src/corpus/templates/marketplace/index.md +76 -0
  215. package/src/corpus/templates/membership-site/AGENTS.md +160 -0
  216. package/src/corpus/templates/membership-site/README.md +18 -0
  217. package/src/corpus/templates/membership-site/cloudgrid.yaml +236 -0
  218. package/src/corpus/templates/membership-site/index.md +66 -0
  219. package/src/corpus/templates/monitoring-dashboard/README.md +84 -0
  220. package/src/corpus/templates/monitoring-dashboard/cloudgrid.yaml +233 -0
  221. package/src/corpus/templates/monitoring-dashboard/index.md +328 -0
  222. package/src/corpus/templates/monitoring-dashboard/services/web/app/api/checks/route.js +76 -0
  223. package/src/corpus/templates/monitoring-dashboard/services/web/app/check-form.js +124 -0
  224. package/src/corpus/templates/monitoring-dashboard/services/web/app/layout.js +44 -0
  225. package/src/corpus/templates/monitoring-dashboard/services/web/app/page.js +49 -0
  226. package/src/corpus/templates/monitoring-dashboard/services/web/lib/db.js +32 -0
  227. package/src/corpus/templates/monitoring-dashboard/services/web/package.json +16 -0
  228. package/src/corpus/templates/online-store/AGENTS.md +153 -0
  229. package/src/corpus/templates/online-store/README.md +16 -0
  230. package/src/corpus/templates/online-store/cloudgrid.yaml +234 -0
  231. package/src/corpus/templates/online-store/index.md +81 -0
  232. package/src/corpus/templates/portfolio/README.md +29 -0
  233. package/src/corpus/templates/portfolio/cloudgrid.yaml +228 -0
  234. package/src/corpus/templates/portfolio/index.html +126 -0
  235. package/src/corpus/templates/portfolio/index.md +28 -0
  236. package/src/corpus/templates/product-catalog/README.md +74 -0
  237. package/src/corpus/templates/product-catalog/cloudgrid.yaml +232 -0
  238. package/src/corpus/templates/product-catalog/index.md +330 -0
  239. package/src/corpus/templates/product-catalog/services/web/app/api/products/route.js +69 -0
  240. package/src/corpus/templates/product-catalog/services/web/app/catalog.js +153 -0
  241. package/src/corpus/templates/product-catalog/services/web/app/layout.js +49 -0
  242. package/src/corpus/templates/product-catalog/services/web/app/page.js +36 -0
  243. package/src/corpus/templates/product-catalog/services/web/lib/db.js +32 -0
  244. package/src/corpus/templates/product-catalog/services/web/package.json +16 -0
  245. package/src/corpus/templates/product-launch/README.md +46 -0
  246. package/src/corpus/templates/product-launch/cloudgrid.yaml +234 -0
  247. package/src/corpus/templates/product-launch/index.html +320 -0
  248. package/src/corpus/templates/product-launch/index.md +34 -0
  249. package/src/corpus/templates/project-management/README.md +83 -0
  250. package/src/corpus/templates/project-management/cloudgrid.yaml +233 -0
  251. package/src/corpus/templates/project-management/index.md +346 -0
  252. package/src/corpus/templates/project-management/services/web/app/api/projects/route.js +48 -0
  253. package/src/corpus/templates/project-management/services/web/app/api/tasks/route.js +85 -0
  254. package/src/corpus/templates/project-management/services/web/app/board.js +182 -0
  255. package/src/corpus/templates/project-management/services/web/app/layout.js +45 -0
  256. package/src/corpus/templates/project-management/services/web/app/page.js +49 -0
  257. package/src/corpus/templates/project-management/services/web/lib/db.js +32 -0
  258. package/src/corpus/templates/project-management/services/web/package.json +16 -0
  259. package/src/corpus/templates/property-listings/README.md +76 -0
  260. package/src/corpus/templates/property-listings/cloudgrid.yaml +233 -0
  261. package/src/corpus/templates/property-listings/index.md +335 -0
  262. package/src/corpus/templates/property-listings/services/web/app/api/properties/route.js +73 -0
  263. package/src/corpus/templates/property-listings/services/web/app/layout.js +45 -0
  264. package/src/corpus/templates/property-listings/services/web/app/listings.js +152 -0
  265. package/src/corpus/templates/property-listings/services/web/app/page.js +53 -0
  266. package/src/corpus/templates/property-listings/services/web/lib/db.js +32 -0
  267. package/src/corpus/templates/property-listings/services/web/package.json +16 -0
  268. package/src/corpus/templates/quiz-platform/README.md +84 -0
  269. package/src/corpus/templates/quiz-platform/cloudgrid.yaml +233 -0
  270. package/src/corpus/templates/quiz-platform/index.md +313 -0
  271. package/src/corpus/templates/quiz-platform/services/web/app/api/questions/route.js +69 -0
  272. package/src/corpus/templates/quiz-platform/services/web/app/layout.js +47 -0
  273. package/src/corpus/templates/quiz-platform/services/web/app/page.js +37 -0
  274. package/src/corpus/templates/quiz-platform/services/web/app/quiz.js +188 -0
  275. package/src/corpus/templates/quiz-platform/services/web/lib/db.js +32 -0
  276. package/src/corpus/templates/quiz-platform/services/web/package.json +16 -0
  277. package/src/corpus/templates/report/cloudgrid.yaml +228 -4
  278. package/src/corpus/templates/report/index.md +3 -5
  279. package/src/corpus/templates/restaurant-reservations/AGENTS.md +258 -0
  280. package/src/corpus/templates/restaurant-reservations/README.md +17 -0
  281. package/src/corpus/templates/restaurant-reservations/cloudgrid.yaml +258 -0
  282. package/src/corpus/templates/restaurant-reservations/index.md +62 -0
  283. package/src/corpus/templates/revenue-dashboard/README.md +75 -0
  284. package/src/corpus/templates/revenue-dashboard/cloudgrid.yaml +233 -0
  285. package/src/corpus/templates/revenue-dashboard/index.md +307 -0
  286. package/src/corpus/templates/revenue-dashboard/services/web/app/api/sales/route.js +60 -0
  287. package/src/corpus/templates/revenue-dashboard/services/web/app/layout.js +40 -0
  288. package/src/corpus/templates/revenue-dashboard/services/web/app/page.js +87 -0
  289. package/src/corpus/templates/revenue-dashboard/services/web/app/sale-form.js +63 -0
  290. package/src/corpus/templates/revenue-dashboard/services/web/lib/db.js +32 -0
  291. package/src/corpus/templates/revenue-dashboard/services/web/package.json +16 -0
  292. package/src/corpus/templates/saas-marketing/README.md +30 -0
  293. package/src/corpus/templates/saas-marketing/cloudgrid.yaml +228 -0
  294. package/src/corpus/templates/saas-marketing/index.html +212 -0
  295. package/src/corpus/templates/saas-marketing/index.md +28 -0
  296. package/src/corpus/templates/status-page/README.md +28 -0
  297. package/src/corpus/templates/status-page/cloudgrid.yaml +228 -0
  298. package/src/corpus/templates/status-page/index.html +117 -0
  299. package/src/corpus/templates/status-page/index.md +28 -0
  300. package/src/corpus/templates/subscription-management/AGENTS.md +191 -0
  301. package/src/corpus/templates/subscription-management/README.md +21 -0
  302. package/src/corpus/templates/subscription-management/cloudgrid.yaml +236 -0
  303. package/src/corpus/templates/subscription-management/index.md +73 -0
  304. package/src/corpus/templates/task-manager/README.md +72 -0
  305. package/src/corpus/templates/task-manager/cloudgrid.yaml +233 -0
  306. package/src/corpus/templates/task-manager/index.md +71 -0
  307. package/src/corpus/templates/task-manager/services/web/app/api/tasks/route.js +77 -0
  308. package/src/corpus/templates/task-manager/services/web/app/layout.js +39 -0
  309. package/src/corpus/templates/task-manager/services/web/app/page.js +33 -0
  310. package/src/corpus/templates/task-manager/services/web/app/task-list.js +110 -0
  311. package/src/corpus/templates/task-manager/services/web/lib/db.js +32 -0
  312. package/src/corpus/templates/task-manager/services/web/package.json +16 -0
  313. package/src/corpus/templates/ticket-system/README.md +71 -0
  314. package/src/corpus/templates/ticket-system/cloudgrid.yaml +233 -0
  315. package/src/corpus/templates/ticket-system/index.md +68 -0
  316. package/src/corpus/templates/ticket-system/services/web/app/api/tickets/route.js +81 -0
  317. package/src/corpus/templates/ticket-system/services/web/app/layout.js +36 -0
  318. package/src/corpus/templates/ticket-system/services/web/app/page.js +35 -0
  319. package/src/corpus/templates/ticket-system/services/web/app/ticket-queue.js +112 -0
  320. package/src/corpus/templates/ticket-system/services/web/lib/db.js +32 -0
  321. package/src/corpus/templates/ticket-system/services/web/package.json +16 -0
  322. package/src/corpus/templates/time-tracking/README.md +81 -0
  323. package/src/corpus/templates/time-tracking/cloudgrid.yaml +233 -0
  324. package/src/corpus/templates/time-tracking/index.md +298 -0
  325. package/src/corpus/templates/time-tracking/services/web/app/api/entries/route.js +66 -0
  326. package/src/corpus/templates/time-tracking/services/web/app/entry-form.js +106 -0
  327. package/src/corpus/templates/time-tracking/services/web/app/layout.js +39 -0
  328. package/src/corpus/templates/time-tracking/services/web/app/page.js +30 -0
  329. package/src/corpus/templates/time-tracking/services/web/lib/db.js +32 -0
  330. package/src/corpus/templates/time-tracking/services/web/package.json +16 -0
  331. package/src/corpus/templates/travel-booking/AGENTS.md +207 -0
  332. package/src/corpus/templates/travel-booking/README.md +17 -0
  333. package/src/corpus/templates/travel-booking/cloudgrid.yaml +249 -0
  334. package/src/corpus/templates/travel-booking/index.md +88 -0
  335. package/src/corpus/templates/waitlist/README.md +38 -0
  336. package/src/corpus/templates/waitlist/cloudgrid.yaml +228 -0
  337. package/src/corpus/templates/waitlist/index.html +69 -0
  338. package/src/corpus/templates/waitlist/index.md +39 -0
  339. package/src/corpus/templates/web-app/cloudgrid.yaml +228 -4
  340. package/src/corpus/templates/web-app/index.md +3 -5
  341. package/src/corpus/workflows/admin-dashboard.md +102 -0
  342. package/src/corpus/workflows/ai-knowledge-base.md +137 -0
  343. package/src/corpus/workflows/analytics-dashboard.md +104 -0
  344. package/src/corpus/workflows/api-dashboard.md +102 -0
  345. package/src/corpus/workflows/api-docs.md +36 -0
  346. package/src/corpus/workflows/appointment-booking.md +143 -0
  347. package/src/corpus/workflows/approval-workflow.md +124 -0
  348. package/src/corpus/workflows/billing-dashboard.md +120 -0
  349. package/src/corpus/workflows/blog-cms.md +104 -0
  350. package/src/corpus/workflows/booking-system.md +116 -0
  351. package/src/corpus/workflows/calendar-scheduler.md +134 -0
  352. package/src/corpus/workflows/changelog.md +33 -0
  353. package/src/corpus/workflows/company-website.md +46 -0
  354. package/src/corpus/workflows/course-platform.md +126 -0
  355. package/src/corpus/workflows/crm.md +101 -0
  356. package/src/corpus/workflows/directory.md +101 -0
  357. package/src/corpus/workflows/docs-site.md +35 -0
  358. package/src/corpus/workflows/erp.md +125 -0
  359. package/src/corpus/workflows/event-board.md +102 -0
  360. package/src/corpus/workflows/expense-tracker.md +102 -0
  361. package/src/corpus/workflows/feature-request-board.md +105 -0
  362. package/src/corpus/workflows/financial-dashboard.md +103 -0
  363. package/src/corpus/workflows/forum.md +128 -0
  364. package/src/corpus/workflows/hr-portal.md +115 -0
  365. package/src/corpus/workflows/internal-tools-portal.md +125 -0
  366. package/src/corpus/workflows/inventory.md +101 -0
  367. package/src/corpus/workflows/invoice.md +101 -0
  368. package/src/corpus/workflows/job-board.md +101 -0
  369. package/src/corpus/workflows/kanban.md +102 -0
  370. package/src/corpus/workflows/lms.md +113 -0
  371. package/src/corpus/workflows/marketplace.md +123 -0
  372. package/src/corpus/workflows/membership-site.md +128 -0
  373. package/src/corpus/workflows/monitoring-dashboard.md +104 -0
  374. package/src/corpus/workflows/online-store.md +114 -0
  375. package/src/corpus/workflows/portfolio.md +35 -0
  376. package/src/corpus/workflows/product-catalog.md +105 -0
  377. package/src/corpus/workflows/product-launch.md +43 -0
  378. package/src/corpus/workflows/project-management.md +106 -0
  379. package/src/corpus/workflows/property-listings.md +101 -0
  380. package/src/corpus/workflows/quiz-platform.md +105 -0
  381. package/src/corpus/workflows/restaurant-reservations.md +123 -0
  382. package/src/corpus/workflows/revenue-dashboard.md +102 -0
  383. package/src/corpus/workflows/saas-marketing.md +37 -0
  384. package/src/corpus/workflows/status-page.md +35 -0
  385. package/src/corpus/workflows/subscription-management.md +141 -0
  386. package/src/corpus/workflows/task-manager.md +101 -0
  387. package/src/corpus/workflows/ticket-system.md +101 -0
  388. package/src/corpus/workflows/time-tracking.md +104 -0
  389. package/src/corpus/workflows/travel-booking.md +115 -0
  390. package/src/corpus/workflows/waitlist.md +42 -0
@@ -0,0 +1,102 @@
1
+ ---
2
+ name: kanban
3
+ when: kanban board, task board, trello-style board, workflow columns — a persistent board whose cards move between columns and stick across refresh. Needs a database → runtime → local edition.
4
+ needs: database
5
+ deploy: runtime
6
+ editions: local
7
+ capabilities_note: persistent — needs a database (Mongo). Runtime app, async build, local edition only. Declare the canonical `needs: { database: true }`; the deployer injects DATABASE_MONGODB_URL (+legacy MONGODB_URL).
8
+ summary: Build a persistent Next.js + Mongo kanban board on the grid — a `cards` collection (title, column, order) with three columns and move-between-columns + add/delete. Edition-gate first, scaffold, put the app under services/web/, wire process.env.DATABASE_MONGODB_URL (legacy MONGODB_URL fallback) lazily, declare needs:{database:true} (not requires:), deploy async, poll to a live URL.
9
+ ---
10
+
11
+ # Workflow: kanban
12
+
13
+ The user wants a kanban / trello-style board that **remembers** its cards — cards
14
+ that move between columns and survive refresh, shared across sessions. That is a
15
+ **runtime app** backed by the grid's shared Mongo, not a static page. It is the
16
+ same proven shape as `app-with-data`, with a `cards` domain (title, column of
17
+ todo/doing/done, order) and three columns with move-between-columns.
18
+
19
+ Follow this recipe. Be honest that a runtime deploy is async (not instant like a
20
+ static drop) and that it needs the local edition.
21
+
22
+ ## 1. Edition check FIRST (hard gate)
23
+
24
+ A persistent app is a built + deployed container. It requires the **local
25
+ edition** (Claude Desktop / Claude Code) or the CLI.
26
+
27
+ - **Hosted edition (Claude Web / hosted MCP):** you CANNOT build a runtime app —
28
+ hosted is inline-only and can only publish static pages. Tell the user
29
+ plainly, offer a **static version** instead, and STOP the runtime path here.
30
+ - **Local edition:** continue.
31
+
32
+ ## 2. Auth + grid
33
+
34
+ 1. Ensure signed in: `gridctl_login_status`; if not, `gridctl_login`.
35
+ 2. A grid is required. Respect the grid picker: if the user has more than one
36
+ grid, ask which to use; do not assume a target.
37
+
38
+ ## 3. Scaffold
39
+
40
+ `gridctl_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
41
+ and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
42
+ directory, so run `init` FIRST. Then (a) write the app under **`services/web/`**,
43
+ and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
44
+ { database: true }`).
45
+
46
+ ## 4. Add the datastore + wire Mongo
47
+
48
+ 1. Set `cloudgrid.yaml`. **App code MUST live under `services/<name>/`** —
49
+ `path:` is the URL mount, NOT the filesystem path.
50
+ ```yaml
51
+ name: my-board
52
+ services:
53
+ web:
54
+ type: nextjs
55
+ path: /
56
+ needs:
57
+ database: true
58
+ ```
59
+ **Declare the datastore with `needs: { database: true }`** — the canonical
60
+ shape. The deployer provisions Mongo and injects `DATABASE_MONGODB_URL` (plus
61
+ the legacy `MONGODB_URL` alias). `requires:` is the deprecated v1 alias; don't
62
+ author new yaml with it, and never set `needs:` and `requires:` together (the
63
+ validator rejects it).
64
+ 2. Fetch the template for the Mongo wiring + CRUD shape:
65
+ `gridctl_fetch("template", "kanban")`. It is a minimal, real Next.js +
66
+ `mongodb`-driver board under `services/web/`: a lazy client in
67
+ `services/web/lib/db.js`, an App-Router GET/POST/PATCH/DELETE route on a
68
+ `cards` collection (PATCH moves a card between columns), a server-component
69
+ page, and a client board.
70
+ 3. Adapt it (rename the collection, change the columns/fields, adjust the UI).
71
+ **Read the DB from `process.env.DATABASE_MONGODB_URL`** (legacy
72
+ `process.env.MONGODB_URL` fallback) — the grid injects it at dev-time and
73
+ runtime.
74
+ - **Put the DB connection behind a lazy getter — never read the connection
75
+ string at module top level, or `next build` fails.**
76
+ - (Optional) fetch `gridctl_fetch("example", "kanban")` for a richer filled
77
+ reference to imitate.
78
+
79
+ ## 5. (Optional) Run locally
80
+
81
+ Mention that the user can `grid dev` to run locally against the injected Mongo
82
+ before deploying. Don't require it.
83
+
84
+ ## 6. Config
85
+
86
+ - API keys / secrets → `gridctl_secrets`. Non-secret config → `gridctl_env`.
87
+ - Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
88
+ legacy `MONGODB_URL`) — the grid injects them.
89
+
90
+ ## 7. Deploy (async)
91
+
92
+ Deploy the folder with `gridctl_plug`. A **runtime deploy is ASYNC**: the first
93
+ response is `status: "building"`, NOT a live URL yet.
94
+ - Poll `gridctl_status` (or the returned poll_url) until the entity is live.
95
+ - Surface a liveness signal while it builds — never a bare silent wait.
96
+ - Only once it is live, return the deployed app URL (NOT the build/log link).
97
+
98
+ ## 8. Return the live URL + iterate
99
+
100
+ Give the user the live app URL — that is the deliverable. To iterate, re-plug the
101
+ SAME entity so it updates the same URL. Keep it honest: async build, local-edition
102
+ only, credentials injected by the grid.
@@ -0,0 +1,113 @@
1
+ ---
2
+ name: lms
3
+ when: "LMS, learning management system, training platform"
4
+ needs: database
5
+ deploy: runtime
6
+ editions: local
7
+ kind: blueprint
8
+ capabilities_note: "persistent — needs a database (Mongo) plus role-based auth secrets. Runtime app, async build, local edition only. Declare needs { database: true } (deployer injects DATABASE_MONGODB_URL / legacy MONGODB_URL) and a vault block mapping AUTH_PROVIDER_KEY to an env var (add STRIPE_KEY / STRIPE_WEBHOOK_SECRET only for paid courses). This is a BLUEPRINT — read AGENTS.md for the structure, then build."
9
+ summary: "Build a learning management system on the grid — a Next.js app with instructor/student role-based auth, courses organized into modules + lessons, student enrollment + per-lesson progress, and an assignment-submission + instructor-grading loop, backed by grid-shared Mongo. This is a BLUEPRINT: fetch the template, read AGENTS.md for the file tree + CloudGrid wiring (needs database true, vault for the auth secret), build the app under services/web/, deploy async, poll to a live URL."
10
+ ---
11
+
12
+ # Workflow: lms
13
+
14
+ The user wants a learning management system / training platform: instructors
15
+ publish **courses** organized into **modules** and **lessons**, **students**
16
+ enroll and work through them, and instructors **grade** submissions and track each
17
+ student's **progress**. Role-based auth (instructor vs. student) is the spine —
18
+ that is what separates an LMS from a plain content site. It is a persistent
19
+ **runtime app** backed by the grid's shared Mongo, not a static page.
20
+
21
+ **This is a BLUEPRINT.** The template does NOT ship runnable app code — it ships
22
+ the correct `cloudgrid.yaml` and an `AGENTS.md` structure guide. Your job is to
23
+ read `AGENTS.md` and build the app under `services/web/` following it.
24
+
25
+ Be honest that a runtime deploy is async (not instant like a static drop) and that
26
+ it needs the local edition.
27
+
28
+ ## 1. Edition check FIRST (hard gate)
29
+
30
+ A persistent app is a built + deployed container. It requires the **local
31
+ edition** (Claude Desktop / Claude Code) or the CLI.
32
+
33
+ - **Hosted edition (Claude Web / hosted MCP):** you CANNOT build a runtime app —
34
+ hosted is inline-only and can only publish static pages. Tell the user plainly,
35
+ offer a static course *landing* page instead, and STOP the runtime path here.
36
+ - **Local edition:** continue.
37
+
38
+ ## 2. Auth + grid
39
+
40
+ 1. Ensure signed in: `gridctl_login_status`; if not, `gridctl_login`.
41
+ 2. A grid is required. Respect the grid picker: if the user has more than one
42
+ grid, ask which to use; do not assume a target.
43
+
44
+ ## 3. Read the blueprint
45
+
46
+ Fetch the structure guide and read it before writing anything:
47
+ `gridctl_fetch("template", "lms")`. `AGENTS.md` is the CloudGrid-specific spec for
48
+ this app — the file tree under `services/web/`, the Mongo collections
49
+ (users/courses/modules/lessons/assignments/enrollments/progress/submissions/grades),
50
+ how the grid injects Mongo + the vault auth secret, the instructor/student role
51
+ gates + grading loop, and the async deploy. Do not expect the app code to exist;
52
+ you build it from the guide.
53
+
54
+ ## 4. Scaffold
55
+
56
+ `gridctl_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
57
+ and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
58
+ directory, so run `init` FIRST. Then (a) write the app under **`services/web/`**
59
+ per the AGENTS.md tree, and (b) fill `cloudgrid.yaml` to the shape below.
60
+
61
+ ## 5. cloudgrid.yaml + wiring
62
+
63
+ Set `cloudgrid.yaml`. **App code MUST live under `services/<name>/`** — `path:` is
64
+ the URL mount, NOT the filesystem path.
65
+
66
+ ```yaml
67
+ name: my-lms
68
+ vault:
69
+ AUTH_PROVIDER_KEY: auth-provider-key
70
+ services:
71
+ web:
72
+ type: nextjs
73
+ path: /
74
+ needs:
75
+ database: true
76
+ ```
77
+
78
+ - **Declare the datastore with `needs: { database: true }`** — the canonical
79
+ shape. The deployer provisions Mongo and injects `DATABASE_MONGODB_URL` (plus
80
+ the legacy `MONGODB_URL` alias). `requires:` is the deprecated v1 alias; never
81
+ author new yaml with it, and never set `needs:` and `requires:` together (the
82
+ validator rejects it).
83
+ - **Read injected vars LAZILY inside getters, never at module top level** — the DB
84
+ URL in `lib/db.js` and `AUTH_PROVIDER_KEY` in `lib/auth.js`. A top-level read
85
+ fails `next build`.
86
+ - **Enforce the instructor/student role gates on the server** (page + API route),
87
+ not just in the UI — only instructors create courses/lessons and post grades;
88
+ students submit work and read their own grades/progress. See AGENTS.md §2/§4.
89
+ - (Optional) add `STRIPE_KEY`/`STRIPE_WEBHOOK_SECRET` to `vault:` and a checkout +
90
+ webhook route only if courses are sold rather than freely enrollable.
91
+
92
+ ## 6. Config
93
+
94
+ - Secrets → `gridctl_secrets` (e.g. `grid secrets set auth-provider-key`;
95
+ `stripe-live-key`/`stripe-webhook-secret` only for paid courses). Non-secret
96
+ config → `gridctl_env` (e.g. the auth publishable key).
97
+ - Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
98
+ legacy `MONGODB_URL`) — the grid injects them.
99
+
100
+ ## 7. Deploy (async)
101
+
102
+ Deploy the folder with `gridctl_plug`. A **runtime deploy is ASYNC**: the first
103
+ response is `status: "building"`, NOT a live URL yet.
104
+ - Poll `gridctl_status` (or the returned poll_url) until the entity is live.
105
+ - Surface a liveness signal while it builds — never a bare silent wait.
106
+ - Only once it is live, return the deployed app URL (NOT the build/log link).
107
+
108
+ ## 8. Return the live URL + iterate
109
+
110
+ Give the user the live app URL — that is the deliverable. To iterate, re-plug the
111
+ SAME entity so it updates the same URL. Keep it honest: async build, local-edition
112
+ only, credentials injected by the grid. (If you added Stripe, register the webhook
113
+ to the live URL after the first deploy.)
@@ -0,0 +1,123 @@
1
+ ---
2
+ name: marketplace
3
+ when: "marketplace, multi-vendor platform, two-sided marketplace"
4
+ needs: database
5
+ deploy: runtime
6
+ editions: local
7
+ kind: blueprint
8
+ capabilities_note: "persistent — needs a database (Mongo) and payment/auth secrets. Runtime app, async build, local edition only. Declare the canonical needs:{database:true}; the deployer injects DATABASE_MONGODB_URL (+legacy MONGODB_URL). Map Stripe + auth secrets with a vault: block (STRIPE_KEY / STRIPE_WEBHOOK_SECRET / AUTH_PROVIDER_KEY) and grid secrets set the values."
9
+ summary: "A BLUEPRINT for a two-sided / multi-vendor marketplace — vendors, listings, orders, seller auth with roles, Stripe Connect payouts, and commission logic on persistent Next.js + Mongo. This is not fill-in-the-blanks app code; it ships structure + cloudgrid.yaml. Fetch the template, read AGENTS.md for the file tree / collections / CloudGrid wiring (needs + vault), then BUILD the app under services/web/ following it, and deploy async to a live URL (local edition only)."
10
+ ---
11
+
12
+ # Workflow: marketplace
13
+
14
+ The user wants a two-sided / multi-vendor marketplace — many vendors listing
15
+ products, buyers ordering, the platform taking a commission and paying sellers
16
+ out. That is a **persistent runtime app** (Next.js + the grid's shared Mongo) with
17
+ three layered concerns: **seller auth with roles**, **Stripe Connect payouts**,
18
+ and **commission logic**. It is the `app-with-data` shape plus auth + payments.
19
+
20
+ **This is a BLUEPRINT.** Unlike a fill-in-the-blanks template, it ships
21
+ *structure* — a `cloudgrid.yaml` and an `AGENTS.md` structure guide — not finished
22
+ app code. The recipe is: fetch it, **read `AGENTS.md`**, then **build** the app
23
+ following it. Be honest that a runtime deploy is async and needs the local edition.
24
+
25
+ ## 1. Edition check FIRST (hard gate)
26
+
27
+ A marketplace is a built + deployed container (Next.js + Mongo + Stripe). It
28
+ requires the **local edition** (Claude Desktop / Claude Code) or the CLI.
29
+
30
+ - **Hosted edition (Claude Web / hosted MCP):** you CANNOT build a runtime app —
31
+ hosted is inline-only and can only publish static pages. Tell the user plainly,
32
+ offer a **static storefront mockup** instead, and STOP the runtime path here.
33
+ - **Local edition:** continue.
34
+
35
+ ## 2. Auth + grid
36
+
37
+ 1. Ensure signed in: `gridctl_login_status`; if not, `gridctl_login`.
38
+ 2. A grid is required. Respect the grid picker: if the user has more than one
39
+ grid, ask which to use; do not assume a target.
40
+
41
+ ## 3. Fetch the blueprint and READ AGENTS.md
42
+
43
+ `gridctl_fetch("template", "marketplace")`. The deliverable is the **`AGENTS.md`
44
+ structure guide** — read it before writing anything. It defines:
45
+ - the `services/web/` file tree (pages, API routes, `lib/`),
46
+ - the Mongo collections (`vendors`, `listings`, `orders`) + fields,
47
+ - the CloudGrid injection table (needs + vault + AI gateway),
48
+ - how to wire auth (Clerk/Auth0 + a `role` claim) and payments (Stripe Connect
49
+ onboarding, Checkout with `application_fee` + `transfer_data.destination`, and a
50
+ signature-verified webhook),
51
+ - the deploy flow.
52
+
53
+ There is no app code to copy — you generate it from the guide.
54
+
55
+ ## 4. Scaffold + fill cloudgrid.yaml
56
+
57
+ `gridctl_init` an app `<name>` FIRST (creates the entity + `.cloudgrid/link.json`
58
+ and a starter `cloudgrid.yaml` with empty `services:{}`; `plug` needs a linked
59
+ directory). Then put the app under **`services/web/`** and set `cloudgrid.yaml` to
60
+ the blueprint's active fields:
61
+
62
+ ```yaml
63
+ name: my-marketplace
64
+ services:
65
+ web:
66
+ type: nextjs
67
+ path: /
68
+ needs:
69
+ database: true
70
+ vault:
71
+ STRIPE_KEY: stripe-live-key
72
+ STRIPE_WEBHOOK_SECRET: stripe-webhook-secret
73
+ AUTH_PROVIDER_KEY: auth-provider-key
74
+ ```
75
+
76
+ **App code MUST live under `services/<name>/`** — `path:` is the URL mount, NOT
77
+ the filesystem path. **Declare `needs: { database: true }`** (canonical) — the
78
+ deployer provisions Mongo and injects `DATABASE_MONGODB_URL` (+ legacy
79
+ `MONGODB_URL`). `requires:` is the deprecated v1 alias; never author it and never
80
+ set `needs:` and `requires:` together (the validator rejects the combination).
81
+
82
+ ## 5. Build the app following AGENTS.md
83
+
84
+ Generate the files under `services/web/` per the guide:
85
+ - **Lazy getters** for injected values — read `process.env.DATABASE_MONGODB_URL`
86
+ (legacy `MONGODB_URL` fallback) and `process.env.STRIPE_KEY` **inside** a getter,
87
+ never at module top level (a top-level read fails `next build`).
88
+ - Auth SDK (Clerk/Auth0) in `lib/auth.js` from `AUTH_PROVIDER_KEY`; role-gate the
89
+ seller dashboard + seller API routes in `middleware.js`.
90
+ - Stripe Connect: onboarding account links, Checkout with the platform fee routed
91
+ via `application_fee_amount` + `transfer_data.destination`, and a webhook that
92
+ verifies the signature with `STRIPE_WEBHOOK_SECRET` before marking orders paid.
93
+ - Commission as a pure function (`lib/commission.js`); store money as integer cents.
94
+
95
+ ## 6. Config / secrets
96
+
97
+ - Map secrets in the `vault:` block (done above), then **store the values**:
98
+ `grid secrets set stripe-live-key sk_live_…`,
99
+ `grid secrets set stripe-webhook-secret whsec_…`,
100
+ `grid secrets set auth-provider-key …`. Non-secret public config → `gridctl_env`.
101
+ - Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` / legacy
102
+ `MONGODB_URL`) — the grid injects them.
103
+
104
+ ## 7. (Optional) Run locally
105
+
106
+ Mention the user can `grid dev` to run locally against the injected dev Mongo +
107
+ secrets before deploying. Don't require it.
108
+
109
+ ## 8. Deploy (async)
110
+
111
+ Deploy the folder with `gridctl_plug`. A **runtime deploy is ASYNC**: the first
112
+ response is `status: "building"`, NOT a live URL yet.
113
+ - Poll `gridctl_status` (or the returned poll_url) until the entity is live.
114
+ - Surface a liveness signal while it builds — never a bare silent wait.
115
+ - Only once it is live, return the deployed app URL (NOT the build/log link).
116
+
117
+ ## 9. Return the live URL + iterate
118
+
119
+ Give the user the live app URL — the deliverable. Point the Stripe webhook
120
+ endpoint at `<live-url>/api/webhooks/stripe`. To iterate, re-plug the SAME entity
121
+ so it updates the same URL. Keep it honest: this is a blueprint you built from,
122
+ the build is async, it is local-edition only, and credentials are injected by the
123
+ grid (Mongo via `needs`, Stripe/auth via `vault` + `grid secrets set`).
@@ -0,0 +1,128 @@
1
+ ---
2
+ name: membership-site
3
+ when: "membership site, paid community, subscriber content, gated content"
4
+ needs: database
5
+ deploy: runtime
6
+ editions: local
7
+ kind: blueprint
8
+ capabilities_note: "persistent — needs a database (Mongo) plus auth + Stripe subscription secrets. Runtime app, async build, local edition only. Declare needs { database: true } (deployer injects DATABASE_MONGODB_URL / legacy MONGODB_URL) and a vault block mapping STRIPE_KEY / STRIPE_WEBHOOK_SECRET / AUTH_PROVIDER_KEY to env vars. This is a BLUEPRINT — read AGENTS.md for the structure, then build."
9
+ summary: "Build a paid membership site on the grid — a Next.js app with user auth, Stripe subscription checkout, gated /members/* routes that check membership status, and grid-shared Mongo (users + memberships collections). This is a BLUEPRINT: fetch the template, read AGENTS.md for the file tree + CloudGrid wiring (needs database true, vault for Stripe/auth secrets), build the app under services/web/, deploy async, poll to a live URL."
10
+ ---
11
+
12
+ # Workflow: membership-site
13
+
14
+ The user wants a paid membership site / subscriber community: visitors sign up,
15
+ subscribe via Stripe, and only paying members reach the gated content. That is a
16
+ **persistent runtime app** — a Next.js app backed by the grid's shared Mongo,
17
+ with auth and Stripe subscriptions, gated routes that check membership status.
18
+
19
+ This is a **blueprint**, not a fill-in template. There is no finished app to
20
+ copy — there is a `cloudgrid.yaml` and a structure guide (`AGENTS.md`). Read the
21
+ guide, then build the app following it. Be honest that a runtime deploy is async
22
+ (not instant like a static drop) and that it needs the local edition.
23
+
24
+ ## 1. Edition check FIRST (hard gate)
25
+
26
+ A membership site is a built + deployed container. It requires the **local
27
+ edition** (Claude Desktop / Claude Code) or the CLI.
28
+
29
+ - **Hosted edition (Claude Web / hosted MCP):** you CANNOT build a runtime app —
30
+ hosted is inline-only and can only publish static pages. Tell the user
31
+ plainly, offer a **static paywall-landing page** instead, and STOP the runtime
32
+ path here.
33
+ - **Local edition:** continue.
34
+
35
+ ## 2. Auth + grid
36
+
37
+ 1. Ensure signed in: `gridctl_login_status`; if not, `gridctl_login`.
38
+ 2. A grid is required. Respect the grid picker: if the user has more than one
39
+ grid, ask which to use; do not assume a target.
40
+
41
+ ## 3. Read the blueprint
42
+
43
+ Fetch the template and read its structure guide — this is the core of the
44
+ workflow:
45
+
46
+ - `gridctl_fetch("template", "membership-site")` — the `cloudgrid.yaml` +
47
+ **`AGENTS.md`**. AGENTS.md has the file tree, the Mongo collections
48
+ (`users`, `memberships`), the CloudGrid injection table, and the auth + Stripe
49
+ wiring. **Read it fully before building.**
50
+ - `gridctl_fetch("template", "app-with-data")` — the proven Next.js + Mongo
51
+ shape this blueprint extends (lazy db client in `lib/db.js`, App-Router
52
+ GET/POST route). Imitate its wiring.
53
+
54
+ ## 4. Scaffold
55
+
56
+ `gridctl_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
57
+ and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
58
+ directory, so run `init` FIRST. Then write the app under **`services/web/`** and
59
+ set `cloudgrid.yaml` to the active shape below.
60
+
61
+ ## 5. Build the app following AGENTS.md
62
+
63
+ Build the file tree from AGENTS.md under `services/web/`: the lazy Mongo client,
64
+ the lazy Stripe client, the auth middleware, the checkout + webhook + me API
65
+ routes, the gated `/members/*` layout, and the pricing + landing pages. Adapt the
66
+ plans, content, and document fields to the user. Key non-negotiables:
67
+
68
+ - **App code under `services/web/`** — `path:` is the URL mount, NOT the
69
+ filesystem path. Root files fail with `Service directory not found`.
70
+ - **Read the DB LAZILY** from `process.env.DATABASE_MONGODB_URL` (legacy
71
+ `process.env.MONGODB_URL` fallback) inside the getter — never at module top
72
+ level, or `next build` fails.
73
+ - **Read secrets LAZILY** too — `process.env.STRIPE_KEY`,
74
+ `STRIPE_WEBHOOK_SECRET`, `AUTH_PROVIDER_KEY` — inside getters, never top-level.
75
+ - **Gate server-side.** The `memberships` collection is the source of truth for
76
+ "have you paid"; `app/members/layout.js` checks it server-side and redirects
77
+ non-members to `/pricing`. The Stripe webhook writes membership status.
78
+
79
+ `cloudgrid.yaml` active shape:
80
+
81
+ ```yaml
82
+ name: my-membership-site
83
+ services:
84
+ web:
85
+ type: nextjs
86
+ path: /
87
+ needs:
88
+ database: true
89
+ vault:
90
+ STRIPE_KEY: stripe-live-key
91
+ STRIPE_WEBHOOK_SECRET: stripe-webhook-secret
92
+ AUTH_PROVIDER_KEY: auth-provider-key
93
+ ```
94
+
95
+ **Declare the datastore with `needs: { database: true }`** — the canonical
96
+ shape. `requires:` is the deprecated v1 alias; don't author new yaml with it, and
97
+ never set `needs:` and `requires:` together (the validator rejects it).
98
+
99
+ ## 6. Config / secrets
100
+
101
+ - Stripe + auth secrets → `gridctl_secrets` (set the vault items `stripe-live-key`,
102
+ `stripe-webhook-secret`, `auth-provider-key` that the `vault:` block maps from).
103
+ The deployer injects each as its env var at runtime and under `grid dev`.
104
+ - Non-secret config (auth publishable key `NEXT_PUBLIC_...`, Stripe price id) →
105
+ `gridctl_env` / `services.web.env`.
106
+ - Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` / legacy
107
+ `MONGODB_URL`) — the grid injects them.
108
+
109
+ ## 7. (Optional) Run locally
110
+
111
+ Mention that the user can `grid dev` to run locally against the injected Mongo
112
+ and vault secrets before deploying. Don't require it.
113
+
114
+ ## 8. Deploy (async)
115
+
116
+ Deploy the folder with `gridctl_plug`. A **runtime deploy is ASYNC**: the first
117
+ response is `status: "building"`, NOT a live URL yet.
118
+ - Poll `gridctl_status` (or the returned poll_url) until the entity is live.
119
+ - Surface a liveness signal while it builds — never a bare silent wait.
120
+ - Once live, register the `/api/webhook` URL as the Stripe webhook endpoint,
121
+ copy the signing secret into the `stripe-webhook-secret` vault item, and
122
+ re-plug. Return the deployed app URL (NOT the build/log link).
123
+
124
+ ## 9. Return the live URL + iterate
125
+
126
+ Give the user the live app URL — that is the deliverable. To iterate, re-plug the
127
+ SAME entity so it updates the same URL. Keep it honest: async build, local-edition
128
+ only, DB injected by the grid, secrets injected from the vault.
@@ -0,0 +1,104 @@
1
+ ---
2
+ name: monitoring-dashboard
3
+ when: monitoring dashboard, service health board, uptime/incident monitor (data-backed) — a persistent app that records health checks per service and shows current status + history. Needs a database → runtime → local edition.
4
+ needs: database
5
+ deploy: runtime
6
+ editions: local
7
+ capabilities_note: persistent — needs a database (Mongo). Runtime app, async build, local edition only. Declare the canonical `needs: { database: true }`; the deployer injects DATABASE_MONGODB_URL (+legacy MONGODB_URL).
8
+ summary: Build a persistent Next.js + Mongo monitoring dashboard on the grid — a `checks` collection (service, status up/degraded/down, latencyMs, at) with a current-status grid + recent history and a POST-a-check form. Edition-gate first, scaffold, put the app under services/web/, wire process.env.DATABASE_MONGODB_URL (legacy MONGODB_URL fallback) lazily, declare needs:{database:true} (not requires:), deploy async, poll to a live URL.
9
+ ---
10
+
11
+ # Workflow: monitoring-dashboard
12
+
13
+ The user wants a monitoring dashboard / service health board / uptime monitor
14
+ that **remembers** its health checks — a board whose data survives refresh and is
15
+ shared across sessions. That is a **runtime app** backed by the grid's shared
16
+ Mongo, not a static page. It is the same proven shape as `app-with-data`, with a
17
+ `checks` domain (`service`, `status` of up/degraded/down, `latencyMs`, `at`), a
18
+ current-status grid (latest check per service) and a recent-history table, plus a
19
+ form that POSTs a new check.
20
+
21
+ Follow this recipe. Be honest that a runtime deploy is async (not instant like a
22
+ static drop) and that it needs the local edition.
23
+
24
+ ## 1. Edition check FIRST (hard gate)
25
+
26
+ A persistent app is a built + deployed container. It requires the **local
27
+ edition** (Claude Desktop / Claude Code) or the CLI.
28
+
29
+ - **Hosted edition (Claude Web / hosted MCP):** you CANNOT build a runtime app —
30
+ hosted is inline-only and can only publish static pages. Tell the user
31
+ plainly, offer a **static version** instead, and STOP the runtime path here.
32
+ - **Local edition:** continue.
33
+
34
+ ## 2. Auth + grid
35
+
36
+ 1. Ensure signed in: `gridctl_login_status`; if not, `gridctl_login`.
37
+ 2. A grid is required. Respect the grid picker: if the user has more than one
38
+ grid, ask which to use; do not assume a target.
39
+
40
+ ## 3. Scaffold
41
+
42
+ `gridctl_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
43
+ and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
44
+ directory, so run `init` FIRST. Then (a) write the app under **`services/web/`**,
45
+ and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
46
+ { database: true }`).
47
+
48
+ ## 4. Add the datastore + wire Mongo
49
+
50
+ 1. Set `cloudgrid.yaml`. **App code MUST live under `services/<name>/`** —
51
+ `path:` is the URL mount, NOT the filesystem path.
52
+ ```yaml
53
+ name: my-dashboard
54
+ services:
55
+ web:
56
+ type: nextjs
57
+ path: /
58
+ needs:
59
+ database: true
60
+ ```
61
+ **Declare the datastore with `needs: { database: true }`** — the canonical
62
+ shape. The deployer provisions Mongo and injects `DATABASE_MONGODB_URL` (plus
63
+ the legacy `MONGODB_URL` alias). `requires:` is the deprecated v1 alias; don't
64
+ author new yaml with it, and never set `needs:` and `requires:` together (the
65
+ validator rejects it).
66
+ 2. Fetch the template for the Mongo wiring + CRUD shape:
67
+ `gridctl_fetch("template", "monitoring-dashboard")`. It is a minimal, real
68
+ Next.js + `mongodb`-driver health board under `services/web/`: a lazy client
69
+ in `services/web/lib/db.js`, an App-Router GET/POST/DELETE route on a `checks`
70
+ collection, a server-component page that derives the status grid, and a client
71
+ component with the record-check form + status grid + history table.
72
+ 3. Adapt it (rename the collection, change fields, adjust the UI). **Read the DB
73
+ from `process.env.DATABASE_MONGODB_URL`** (legacy `process.env.MONGODB_URL`
74
+ fallback) — the grid injects it at dev-time and runtime.
75
+ - **Put the DB connection behind a lazy getter — never read the connection
76
+ string at module top level, or `next build` fails.**
77
+ - The `checks` route validates `status` against `up`/`degraded`/`down` and
78
+ `latencyMs` as an optional non-negative number; the status grid is the
79
+ latest check per service.
80
+
81
+ ## 5. (Optional) Run locally
82
+
83
+ Mention that the user can `grid dev` to run locally against the injected Mongo
84
+ before deploying. Don't require it.
85
+
86
+ ## 6. Config
87
+
88
+ - API keys / secrets → `gridctl_secrets`. Non-secret config → `gridctl_env`.
89
+ - Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
90
+ legacy `MONGODB_URL`) — the grid injects them.
91
+
92
+ ## 7. Deploy (async)
93
+
94
+ Deploy the folder with `gridctl_plug`. A **runtime deploy is ASYNC**: the first
95
+ response is `status: "building"`, NOT a live URL yet.
96
+ - Poll `gridctl_status` (or the returned poll_url) until the entity is live.
97
+ - Surface a liveness signal while it builds — never a bare silent wait.
98
+ - Only once it is live, return the deployed app URL (NOT the build/log link).
99
+
100
+ ## 8. Return the live URL + iterate
101
+
102
+ Give the user the live app URL — that is the deliverable. To iterate, re-plug the
103
+ SAME entity so it updates the same URL. Keep it honest: async build, local-edition
104
+ only, credentials injected by the grid.