@cloudgrid-io/mcp 0.20.4 → 0.20.5
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 +2 -2
- package/src/corpus/capability-map.md +8 -8
- package/src/corpus/cloudgrid-yaml.md +5 -5
- package/src/corpus/cookbook.md +1 -1
- package/src/corpus/skill-claim.md +1 -1
- package/src/corpus/skill-plug.md +1 -1
- package/src/corpus/skills-readme.md +1 -1
- package/src/corpus/templates/ai-knowledge-base/AGENTS.md +1 -1
- package/src/corpus/templates/ai-knowledge-base/index.md +1 -1
- package/src/corpus/templates/api-docs/README.md +2 -2
- package/src/corpus/templates/api-docs/index.md +3 -3
- package/src/corpus/templates/appointment-booking/AGENTS.md +7 -7
- package/src/corpus/templates/appointment-booking/index.md +5 -5
- package/src/corpus/templates/approval-workflow/AGENTS.md +2 -2
- package/src/corpus/templates/approval-workflow/index.md +2 -2
- package/src/corpus/templates/billing-dashboard/index.md +1 -1
- package/src/corpus/templates/calendar-scheduler/AGENTS.md +1 -1
- package/src/corpus/templates/calendar-scheduler/index.md +1 -1
- package/src/corpus/templates/changelog/README.md +2 -2
- package/src/corpus/templates/changelog/index.md +3 -3
- package/src/corpus/templates/company-website/README.md +3 -3
- package/src/corpus/templates/company-website/cloudgrid.yaml +1 -1
- package/src/corpus/templates/company-website/index.md +3 -3
- package/src/corpus/templates/course-platform/index.md +1 -1
- package/src/corpus/templates/dashboard/cloudgrid.yaml +1 -1
- package/src/corpus/templates/dashboard/index.md +3 -3
- package/src/corpus/templates/deck/cloudgrid.yaml +1 -1
- package/src/corpus/templates/deck/index.md +3 -3
- package/src/corpus/templates/docs-site/README.md +2 -2
- package/src/corpus/templates/docs-site/index.md +3 -3
- package/src/corpus/templates/forum/AGENTS.md +4 -4
- package/src/corpus/templates/forum/index.md +1 -1
- package/src/corpus/templates/hr-portal/index.md +1 -1
- package/src/corpus/templates/internal-tools-portal/index.md +1 -1
- package/src/corpus/templates/landing-page/cloudgrid.yaml +1 -1
- package/src/corpus/templates/landing-page/index.md +3 -3
- package/src/corpus/templates/lms/index.md +1 -1
- package/src/corpus/templates/marketplace/AGENTS.md +1 -1
- package/src/corpus/templates/marketplace/index.md +1 -1
- package/src/corpus/templates/membership-site/AGENTS.md +7 -7
- package/src/corpus/templates/membership-site/index.md +5 -5
- package/src/corpus/templates/online-store/index.md +1 -1
- package/src/corpus/templates/portfolio/README.md +2 -2
- package/src/corpus/templates/portfolio/index.md +3 -3
- package/src/corpus/templates/product-launch/README.md +3 -3
- package/src/corpus/templates/product-launch/cloudgrid.yaml +1 -1
- package/src/corpus/templates/product-launch/index.md +3 -3
- package/src/corpus/templates/report/cloudgrid.yaml +1 -1
- package/src/corpus/templates/report/index.md +3 -3
- package/src/corpus/templates/restaurant-reservations/AGENTS.md +7 -7
- package/src/corpus/templates/restaurant-reservations/index.md +2 -2
- package/src/corpus/templates/saas-marketing/README.md +2 -2
- package/src/corpus/templates/saas-marketing/index.md +3 -3
- package/src/corpus/templates/status-page/README.md +2 -2
- package/src/corpus/templates/status-page/index.md +3 -3
- package/src/corpus/templates/subscription-management/AGENTS.md +7 -7
- package/src/corpus/templates/subscription-management/index.md +5 -5
- package/src/corpus/templates/waitlist/README.md +2 -2
- package/src/corpus/templates/waitlist/index.md +3 -3
- package/src/corpus/templates/web-app/cloudgrid.yaml +1 -1
- package/src/corpus/templates/web-app/index.md +3 -3
- package/src/corpus/usage.md +1 -1
- package/src/corpus/workflows/admin-dashboard.md +4 -4
- package/src/corpus/workflows/ai-app.md +6 -6
- package/src/corpus/workflows/ai-knowledge-base.md +4 -4
- package/src/corpus/workflows/analytics-dashboard.md +4 -4
- package/src/corpus/workflows/api-dashboard.md +4 -4
- package/src/corpus/workflows/api-docs.md +2 -2
- package/src/corpus/workflows/api-service.md +6 -6
- package/src/corpus/workflows/app-with-data.md +6 -6
- package/src/corpus/workflows/appointment-booking.md +6 -6
- package/src/corpus/workflows/approval-workflow.md +4 -4
- package/src/corpus/workflows/billing-dashboard.md +6 -6
- package/src/corpus/workflows/blog-cms.md +4 -4
- package/src/corpus/workflows/booking-system.md +5 -5
- package/src/corpus/workflows/calendar-scheduler.md +4 -4
- package/src/corpus/workflows/changelog.md +2 -2
- package/src/corpus/workflows/company-website.md +3 -3
- package/src/corpus/workflows/course-platform.md +5 -5
- package/src/corpus/workflows/crm.md +5 -5
- package/src/corpus/workflows/dashboard.md +3 -3
- package/src/corpus/workflows/directory.md +4 -4
- package/src/corpus/workflows/docs-app.md +6 -6
- package/src/corpus/workflows/docs-site.md +2 -2
- package/src/corpus/workflows/erp.md +5 -5
- package/src/corpus/workflows/event-board.md +4 -4
- package/src/corpus/workflows/expense-tracker.md +4 -4
- package/src/corpus/workflows/feature-request-board.md +4 -4
- package/src/corpus/workflows/financial-dashboard.md +4 -4
- package/src/corpus/workflows/forum.md +5 -5
- package/src/corpus/workflows/hr-portal.md +5 -5
- package/src/corpus/workflows/internal-tools-portal.md +5 -5
- package/src/corpus/workflows/inventory.md +4 -4
- package/src/corpus/workflows/invoice.md +4 -4
- package/src/corpus/workflows/job-board.md +4 -4
- package/src/corpus/workflows/kanban.md +5 -5
- package/src/corpus/workflows/landing-page.md +3 -3
- package/src/corpus/workflows/lms.md +5 -5
- package/src/corpus/workflows/marketplace.md +4 -4
- package/src/corpus/workflows/membership-site.md +6 -6
- package/src/corpus/workflows/monitoring-dashboard.md +4 -4
- package/src/corpus/workflows/online-store.md +6 -6
- package/src/corpus/workflows/portfolio.md +2 -2
- package/src/corpus/workflows/presentation.md +3 -3
- package/src/corpus/workflows/product-catalog.md +4 -4
- package/src/corpus/workflows/product-launch.md +3 -3
- package/src/corpus/workflows/project-management.md +4 -4
- package/src/corpus/workflows/property-listings.md +4 -4
- package/src/corpus/workflows/quiz-platform.md +4 -4
- package/src/corpus/workflows/report.md +3 -3
- package/src/corpus/workflows/restaurant-reservations.md +5 -5
- package/src/corpus/workflows/revenue-dashboard.md +4 -4
- package/src/corpus/workflows/saas-marketing.md +2 -2
- package/src/corpus/workflows/semantic-search.md +5 -5
- package/src/corpus/workflows/status-page.md +2 -2
- package/src/corpus/workflows/subscription-management.md +6 -6
- package/src/corpus/workflows/task-manager.md +4 -4
- package/src/corpus/workflows/ticket-system.md +4 -4
- package/src/corpus/workflows/time-tracking.md +4 -4
- package/src/corpus/workflows/travel-booking.md +5 -5
- package/src/corpus/workflows/waitlist.md +2 -2
- package/src/corpus/workflows/web-app.md +3 -3
- package/src/session-logger.js +3 -3
- package/src/tools.js +129 -89
- package/src/widgets/org-picker.html +1 -1
|
@@ -40,7 +40,7 @@ edition** (Claude Desktop / Claude Code) or the CLI.
|
|
|
40
40
|
|
|
41
41
|
## 3. Scaffold
|
|
42
42
|
|
|
43
|
-
`
|
|
43
|
+
`grid_create_project` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
|
|
44
44
|
and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
|
|
45
45
|
directory, so run `init` FIRST.
|
|
46
46
|
|
|
@@ -48,7 +48,7 @@ directory, so run `init` FIRST.
|
|
|
48
48
|
|
|
49
49
|
This is a blueprint — the structure guide is the deliverable, not copy-paste code.
|
|
50
50
|
|
|
51
|
-
1. `
|
|
51
|
+
1. `grid_get_template("template", "online-store")`.
|
|
52
52
|
2. **Read `AGENTS.md`** in the fetched template. It has: the file tree (app under
|
|
53
53
|
`services/web/`), the Mongo collections (`products`, `orders`) and their
|
|
54
54
|
fields, how the grid injects Mongo (`DATABASE_MONGODB_URL`) and the Stripe key
|
|
@@ -88,15 +88,15 @@ This is a blueprint — the structure guide is the deliverable, not copy-paste c
|
|
|
88
88
|
|
|
89
89
|
## 6. Config
|
|
90
90
|
|
|
91
|
-
- Stripe secrets → the vault: `
|
|
91
|
+
- Stripe secrets → the vault: `grid_set_secret` to set `stripe-live-key` (and a
|
|
92
92
|
`stripe-webhook-secret` if you map one). The `vault:` block turns them into env
|
|
93
|
-
vars. Non-secret config → `
|
|
93
|
+
vars. Non-secret config → `grid_set_env`.
|
|
94
94
|
- Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` /
|
|
95
95
|
`MONGODB_URL`) — the grid injects them.
|
|
96
96
|
|
|
97
97
|
## 7. Deploy (async)
|
|
98
98
|
|
|
99
|
-
Deploy the folder with `
|
|
99
|
+
Deploy the folder with `grid_deploy`. A **runtime deploy is ASYNC**: the first
|
|
100
100
|
response is `status: "building"`, NOT a live URL yet.
|
|
101
101
|
- Poll `grid_status` (or the returned poll_url) until the entity is live.
|
|
102
102
|
- Surface a liveness signal while it builds — never a bare silent wait.
|
|
@@ -105,7 +105,7 @@ response is `status: "building"`, NOT a live URL yet.
|
|
|
105
105
|
## 8. Wire the Stripe webhook + return the live URL
|
|
106
106
|
|
|
107
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-`
|
|
108
|
+
dashboard, copy its `whsec_…` secret into the vault, and re-`grid_deploy` the
|
|
109
109
|
SAME entity if you changed the `vault:` mapping (same URL).
|
|
110
110
|
2. Give the user the live store URL — that is the deliverable. To iterate, re-plug
|
|
111
111
|
the SAME entity so it updates the same URL.
|
|
@@ -4,7 +4,7 @@ when: portfolio, personal site, freelancer site, my work, showcase, resume site,
|
|
|
4
4
|
needs: none
|
|
5
5
|
deploy: inspiration
|
|
6
6
|
editions: all
|
|
7
|
-
capabilities_note: static — no infrastructure. Publishes as an inspiration (instant, works on hosted) via
|
|
7
|
+
capabilities_note: static — no infrastructure. Publishes as an inspiration (instant, works on hosted) via grid_deploy.
|
|
8
8
|
summary: Fetch the portfolio template, fill it with the user's projects and bio, deploy it, and return the live share URL.
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -15,7 +15,7 @@ follow this recipe. Reach for this over `landing-page` when the request is about
|
|
|
15
15
|
showcasing projects with an about, skills, and contact. Do not ask setup
|
|
16
16
|
questions first; use sensible defaults and build.
|
|
17
17
|
|
|
18
|
-
1. **Fetch the template.** Call `
|
|
18
|
+
1. **Fetch the template.** Call `grid_get_template("template", "portfolio")` to load
|
|
19
19
|
the self-contained HTML portfolio (hero, about, skills, projects grid,
|
|
20
20
|
contact).
|
|
21
21
|
2. **Fill the template.** Replace the placeholders with the user's content:
|
|
@@ -4,7 +4,7 @@ when: slides, deck, pitch, presentation, slideshow.
|
|
|
4
4
|
needs: none
|
|
5
5
|
deploy: inspiration
|
|
6
6
|
editions: all
|
|
7
|
-
capabilities_note: static — no infrastructure. Publishes as an inspiration (instant, works on hosted) via
|
|
7
|
+
capabilities_note: static — no infrastructure. Publishes as an inspiration (instant, works on hosted) via grid_deploy.
|
|
8
8
|
summary: Fetch the deck template, fill it with the user's content, deploy it, and return the live share URL.
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -13,9 +13,9 @@ summary: Fetch the deck template, fill it with the user's content, deploy it, an
|
|
|
13
13
|
Detect the intent ("build me a presentation / deck / slides about X") and follow
|
|
14
14
|
this recipe. Do not ask setup questions first; use sensible defaults and build.
|
|
15
15
|
|
|
16
|
-
1. **Fetch the template.** Call `
|
|
16
|
+
1. **Fetch the template.** Call `grid_get_template("template", "deck")` to load the
|
|
17
17
|
self-contained HTML deck template.
|
|
18
|
-
2. **(Optional) Fetch the example.** Call `
|
|
18
|
+
2. **(Optional) Fetch the example.** Call `grid_get_template("example", "deck")` to
|
|
19
19
|
see a filled deck as a reference for tone and structure.
|
|
20
20
|
3. **Fill the template.** Replace the placeholders with the user's content:
|
|
21
21
|
- The deck title and subtitle.
|
|
@@ -41,7 +41,7 @@ edition** (Claude Desktop / Claude Code) or the CLI.
|
|
|
41
41
|
|
|
42
42
|
## 3. Scaffold
|
|
43
43
|
|
|
44
|
-
`
|
|
44
|
+
`grid_create_project` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
|
|
45
45
|
and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
|
|
46
46
|
directory, so run `init` FIRST. Then (a) write the app under **`services/web/`**,
|
|
47
47
|
and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
|
|
@@ -66,7 +66,7 @@ and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
|
|
|
66
66
|
author new yaml with it, and never set `needs:` and `requires:` together (the
|
|
67
67
|
validator rejects it).
|
|
68
68
|
2. Fetch the template for the Mongo wiring + CRUD shape:
|
|
69
|
-
`
|
|
69
|
+
`grid_get_template("template", "product-catalog")`. It is a minimal, real
|
|
70
70
|
Next.js + `mongodb`-driver catalog under `services/web/`: a lazy client in
|
|
71
71
|
`services/web/lib/db.js`, an App-Router GET/POST/DELETE route on a `products`
|
|
72
72
|
collection, a server-component page, and a client grid with a category filter
|
|
@@ -86,13 +86,13 @@ before deploying. Don't require it.
|
|
|
86
86
|
|
|
87
87
|
## 6. Config
|
|
88
88
|
|
|
89
|
-
- API keys / secrets → `
|
|
89
|
+
- API keys / secrets → `grid_set_secret`. Non-secret config → `grid_set_env`.
|
|
90
90
|
- Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
|
|
91
91
|
legacy `MONGODB_URL`) — the grid injects them.
|
|
92
92
|
|
|
93
93
|
## 7. Deploy (async)
|
|
94
94
|
|
|
95
|
-
Deploy the folder with `
|
|
95
|
+
Deploy the folder with `grid_deploy`. A **runtime deploy is ASYNC**: the first
|
|
96
96
|
response is `status: "building"`, NOT a live URL yet.
|
|
97
97
|
- Poll `grid_status` (or the returned poll_url) until the entity is live.
|
|
98
98
|
- Surface a liveness signal while it builds — never a bare silent wait.
|
|
@@ -4,7 +4,7 @@ when: product launch page, launch announcement, new product page, we just launch
|
|
|
4
4
|
needs: none
|
|
5
5
|
deploy: inspiration
|
|
6
6
|
editions: all
|
|
7
|
-
capabilities_note: static — no infrastructure. Publishes as an inspiration (instant, works on hosted) via
|
|
7
|
+
capabilities_note: static — no infrastructure. Publishes as an inspiration (instant, works on hosted) via grid_deploy.
|
|
8
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
9
|
---
|
|
10
10
|
|
|
@@ -14,10 +14,10 @@ Detect the intent ("build a launch page / announcement for our new product X")
|
|
|
14
14
|
and follow this recipe. Do not ask setup questions first; use sensible defaults
|
|
15
15
|
and build.
|
|
16
16
|
|
|
17
|
-
1. **Fetch the template.** Call `
|
|
17
|
+
1. **Fetch the template.** Call `grid_get_template("template", "product-launch")` to
|
|
18
18
|
load the self-contained HTML launch-page template (hero + product image,
|
|
19
19
|
countdown, features, launch offer, social proof).
|
|
20
|
-
2. **(Optional) Fetch the example.** Call `
|
|
20
|
+
2. **(Optional) Fetch the example.** Call `grid_get_template("example", "product-launch")`
|
|
21
21
|
to see a filled launch page as a reference for tone and structure.
|
|
22
22
|
3. **Fill the template.** Replace the placeholders with the user's content:
|
|
23
23
|
- Product name, hero headline, subhead, launch badge, and CTA label/target.
|
|
@@ -42,7 +42,7 @@ edition** (Claude Desktop / Claude Code) or the CLI.
|
|
|
42
42
|
|
|
43
43
|
## 3. Scaffold
|
|
44
44
|
|
|
45
|
-
`
|
|
45
|
+
`grid_create_project` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
|
|
46
46
|
and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
|
|
47
47
|
directory, so run `init` FIRST. Then (a) write the app under **`services/web/`**,
|
|
48
48
|
and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
|
|
@@ -67,7 +67,7 @@ and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
|
|
|
67
67
|
author new yaml with it, and never set `needs:` and `requires:` together (the
|
|
68
68
|
validator rejects it).
|
|
69
69
|
2. Fetch the template for the Mongo wiring + CRUD shape:
|
|
70
|
-
`
|
|
70
|
+
`grid_get_template("template", "project-management")`. It is a minimal, real
|
|
71
71
|
Next.js + `mongodb`-driver app under `services/web/`: a lazy client in
|
|
72
72
|
`services/web/lib/db.js`, an App-Router GET/POST/DELETE route on a `projects`
|
|
73
73
|
collection, a GET/POST/PATCH/DELETE route on a `tasks` collection, a
|
|
@@ -87,13 +87,13 @@ before deploying. Don't require it.
|
|
|
87
87
|
|
|
88
88
|
## 6. Config
|
|
89
89
|
|
|
90
|
-
- API keys / secrets → `
|
|
90
|
+
- API keys / secrets → `grid_set_secret`. Non-secret config → `grid_set_env`.
|
|
91
91
|
- Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
|
|
92
92
|
legacy `MONGODB_URL`) — the grid injects them.
|
|
93
93
|
|
|
94
94
|
## 7. Deploy (async)
|
|
95
95
|
|
|
96
|
-
Deploy the folder with `
|
|
96
|
+
Deploy the folder with `grid_deploy`. A **runtime deploy is ASYNC**: the first
|
|
97
97
|
response is `status: "building"`, NOT a live URL yet.
|
|
98
98
|
- Poll `grid_status` (or the returned poll_url) until the entity is live.
|
|
99
99
|
- Surface a liveness signal while it builds — never a bare silent wait.
|
|
@@ -38,7 +38,7 @@ edition** (Claude Desktop / Claude Code) or the CLI.
|
|
|
38
38
|
|
|
39
39
|
## 3. Scaffold
|
|
40
40
|
|
|
41
|
-
`
|
|
41
|
+
`grid_create_project` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
|
|
42
42
|
and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
|
|
43
43
|
directory, so run `init` FIRST. Then (a) write the app under **`services/web/`**,
|
|
44
44
|
and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
|
|
@@ -63,7 +63,7 @@ and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
|
|
|
63
63
|
author new yaml with it, and never set `needs:` and `requires:` together (the
|
|
64
64
|
validator rejects it).
|
|
65
65
|
2. Fetch the template for the Mongo wiring + CRUD shape:
|
|
66
|
-
`
|
|
66
|
+
`grid_get_template("template", "property-listings")`. It is a minimal, real
|
|
67
67
|
Next.js + `mongodb`-driver listings site under `services/web/`: a lazy client
|
|
68
68
|
in `services/web/lib/db.js`, an App-Router GET/POST/DELETE route on a
|
|
69
69
|
`properties` collection (GET supports `?location=` and `?maxPrice=` filters), a
|
|
@@ -82,13 +82,13 @@ before deploying. Don't require it.
|
|
|
82
82
|
|
|
83
83
|
## 6. Config
|
|
84
84
|
|
|
85
|
-
- API keys / secrets → `
|
|
85
|
+
- API keys / secrets → `grid_set_secret`. Non-secret config → `grid_set_env`.
|
|
86
86
|
- Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
|
|
87
87
|
legacy `MONGODB_URL`) — the grid injects them.
|
|
88
88
|
|
|
89
89
|
## 7. Deploy (async)
|
|
90
90
|
|
|
91
|
-
Deploy the folder with `
|
|
91
|
+
Deploy the folder with `grid_deploy`. A **runtime deploy is ASYNC**: the first
|
|
92
92
|
response is `status: "building"`, NOT a live URL yet.
|
|
93
93
|
- Poll `grid_status` (or the returned poll_url) until the entity is live.
|
|
94
94
|
- Surface a liveness signal while it builds — never a bare silent wait.
|
|
@@ -39,7 +39,7 @@ edition** (Claude Desktop / Claude Code) or the CLI.
|
|
|
39
39
|
|
|
40
40
|
## 3. Scaffold
|
|
41
41
|
|
|
42
|
-
`
|
|
42
|
+
`grid_create_project` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
|
|
43
43
|
and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
|
|
44
44
|
directory, so run `init` FIRST. Then (a) write the app under **`services/web/`**,
|
|
45
45
|
and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
|
|
@@ -64,7 +64,7 @@ and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
|
|
|
64
64
|
author new yaml with it, and never set `needs:` and `requires:` together (the
|
|
65
65
|
validator rejects it).
|
|
66
66
|
2. Fetch the template for the Mongo wiring + CRUD shape:
|
|
67
|
-
`
|
|
67
|
+
`grid_get_template("template", "quiz-platform")`. It is a minimal, real Next.js +
|
|
68
68
|
`mongodb`-driver quiz platform under `services/web/`: a lazy client in
|
|
69
69
|
`services/web/lib/db.js`, an App-Router GET/POST/DELETE route on a
|
|
70
70
|
`questions` collection, a server-component page that reads the collection, and
|
|
@@ -86,13 +86,13 @@ before deploying. Don't require it.
|
|
|
86
86
|
|
|
87
87
|
## 6. Config
|
|
88
88
|
|
|
89
|
-
- API keys / secrets → `
|
|
89
|
+
- API keys / secrets → `grid_set_secret`. Non-secret config → `grid_set_env`.
|
|
90
90
|
- Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
|
|
91
91
|
legacy `MONGODB_URL`) — the grid injects them.
|
|
92
92
|
|
|
93
93
|
## 7. Deploy (async)
|
|
94
94
|
|
|
95
|
-
Deploy the folder with `
|
|
95
|
+
Deploy the folder with `grid_deploy`. A **runtime deploy is ASYNC**: the first
|
|
96
96
|
response is `status: "building"`, NOT a live URL yet.
|
|
97
97
|
- Poll `grid_status` (or the returned poll_url) until the entity is live.
|
|
98
98
|
- Surface a liveness signal while it builds — never a bare silent wait.
|
|
@@ -4,7 +4,7 @@ when: report, one-pager, summary, brief, whitepaper, case study, formatted docum
|
|
|
4
4
|
needs: none
|
|
5
5
|
deploy: inspiration
|
|
6
6
|
editions: all
|
|
7
|
-
capabilities_note: static — no infrastructure. Publishes as an inspiration (instant, works on hosted) via
|
|
7
|
+
capabilities_note: static — no infrastructure. Publishes as an inspiration (instant, works on hosted) via grid_deploy.
|
|
8
8
|
summary: Fetch the report template, fill it with the user's content, deploy it, and return the live share URL.
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -13,9 +13,9 @@ summary: Fetch the report template, fill it with the user's content, deploy it,
|
|
|
13
13
|
Detect the intent ("build me a report / one-pager / brief about X") and follow
|
|
14
14
|
this recipe. Do not ask setup questions first; use sensible defaults and build.
|
|
15
15
|
|
|
16
|
-
1. **Fetch the template.** Call `
|
|
16
|
+
1. **Fetch the template.** Call `grid_get_template("template", "report")` to load
|
|
17
17
|
the self-contained, print-friendly HTML report template.
|
|
18
|
-
2. **(Optional) Fetch the example.** Call `
|
|
18
|
+
2. **(Optional) Fetch the example.** Call `grid_get_template("example", "report")`
|
|
19
19
|
to see a filled report as a reference for tone and structure.
|
|
20
20
|
3. **Fill the template.** Replace the placeholders with the user's content:
|
|
21
21
|
- The report title, subtitle, and date line.
|
|
@@ -43,7 +43,7 @@ edition** (Claude Desktop / Claude Code) or the CLI.
|
|
|
43
43
|
|
|
44
44
|
## 3. Fetch the blueprint and READ AGENTS.md
|
|
45
45
|
|
|
46
|
-
`
|
|
46
|
+
`grid_get_template("template", "restaurant-reservations")`. This is a **blueprint**,
|
|
47
47
|
so the deliverable is `cloudgrid.yaml` + `AGENTS.md`, not app code.
|
|
48
48
|
|
|
49
49
|
**Read `AGENTS.md` before building.** It defines:
|
|
@@ -56,7 +56,7 @@ so the deliverable is `cloudgrid.yaml` + `AGENTS.md`, not app code.
|
|
|
56
56
|
|
|
57
57
|
## 4. Scaffold + fill
|
|
58
58
|
|
|
59
|
-
1. `
|
|
59
|
+
1. `grid_create_project` an app `<name>` — creates the entity + `.cloudgrid/link.json`
|
|
60
60
|
and a `cloudgrid.yaml` with an EMPTY `services: {}`. Run `init` FIRST (plug
|
|
61
61
|
needs a linked directory).
|
|
62
62
|
2. Write the app under **`services/web/`** (`path:` is the URL mount, NOT the
|
|
@@ -85,9 +85,9 @@ so the deliverable is `cloudgrid.yaml` + `AGENTS.md`, not app code.
|
|
|
85
85
|
|
|
86
86
|
## 5. Config / secrets
|
|
87
87
|
|
|
88
|
-
- Secret values (Stripe, SendGrid, auth) → `
|
|
88
|
+
- Secret values (Stripe, SendGrid, auth) → `grid_set_secret` (the `vault:` block
|
|
89
89
|
maps them to env vars). Non-secret config (publishable keys, flags) →
|
|
90
|
-
`
|
|
90
|
+
`grid_set_env`.
|
|
91
91
|
- Do **NOT** set the DB vars yourself (`DATABASE_MONGODB_URL` / `MONGODB_URL`) —
|
|
92
92
|
the grid injects them.
|
|
93
93
|
|
|
@@ -98,7 +98,7 @@ against dev Mongo. Seed the `menu` collection, test a booking. Don't require it.
|
|
|
98
98
|
|
|
99
99
|
## 7. Deploy (async)
|
|
100
100
|
|
|
101
|
-
Deploy `services/web/` with `
|
|
101
|
+
Deploy `services/web/` with `grid_deploy`. A **runtime deploy is ASYNC**: the
|
|
102
102
|
first response is `status: building`, NOT a live URL.
|
|
103
103
|
- Poll `grid_status` (or the returned poll URL) until live.
|
|
104
104
|
- Surface a liveness signal while it builds — never a bare silent wait.
|
|
@@ -38,7 +38,7 @@ edition** (Claude Desktop / Claude Code) or the CLI.
|
|
|
38
38
|
|
|
39
39
|
## 3. Scaffold
|
|
40
40
|
|
|
41
|
-
`
|
|
41
|
+
`grid_create_project` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
|
|
42
42
|
and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
|
|
43
43
|
directory, so run `init` FIRST. Then (a) write the app under **`services/web/`**,
|
|
44
44
|
and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
|
|
@@ -63,7 +63,7 @@ and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
|
|
|
63
63
|
author new yaml with it, and never set `needs:` and `requires:` together (the
|
|
64
64
|
validator rejects it).
|
|
65
65
|
2. Fetch the template for the Mongo wiring + CRUD shape:
|
|
66
|
-
`
|
|
66
|
+
`grid_get_template("template", "revenue-dashboard")`. It is a minimal, real
|
|
67
67
|
Next.js + `mongodb`-driver dashboard under `services/web/`: a lazy client in
|
|
68
68
|
`services/web/lib/db.js`, an App-Router GET/POST/DELETE route on a `sales`
|
|
69
69
|
collection, a server-component page that computes the total + per-product
|
|
@@ -83,13 +83,13 @@ before deploying. Don't require it.
|
|
|
83
83
|
|
|
84
84
|
## 6. Config
|
|
85
85
|
|
|
86
|
-
- API keys / secrets → `
|
|
86
|
+
- API keys / secrets → `grid_set_secret`. Non-secret config → `grid_set_env`.
|
|
87
87
|
- Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
|
|
88
88
|
legacy `MONGODB_URL`) — the grid injects them.
|
|
89
89
|
|
|
90
90
|
## 7. Deploy (async)
|
|
91
91
|
|
|
92
|
-
Deploy the folder with `
|
|
92
|
+
Deploy the folder with `grid_deploy`. A **runtime deploy is ASYNC**: the first
|
|
93
93
|
response is `status: "building"`, NOT a live URL yet.
|
|
94
94
|
- Poll `grid_status` (or the returned poll_url) until the entity is live.
|
|
95
95
|
- Surface a liveness signal while it builds — never a bare silent wait.
|
|
@@ -4,7 +4,7 @@ when: SaaS marketing site, product marketing page, features and pricing page, mu
|
|
|
4
4
|
needs: none
|
|
5
5
|
deploy: inspiration
|
|
6
6
|
editions: all
|
|
7
|
-
capabilities_note: static — no infrastructure. Publishes as an inspiration (instant, works on hosted) via
|
|
7
|
+
capabilities_note: static — no infrastructure. Publishes as an inspiration (instant, works on hosted) via grid_deploy.
|
|
8
8
|
summary: Fetch the saas-marketing template, fill it with the user's product content, deploy it, and return the live share URL.
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -16,7 +16,7 @@ it when the request calls for pricing tiers, testimonials, and an FAQ, not just
|
|
|
16
16
|
hero. For a plain single-section landing page, use `landing-page`. Do not ask
|
|
17
17
|
setup questions first; use sensible defaults and build.
|
|
18
18
|
|
|
19
|
-
1. **Fetch the template.** Call `
|
|
19
|
+
1. **Fetch the template.** Call `grid_get_template("template", "saas-marketing")` to
|
|
20
20
|
load the self-contained HTML marketing site.
|
|
21
21
|
2. **Fill the template.** Replace the placeholders with the user's content:
|
|
22
22
|
- The product name, tagline, and hero eyebrow/headline/subheadline.
|
|
@@ -6,7 +6,7 @@ deploy: runtime
|
|
|
6
6
|
editions: local
|
|
7
7
|
capabilities_note: "Document search — needs a database (Mongo) for the documents + chunks collections. Two services: a React (Vite) static frontend at / and a FastAPI backend at /backend. Hybrid search = Mongo $text (lexical) + in-app NumPy cosine over chunk embedding arrays (semantic) + metadata filters, blended to the document level. Runtime app, async build, local edition only. Declare needs:{database:true}. NO needs:vector — pgvector runtime role-grant is blocked (#1545), so embeddings live in the Mongo chunks collection and are cosine-ranked in-app. Two refresh paths: the manager 'Refresh now' endpoint AND a scheduled Python type:cron job (services/refresh, daily 03:00 UTC) that vendors the backend app/ modules and reuses indexing.run_sync — both degrade gracefully. Health is green with no secrets; startup ensure_indexes() so $text never 500s on an empty catalog. Pluggable source (dropbox|local|url) + embeddings (OpenAI-compatible) each behind one config point, all secrets from env."
|
|
8
8
|
summary: "Build a document-search app on the grid — index a folder of PDFs/DOCX/TXT/MD, then search by keyword + meaning + metadata, with a grounded answer mode and manager admin. React static frontend at / + FastAPI backend at /backend, backed by grid-shared Mongo. Edition-gate first, scaffold, put the code under services/web/ + services/backend/, declare needs:{database:true} (NO vector #1545), wire the web+backend+refresh services, set the embeddings + source + manager secrets, deploy async, poll to a live URL, then Refresh now (or wait for the daily cron) to index."
|
|
9
|
-
recipe: "edition-gate -> auth+grid ->
|
|
9
|
+
recipe: "edition-gate -> auth+grid -> grid_create_project -> fetch template + read AGENTS.md -> put code under services/web + services/backend, set cloudgrid.yaml active fields -> grid secrets set (embeddings + source + MANAGER_PASSWORD_HASH) -> optional grid dev -> grid plug (async, poll) -> Refresh now to index -> return live URL"
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# Workflow: semantic-search
|
|
@@ -42,13 +42,13 @@ the **local edition** (Claude Desktop / Claude Code) or the CLI.
|
|
|
42
42
|
|
|
43
43
|
## 3. Scaffold
|
|
44
44
|
|
|
45
|
-
`
|
|
45
|
+
`grid_create_project` an app `<name>` FIRST — it creates the entity +
|
|
46
46
|
`.cloudgrid/link.json` and a starter `cloudgrid.yaml` with empty `services: {}`
|
|
47
47
|
(`plug` needs a linked directory).
|
|
48
48
|
|
|
49
49
|
## 4. Fetch the template and READ AGENTS.md
|
|
50
50
|
|
|
51
|
-
`
|
|
51
|
+
`grid_get_template("template", "semantic-search")`. Read **`AGENTS.md`** before
|
|
52
52
|
writing anything — it defines the file tree, the `documents` + `chunks`
|
|
53
53
|
collections + fields, the Mongo injection, the pluggable source adapter, the
|
|
54
54
|
embeddings config point, the secrets, the deploy flow, and the four baked-in
|
|
@@ -111,7 +111,7 @@ the cron **vendors** the backend `app/` modules it needs into
|
|
|
111
111
|
|
|
112
112
|
Store all of these with `grid secrets set KEY=VALUE` (never commit them; the app
|
|
113
113
|
reads them lazily inside functions, never at import). Non-secret public config →
|
|
114
|
-
`
|
|
114
|
+
`grid_set_env`. Do NOT set `DATABASE_MONGODB_URL` yourself — the grid injects it.
|
|
115
115
|
|
|
116
116
|
The app starts and passes `GET /backend/health` with **none** of these set;
|
|
117
117
|
search/indexing degrade to a clear "not indexed / missing secret" state.
|
|
@@ -123,7 +123,7 @@ before deploying. Don't require it.
|
|
|
123
123
|
|
|
124
124
|
## 8. Deploy (async)
|
|
125
125
|
|
|
126
|
-
Deploy the folder with `
|
|
126
|
+
Deploy the folder with `grid_deploy`. A **runtime deploy is ASYNC**: the first
|
|
127
127
|
response is `status: "building"`, NOT a live URL yet.
|
|
128
128
|
- Poll `grid_status` (or the returned poll_url) until the entity is live.
|
|
129
129
|
- Surface a liveness signal while it builds — never a bare silent wait.
|
|
@@ -4,7 +4,7 @@ when: status page, service status, uptime page, incident history, is-it-down pag
|
|
|
4
4
|
needs: none
|
|
5
5
|
deploy: inspiration
|
|
6
6
|
editions: all
|
|
7
|
-
capabilities_note: static — no infrastructure, status baked into the page. Publishes as an inspiration (instant, works on hosted) via
|
|
7
|
+
capabilities_note: static — no infrastructure, status baked into the page. Publishes as an inspiration (instant, works on hosted) via grid_deploy.
|
|
8
8
|
summary: Fetch the status-page template, fill it with the user's components and incidents, deploy it, and return the live share URL.
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -15,7 +15,7 @@ recipe. This is a display-only static page — the status is baked into the mark
|
|
|
15
15
|
there is no live polling. Do not ask setup questions first; use sensible defaults
|
|
16
16
|
and build.
|
|
17
17
|
|
|
18
|
-
1. **Fetch the template.** Call `
|
|
18
|
+
1. **Fetch the template.** Call `grid_get_template("template", "status-page")` to load
|
|
19
19
|
the self-contained HTML status page (overall banner, component list with
|
|
20
20
|
up/degraded/down pills, per-component uptime bars, incident history).
|
|
21
21
|
2. **Fill the template.** Replace the placeholders with the user's content:
|
|
@@ -49,18 +49,18 @@ A subscription-management app is a built + deployed container. It requires the
|
|
|
49
49
|
Fetch the template and read its structure guide — this is the core of the
|
|
50
50
|
workflow:
|
|
51
51
|
|
|
52
|
-
- `
|
|
52
|
+
- `grid_get_template("template", "subscription-management")` — the `cloudgrid.yaml` +
|
|
53
53
|
**`AGENTS.md`**. AGENTS.md has the file tree, the Mongo collections
|
|
54
54
|
(`customers`, `subscriptions`), the CloudGrid injection table, and the Stripe
|
|
55
55
|
change-plan / cancel / billing-portal / webhook wiring. **Read it fully before
|
|
56
56
|
building.**
|
|
57
|
-
- `
|
|
57
|
+
- `grid_get_template("template", "app-with-data")` — the proven Next.js + Mongo
|
|
58
58
|
shape this blueprint extends (lazy db client in `lib/db.js`, App-Router
|
|
59
59
|
GET/POST route). Imitate its wiring.
|
|
60
60
|
|
|
61
61
|
## 4. Scaffold
|
|
62
62
|
|
|
63
|
-
`
|
|
63
|
+
`grid_create_project` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
|
|
64
64
|
and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
|
|
65
65
|
directory, so run `init` FIRST. Then write the app under **`services/web/`** and
|
|
66
66
|
set `cloudgrid.yaml` to the active shape below.
|
|
@@ -109,12 +109,12 @@ never set `needs:` and `requires:` together (the validator rejects it).
|
|
|
109
109
|
|
|
110
110
|
## 6. Config / secrets
|
|
111
111
|
|
|
112
|
-
- Stripe secrets → `
|
|
112
|
+
- Stripe secrets → `grid_set_secret` (set the vault items `stripe-live-key` and
|
|
113
113
|
`stripe-webhook-secret` that the `vault:` block maps from). The deployer
|
|
114
114
|
injects each as its env var at runtime and under `grid dev`. Add
|
|
115
115
|
`auth-provider-key` too if you use an auth SDK.
|
|
116
116
|
- Non-secret config (Stripe publishable key `NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY`,
|
|
117
|
-
price ids, auth publishable key) → `
|
|
117
|
+
price ids, auth publishable key) → `grid_set_env` / `services.web.env`.
|
|
118
118
|
- Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` / legacy
|
|
119
119
|
`MONGODB_URL`) — the grid injects them.
|
|
120
120
|
|
|
@@ -125,7 +125,7 @@ and vault secrets before deploying. Don't require it.
|
|
|
125
125
|
|
|
126
126
|
## 8. Deploy (async)
|
|
127
127
|
|
|
128
|
-
Deploy the folder with `
|
|
128
|
+
Deploy the folder with `grid_deploy`. A **runtime deploy is ASYNC**: the first
|
|
129
129
|
response is `status: "building"`, NOT a live URL yet.
|
|
130
130
|
- Poll `grid_status` (or the returned poll_url) until the entity is live.
|
|
131
131
|
- Surface a liveness signal while it builds — never a bare silent wait.
|
|
@@ -39,7 +39,7 @@ edition** (Claude Desktop / Claude Code) or the CLI.
|
|
|
39
39
|
|
|
40
40
|
## 3. Scaffold
|
|
41
41
|
|
|
42
|
-
`
|
|
42
|
+
`grid_create_project` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
|
|
43
43
|
and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
|
|
44
44
|
directory, so run `init` FIRST. Then (a) write the app under **`services/web/`**,
|
|
45
45
|
and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
|
|
@@ -64,7 +64,7 @@ and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
|
|
|
64
64
|
author new yaml with it, and never set `needs:` and `requires:` together (the
|
|
65
65
|
validator rejects it).
|
|
66
66
|
2. Fetch the template for the Mongo wiring + CRUD shape:
|
|
67
|
-
`
|
|
67
|
+
`grid_get_template("template", "task-manager")`. It is a minimal, real Next.js +
|
|
68
68
|
`mongodb`-driver task manager under `services/web/`: a lazy client in
|
|
69
69
|
`services/web/lib/db.js`, an App-Router GET/POST/PATCH/DELETE route on a
|
|
70
70
|
`tasks` collection (PATCH toggles done), a server-component page, and a client
|
|
@@ -82,13 +82,13 @@ before deploying. Don't require it.
|
|
|
82
82
|
|
|
83
83
|
## 6. Config
|
|
84
84
|
|
|
85
|
-
- API keys / secrets → `
|
|
85
|
+
- API keys / secrets → `grid_set_secret`. Non-secret config → `grid_set_env`.
|
|
86
86
|
- Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
|
|
87
87
|
legacy `MONGODB_URL`) — the grid injects them.
|
|
88
88
|
|
|
89
89
|
## 7. Deploy (async)
|
|
90
90
|
|
|
91
|
-
Deploy the folder with `
|
|
91
|
+
Deploy the folder with `grid_deploy`. A **runtime deploy is ASYNC**: the first
|
|
92
92
|
response is `status: "building"`, NOT a live URL yet.
|
|
93
93
|
- Poll `grid_status` (or the returned poll_url) until the entity is live.
|
|
94
94
|
- Surface a liveness signal while it builds — never a bare silent wait.
|
|
@@ -37,7 +37,7 @@ edition** (Claude Desktop / Claude Code) or the CLI.
|
|
|
37
37
|
|
|
38
38
|
## 3. Scaffold
|
|
39
39
|
|
|
40
|
-
`
|
|
40
|
+
`grid_create_project` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
|
|
41
41
|
and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
|
|
42
42
|
directory, so run `init` FIRST. Then (a) write the app under **`services/web/`**,
|
|
43
43
|
and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
|
|
@@ -65,7 +65,7 @@ and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
|
|
|
65
65
|
`services.web`, and `needs.database` uncommented — so it deploys to exactly
|
|
66
66
|
those active fields.
|
|
67
67
|
2. Fetch the template for the Mongo wiring + CRUD shape:
|
|
68
|
-
`
|
|
68
|
+
`grid_get_template("template", "ticket-system")`. It is a minimal, real Next.js +
|
|
69
69
|
`mongodb`-driver app under `services/web/`: a lazy client in
|
|
70
70
|
`services/web/lib/db.js`, an App-Router GET/POST/PATCH (status)/DELETE route on a `tickets` collection, a
|
|
71
71
|
server-component page, and a client component.
|
|
@@ -82,13 +82,13 @@ before deploying. Don't require it.
|
|
|
82
82
|
|
|
83
83
|
## 6. Config
|
|
84
84
|
|
|
85
|
-
- API keys / secrets → `
|
|
85
|
+
- API keys / secrets → `grid_set_secret`. Non-secret config → `grid_set_env`.
|
|
86
86
|
- Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
|
|
87
87
|
legacy `MONGODB_URL`) — the grid injects them.
|
|
88
88
|
|
|
89
89
|
## 7. Deploy (async)
|
|
90
90
|
|
|
91
|
-
Deploy the folder with `
|
|
91
|
+
Deploy the folder with `grid_deploy`. A **runtime deploy is ASYNC**: the first
|
|
92
92
|
response is `status: "building"`, NOT a live URL yet.
|
|
93
93
|
- Poll `grid_status` (or the returned poll_url) until the entity is live.
|
|
94
94
|
- Surface a liveness signal while it builds — never a bare silent wait.
|
|
@@ -38,7 +38,7 @@ edition** (Claude Desktop / Claude Code) or the CLI.
|
|
|
38
38
|
|
|
39
39
|
## 3. Scaffold
|
|
40
40
|
|
|
41
|
-
`
|
|
41
|
+
`grid_create_project` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
|
|
42
42
|
and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
|
|
43
43
|
directory, so run `init` FIRST. Then (a) write the app under **`services/web/`**,
|
|
44
44
|
and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
|
|
@@ -63,7 +63,7 @@ and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
|
|
|
63
63
|
author new yaml with it, and never set `needs:` and `requires:` together (the
|
|
64
64
|
validator rejects it).
|
|
65
65
|
2. Fetch the template for the Mongo wiring + CRUD shape:
|
|
66
|
-
`
|
|
66
|
+
`grid_get_template("template", "time-tracking")`. It is a minimal, real Next.js +
|
|
67
67
|
`mongodb`-driver time tracker under `services/web/`: a lazy client in
|
|
68
68
|
`services/web/lib/db.js`, an App-Router GET/POST/DELETE route on an `entries`
|
|
69
69
|
collection, a server-component page, and a client form that also renders
|
|
@@ -85,13 +85,13 @@ before deploying. Don't require it.
|
|
|
85
85
|
|
|
86
86
|
## 6. Config
|
|
87
87
|
|
|
88
|
-
- API keys / secrets → `
|
|
88
|
+
- API keys / secrets → `grid_set_secret`. Non-secret config → `grid_set_env`.
|
|
89
89
|
- Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
|
|
90
90
|
legacy `MONGODB_URL`) — the grid injects them.
|
|
91
91
|
|
|
92
92
|
## 7. Deploy (async)
|
|
93
93
|
|
|
94
|
-
Deploy the folder with `
|
|
94
|
+
Deploy the folder with `grid_deploy`. A **runtime deploy is ASYNC**: the first
|
|
95
95
|
response is `status: "building"`, NOT a live URL yet.
|
|
96
96
|
- Poll `grid_status` (or the returned poll_url) until the entity is live.
|
|
97
97
|
- Surface a liveness signal while it builds — never a bare silent wait.
|
|
@@ -46,12 +46,12 @@ edition** (Claude Desktop / Claude Code) or the CLI.
|
|
|
46
46
|
|
|
47
47
|
## 3. Read the blueprint, then scaffold
|
|
48
48
|
|
|
49
|
-
1. Fetch the blueprint: `
|
|
49
|
+
1. Fetch the blueprint: `grid_get_template("template", "travel-booking")`. **Read its
|
|
50
50
|
`AGENTS.md`** — it is the structure guide (file tree under `services/web/`, the
|
|
51
51
|
`flights` / `hotels` / `bookings` / `trips` collections + the overbooking
|
|
52
52
|
guard, how CloudGrid injects the DB and vault secrets, how to wire Stripe +
|
|
53
53
|
auth, and the trip-reminder-cron design).
|
|
54
|
-
2. `
|
|
54
|
+
2. `grid_create_project` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
|
|
55
55
|
and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a
|
|
56
56
|
linked directory, so run `init` FIRST.
|
|
57
57
|
|
|
@@ -88,9 +88,9 @@ edition** (Claude Desktop / Claude Code) or the CLI.
|
|
|
88
88
|
|
|
89
89
|
## 5. Config (secrets)
|
|
90
90
|
|
|
91
|
-
- Payment/auth secrets → add the vault items with `
|
|
91
|
+
- Payment/auth secrets → add the vault items with `grid_set_secret` (e.g.
|
|
92
92
|
`stripe-live-key`, `stripe-webhook-secret`, `auth-provider-key`) BEFORE plug so
|
|
93
|
-
the `vault:` mappings resolve. Non-secret config → `
|
|
93
|
+
the `vault:` mappings resolve. Non-secret config → `grid_set_env`.
|
|
94
94
|
- Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` / legacy
|
|
95
95
|
`MONGODB_URL`) — the grid injects them.
|
|
96
96
|
|
|
@@ -102,7 +102,7 @@ require it.
|
|
|
102
102
|
|
|
103
103
|
## 7. Deploy (async)
|
|
104
104
|
|
|
105
|
-
Deploy the folder with `
|
|
105
|
+
Deploy the folder with `grid_deploy`. A **runtime deploy is ASYNC**: the first
|
|
106
106
|
response is `status: "building"`, NOT a live URL yet.
|
|
107
107
|
- Poll `grid_status` (or the returned poll_url) until the entity is live.
|
|
108
108
|
- Surface a liveness signal while it builds — never a bare silent wait.
|
|
@@ -4,7 +4,7 @@ when: waitlist, coming soon, early access, join the list, launch page, sign-up t
|
|
|
4
4
|
needs: none
|
|
5
5
|
deploy: inspiration
|
|
6
6
|
editions: all
|
|
7
|
-
capabilities_note: static — no infrastructure. The email form posts to a configurable mailto/external endpoint; it does NOT store signups. Publishes as an inspiration (instant, works on hosted) via
|
|
7
|
+
capabilities_note: static — no infrastructure. The email form posts to a configurable mailto/external endpoint; it does NOT store signups. Publishes as an inspiration (instant, works on hosted) via grid_deploy.
|
|
8
8
|
summary: Fetch the waitlist template, fill it with the user's launch copy, wire the form to a mailto or external endpoint, deploy it, and return the live share URL.
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -22,7 +22,7 @@ NOT store signups anywhere on CloudGrid. To actually **store** waitlist signups
|
|
|
22
22
|
(`needs: { database: true }`) — that is a CRUD app, coming in the crud-app
|
|
23
23
|
archetype (Wave 1b). Do not claim this static page persists data.
|
|
24
24
|
|
|
25
|
-
1. **Fetch the template.** Call `
|
|
25
|
+
1. **Fetch the template.** Call `grid_get_template("template", "waitlist")` to load
|
|
26
26
|
the self-contained HTML waitlist page (hero, email form, social-proof counter).
|
|
27
27
|
2. **Fill the template.** Replace the placeholders with the user's content:
|
|
28
28
|
- The product name, coming-soon headline, and subheadline.
|