@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,114 @@
1
+ ---
2
+ name: online-store
3
+ when: online store, e-commerce store, shop with checkout, sell products online
4
+ needs: database
5
+ deploy: runtime
6
+ editions: local
7
+ kind: blueprint
8
+ capabilities_note: persistent + payments — needs a database (Mongo) and Stripe. Runtime app, async build, local edition only. This is a BLUEPRINT — read the template's AGENTS.md for the structure, then build the app. Declare the canonical `needs: { database: true }`; the deployer injects DATABASE_MONGODB_URL (+legacy MONGODB_URL). The Stripe key comes from the vault: block → STRIPE_KEY.
9
+ summary: Build a persistent Next.js + Mongo + Stripe online store on the grid — storefront, cart, /api/checkout Stripe session, signature-verified Stripe webhook, orders in Mongo. This is a BLUEPRINT: edition-gate first, scaffold, fetch the template and read AGENTS.md for the file tree + wiring, put the app under services/web/, wire process.env.DATABASE_MONGODB_URL lazily and STRIPE_KEY from the vault, declare needs:{database:true} (not requires:), deploy async, poll to a live URL, register the webhook in Stripe.
10
+ ---
11
+
12
+ # Workflow: online-store
13
+
14
+ The user wants to **sell products online** — a storefront with a cart and real
15
+ checkout. That is a **runtime app** backed by the grid's shared Mongo (`products`
16
+ + `orders`) plus **Stripe** for payments: a `/api/checkout` route that creates a
17
+ Stripe Checkout Session and a signature-verified webhook that confirms payment
18
+ and records the order. Not a static page — it must remember products and orders.
19
+
20
+ **This is a BLUEPRINT.** The template ships the structure + `cloudgrid.yaml`, not
21
+ finished app code. The build shape is proven `app-with-data` (Next.js App Router,
22
+ lazy Mongo, app under `services/web/`) plus a second collection and Stripe wiring.
23
+ Be honest that a runtime deploy is async (not instant) and needs the local edition.
24
+
25
+ ## 1. Edition check FIRST (hard gate)
26
+
27
+ A persistent store is a built + deployed container. It requires the **local
28
+ 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. Say so plainly, offer
32
+ a **static storefront preview** 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. Scaffold
42
+
43
+ `gridctl_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
44
+ and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
45
+ directory, so run `init` FIRST.
46
+
47
+ ## 4. Fetch the blueprint and read AGENTS.md
48
+
49
+ This is a blueprint — the structure guide is the deliverable, not copy-paste code.
50
+
51
+ 1. `gridctl_fetch("template", "online-store")`.
52
+ 2. **Read `AGENTS.md`** in the fetched template. It has: the file tree (app under
53
+ `services/web/`), the Mongo collections (`products`, `orders`) and their
54
+ fields, how the grid injects Mongo (`DATABASE_MONGODB_URL`) and the Stripe key
55
+ (the `vault:` block → `STRIPE_KEY`), the checkout + webhook wiring, and the
56
+ deploy steps. Build the app following it.
57
+ 3. Set `cloudgrid.yaml` to the shape below. **App code MUST live under
58
+ `services/web/`** — `path:` is the URL mount, NOT the filesystem path.
59
+ ```yaml
60
+ name: my-store
61
+ vault:
62
+ STRIPE_KEY: stripe-live-key
63
+ services:
64
+ web:
65
+ type: nextjs
66
+ path: /
67
+ needs:
68
+ database: true
69
+ ```
70
+ **Declare the datastore with `needs: { database: true }`** — the canonical
71
+ shape. The deployer provisions Mongo and injects `DATABASE_MONGODB_URL` (plus
72
+ the legacy `MONGODB_URL` alias). `requires:` is the deprecated v1 alias; never
73
+ set `needs:` and `requires:` together (the validator rejects it).
74
+
75
+ ## 5. Build the app (following AGENTS.md)
76
+
77
+ - **Read the DB from `process.env.DATABASE_MONGODB_URL`** (legacy `MONGODB_URL`
78
+ fallback) inside a **lazy getter** — never at module top level, or `next build`
79
+ fails. Never hardcode a connection string.
80
+ - **Read the Stripe key from `process.env.STRIPE_KEY`** (injected by the `vault:`
81
+ block) lazily. Build Stripe line items from the server-side `products`
82
+ collection — never trust prices sent by the browser.
83
+ - The **webhook** reads the RAW request body (`await request.text()`), verifies
84
+ the Stripe signature, and upserts the `orders` doc by `stripeSessionId`
85
+ (idempotent), setting `status: "paid"` from the verified event.
86
+ - (Optional) `grid dev` to run locally against the injected Mongo + a Stripe test
87
+ key before deploying.
88
+
89
+ ## 6. Config
90
+
91
+ - Stripe secrets → the vault: `gridctl_secrets` to set `stripe-live-key` (and a
92
+ `stripe-webhook-secret` if you map one). The `vault:` block turns them into env
93
+ vars. Non-secret config → `gridctl_env`.
94
+ - Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` /
95
+ `MONGODB_URL`) — the grid injects them.
96
+
97
+ ## 7. Deploy (async)
98
+
99
+ Deploy the folder with `gridctl_plug`. A **runtime deploy is ASYNC**: the first
100
+ response is `status: "building"`, NOT a live URL yet.
101
+ - Poll `gridctl_status` (or the returned poll_url) until the entity is live.
102
+ - Surface a liveness signal while it builds — never a bare silent wait.
103
+ - Only once it is live, return the deployed app URL (NOT the build/log link).
104
+
105
+ ## 8. Wire the Stripe webhook + return the live URL
106
+
107
+ 1. Register `<live-url>/api/webhook` as a webhook endpoint in the Stripe
108
+ dashboard, copy its `whsec_…` secret into the vault, and re-`gridctl_plug` the
109
+ SAME entity if you changed the `vault:` mapping (same URL).
110
+ 2. Give the user the live store URL — that is the deliverable. To iterate, re-plug
111
+ the SAME entity so it updates the same URL.
112
+
113
+ Keep it honest: blueprint (build from AGENTS.md), async build, local-edition only,
114
+ Mongo + Stripe credentials injected by the grid / vault.
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: portfolio
3
+ when: portfolio, personal site, freelancer site, my work, showcase, resume site, developer/designer portfolio with a projects grid, about, skills, and contact. For a plain single-section link-in-bio, landing-page also works.
4
+ needs: none
5
+ deploy: inspiration
6
+ editions: all
7
+ capabilities_note: static — no infrastructure. Publishes as an inspiration (instant, works on hosted) via gridctl_drop.
8
+ summary: Fetch the portfolio template, fill it with the user's projects and bio, deploy it, and return the live share URL.
9
+ ---
10
+
11
+ # Workflow: portfolio
12
+
13
+ Detect the intent ("build me a portfolio / personal site to show my work") and
14
+ follow this recipe. Reach for this over `landing-page` when the request is about
15
+ showcasing projects with an about, skills, and contact. Do not ask setup
16
+ questions first; use sensible defaults and build.
17
+
18
+ 1. **Fetch the template.** Call `gridctl_fetch("template", "portfolio")` to load
19
+ the self-contained HTML portfolio (hero, about, skills, projects grid,
20
+ contact).
21
+ 2. **Fill the template.** Replace the placeholders with the user's content:
22
+ - The person's name, role/title, and short intro.
23
+ - The about paragraph and the skills (one pill each).
24
+ - One card per project: title, short description, tags, optional link.
25
+ - The contact links (email as a `mailto:`, plus optional profile links).
26
+ - Keep it a single self-contained HTML file. Do not add external scripts,
27
+ stylesheets, fonts, or large embedded media.
28
+ 3. **Deploy.** Deploy the filled HTML:
29
+ - Hosted MCP edition: call the drop tool with the HTML.
30
+ - Local MCP / CLI edition: write the HTML to a file and run `gridctl plug`.
31
+ It is an inspiration and deploys synchronously, so you get a URL right away.
32
+ 4. **Return the live share URL.** For revisions, re-deploy with the entity id
33
+ from the first deploy — it updates the same share URL.
34
+
35
+ Keep the whole flow tight: fetch, fill, deploy, share.
@@ -0,0 +1,105 @@
1
+ ---
2
+ name: product-catalog
3
+ when: product catalog, product listings, catalog site, browse products (no checkout) — a persistent app that stores products and lets visitors browse them by category. 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). No checkout / payments.
8
+ summary: Build a persistent Next.js + Mongo product catalog on the grid — a `products` collection (name, price, category, description, inStock) with a grid view, category filter, and admin 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: product-catalog
12
+
13
+ The user wants a product catalog / product-listings site that **remembers** its
14
+ products — a catalog whose records survive refresh and are shared across
15
+ sessions. That is a **runtime app** backed by the grid's shared Mongo, not a
16
+ static page. It is the same proven shape as `app-with-data`, with a `products`
17
+ domain (name, price, category, description, inStock) rendered as a grid with a
18
+ category filter and an admin add/delete section.
19
+
20
+ This is browse-only — **no checkout, no cart, no payments**. If the user wants to
21
+ sell (cart, checkout, Stripe), that is a different, larger build; say so.
22
+
23
+ Follow this recipe. Be honest that a runtime deploy is async (not instant like a
24
+ static drop) and that it needs the local edition.
25
+
26
+ ## 1. Edition check FIRST (hard gate)
27
+
28
+ A persistent app is a built + deployed container. It requires the **local
29
+ edition** (Claude Desktop / Claude Code) or the CLI.
30
+
31
+ - **Hosted edition (Claude Web / hosted MCP):** you CANNOT build a runtime app —
32
+ hosted is inline-only and can only publish static pages. Tell the user
33
+ plainly, offer a **static version** instead, and STOP the runtime path here.
34
+ - **Local edition:** continue.
35
+
36
+ ## 2. Auth + grid
37
+
38
+ 1. Ensure signed in: `gridctl_login_status`; if not, `gridctl_login`.
39
+ 2. A grid is required. Respect the grid picker: if the user has more than one
40
+ grid, ask which to use; do not assume a target.
41
+
42
+ ## 3. Scaffold
43
+
44
+ `gridctl_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
45
+ and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
46
+ directory, so run `init` FIRST. Then (a) write the app under **`services/web/`**,
47
+ and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
48
+ { database: true }`).
49
+
50
+ ## 4. Add the datastore + wire Mongo
51
+
52
+ 1. Set `cloudgrid.yaml`. **App code MUST live under `services/<name>/`** —
53
+ `path:` is the URL mount, NOT the filesystem path.
54
+ ```yaml
55
+ name: my-catalog
56
+ services:
57
+ web:
58
+ type: nextjs
59
+ path: /
60
+ needs:
61
+ database: true
62
+ ```
63
+ **Declare the datastore with `needs: { database: true }`** — the canonical
64
+ shape. The deployer provisions Mongo and injects `DATABASE_MONGODB_URL` (plus
65
+ the legacy `MONGODB_URL` alias). `requires:` is the deprecated v1 alias; don't
66
+ author new yaml with it, and never set `needs:` and `requires:` together (the
67
+ validator rejects it).
68
+ 2. Fetch the template for the Mongo wiring + CRUD shape:
69
+ `gridctl_fetch("template", "product-catalog")`. It is a minimal, real
70
+ Next.js + `mongodb`-driver catalog under `services/web/`: a lazy client in
71
+ `services/web/lib/db.js`, an App-Router GET/POST/DELETE route on a `products`
72
+ collection, a server-component page, and a client grid with a category filter
73
+ and an admin add/delete form.
74
+ 3. Adapt it (rename the collection, change fields, adjust the UI). **Read the DB
75
+ from `process.env.DATABASE_MONGODB_URL`** (legacy `process.env.MONGODB_URL`
76
+ fallback) — the grid injects it at dev-time and runtime.
77
+ - **Put the DB connection behind a lazy getter — never read the connection
78
+ string at module top level, or `next build` fails.**
79
+ - Keep the API route `export const dynamic = "force-dynamic"` so listings are
80
+ always live.
81
+
82
+ ## 5. (Optional) Run locally
83
+
84
+ Mention that the user can `grid dev` to run locally against the injected Mongo
85
+ before deploying. Don't require it.
86
+
87
+ ## 6. Config
88
+
89
+ - API keys / secrets → `gridctl_secrets`. Non-secret config → `gridctl_env`.
90
+ - Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
91
+ legacy `MONGODB_URL`) — the grid injects them.
92
+
93
+ ## 7. Deploy (async)
94
+
95
+ Deploy the folder with `gridctl_plug`. A **runtime deploy is ASYNC**: the first
96
+ response is `status: "building"`, NOT a live URL yet.
97
+ - Poll `gridctl_status` (or the returned poll_url) until the entity is live.
98
+ - Surface a liveness signal while it builds — never a bare silent wait.
99
+ - Only once it is live, return the deployed app URL (NOT the build/log link).
100
+
101
+ ## 8. Return the live URL + iterate
102
+
103
+ Give the user the live catalog URL — that is the deliverable. To iterate, re-plug
104
+ the SAME entity so it updates the same URL. Keep it honest: async build,
105
+ local-edition only, credentials injected by the grid, browse-only (no checkout).
@@ -0,0 +1,43 @@
1
+ ---
2
+ name: product-launch
3
+ when: product launch page, launch announcement, new product page, we just launched.
4
+ needs: none
5
+ deploy: inspiration
6
+ editions: all
7
+ capabilities_note: static — no infrastructure. Publishes as an inspiration (instant, works on hosted) via gridctl_drop.
8
+ summary: Fetch the product-launch template, fill it with the user's product/launch content, deploy it, and return the live share URL.
9
+ ---
10
+
11
+ # Workflow: product-launch
12
+
13
+ Detect the intent ("build a launch page / announcement for our new product X")
14
+ and follow this recipe. Do not ask setup questions first; use sensible defaults
15
+ and build.
16
+
17
+ 1. **Fetch the template.** Call `gridctl_fetch("template", "product-launch")` to
18
+ load the self-contained HTML launch-page template (hero + product image,
19
+ countdown, features, launch offer, social proof).
20
+ 2. **(Optional) Fetch the example.** Call `gridctl_fetch("example", "product-launch")`
21
+ to see a filled launch page as a reference for tone and structure.
22
+ 3. **Fill the template.** Replace the placeholders with the user's content:
23
+ - Product name, hero headline, subhead, launch badge, and CTA label/target.
24
+ - The **countdown target**: set `{{LAUNCH_DATETIME_ISO}}` to an ISO 8601
25
+ instant (e.g. `2026-09-01T09:00:00Z`). If unset/invalid it falls back to
26
+ +14 days.
27
+ - One block per key feature (title + short description).
28
+ - The launch offer (price, was-price, fine print, offer CTA).
29
+ - Social-proof stats and testimonials.
30
+ - Swap the hero product image (the inline `<svg>` in `.shot`) for a real
31
+ screenshot **only** as inline SVG or a `data:` URI. Keep it a single
32
+ self-contained HTML file — no external scripts, stylesheets, fonts, CDNs,
33
+ or large embedded media.
34
+ 4. **Deploy.** Deploy the filled HTML:
35
+ - Hosted MCP edition: call the drop tool with the HTML.
36
+ - Local MCP / CLI edition: write the HTML to a file and run `gridctl plug`.
37
+ A launch page is an inspiration and deploys synchronously, so you get a URL
38
+ right away.
39
+ 5. **Return the live share URL.** Give the user the URL that serves the page.
40
+ For revisions, re-deploy with the entity id from the first deploy — it updates
41
+ the same share URL, so the user iterates on one link.
42
+
43
+ Keep the whole flow tight: fetch, fill, deploy, share.
@@ -0,0 +1,106 @@
1
+ ---
2
+ name: project-management
3
+ when: "project management, projects and tasks tracker, team project board — a persistent app that tracks projects and their tasks on a status board. 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 project management app on the grid — a `projects` collection (name) plus a `tasks` collection (projectId, title, status todo/doing/done, assignee) with a project list and a per-project task board. 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: project-management
12
+
13
+ The user wants a project & task tracker — a team project board that **remembers**
14
+ its projects and tasks so they survive refresh and are shared across sessions.
15
+ That is a **runtime app** backed by the grid's shared Mongo, not a static page.
16
+ It is the same proven shape as `app-with-data`, with two collections:
17
+
18
+ - **projects** — `{ name }`
19
+ - **tasks** — `{ projectId, title, status: todo | doing | done, assignee }`
20
+
21
+ The UI is a project list plus a per-project task board with three status columns
22
+ (to do / doing / done); cards move between columns and carry an optional assignee.
23
+
24
+ Follow this recipe. Be honest that a runtime deploy is async (not instant like a
25
+ static drop) and that it needs the local edition.
26
+
27
+ ## 1. Edition check FIRST (hard gate)
28
+
29
+ A persistent app is a built + deployed container. It requires the **local
30
+ edition** (Claude Desktop / Claude Code) or the CLI.
31
+
32
+ - **Hosted edition (Claude Web / hosted MCP):** you CANNOT build a runtime app —
33
+ hosted is inline-only and can only publish static pages. Tell the user
34
+ plainly, offer a **static version** instead, and STOP the runtime path here.
35
+ - **Local edition:** continue.
36
+
37
+ ## 2. Auth + grid
38
+
39
+ 1. Ensure signed in: `gridctl_login_status`; if not, `gridctl_login`.
40
+ 2. A grid is required. Respect the grid picker: if the user has more than one
41
+ grid, ask which to use; do not assume a target.
42
+
43
+ ## 3. Scaffold
44
+
45
+ `gridctl_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
46
+ and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
47
+ directory, so run `init` FIRST. Then (a) write the app under **`services/web/`**,
48
+ and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
49
+ { database: true }`).
50
+
51
+ ## 4. Add the datastore + wire Mongo
52
+
53
+ 1. Set `cloudgrid.yaml`. **App code MUST live under `services/<name>/`** —
54
+ `path:` is the URL mount, NOT the filesystem path.
55
+ ```yaml
56
+ name: my-project-board
57
+ services:
58
+ web:
59
+ type: nextjs
60
+ path: /
61
+ needs:
62
+ database: true
63
+ ```
64
+ **Declare the datastore with `needs: { database: true }`** — the canonical
65
+ shape. The deployer provisions Mongo and injects `DATABASE_MONGODB_URL` (plus
66
+ the legacy `MONGODB_URL` alias). `requires:` is the deprecated v1 alias; don't
67
+ author new yaml with it, and never set `needs:` and `requires:` together (the
68
+ validator rejects it).
69
+ 2. Fetch the template for the Mongo wiring + CRUD shape:
70
+ `gridctl_fetch("template", "project-management")`. It is a minimal, real
71
+ Next.js + `mongodb`-driver app under `services/web/`: a lazy client in
72
+ `services/web/lib/db.js`, an App-Router GET/POST/DELETE route on a `projects`
73
+ collection, a GET/POST/PATCH/DELETE route on a `tasks` collection, a
74
+ server-component page, and a client board component.
75
+ 3. Adapt it (rename the collections, change fields, adjust the UI). **Read the DB
76
+ from `process.env.DATABASE_MONGODB_URL`** (legacy `process.env.MONGODB_URL`
77
+ fallback) — the grid injects it at dev-time and runtime.
78
+ - **Put the DB connection behind a lazy getter — never read the connection
79
+ string at module top level, or `next build` fails.**
80
+ - Every route file exports `const dynamic = "force-dynamic"` so data is never
81
+ cached.
82
+
83
+ ## 5. (Optional) Run locally
84
+
85
+ Mention that the user can `grid dev` to run locally against the injected Mongo
86
+ before deploying. Don't require it.
87
+
88
+ ## 6. Config
89
+
90
+ - API keys / secrets → `gridctl_secrets`. Non-secret config → `gridctl_env`.
91
+ - Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
92
+ legacy `MONGODB_URL`) — the grid injects them.
93
+
94
+ ## 7. Deploy (async)
95
+
96
+ Deploy the folder with `gridctl_plug`. A **runtime deploy is ASYNC**: the first
97
+ response is `status: "building"`, NOT a live URL yet.
98
+ - Poll `gridctl_status` (or the returned poll_url) until the entity is live.
99
+ - Surface a liveness signal while it builds — never a bare silent wait.
100
+ - Only once it is live, return the deployed app URL (NOT the build/log link).
101
+
102
+ ## 8. Return the live URL + iterate
103
+
104
+ Give the user the live app URL — that is the deliverable. To iterate, re-plug the
105
+ SAME entity so it updates the same URL. Keep it honest: async build, local-edition
106
+ only, credentials injected by the grid.
@@ -0,0 +1,101 @@
1
+ ---
2
+ name: property-listings
3
+ when: property listings, real estate site, rentals/homes listings — a persistent site that stores and browses properties by location and price. 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 property listings site on the grid — a `properties` collection (title, price:number, location, beds:number, description) with a card grid, a location/price filter, a detail view, and an admin add 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: property-listings
12
+
13
+ The user wants a real-estate / property listings site that **remembers** its
14
+ properties — listings that survive refresh and are shared across sessions. That
15
+ is a **runtime app** backed by the grid's shared Mongo, not a static page. It is
16
+ the same proven shape as `app-with-data`, with a `properties` domain
17
+ (title, price:number, location, beds:number, description) rendered as a card grid
18
+ with a location/price filter, a per-property detail view, and an admin add form.
19
+
20
+ Follow this recipe. Be honest that a runtime deploy is async (not instant like a
21
+ static drop) and that it needs the local edition.
22
+
23
+ ## 1. Edition check FIRST (hard gate)
24
+
25
+ A persistent app is a built + deployed container. It requires the **local
26
+ edition** (Claude Desktop / Claude Code) or the CLI.
27
+
28
+ - **Hosted edition (Claude Web / hosted MCP):** you CANNOT build a runtime app —
29
+ hosted is inline-only and can only publish static pages. Tell the user
30
+ plainly, offer a **static version** instead, and STOP the runtime path here.
31
+ - **Local edition:** continue.
32
+
33
+ ## 2. Auth + grid
34
+
35
+ 1. Ensure signed in: `gridctl_login_status`; if not, `gridctl_login`.
36
+ 2. A grid is required. Respect the grid picker: if the user has more than one
37
+ grid, ask which to use; do not assume a target.
38
+
39
+ ## 3. Scaffold
40
+
41
+ `gridctl_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
42
+ and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
43
+ directory, so run `init` FIRST. Then (a) write the app under **`services/web/`**,
44
+ and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
45
+ { database: true }`).
46
+
47
+ ## 4. Add the datastore + wire Mongo
48
+
49
+ 1. Set `cloudgrid.yaml`. **App code MUST live under `services/<name>/`** —
50
+ `path:` is the URL mount, NOT the filesystem path.
51
+ ```yaml
52
+ name: my-listings
53
+ services:
54
+ web:
55
+ type: nextjs
56
+ path: /
57
+ needs:
58
+ database: true
59
+ ```
60
+ **Declare the datastore with `needs: { database: true }`** — the canonical
61
+ shape. The deployer provisions Mongo and injects `DATABASE_MONGODB_URL` (plus
62
+ the legacy `MONGODB_URL` alias). `requires:` is the deprecated v1 alias; don't
63
+ author new yaml with it, and never set `needs:` and `requires:` together (the
64
+ validator rejects it).
65
+ 2. Fetch the template for the Mongo wiring + CRUD shape:
66
+ `gridctl_fetch("template", "property-listings")`. It is a minimal, real
67
+ Next.js + `mongodb`-driver listings site under `services/web/`: a lazy client
68
+ in `services/web/lib/db.js`, an App-Router GET/POST/DELETE route on a
69
+ `properties` collection (GET supports `?location=` and `?maxPrice=` filters), a
70
+ server-component page that reads + filters, and a client card grid with a
71
+ detail view and admin add form.
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,105 @@
1
+ ---
2
+ name: quiz-platform
3
+ when: quiz, quiz platform, trivia, assessment, questionnaire — a persistent app that stores questions and lets people take a scored quiz, with an admin form to add questions. 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 quiz/trivia platform on the grid — a `questions` collection ({ prompt, options: string[], answerIndex: number }) with a take-quiz UI that computes a score and an admin add-question 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: quiz-platform
12
+
13
+ The user wants a quiz / trivia / assessment app that **remembers** its questions
14
+ — a quiz whose question bank survives refresh and is shared across sessions.
15
+ That is a **runtime app** backed by the grid's shared Mongo, not a static page.
16
+ It is the same proven shape as `app-with-data`, with a `questions` domain
17
+ (`{ prompt: string, options: string[], answerIndex: number }`): a take-quiz UI
18
+ that lets a visitor pick one option per question and submit for a computed score,
19
+ plus an admin form that adds new questions.
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-quiz
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", "quiz-platform")`. It is a minimal, real Next.js +
68
+ `mongodb`-driver quiz platform under `services/web/`: a lazy client in
69
+ `services/web/lib/db.js`, an App-Router GET/POST/DELETE route on a
70
+ `questions` collection, a server-component page that reads the collection, and
71
+ a client component (`quiz.js`) that runs the take-quiz UI (score computed by
72
+ comparing each chosen option index against the question's `answerIndex`) and
73
+ an admin add-question form.
74
+ 3. Adapt it (rename the collection, change fields, adjust the UI). **Read the DB
75
+ from `process.env.DATABASE_MONGODB_URL`** (legacy `process.env.MONGODB_URL`
76
+ fallback) — the grid injects it at dev-time and runtime.
77
+ - **Put the DB connection behind a lazy getter — never read the connection
78
+ string at module top level, or `next build` fails.**
79
+ - Keep route handlers `export const dynamic = "force-dynamic"` so questions
80
+ are always read/written live.
81
+
82
+ ## 5. (Optional) Run locally
83
+
84
+ Mention that the user can `grid dev` to run locally against the injected Mongo
85
+ before deploying. Don't require it.
86
+
87
+ ## 6. Config
88
+
89
+ - API keys / secrets → `gridctl_secrets`. Non-secret config → `gridctl_env`.
90
+ - Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
91
+ legacy `MONGODB_URL`) — the grid injects them.
92
+
93
+ ## 7. Deploy (async)
94
+
95
+ Deploy the folder with `gridctl_plug`. A **runtime deploy is ASYNC**: the first
96
+ response is `status: "building"`, NOT a live URL yet.
97
+ - Poll `gridctl_status` (or the returned poll_url) until the entity is live.
98
+ - Surface a liveness signal while it builds — never a bare silent wait.
99
+ - Only once it is live, return the deployed app URL (NOT the build/log link).
100
+
101
+ ## 8. Return the live URL + iterate
102
+
103
+ Give the user the live quiz URL — that is the deliverable. To iterate, re-plug
104
+ the SAME entity so it updates the same URL. Keep it honest: async build,
105
+ local-edition only, credentials injected by the grid.