@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,128 @@
1
+ ---
2
+ name: forum
3
+ when: "forum, discussion board, community forum, threaded discussions"
4
+ needs: database
5
+ deploy: runtime
6
+ editions: local
7
+ kind: blueprint
8
+ capabilities_note: >-
9
+ persistent — needs a database (Mongo). Runtime app, async build, local edition
10
+ only. Sign-in-to-post auth via a hosted provider (Clerk/Auth0) with keys from
11
+ the org vault (vault block maps items to env vars). Declare the canonical needs
12
+ database=true; the deployer injects DATABASE_MONGODB_URL (+legacy MONGODB_URL).
13
+ BLUEPRINT — ships structure + cloudgrid.yaml, not app code.
14
+ summary: >-
15
+ Build a persistent threaded community forum on the grid — Next.js + Mongo with
16
+ threads / posts (self-referential parentId nesting) / users collections,
17
+ sign-in-to-post auth via a hosted provider (keys from the vault block), and
18
+ moderation. This is a BLUEPRINT — read templates/forum/AGENTS.md for the file
19
+ tree, Mongo schema, secret/DB injection, and auth wiring, then build the app
20
+ under services/web/. Edition-gate first, scaffold, declare needs database=true
21
+ (not requires) plus a vault block for auth keys, deploy async, poll to a live URL.
22
+ ---
23
+
24
+ # Workflow: forum
25
+
26
+ The user wants a **community forum / discussion board** — members sign in, start
27
+ threads, and post **nested replies**, with moderation. That is a **persistent
28
+ runtime app** backed by the grid's shared Mongo, not a static page: threads and
29
+ replies must survive refresh and be shared across everyone. The shape mirrors the
30
+ proven `app-with-data` template, with a `threads` → `posts` domain (self-referential
31
+ `parentId` nesting) plus a thin `users` mirror, and sign-in-to-post auth via a
32
+ hosted provider.
33
+
34
+ **This is a BLUEPRINT.** The `forum` template ships the STRUCTURE and the
35
+ `cloudgrid.yaml`, not runnable app code. **Read `templates/forum/AGENTS.md`
36
+ first** — it is the structure guide (file tree, Mongo collections + fields, how
37
+ CloudGrid injects the DB + vault secrets, how to wire auth + moderation, deploy
38
+ steps) — then build the app under `services/web/` following it.
39
+
40
+ Be honest that a runtime deploy is async (not instant like a static drop) and
41
+ that it needs the local edition.
42
+
43
+ ## 1. Edition check FIRST (hard gate)
44
+
45
+ A persistent app is a built + deployed container. It requires the **local
46
+ edition** (Claude Desktop / Claude Code) or the CLI.
47
+
48
+ - **Hosted edition (Claude Web / hosted MCP):** you CANNOT build a runtime app —
49
+ hosted is inline-only and can only publish static pages. Tell the user
50
+ plainly, offer a **static read-only mock** instead, and STOP the runtime path.
51
+ - **Local edition:** continue.
52
+
53
+ ## 2. Auth + grid
54
+
55
+ 1. Ensure signed in: `gridctl_login_status`; if not, `gridctl_login`.
56
+ 2. A grid is required. Respect the grid picker: if the user has more than one
57
+ grid, ask which to use; do not assume a target.
58
+
59
+ ## 3. Read the blueprint, then scaffold
60
+
61
+ 1. **Fetch the blueprint: `gridctl_fetch("template", "forum")`** and read
62
+ `AGENTS.md` — it defines the file tree, the `threads` / `posts` / `users`
63
+ collections + fields, the nesting model, and the CloudGrid wiring. This is the
64
+ spec you build to.
65
+ 2. `gridctl_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
66
+ and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a
67
+ linked directory, so run `init` FIRST. Then write the app under
68
+ **`services/web/`** and fill `cloudgrid.yaml` to the shape below.
69
+
70
+ ## 4. Build the app + wire Mongo, auth, moderation
71
+
72
+ Follow `AGENTS.md`. Set `cloudgrid.yaml` to the active shape (app code lives under
73
+ `services/web/`; `path:` is the URL mount, NOT the filesystem path):
74
+
75
+ ```yaml
76
+ name: my-forum
77
+ services:
78
+ web:
79
+ type: nextjs
80
+ path: /
81
+ vault:
82
+ AUTH_PROVIDER_SECRET_KEY: auth-provider-secret-key
83
+ AUTH_PROVIDER_PUBLISHABLE_KEY: auth-provider-publishable-key
84
+ needs:
85
+ database: true
86
+ ```
87
+
88
+ - **Declare the datastore with `needs: { database: true }`** — the canonical
89
+ shape. The deployer provisions Mongo and injects `DATABASE_MONGODB_URL` (plus
90
+ the legacy `MONGODB_URL` alias). `requires:` is the deprecated v1 alias — don't
91
+ author new yaml with it, and never set `needs:` and `requires:` together (the
92
+ validator rejects it).
93
+ - **Read the DB from `process.env.DATABASE_MONGODB_URL`** (legacy `MONGODB_URL`
94
+ fallback) behind a **lazy getter** in `services/web/lib/db.js` — never read the
95
+ connection string at module top level, or `next build` fails.
96
+ - **Auth (sign-in-to-post):** add a hosted provider SDK (Clerk / Auth0). Map the
97
+ provider's keys through the `vault:` block → env vars (rename to the exact env
98
+ names the SDK expects, e.g. `CLERK_SECRET_KEY`). Reading threads is public;
99
+ `POST`/`PATCH`/`DELETE` require a session (guard in `middleware.js` + the write
100
+ routes). See `AGENTS.md` §4.
101
+ - **Moderation:** allow delete/edit only for the author or a `moderator` role;
102
+ prefer **soft delete** on posts (`deleted: true`) so the reply tree stays intact.
103
+
104
+ ## 5. (Optional) Run locally
105
+
106
+ Mention that the user can `grid dev` to run locally against the injected Mongo
107
+ (and vault-injected auth keys) before deploying. Don't require it.
108
+
109
+ ## 6. Config
110
+
111
+ - Auth-provider keys / secrets → the `vault:` block + `gridctl_secrets`. Non-secret
112
+ config → `gridctl_env`.
113
+ - Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
114
+ legacy `MONGODB_URL`) — the grid injects them.
115
+
116
+ ## 7. Deploy (async)
117
+
118
+ Deploy the folder with `gridctl_plug`. A **runtime deploy is ASYNC**: the first
119
+ response is `status: "building"`, NOT a live URL yet.
120
+ - Poll `gridctl_status` (or the returned poll_url) until the entity is live.
121
+ - Surface a liveness signal while it builds — never a bare silent wait.
122
+ - Only once it is live, return the deployed app URL (NOT the build/log link).
123
+
124
+ ## 8. Return the live URL + iterate
125
+
126
+ Give the user the live forum URL — that is the deliverable. To iterate, re-plug
127
+ the SAME entity so it updates the same URL. Keep it honest: this is a blueprint you
128
+ built out, async build, local-edition only, credentials injected by the grid.
@@ -0,0 +1,115 @@
1
+ ---
2
+ name: hr-portal
3
+ when: HR portal, employee portal, HR management, leave/PTO system — a persistent app where employees submit leave/PTO requests and admins approve them, with employee/admin auth. Needs a database + auth provider → runtime → local edition.
4
+ needs: database
5
+ deploy: runtime
6
+ editions: local
7
+ kind: blueprint
8
+ capabilities_note: persistent — needs a database (Mongo) + a provider SDK auth (Clerk/Auth0) with keys from the vault. Runtime app, async build, local edition only. Declare `needs: { database: true }` (deployer injects DATABASE_MONGODB_URL / legacy MONGODB_URL) and a `vault:` block for the auth keys. This is a BLUEPRINT — no app code ships; read AGENTS.md for the structure, then build.
9
+ summary: Build a persistent Next.js + Mongo HR/employee portal on the grid with employee/admin auth (Clerk/Auth0, keys from vault:) and a leave/PTO request + approval flow — `employees` + `leaveRequests` collections. This is a BLUEPRINT: fetch it, read AGENTS.md for the file tree + CloudGrid wiring (DATABASE_MONGODB_URL, vault keys, deploy), then build the app under services/web/. Edition-gate first, scaffold, declare needs:{database:true} + vault: auth keys (never requires:), deploy async, poll to a live URL.
10
+ ---
11
+
12
+ # Workflow: hr-portal
13
+
14
+ The user wants an HR / employee portal — employees submit leave/PTO requests,
15
+ admins approve or reject them, gated by employee/admin auth. HR records and leave
16
+ requests must **remember** across refresh and be shared across users, so this is
17
+ a **persistent runtime app** backed by the grid's shared Mongo with a provider
18
+ SDK for auth — not a static page.
19
+
20
+ This is a **blueprint**. No app code ships. Fetch the template, **read its
21
+ `AGENTS.md` for the structure** (file tree, `employees` + `leaveRequests`
22
+ collections, CloudGrid wiring for DB + vault-backed auth keys, deploy flow), then
23
+ build the app following it.
24
+
25
+ Follow this recipe. Be honest that a runtime deploy is async (not instant like a
26
+ static drop) and that it needs the local edition.
27
+
28
+ ## 1. Edition check FIRST (hard gate)
29
+
30
+ A persistent, auth-gated app is a built + deployed container. It requires the
31
+ **local 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 mock** 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. Fetch the blueprint + read AGENTS.md
45
+
46
+ `gridctl_fetch("template", "hr-portal")`. It returns `cloudgrid.yaml`, `AGENTS.md`
47
+ (the structure guide), and the README — **no app code**. Read `AGENTS.md` end to
48
+ end before writing anything: it defines the `services/web/` file tree, the Mongo
49
+ collections + fields, how CloudGrid injects the DB and vault-backed auth keys, how
50
+ to wire employee/admin auth, and the deploy steps.
51
+
52
+ ## 4. Scaffold
53
+
54
+ `gridctl_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
55
+ and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
56
+ directory, so run `init` FIRST. Then (a) build the app under **`services/web/`**
57
+ following `AGENTS.md`, and (b) fill `cloudgrid.yaml` to the shape below.
58
+
59
+ ## 5. Build the app + set cloudgrid.yaml
60
+
61
+ 1. Build the Next.js app under `services/web/` per `AGENTS.md` — the
62
+ `employees` + `leaveRequests` collections, the leave-request + approval flow,
63
+ the employee dashboard + admin queue, and the auth wiring (provider in the
64
+ layout, middleware gate, server-side role checks).
65
+ **App code MUST live under `services/<name>/`** — `path:` is the URL mount,
66
+ NOT the filesystem path.
67
+ 2. Set `cloudgrid.yaml` to the active shape:
68
+ ```yaml
69
+ name: my-hr-portal
70
+ services:
71
+ web:
72
+ type: nextjs
73
+ path: /
74
+ vault:
75
+ AUTH_PROVIDER_SECRET_KEY: auth-provider-secret-key
76
+ AUTH_PROVIDER_PUBLISHABLE_KEY: auth-provider-publishable-key
77
+ needs:
78
+ database: true
79
+ ```
80
+ **Declare the datastore with `needs: { database: true }`** — the canonical
81
+ shape. The deployer provisions Mongo and injects `DATABASE_MONGODB_URL` (plus
82
+ the legacy `MONGODB_URL` alias). Read it **lazily inside a getter**, never at
83
+ module top level (a top-level read fails `next build`). `requires:` is the
84
+ deprecated v1 alias; don't author new yaml with it, and never set `needs:` and
85
+ `requires:` together (the validator rejects it).
86
+ 3. **Auth keys come from the `vault:` block, not committed env files.** The
87
+ `vault:` map injects the provider's secret + publishable keys as env vars at
88
+ build + runtime.
89
+
90
+ ## 6. Config
91
+
92
+ - Create the vault items the `vault:` block references (the auth provider's
93
+ secret + publishable keys) — `gridctl_secrets` / vault UI. Never commit them.
94
+ - Non-secret config → `gridctl_env`.
95
+ - Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
96
+ legacy `MONGODB_URL`) — the grid injects them.
97
+
98
+ ## 7. (Optional) Run locally
99
+
100
+ Mention that the user can `grid dev` to run locally against the injected Mongo +
101
+ vault env vars before deploying. Don't require it.
102
+
103
+ ## 8. Deploy (async)
104
+
105
+ Deploy the folder with `gridctl_plug`. A **runtime deploy is ASYNC**: the first
106
+ response is `status: "building"`, NOT a live URL yet.
107
+ - Poll `gridctl_status` (or the returned poll_url) until the entity is live.
108
+ - Surface a liveness signal while it builds — never a bare silent wait.
109
+ - Only once it is live, return the deployed app URL (NOT the build/log link).
110
+
111
+ ## 9. Return the live URL + iterate
112
+
113
+ Give the user the live app URL — that is the deliverable. To iterate, re-plug the
114
+ SAME entity so it updates the same URL. Keep it honest: async build, local-edition
115
+ only, DB + auth credentials injected by the grid / vault.
@@ -0,0 +1,125 @@
1
+ ---
2
+ name: internal-tools-portal
3
+ when: internal tools portal, admin tools hub, back-office portal — a persistent app hosting several internal tools behind staff-only auth, with RBAC where each tool is its own route. Needs a database + auth provider → runtime → local edition.
4
+ needs: database
5
+ deploy: runtime
6
+ editions: local
7
+ kind: blueprint
8
+ capabilities_note: persistent — needs a database (Mongo) + a provider SDK auth (Clerk/Auth0) with keys from the vault, RBAC on staff records. Runtime app, async build, local edition only. Declare `needs: { database: true }` (deployer injects DATABASE_MONGODB_URL / legacy MONGODB_URL) and a `vault:` block for the auth keys. This is a BLUEPRINT — no app code ships; read AGENTS.md for the structure, then build.
9
+ summary: Build a persistent Next.js + Mongo internal tools portal on the grid with staff-only auth (Clerk/Auth0, keys from vault:), RBAC, and each internal tool as its own route — `staff` + `toolData` + `auditLog` collections. This is a BLUEPRINT: fetch it, read AGENTS.md for the file tree + CloudGrid wiring (DATABASE_MONGODB_URL, vault keys, tool registry, deploy), then build the app under services/web/. Edition-gate first, scaffold, declare needs:{database:true} + vault: auth keys (never requires:), deploy async, poll to a live URL.
10
+ ---
11
+
12
+ # Workflow: internal-tools-portal
13
+
14
+ The user wants an internal tools portal / admin tools hub / back-office portal —
15
+ several internal tools (feature flags, refund console, data lookups, ops actions)
16
+ living behind **staff-only auth** in one place, with **role-based access control**
17
+ where **each tool is its own route**. Staff records, tool data, and the audit
18
+ trail must **remember** across refresh and be shared across the team, so this is a
19
+ **persistent runtime app** backed by the grid's shared Mongo with a provider SDK
20
+ for auth — not a static page.
21
+
22
+ This is a **blueprint**. No app code ships. Fetch the template, **read its
23
+ `AGENTS.md` for the structure** (file tree, `staff` + `toolData` + `auditLog`
24
+ collections, the `lib/tools.js` tool registry, CloudGrid wiring for DB +
25
+ vault-backed auth keys, RBAC, deploy flow), then build the app following it.
26
+
27
+ Follow this recipe. Be honest that a runtime deploy is async (not instant like a
28
+ static drop) and that it needs the local edition.
29
+
30
+ ## 1. Edition check FIRST (hard gate)
31
+
32
+ A persistent, auth-gated app is a built + deployed container. It requires the
33
+ **local edition** (Claude Desktop / Claude Code) or the CLI.
34
+
35
+ - **Hosted edition (Claude Web / hosted MCP):** you CANNOT build a runtime app —
36
+ hosted is inline-only and can only publish static pages. Tell the user plainly,
37
+ offer a **static mock** instead, and STOP the runtime path here.
38
+ - **Local edition:** continue.
39
+
40
+ ## 2. Auth + grid
41
+
42
+ 1. Ensure signed in: `gridctl_login_status`; if not, `gridctl_login`.
43
+ 2. A grid is required. Respect the grid picker: if the user has more than one
44
+ grid, ask which to use; do not assume a target.
45
+
46
+ ## 3. Fetch the blueprint + read AGENTS.md
47
+
48
+ `gridctl_fetch("template", "internal-tools-portal")`. It returns `cloudgrid.yaml`,
49
+ `AGENTS.md` (the structure guide), and the README — **no app code**. Read
50
+ `AGENTS.md` end to end before writing anything: it defines the `services/web/`
51
+ file tree, the Mongo collections + fields, the tool registry, how CloudGrid injects
52
+ the DB and vault-backed auth keys, how to wire staff-only auth + RBAC, and the
53
+ deploy steps.
54
+
55
+ ## 4. Scaffold
56
+
57
+ `gridctl_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
58
+ and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
59
+ directory, so run `init` FIRST. Then (a) build the app under **`services/web/`**
60
+ following `AGENTS.md`, and (b) fill `cloudgrid.yaml` to the shape below.
61
+
62
+ ## 5. Build the app + set cloudgrid.yaml
63
+
64
+ 1. Build the Next.js app under `services/web/` per `AGENTS.md` — the
65
+ `staff` + `toolData` + `auditLog` collections, the tool registry in
66
+ `lib/tools.js`, the hub (`app/page.js`) that shows only the tools the signed-in
67
+ staffer's roles allow, each tool as its own route (`app/tools/[tool]/`), the
68
+ admin user/role management, and the auth wiring (provider in the layout,
69
+ staff-only middleware gate, server-side role checks per tool + mutation).
70
+ **App code MUST live under `services/<name>/`** — `path:` is the URL mount,
71
+ NOT the filesystem path.
72
+ 2. Set `cloudgrid.yaml` to the active shape:
73
+ ```yaml
74
+ name: my-internal-tools-portal
75
+ services:
76
+ web:
77
+ type: nextjs
78
+ path: /
79
+ vault:
80
+ AUTH_PROVIDER_SECRET_KEY: auth-provider-secret-key
81
+ AUTH_PROVIDER_PUBLISHABLE_KEY: auth-provider-publishable-key
82
+ needs:
83
+ database: true
84
+ ```
85
+ **Declare the datastore with `needs: { database: true }`** — the canonical
86
+ shape. The deployer provisions Mongo and injects `DATABASE_MONGODB_URL` (plus
87
+ the legacy `MONGODB_URL` alias). Read it **lazily inside a getter**, never at
88
+ module top level (a top-level read fails `next build`). `requires:` is the
89
+ deprecated v1 alias; don't author new yaml with it, and never set `needs:` and
90
+ `requires:` together (the validator rejects it).
91
+ 3. **Auth keys come from the `vault:` block, not committed env files.** The
92
+ `vault:` map injects the provider's secret + publishable keys as env vars at
93
+ build + runtime. A tool that calls a third-party API adds one more `vault:`
94
+ line per secret.
95
+ 4. **RBAC is server-side.** Roles live on the `staff` Mongo record; the hub
96
+ hiding a card is UX only. Every tool page + API re-checks `requireRole`
97
+ server-side and appends mutations to `auditLog`.
98
+
99
+ ## 6. Config
100
+
101
+ - Create the vault items the `vault:` block references (the auth provider's
102
+ secret + publishable keys, plus any per-tool API secrets) — `gridctl_secrets` /
103
+ vault UI. Never commit them.
104
+ - Non-secret config → `gridctl_env`.
105
+ - Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
106
+ legacy `MONGODB_URL`) — the grid injects them.
107
+
108
+ ## 7. (Optional) Run locally
109
+
110
+ Mention that the user can `grid dev` to run locally against the injected Mongo +
111
+ vault env vars before deploying. Don't require it.
112
+
113
+ ## 8. Deploy (async)
114
+
115
+ Deploy the folder with `gridctl_plug`. A **runtime deploy is ASYNC**: the first
116
+ response is `status: "building"`, NOT a live URL yet.
117
+ - Poll `gridctl_status` (or the returned poll_url) until the entity is live.
118
+ - Surface a liveness signal while it builds — never a bare silent wait.
119
+ - Only once it is live, return the deployed app URL (NOT the build/log link).
120
+
121
+ ## 9. Return the live URL + iterate
122
+
123
+ Give the user the live app URL — that is the deliverable. To iterate, re-plug the
124
+ SAME entity so it updates the same URL. Keep it honest: async build, local-edition
125
+ only, DB + auth credentials injected by the grid / vault.
@@ -0,0 +1,101 @@
1
+ ---
2
+ name: inventory
3
+ when: inventory management, stock tracker, warehouse, product stock, SKU manager — a persistent app that stores items (sku, name, qty, location, reorder_at) with quantity adjustments and a low-stock flag. 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 inventory / stock tracker on the grid — an `items` collection (sku, name, qty, location, reorder_at) with add / adjust-qty / delete and a low-stock flag. 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: inventory
12
+
13
+ The user wants a items app that **remembers** its
14
+ records — they survive refresh and are 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 `items` domain
17
+ (sku, name, qty, location, reorder_at) and a table view with add, per-row quantity adjustments (+/-), delete, and a low-stock flag.
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-inventory
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). The template ships this file in the **full-annotated
64
+ reference form** — every field present as a comment, only `name`,
65
+ `services.web`, and `needs.database` uncommented — so it deploys to exactly
66
+ those active fields.
67
+ 2. Fetch the template for the Mongo wiring + CRUD shape:
68
+ `gridctl_fetch("template", "inventory")`. It is a minimal, real Next.js +
69
+ `mongodb`-driver app under `services/web/`: a lazy client in
70
+ `services/web/lib/db.js`, an App-Router GET/POST/PATCH (adjust qty)/DELETE route on an `items` collection, a
71
+ server-component page, and a client component.
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
+
78
+ ## 5. (Optional) Run locally
79
+
80
+ Mention that the user can `grid dev` to run locally against the injected Mongo
81
+ before deploying. Don't require it.
82
+
83
+ ## 6. Config
84
+
85
+ - API keys / secrets → `gridctl_secrets`. Non-secret config → `gridctl_env`.
86
+ - Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
87
+ legacy `MONGODB_URL`) — the grid injects them.
88
+
89
+ ## 7. Deploy (async)
90
+
91
+ Deploy the folder with `gridctl_plug`. A **runtime deploy is ASYNC**: the first
92
+ response is `status: "building"`, NOT a live URL yet.
93
+ - Poll `gridctl_status` (or the returned poll_url) until the entity is live.
94
+ - Surface a liveness signal while it builds — never a bare silent wait.
95
+ - Only once it is live, return the deployed app URL (NOT the build/log link).
96
+
97
+ ## 8. Return the live URL + iterate
98
+
99
+ Give the user the live app URL — that is the deliverable. To iterate, re-plug the
100
+ SAME entity so it updates the same URL. Keep it honest: async build, local-edition
101
+ only, credentials injected by the grid.
@@ -0,0 +1,101 @@
1
+ ---
2
+ name: invoice
3
+ when: invoice system, invoicing, billing invoices, send invoices, invoice tracker — a persistent app that stores and manages invoices (number, client, amount, status, due) with add / mark-paid / delete. 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 invoice tracker on the grid — an `invoices` collection (number, client, amount, status draft/sent/paid, due) with add / mark-paid / 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: invoice
12
+
13
+ The user wants a invoices app that **remembers** its
14
+ records — they survive refresh and are 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 `invoices` domain
17
+ (number, client, amount, status of draft/sent/paid, due date) and a table view with add, per-row status changes (mark sent / paid), and delete.
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-invoices
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). The template ships this file in the **full-annotated
64
+ reference form** — every field present as a comment, only `name`,
65
+ `services.web`, and `needs.database` uncommented — so it deploys to exactly
66
+ those active fields.
67
+ 2. Fetch the template for the Mongo wiring + CRUD shape:
68
+ `gridctl_fetch("template", "invoice")`. It is a minimal, real Next.js +
69
+ `mongodb`-driver app under `services/web/`: a lazy client in
70
+ `services/web/lib/db.js`, an App-Router GET/POST/PATCH/DELETE route on an `invoices` collection, a
71
+ server-component page, and a client component.
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
+
78
+ ## 5. (Optional) Run locally
79
+
80
+ Mention that the user can `grid dev` to run locally against the injected Mongo
81
+ before deploying. Don't require it.
82
+
83
+ ## 6. Config
84
+
85
+ - API keys / secrets → `gridctl_secrets`. Non-secret config → `gridctl_env`.
86
+ - Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
87
+ legacy `MONGODB_URL`) — the grid injects them.
88
+
89
+ ## 7. Deploy (async)
90
+
91
+ Deploy the folder with `gridctl_plug`. A **runtime deploy is ASYNC**: the first
92
+ response is `status: "building"`, NOT a live URL yet.
93
+ - Poll `gridctl_status` (or the returned poll_url) until the entity is live.
94
+ - Surface a liveness signal while it builds — never a bare silent wait.
95
+ - Only once it is live, return the deployed app URL (NOT the build/log link).
96
+
97
+ ## 8. Return the live URL + iterate
98
+
99
+ Give the user the live app URL — that is the deliverable. To iterate, re-plug the
100
+ SAME entity so it updates the same URL. Keep it honest: async build, local-edition
101
+ only, credentials injected by the grid.
@@ -0,0 +1,101 @@
1
+ ---
2
+ name: job-board
3
+ when: job board, careers page, job listings, hiring board, open roles — a persistent app that stores job postings (title, company, location, type, url) with a public list and post / delete. 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 job board on the grid — a `jobs` collection (title, company, location, type, url) with a public list and post / 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: job-board
12
+
13
+ The user wants a job board app that **remembers** its
14
+ records — they survive refresh and are 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 `jobs` domain
17
+ (title, company, location, type, url) and a public list with post and delete.
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-jobs
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). The template ships this file in the **full-annotated
64
+ reference form** — every field present as a comment, only `name`,
65
+ `services.web`, and `needs.database` uncommented — so it deploys to exactly
66
+ those active fields.
67
+ 2. Fetch the template for the Mongo wiring + CRUD shape:
68
+ `gridctl_fetch("template", "job-board")`. It is a minimal, real Next.js +
69
+ `mongodb`-driver app under `services/web/`: a lazy client in
70
+ `services/web/lib/db.js`, an App-Router GET/POST/DELETE route on a `jobs` collection, a
71
+ server-component page, and a client component.
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
+
78
+ ## 5. (Optional) Run locally
79
+
80
+ Mention that the user can `grid dev` to run locally against the injected Mongo
81
+ before deploying. Don't require it.
82
+
83
+ ## 6. Config
84
+
85
+ - API keys / secrets → `gridctl_secrets`. Non-secret config → `gridctl_env`.
86
+ - Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
87
+ legacy `MONGODB_URL`) — the grid injects them.
88
+
89
+ ## 7. Deploy (async)
90
+
91
+ Deploy the folder with `gridctl_plug`. A **runtime deploy is ASYNC**: the first
92
+ response is `status: "building"`, NOT a live URL yet.
93
+ - Poll `gridctl_status` (or the returned poll_url) until the entity is live.
94
+ - Surface a liveness signal while it builds — never a bare silent wait.
95
+ - Only once it is live, return the deployed app URL (NOT the build/log link).
96
+
97
+ ## 8. Return the live URL + iterate
98
+
99
+ Give the user the live app URL — that is the deliverable. To iterate, re-plug the
100
+ SAME entity so it updates the same URL. Keep it honest: async build, local-edition
101
+ only, credentials injected by the grid.