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