@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.
- package/package.json +1 -1
- package/src/corpus/capability-map.md +82 -2
- package/src/corpus/examples/crm/index.md +273 -0
- package/src/corpus/examples/kanban/index.md +256 -0
- package/src/corpus/templates/_cloudgrid.yaml.reference +228 -0
- package/src/corpus/templates/admin-dashboard/README.md +75 -0
- package/src/corpus/templates/admin-dashboard/cloudgrid.yaml +233 -0
- package/src/corpus/templates/admin-dashboard/index.md +81 -0
- package/src/corpus/templates/admin-dashboard/services/web/app/api/orders/route.js +64 -0
- package/src/corpus/templates/admin-dashboard/services/web/app/api/users/route.js +63 -0
- package/src/corpus/templates/admin-dashboard/services/web/app/layout.js +39 -0
- package/src/corpus/templates/admin-dashboard/services/web/app/page.js +73 -0
- package/src/corpus/templates/admin-dashboard/services/web/app/resource-table.js +94 -0
- package/src/corpus/templates/admin-dashboard/services/web/lib/db.js +32 -0
- package/src/corpus/templates/admin-dashboard/services/web/package.json +16 -0
- package/src/corpus/templates/ai-app/cloudgrid.yaml +225 -11
- package/src/corpus/templates/ai-app/index.md +3 -11
- package/src/corpus/templates/ai-knowledge-base/AGENTS.md +254 -0
- package/src/corpus/templates/ai-knowledge-base/README.md +28 -0
- package/src/corpus/templates/ai-knowledge-base/cloudgrid.yaml +238 -0
- package/src/corpus/templates/ai-knowledge-base/index.md +81 -0
- package/src/corpus/templates/analytics-dashboard/README.md +85 -0
- package/src/corpus/templates/analytics-dashboard/cloudgrid.yaml +232 -0
- package/src/corpus/templates/analytics-dashboard/index.md +316 -0
- package/src/corpus/templates/analytics-dashboard/services/web/app/api/events/route.js +60 -0
- package/src/corpus/templates/analytics-dashboard/services/web/app/event-form.js +100 -0
- package/src/corpus/templates/analytics-dashboard/services/web/app/layout.js +41 -0
- package/src/corpus/templates/analytics-dashboard/services/web/app/page.js +54 -0
- package/src/corpus/templates/analytics-dashboard/services/web/lib/db.js +32 -0
- package/src/corpus/templates/analytics-dashboard/services/web/package.json +16 -0
- package/src/corpus/templates/api-dashboard/README.md +84 -0
- package/src/corpus/templates/api-dashboard/cloudgrid.yaml +233 -0
- package/src/corpus/templates/api-dashboard/index.md +310 -0
- package/src/corpus/templates/api-dashboard/services/web/app/api/requests/route.js +62 -0
- package/src/corpus/templates/api-dashboard/services/web/app/dashboard.js +156 -0
- package/src/corpus/templates/api-dashboard/services/web/app/layout.js +42 -0
- package/src/corpus/templates/api-dashboard/services/web/app/page.js +39 -0
- package/src/corpus/templates/api-dashboard/services/web/lib/db.js +32 -0
- package/src/corpus/templates/api-dashboard/services/web/package.json +16 -0
- package/src/corpus/templates/api-docs/README.md +28 -0
- package/src/corpus/templates/api-docs/cloudgrid.yaml +228 -0
- package/src/corpus/templates/api-docs/index.html +136 -0
- package/src/corpus/templates/api-docs/index.md +28 -0
- package/src/corpus/templates/api-service/cloudgrid.yaml +224 -9
- package/src/corpus/templates/api-service/index.md +3 -11
- package/src/corpus/templates/app-with-data/cloudgrid.yaml +226 -8
- package/src/corpus/templates/app-with-data/index.md +3 -8
- package/src/corpus/templates/appointment-booking/AGENTS.md +223 -0
- package/src/corpus/templates/appointment-booking/README.md +16 -0
- package/src/corpus/templates/appointment-booking/cloudgrid.yaml +250 -0
- package/src/corpus/templates/appointment-booking/index.md +72 -0
- package/src/corpus/templates/approval-workflow/AGENTS.md +170 -0
- package/src/corpus/templates/approval-workflow/README.md +12 -0
- package/src/corpus/templates/approval-workflow/cloudgrid.yaml +237 -0
- package/src/corpus/templates/approval-workflow/index.md +58 -0
- package/src/corpus/templates/billing-dashboard/AGENTS.md +199 -0
- package/src/corpus/templates/billing-dashboard/README.md +18 -0
- package/src/corpus/templates/billing-dashboard/cloudgrid.yaml +235 -0
- package/src/corpus/templates/billing-dashboard/index.md +87 -0
- package/src/corpus/templates/blog-cms/README.md +94 -0
- package/src/corpus/templates/blog-cms/cloudgrid.yaml +233 -0
- package/src/corpus/templates/blog-cms/index.md +358 -0
- package/src/corpus/templates/blog-cms/services/web/app/admin/admin-editor.js +133 -0
- package/src/corpus/templates/blog-cms/services/web/app/admin/page.js +33 -0
- package/src/corpus/templates/blog-cms/services/web/app/api/posts/route.js +84 -0
- package/src/corpus/templates/blog-cms/services/web/app/layout.js +47 -0
- package/src/corpus/templates/blog-cms/services/web/app/page.js +56 -0
- package/src/corpus/templates/blog-cms/services/web/app/posts/[slug]/page.js +45 -0
- package/src/corpus/templates/blog-cms/services/web/lib/db.js +32 -0
- package/src/corpus/templates/blog-cms/services/web/package.json +16 -0
- package/src/corpus/templates/booking-system/AGENTS.md +189 -0
- package/src/corpus/templates/booking-system/README.md +17 -0
- package/src/corpus/templates/booking-system/cloudgrid.yaml +248 -0
- package/src/corpus/templates/booking-system/index.md +86 -0
- package/src/corpus/templates/calendar-scheduler/AGENTS.md +226 -0
- package/src/corpus/templates/calendar-scheduler/README.md +25 -0
- package/src/corpus/templates/calendar-scheduler/cloudgrid.yaml +259 -0
- package/src/corpus/templates/calendar-scheduler/index.md +85 -0
- package/src/corpus/templates/changelog/README.md +27 -0
- package/src/corpus/templates/changelog/cloudgrid.yaml +228 -0
- package/src/corpus/templates/changelog/index.html +80 -0
- package/src/corpus/templates/changelog/index.md +28 -0
- package/src/corpus/templates/company-website/README.md +54 -0
- package/src/corpus/templates/company-website/cloudgrid.yaml +233 -0
- package/src/corpus/templates/company-website/index.html +309 -0
- package/src/corpus/templates/company-website/index.md +29 -0
- package/src/corpus/templates/course-platform/AGENTS.md +161 -0
- package/src/corpus/templates/course-platform/README.md +26 -0
- package/src/corpus/templates/course-platform/cloudgrid.yaml +237 -0
- package/src/corpus/templates/course-platform/index.md +70 -0
- package/src/corpus/templates/crm/README.md +72 -0
- package/src/corpus/templates/crm/cloudgrid.yaml +233 -0
- package/src/corpus/templates/crm/index.md +71 -0
- package/src/corpus/templates/crm/services/web/app/api/contacts/route.js +80 -0
- package/src/corpus/templates/crm/services/web/app/contact-manager.js +102 -0
- package/src/corpus/templates/crm/services/web/app/layout.js +35 -0
- package/src/corpus/templates/crm/services/web/app/page.js +34 -0
- package/src/corpus/templates/crm/services/web/lib/db.js +32 -0
- package/src/corpus/templates/crm/services/web/package.json +16 -0
- package/src/corpus/templates/dashboard/cloudgrid.yaml +228 -4
- package/src/corpus/templates/dashboard/index.md +3 -5
- package/src/corpus/templates/deck/cloudgrid.yaml +228 -4
- package/src/corpus/templates/deck/index.md +3 -5
- package/src/corpus/templates/directory/README.md +75 -0
- package/src/corpus/templates/directory/cloudgrid.yaml +233 -0
- package/src/corpus/templates/directory/index.md +334 -0
- package/src/corpus/templates/directory/services/web/app/api/entries/route.js +63 -0
- package/src/corpus/templates/directory/services/web/app/directory-list.js +146 -0
- package/src/corpus/templates/directory/services/web/app/layout.js +44 -0
- package/src/corpus/templates/directory/services/web/app/page.js +38 -0
- package/src/corpus/templates/directory/services/web/lib/db.js +32 -0
- package/src/corpus/templates/directory/services/web/package.json +16 -0
- package/src/corpus/templates/docs-site/README.md +28 -0
- package/src/corpus/templates/docs-site/cloudgrid.yaml +228 -0
- package/src/corpus/templates/docs-site/index.html +122 -0
- package/src/corpus/templates/docs-site/index.md +28 -0
- package/src/corpus/templates/erp/AGENTS.md +116 -0
- package/src/corpus/templates/erp/README.md +17 -0
- package/src/corpus/templates/erp/cloudgrid.yaml +235 -0
- package/src/corpus/templates/erp/index.md +81 -0
- package/src/corpus/templates/event-board/README.md +74 -0
- package/src/corpus/templates/event-board/cloudgrid.yaml +233 -0
- package/src/corpus/templates/event-board/index.md +299 -0
- package/src/corpus/templates/event-board/services/web/app/api/events/route.js +61 -0
- package/src/corpus/templates/event-board/services/web/app/event-form.js +118 -0
- package/src/corpus/templates/event-board/services/web/app/layout.js +39 -0
- package/src/corpus/templates/event-board/services/web/app/page.js +34 -0
- package/src/corpus/templates/event-board/services/web/lib/db.js +32 -0
- package/src/corpus/templates/event-board/services/web/package.json +16 -0
- package/src/corpus/templates/expense-tracker/README.md +76 -0
- package/src/corpus/templates/expense-tracker/cloudgrid.yaml +233 -0
- package/src/corpus/templates/expense-tracker/index.md +305 -0
- package/src/corpus/templates/expense-tracker/services/web/app/api/expenses/route.js +61 -0
- package/src/corpus/templates/expense-tracker/services/web/app/expense-form.js +145 -0
- package/src/corpus/templates/expense-tracker/services/web/app/layout.js +42 -0
- package/src/corpus/templates/expense-tracker/services/web/app/page.js +34 -0
- package/src/corpus/templates/expense-tracker/services/web/lib/db.js +32 -0
- package/src/corpus/templates/expense-tracker/services/web/package.json +16 -0
- package/src/corpus/templates/feature-request-board/README.md +87 -0
- package/src/corpus/templates/feature-request-board/cloudgrid.yaml +233 -0
- package/src/corpus/templates/feature-request-board/index.md +317 -0
- package/src/corpus/templates/feature-request-board/services/web/app/api/requests/route.js +92 -0
- package/src/corpus/templates/feature-request-board/services/web/app/board.js +91 -0
- package/src/corpus/templates/feature-request-board/services/web/app/layout.js +43 -0
- package/src/corpus/templates/feature-request-board/services/web/app/page.js +35 -0
- package/src/corpus/templates/feature-request-board/services/web/lib/db.js +32 -0
- package/src/corpus/templates/feature-request-board/services/web/package.json +16 -0
- package/src/corpus/templates/financial-dashboard/README.md +80 -0
- package/src/corpus/templates/financial-dashboard/cloudgrid.yaml +233 -0
- package/src/corpus/templates/financial-dashboard/index.md +326 -0
- package/src/corpus/templates/financial-dashboard/services/web/app/api/entries/route.js +63 -0
- package/src/corpus/templates/financial-dashboard/services/web/app/entry-board.js +130 -0
- package/src/corpus/templates/financial-dashboard/services/web/app/layout.js +46 -0
- package/src/corpus/templates/financial-dashboard/services/web/app/page.js +31 -0
- package/src/corpus/templates/financial-dashboard/services/web/lib/db.js +32 -0
- package/src/corpus/templates/financial-dashboard/services/web/package.json +16 -0
- package/src/corpus/templates/forum/AGENTS.md +196 -0
- package/src/corpus/templates/forum/README.md +12 -0
- package/src/corpus/templates/forum/cloudgrid.yaml +237 -0
- package/src/corpus/templates/forum/index.md +66 -0
- package/src/corpus/templates/hr-portal/AGENTS.md +174 -0
- package/src/corpus/templates/hr-portal/README.md +14 -0
- package/src/corpus/templates/hr-portal/cloudgrid.yaml +237 -0
- package/src/corpus/templates/hr-portal/index.md +56 -0
- package/src/corpus/templates/internal-tools-portal/AGENTS.md +201 -0
- package/src/corpus/templates/internal-tools-portal/README.md +17 -0
- package/src/corpus/templates/internal-tools-portal/cloudgrid.yaml +237 -0
- package/src/corpus/templates/internal-tools-portal/index.md +62 -0
- package/src/corpus/templates/inventory/README.md +71 -0
- package/src/corpus/templates/inventory/cloudgrid.yaml +233 -0
- package/src/corpus/templates/inventory/index.md +68 -0
- package/src/corpus/templates/inventory/services/web/app/api/items/route.js +88 -0
- package/src/corpus/templates/inventory/services/web/app/inventory-manager.js +101 -0
- package/src/corpus/templates/inventory/services/web/app/layout.js +36 -0
- package/src/corpus/templates/inventory/services/web/app/page.js +37 -0
- package/src/corpus/templates/inventory/services/web/lib/db.js +32 -0
- package/src/corpus/templates/inventory/services/web/package.json +16 -0
- package/src/corpus/templates/invoice/README.md +71 -0
- package/src/corpus/templates/invoice/cloudgrid.yaml +233 -0
- package/src/corpus/templates/invoice/index.md +68 -0
- package/src/corpus/templates/invoice/services/web/app/api/invoices/route.js +82 -0
- package/src/corpus/templates/invoice/services/web/app/invoice-manager.js +101 -0
- package/src/corpus/templates/invoice/services/web/app/layout.js +35 -0
- package/src/corpus/templates/invoice/services/web/app/page.js +34 -0
- package/src/corpus/templates/invoice/services/web/lib/db.js +32 -0
- package/src/corpus/templates/invoice/services/web/package.json +16 -0
- package/src/corpus/templates/job-board/README.md +71 -0
- package/src/corpus/templates/job-board/cloudgrid.yaml +233 -0
- package/src/corpus/templates/job-board/index.md +68 -0
- package/src/corpus/templates/job-board/services/web/app/api/jobs/route.js +66 -0
- package/src/corpus/templates/job-board/services/web/app/job-board.js +73 -0
- package/src/corpus/templates/job-board/services/web/app/layout.js +35 -0
- package/src/corpus/templates/job-board/services/web/app/page.js +32 -0
- package/src/corpus/templates/job-board/services/web/lib/db.js +32 -0
- package/src/corpus/templates/job-board/services/web/package.json +16 -0
- package/src/corpus/templates/kanban/README.md +72 -0
- package/src/corpus/templates/kanban/cloudgrid.yaml +233 -0
- package/src/corpus/templates/kanban/index.md +71 -0
- package/src/corpus/templates/kanban/services/web/app/api/cards/route.js +70 -0
- package/src/corpus/templates/kanban/services/web/app/board.js +93 -0
- package/src/corpus/templates/kanban/services/web/app/layout.js +37 -0
- package/src/corpus/templates/kanban/services/web/app/page.js +32 -0
- package/src/corpus/templates/kanban/services/web/lib/db.js +32 -0
- package/src/corpus/templates/kanban/services/web/package.json +16 -0
- package/src/corpus/templates/landing-page/cloudgrid.yaml +228 -4
- package/src/corpus/templates/landing-page/index.md +3 -5
- package/src/corpus/templates/lms/AGENTS.md +193 -0
- package/src/corpus/templates/lms/README.md +27 -0
- package/src/corpus/templates/lms/cloudgrid.yaml +237 -0
- package/src/corpus/templates/lms/index.md +79 -0
- package/src/corpus/templates/marketplace/AGENTS.md +208 -0
- package/src/corpus/templates/marketplace/README.md +22 -0
- package/src/corpus/templates/marketplace/cloudgrid.yaml +233 -0
- package/src/corpus/templates/marketplace/index.md +76 -0
- package/src/corpus/templates/membership-site/AGENTS.md +160 -0
- package/src/corpus/templates/membership-site/README.md +18 -0
- package/src/corpus/templates/membership-site/cloudgrid.yaml +236 -0
- package/src/corpus/templates/membership-site/index.md +66 -0
- package/src/corpus/templates/monitoring-dashboard/README.md +84 -0
- package/src/corpus/templates/monitoring-dashboard/cloudgrid.yaml +233 -0
- package/src/corpus/templates/monitoring-dashboard/index.md +328 -0
- package/src/corpus/templates/monitoring-dashboard/services/web/app/api/checks/route.js +76 -0
- package/src/corpus/templates/monitoring-dashboard/services/web/app/check-form.js +124 -0
- package/src/corpus/templates/monitoring-dashboard/services/web/app/layout.js +44 -0
- package/src/corpus/templates/monitoring-dashboard/services/web/app/page.js +49 -0
- package/src/corpus/templates/monitoring-dashboard/services/web/lib/db.js +32 -0
- package/src/corpus/templates/monitoring-dashboard/services/web/package.json +16 -0
- package/src/corpus/templates/online-store/AGENTS.md +153 -0
- package/src/corpus/templates/online-store/README.md +16 -0
- package/src/corpus/templates/online-store/cloudgrid.yaml +234 -0
- package/src/corpus/templates/online-store/index.md +81 -0
- package/src/corpus/templates/portfolio/README.md +29 -0
- package/src/corpus/templates/portfolio/cloudgrid.yaml +228 -0
- package/src/corpus/templates/portfolio/index.html +126 -0
- package/src/corpus/templates/portfolio/index.md +28 -0
- package/src/corpus/templates/product-catalog/README.md +74 -0
- package/src/corpus/templates/product-catalog/cloudgrid.yaml +232 -0
- package/src/corpus/templates/product-catalog/index.md +330 -0
- package/src/corpus/templates/product-catalog/services/web/app/api/products/route.js +69 -0
- package/src/corpus/templates/product-catalog/services/web/app/catalog.js +153 -0
- package/src/corpus/templates/product-catalog/services/web/app/layout.js +49 -0
- package/src/corpus/templates/product-catalog/services/web/app/page.js +36 -0
- package/src/corpus/templates/product-catalog/services/web/lib/db.js +32 -0
- package/src/corpus/templates/product-catalog/services/web/package.json +16 -0
- package/src/corpus/templates/product-launch/README.md +46 -0
- package/src/corpus/templates/product-launch/cloudgrid.yaml +234 -0
- package/src/corpus/templates/product-launch/index.html +320 -0
- package/src/corpus/templates/product-launch/index.md +34 -0
- package/src/corpus/templates/project-management/README.md +83 -0
- package/src/corpus/templates/project-management/cloudgrid.yaml +233 -0
- package/src/corpus/templates/project-management/index.md +346 -0
- package/src/corpus/templates/project-management/services/web/app/api/projects/route.js +48 -0
- package/src/corpus/templates/project-management/services/web/app/api/tasks/route.js +85 -0
- package/src/corpus/templates/project-management/services/web/app/board.js +182 -0
- package/src/corpus/templates/project-management/services/web/app/layout.js +45 -0
- package/src/corpus/templates/project-management/services/web/app/page.js +49 -0
- package/src/corpus/templates/project-management/services/web/lib/db.js +32 -0
- package/src/corpus/templates/project-management/services/web/package.json +16 -0
- package/src/corpus/templates/property-listings/README.md +76 -0
- package/src/corpus/templates/property-listings/cloudgrid.yaml +233 -0
- package/src/corpus/templates/property-listings/index.md +335 -0
- package/src/corpus/templates/property-listings/services/web/app/api/properties/route.js +73 -0
- package/src/corpus/templates/property-listings/services/web/app/layout.js +45 -0
- package/src/corpus/templates/property-listings/services/web/app/listings.js +152 -0
- package/src/corpus/templates/property-listings/services/web/app/page.js +53 -0
- package/src/corpus/templates/property-listings/services/web/lib/db.js +32 -0
- package/src/corpus/templates/property-listings/services/web/package.json +16 -0
- package/src/corpus/templates/quiz-platform/README.md +84 -0
- package/src/corpus/templates/quiz-platform/cloudgrid.yaml +233 -0
- package/src/corpus/templates/quiz-platform/index.md +313 -0
- package/src/corpus/templates/quiz-platform/services/web/app/api/questions/route.js +69 -0
- package/src/corpus/templates/quiz-platform/services/web/app/layout.js +47 -0
- package/src/corpus/templates/quiz-platform/services/web/app/page.js +37 -0
- package/src/corpus/templates/quiz-platform/services/web/app/quiz.js +188 -0
- package/src/corpus/templates/quiz-platform/services/web/lib/db.js +32 -0
- package/src/corpus/templates/quiz-platform/services/web/package.json +16 -0
- package/src/corpus/templates/report/cloudgrid.yaml +228 -4
- package/src/corpus/templates/report/index.md +3 -5
- package/src/corpus/templates/restaurant-reservations/AGENTS.md +258 -0
- package/src/corpus/templates/restaurant-reservations/README.md +17 -0
- package/src/corpus/templates/restaurant-reservations/cloudgrid.yaml +258 -0
- package/src/corpus/templates/restaurant-reservations/index.md +62 -0
- package/src/corpus/templates/revenue-dashboard/README.md +75 -0
- package/src/corpus/templates/revenue-dashboard/cloudgrid.yaml +233 -0
- package/src/corpus/templates/revenue-dashboard/index.md +307 -0
- package/src/corpus/templates/revenue-dashboard/services/web/app/api/sales/route.js +60 -0
- package/src/corpus/templates/revenue-dashboard/services/web/app/layout.js +40 -0
- package/src/corpus/templates/revenue-dashboard/services/web/app/page.js +87 -0
- package/src/corpus/templates/revenue-dashboard/services/web/app/sale-form.js +63 -0
- package/src/corpus/templates/revenue-dashboard/services/web/lib/db.js +32 -0
- package/src/corpus/templates/revenue-dashboard/services/web/package.json +16 -0
- package/src/corpus/templates/saas-marketing/README.md +30 -0
- package/src/corpus/templates/saas-marketing/cloudgrid.yaml +228 -0
- package/src/corpus/templates/saas-marketing/index.html +212 -0
- package/src/corpus/templates/saas-marketing/index.md +28 -0
- package/src/corpus/templates/status-page/README.md +28 -0
- package/src/corpus/templates/status-page/cloudgrid.yaml +228 -0
- package/src/corpus/templates/status-page/index.html +117 -0
- package/src/corpus/templates/status-page/index.md +28 -0
- package/src/corpus/templates/subscription-management/AGENTS.md +191 -0
- package/src/corpus/templates/subscription-management/README.md +21 -0
- package/src/corpus/templates/subscription-management/cloudgrid.yaml +236 -0
- package/src/corpus/templates/subscription-management/index.md +73 -0
- package/src/corpus/templates/task-manager/README.md +72 -0
- package/src/corpus/templates/task-manager/cloudgrid.yaml +233 -0
- package/src/corpus/templates/task-manager/index.md +71 -0
- package/src/corpus/templates/task-manager/services/web/app/api/tasks/route.js +77 -0
- package/src/corpus/templates/task-manager/services/web/app/layout.js +39 -0
- package/src/corpus/templates/task-manager/services/web/app/page.js +33 -0
- package/src/corpus/templates/task-manager/services/web/app/task-list.js +110 -0
- package/src/corpus/templates/task-manager/services/web/lib/db.js +32 -0
- package/src/corpus/templates/task-manager/services/web/package.json +16 -0
- package/src/corpus/templates/ticket-system/README.md +71 -0
- package/src/corpus/templates/ticket-system/cloudgrid.yaml +233 -0
- package/src/corpus/templates/ticket-system/index.md +68 -0
- package/src/corpus/templates/ticket-system/services/web/app/api/tickets/route.js +81 -0
- package/src/corpus/templates/ticket-system/services/web/app/layout.js +36 -0
- package/src/corpus/templates/ticket-system/services/web/app/page.js +35 -0
- package/src/corpus/templates/ticket-system/services/web/app/ticket-queue.js +112 -0
- package/src/corpus/templates/ticket-system/services/web/lib/db.js +32 -0
- package/src/corpus/templates/ticket-system/services/web/package.json +16 -0
- package/src/corpus/templates/time-tracking/README.md +81 -0
- package/src/corpus/templates/time-tracking/cloudgrid.yaml +233 -0
- package/src/corpus/templates/time-tracking/index.md +298 -0
- package/src/corpus/templates/time-tracking/services/web/app/api/entries/route.js +66 -0
- package/src/corpus/templates/time-tracking/services/web/app/entry-form.js +106 -0
- package/src/corpus/templates/time-tracking/services/web/app/layout.js +39 -0
- package/src/corpus/templates/time-tracking/services/web/app/page.js +30 -0
- package/src/corpus/templates/time-tracking/services/web/lib/db.js +32 -0
- package/src/corpus/templates/time-tracking/services/web/package.json +16 -0
- package/src/corpus/templates/travel-booking/AGENTS.md +207 -0
- package/src/corpus/templates/travel-booking/README.md +17 -0
- package/src/corpus/templates/travel-booking/cloudgrid.yaml +249 -0
- package/src/corpus/templates/travel-booking/index.md +88 -0
- package/src/corpus/templates/waitlist/README.md +38 -0
- package/src/corpus/templates/waitlist/cloudgrid.yaml +228 -0
- package/src/corpus/templates/waitlist/index.html +69 -0
- package/src/corpus/templates/waitlist/index.md +39 -0
- package/src/corpus/templates/web-app/cloudgrid.yaml +228 -4
- package/src/corpus/templates/web-app/index.md +3 -5
- package/src/corpus/workflows/admin-dashboard.md +102 -0
- package/src/corpus/workflows/ai-knowledge-base.md +137 -0
- package/src/corpus/workflows/analytics-dashboard.md +104 -0
- package/src/corpus/workflows/api-dashboard.md +102 -0
- package/src/corpus/workflows/api-docs.md +36 -0
- package/src/corpus/workflows/appointment-booking.md +143 -0
- package/src/corpus/workflows/approval-workflow.md +124 -0
- package/src/corpus/workflows/billing-dashboard.md +120 -0
- package/src/corpus/workflows/blog-cms.md +104 -0
- package/src/corpus/workflows/booking-system.md +116 -0
- package/src/corpus/workflows/calendar-scheduler.md +134 -0
- package/src/corpus/workflows/changelog.md +33 -0
- package/src/corpus/workflows/company-website.md +46 -0
- package/src/corpus/workflows/course-platform.md +126 -0
- package/src/corpus/workflows/crm.md +101 -0
- package/src/corpus/workflows/directory.md +101 -0
- package/src/corpus/workflows/docs-site.md +35 -0
- package/src/corpus/workflows/erp.md +125 -0
- package/src/corpus/workflows/event-board.md +102 -0
- package/src/corpus/workflows/expense-tracker.md +102 -0
- package/src/corpus/workflows/feature-request-board.md +105 -0
- package/src/corpus/workflows/financial-dashboard.md +103 -0
- package/src/corpus/workflows/forum.md +128 -0
- package/src/corpus/workflows/hr-portal.md +115 -0
- package/src/corpus/workflows/internal-tools-portal.md +125 -0
- package/src/corpus/workflows/inventory.md +101 -0
- package/src/corpus/workflows/invoice.md +101 -0
- package/src/corpus/workflows/job-board.md +101 -0
- package/src/corpus/workflows/kanban.md +102 -0
- package/src/corpus/workflows/lms.md +113 -0
- package/src/corpus/workflows/marketplace.md +123 -0
- package/src/corpus/workflows/membership-site.md +128 -0
- package/src/corpus/workflows/monitoring-dashboard.md +104 -0
- package/src/corpus/workflows/online-store.md +114 -0
- package/src/corpus/workflows/portfolio.md +35 -0
- package/src/corpus/workflows/product-catalog.md +105 -0
- package/src/corpus/workflows/product-launch.md +43 -0
- package/src/corpus/workflows/project-management.md +106 -0
- package/src/corpus/workflows/property-listings.md +101 -0
- package/src/corpus/workflows/quiz-platform.md +105 -0
- package/src/corpus/workflows/restaurant-reservations.md +123 -0
- package/src/corpus/workflows/revenue-dashboard.md +102 -0
- package/src/corpus/workflows/saas-marketing.md +37 -0
- package/src/corpus/workflows/status-page.md +35 -0
- package/src/corpus/workflows/subscription-management.md +141 -0
- package/src/corpus/workflows/task-manager.md +101 -0
- package/src/corpus/workflows/ticket-system.md +101 -0
- package/src/corpus/workflows/time-tracking.md +104 -0
- package/src/corpus/workflows/travel-booking.md +115 -0
- 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.
|