@cloudgrid-io/mcp 0.20.4 → 0.20.6
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 +3 -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 +12 -5
- package/src/tools.js +154 -91
- package/src/web.js +4 -2
- 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. Then (a) write the app under **`services/web/`**,
|
|
46
46
|
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
|
author new yaml with it, and never set `needs:` and `requires:` together (the
|
|
66
66
|
validator rejects it).
|
|
67
67
|
2. Fetch the template for the Mongo wiring + aggregation shape:
|
|
68
|
-
`
|
|
68
|
+
`grid_get_template("template", "analytics-dashboard")`. It is a minimal, real
|
|
69
69
|
Next.js + `mongodb`-driver dashboard under `services/web/`: a lazy client in
|
|
70
70
|
`services/web/lib/db.js`, an App-Router GET/POST/DELETE route on an `events`
|
|
71
71
|
collection, a server-component page that reads the collection and computes
|
|
@@ -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.
|
|
@@ -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", "api-dashboard")`. It is a minimal, real Next.js +
|
|
68
68
|
`mongodb`-driver request monitor under `services/web/`: a lazy client in
|
|
69
69
|
`services/web/lib/db.js`, an App-Router GET/POST/DELETE route on a `requests`
|
|
70
70
|
collection, a server-component page that reads the log, and a client dashboard
|
|
@@ -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: API documentation, API reference, endpoint docs, REST API docs, method/par
|
|
|
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 api-docs template, fill it with the user's endpoints, deploy it, and return the live share URL.
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -15,7 +15,7 @@ this recipe. For prose guides or a general docs site, use `docs-site`; use this
|
|
|
15
15
|
one when the content is an endpoint reference. Do not ask setup questions first;
|
|
16
16
|
use sensible defaults and build.
|
|
17
17
|
|
|
18
|
-
1. **Fetch the template.** Call `
|
|
18
|
+
1. **Fetch the template.** Call `grid_get_template("template", "api-docs")` to load
|
|
19
19
|
the self-contained HTML API reference (sidebar endpoint list, method badges,
|
|
20
20
|
params tables, request/response code blocks, client-side filter).
|
|
21
21
|
2. **Fill the template.** Replace the placeholders with the user's content:
|
|
@@ -42,7 +42,7 @@ Persistent services are owned entities.
|
|
|
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.
|
|
48
48
|
|
|
@@ -72,7 +72,7 @@ fill in `cloudgrid.yaml` to the shape below (`services.api` type `node` + `needs
|
|
|
72
72
|
runtime. `requires:` is the deprecated v1 alias; don't author new yaml with
|
|
73
73
|
it, and never set `needs:` and `requires:` together (the validator rejects it).
|
|
74
74
|
2. Fetch the template for the server + Mongo shape:
|
|
75
|
-
`
|
|
75
|
+
`grid_get_template("template", "api-service")`. It is a minimal Node `http`
|
|
76
76
|
server under `services/api/`: it listens on `process.env.PORT || 8080` and
|
|
77
77
|
serves a small REST resource (`/items` GET list / POST create / DELETE by id)
|
|
78
78
|
backed by Mongo.
|
|
@@ -85,7 +85,7 @@ fill in `cloudgrid.yaml` to the shape below (`services.api` type `node` + `needs
|
|
|
85
85
|
never at module top level, or node startup crashes** before the grid has
|
|
86
86
|
injected the var.
|
|
87
87
|
- Return clear JSON errors (`{ "error": "…" }`) with the right status codes.
|
|
88
|
-
- (Optional) fetch `
|
|
88
|
+
- (Optional) fetch `grid_get_template("example", "api-service")` for a slightly
|
|
89
89
|
richer filled reference to imitate.
|
|
90
90
|
|
|
91
91
|
## 5. (Optional) Run locally
|
|
@@ -95,14 +95,14 @@ and hit the endpoints before deploying. Don't require it.
|
|
|
95
95
|
|
|
96
96
|
## 6. Config
|
|
97
97
|
|
|
98
|
-
- API keys / secrets → `
|
|
99
|
-
- Non-secret config → `
|
|
98
|
+
- API keys / secrets → `grid_set_secret`.
|
|
99
|
+
- Non-secret config → `grid_set_env`.
|
|
100
100
|
- Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL`, or the
|
|
101
101
|
legacy `MONGODB_URL` alias) — the grid injects them.
|
|
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"` with a `poll_url` / entity, 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.
|
|
@@ -43,7 +43,7 @@ Persistent apps are owned entities.
|
|
|
43
43
|
|
|
44
44
|
## 3. Scaffold
|
|
45
45
|
|
|
46
|
-
`
|
|
46
|
+
`grid_create_project` an app `<name>` (the default `--type` is fine). `init` creates
|
|
47
47
|
the entity + `.cloudgrid/link.json` and writes a `cloudgrid.yaml` with an EMPTY
|
|
48
48
|
`services: {}`. `plug` needs a linked directory, so run `init` FIRST.
|
|
49
49
|
|
|
@@ -73,7 +73,7 @@ in `cloudgrid.yaml` to the shape below (`services.web` + `needs: { database: tru
|
|
|
73
73
|
runtime. `requires:` is the deprecated v1 alias; don't author new yaml with it,
|
|
74
74
|
and never set `needs:` and `requires:` together (the validator rejects it).
|
|
75
75
|
2. Fetch the template for the Mongo wiring + CRUD shape:
|
|
76
|
-
`
|
|
76
|
+
`grid_get_template("template", "app-with-data")`. It is a minimal, real
|
|
77
77
|
Next.js + `mongodb`-driver to-do app under `services/web/`: a lazy client in
|
|
78
78
|
`services/web/lib/db.js`, an App-Router GET/POST/DELETE route on a `todos`
|
|
79
79
|
collection, and a page.
|
|
@@ -85,7 +85,7 @@ in `cloudgrid.yaml` to the shape below (`services.web` + `needs: { database: tru
|
|
|
85
85
|
- **Put the DB connection behind a lazy getter — never read the connection
|
|
86
86
|
string at module top level, or `next build` fails** (the module is imported
|
|
87
87
|
for route analysis before the grid injects the var).
|
|
88
|
-
- (Optional) fetch `
|
|
88
|
+
- (Optional) fetch `grid_get_template("example", "app-with-data")` for a slightly
|
|
89
89
|
richer filled reference to imitate.
|
|
90
90
|
|
|
91
91
|
## 5. (Optional) Run locally
|
|
@@ -95,15 +95,15 @@ and sanity-check before deploying. Don't require it.
|
|
|
95
95
|
|
|
96
96
|
## 6. Config
|
|
97
97
|
|
|
98
|
-
- API keys / secrets → `
|
|
99
|
-
- Non-secret config → `
|
|
98
|
+
- API keys / secrets → `grid_set_secret`.
|
|
99
|
+
- Non-secret config → `grid_set_env`.
|
|
100
100
|
- Do **NOT** set the DB/cache connection vars yourself (`DATABASE_MONGODB_URL`,
|
|
101
101
|
`CACHE_REDIS_URL`, or their legacy `MONGODB_URL` / `REDIS_URL` aliases) — the
|
|
102
102
|
grid injects them.
|
|
103
103
|
|
|
104
104
|
## 7. Deploy (async)
|
|
105
105
|
|
|
106
|
-
Deploy the folder with `
|
|
106
|
+
Deploy the folder with `grid_deploy`. A **runtime deploy is ASYNC**: the first
|
|
107
107
|
response is `status: "building"` with a `poll_url` / entity, NOT a live URL yet.
|
|
108
108
|
- Poll `grid_status` (or the returned poll_url) until the entity is live.
|
|
109
109
|
- Surface a liveness signal while it builds — keep the user informed, never a
|
|
@@ -43,18 +43,18 @@ A booking app is a built + deployed container. It requires the **local edition**
|
|
|
43
43
|
Fetch the template and read its structure guide — this is the core of the
|
|
44
44
|
workflow:
|
|
45
45
|
|
|
46
|
-
- `
|
|
46
|
+
- `grid_get_template("template", "appointment-booking")` — the `cloudgrid.yaml` +
|
|
47
47
|
**`AGENTS.md`**. AGENTS.md has the file tree, the Mongo collections
|
|
48
48
|
(`providers`, `services`, `availability`, `appointments`), the slot-computation
|
|
49
49
|
and anti-double-booking rules, the CloudGrid injection table, and the auth +
|
|
50
50
|
Stripe wiring. **Read it fully before building.**
|
|
51
|
-
- `
|
|
51
|
+
- `grid_get_template("template", "app-with-data")` — the proven Next.js + Mongo
|
|
52
52
|
shape this blueprint extends (lazy db client in `lib/db.js`, App-Router
|
|
53
53
|
GET/POST route). Imitate its wiring.
|
|
54
54
|
|
|
55
55
|
## 4. Scaffold
|
|
56
56
|
|
|
57
|
-
`
|
|
57
|
+
`grid_create_project` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
|
|
58
58
|
and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
|
|
59
59
|
directory, so run `init` FIRST. Then write the app under **`services/web/`** and
|
|
60
60
|
set `cloudgrid.yaml` to the active shape below.
|
|
@@ -101,12 +101,12 @@ never set `needs:` and `requires:` together (the validator rejects it).
|
|
|
101
101
|
|
|
102
102
|
## 6. Config / secrets
|
|
103
103
|
|
|
104
|
-
- Auth + Stripe secrets → `
|
|
104
|
+
- Auth + Stripe secrets → `grid_set_secret` (set the vault items `auth-provider-key`,
|
|
105
105
|
and if taking deposits `stripe-live-key`, `stripe-webhook-secret`, that the
|
|
106
106
|
`vault:` block maps from). The deployer injects each as its env var at runtime
|
|
107
107
|
and under `grid dev`.
|
|
108
108
|
- Non-secret config (auth publishable key `NEXT_PUBLIC_...`, Stripe price ids) →
|
|
109
|
-
`
|
|
109
|
+
`grid_set_env` / `services.web.env`.
|
|
110
110
|
- Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` / legacy
|
|
111
111
|
`MONGODB_URL`) — the grid injects them.
|
|
112
112
|
|
|
@@ -127,7 +127,7 @@ claim reminders are live.
|
|
|
127
127
|
|
|
128
128
|
## 9. Deploy (async)
|
|
129
129
|
|
|
130
|
-
Deploy the folder with `
|
|
130
|
+
Deploy the folder with `grid_deploy`. A **runtime deploy is ASYNC**: the first
|
|
131
131
|
response is `status: "building"`, NOT a live URL yet.
|
|
132
132
|
- Poll `grid_status` (or the returned poll_url) until the entity is live.
|
|
133
133
|
- Surface a liveness signal while it builds — never a bare silent wait.
|
|
@@ -44,18 +44,18 @@ A persistent approval app is a built + deployed container. It requires the
|
|
|
44
44
|
## 3. Read the blueprint
|
|
45
45
|
|
|
46
46
|
Fetch the blueprint and read it before building:
|
|
47
|
-
`
|
|
47
|
+
`grid_get_template("template", "approval-workflow")`. Its **`AGENTS.md`** is the
|
|
48
48
|
structure guide — the file tree (under `services/web/`), the Mongo collections
|
|
49
49
|
(`users`, `requests`, `steps`, `audit`), the **state machine** (how a request
|
|
50
50
|
advances / is decided across its ordered steps), how CloudGrid injects the DB
|
|
51
51
|
and secrets, how to wire auth roles (and optional payments), and the deploy
|
|
52
52
|
steps. Also fetch the concrete CRUD shape to adapt from:
|
|
53
|
-
`
|
|
53
|
+
`grid_get_template("template", "app-with-data")` (lazy `lib/db.js`, App Router
|
|
54
54
|
route, server page).
|
|
55
55
|
|
|
56
56
|
## 4. Scaffold
|
|
57
57
|
|
|
58
|
-
`
|
|
58
|
+
`grid_create_project` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
|
|
59
59
|
and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
|
|
60
60
|
directory, so run `init` FIRST. Then (a) write the app under **`services/web/`**
|
|
61
61
|
following `AGENTS.md`, and (b) fill `cloudgrid.yaml` to the shape below.
|
|
@@ -110,7 +110,7 @@ before deploying. Don't require it.
|
|
|
110
110
|
|
|
111
111
|
## 8. Deploy (async)
|
|
112
112
|
|
|
113
|
-
Deploy the folder with `
|
|
113
|
+
Deploy the folder with `grid_deploy`. A **runtime deploy is ASYNC**: the first
|
|
114
114
|
response is `status: "building"`, NOT a live URL yet.
|
|
115
115
|
- Poll `grid_status` (or the returned poll_url) until the entity is live.
|
|
116
116
|
- Surface a liveness signal while it builds — never a bare silent wait.
|
|
@@ -43,7 +43,7 @@ A persistent billing dashboard is a built + deployed container. It requires the
|
|
|
43
43
|
|
|
44
44
|
## 3. Scaffold
|
|
45
45
|
|
|
46
|
-
`
|
|
46
|
+
`grid_create_project` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
|
|
47
47
|
and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
|
|
48
48
|
directory, so run `init` FIRST.
|
|
49
49
|
|
|
@@ -51,7 +51,7 @@ directory, so run `init` FIRST.
|
|
|
51
51
|
|
|
52
52
|
This is a blueprint — the structure guide is the deliverable, not copy-paste code.
|
|
53
53
|
|
|
54
|
-
1. `
|
|
54
|
+
1. `grid_get_template("template", "billing-dashboard")`.
|
|
55
55
|
2. **Read `AGENTS.md`** in the fetched template. It has: the file tree (app under
|
|
56
56
|
`services/web/`), the Mongo collections (`customers`, `invoices`, `charges`,
|
|
57
57
|
`usage_events`) and their fields, how the grid injects Mongo
|
|
@@ -94,15 +94,15 @@ This is a blueprint — the structure guide is the deliverable, not copy-paste c
|
|
|
94
94
|
|
|
95
95
|
## 6. Config
|
|
96
96
|
|
|
97
|
-
- Stripe secrets → the vault: `
|
|
97
|
+
- Stripe secrets → the vault: `grid_set_secret` to set `stripe-live-key` (and a
|
|
98
98
|
`stripe-webhook-secret` if you map one). The `vault:` block turns them into env
|
|
99
|
-
vars. Non-secret config → `
|
|
99
|
+
vars. Non-secret config → `grid_set_env`.
|
|
100
100
|
- Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` /
|
|
101
101
|
`MONGODB_URL`) — the grid injects them.
|
|
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.
|
|
@@ -111,7 +111,7 @@ response is `status: "building"`, NOT a live URL yet.
|
|
|
111
111
|
## 8. Wire the Stripe webhook + return the live URL
|
|
112
112
|
|
|
113
113
|
1. Register `<live-url>/api/webhook` as a webhook endpoint in the Stripe dashboard,
|
|
114
|
-
copy its `whsec_…` secret into the vault, and re-`
|
|
114
|
+
copy its `whsec_…` secret into the vault, and re-`grid_deploy` the SAME entity
|
|
115
115
|
if you changed the `vault:` mapping (same URL).
|
|
116
116
|
2. Give the user the live dashboard URL — that is the deliverable. To iterate,
|
|
117
117
|
re-plug the SAME entity so it updates the same URL.
|
|
@@ -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", "blog-cms")`. It is a minimal, real Next.js +
|
|
68
68
|
`mongodb`-driver blog under `services/web/`: a lazy client in
|
|
69
69
|
`services/web/lib/db.js`, an App-Router GET/POST/DELETE route on a `posts`
|
|
70
70
|
collection, a server-component list page, a single-post page at
|
|
@@ -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.
|
|
@@ -47,12 +47,12 @@ edition** (Claude Desktop / Claude Code) or the CLI.
|
|
|
47
47
|
|
|
48
48
|
## 3. Read the blueprint, then scaffold
|
|
49
49
|
|
|
50
|
-
1. Fetch the blueprint: `
|
|
50
|
+
1. Fetch the blueprint: `grid_get_template("template", "booking-system")`. **Read its
|
|
51
51
|
`AGENTS.md`** — it is the structure guide (file tree under `services/web/`, the
|
|
52
52
|
`services` / `availabilityRules` / `bookings` collections + the double-booking
|
|
53
53
|
guard, how CloudGrid injects the DB and vault secrets, how to wire Stripe +
|
|
54
54
|
auth, and the reminder-cron design).
|
|
55
|
-
2. `
|
|
55
|
+
2. `grid_create_project` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
|
|
56
56
|
and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a
|
|
57
57
|
linked directory, so run `init` FIRST.
|
|
58
58
|
|
|
@@ -89,9 +89,9 @@ edition** (Claude Desktop / Claude Code) or the CLI.
|
|
|
89
89
|
|
|
90
90
|
## 5. Config (secrets)
|
|
91
91
|
|
|
92
|
-
- Payment/auth secrets → add the vault items with `
|
|
92
|
+
- Payment/auth secrets → add the vault items with `grid_set_secret` (e.g.
|
|
93
93
|
`stripe-live-key`, `stripe-webhook-secret`, `auth-provider-key`) BEFORE plug so
|
|
94
|
-
the `vault:` mappings resolve. Non-secret config → `
|
|
94
|
+
the `vault:` mappings resolve. Non-secret config → `grid_set_env`.
|
|
95
95
|
- Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` / legacy
|
|
96
96
|
`MONGODB_URL`) — the grid injects them.
|
|
97
97
|
|
|
@@ -103,7 +103,7 @@ require it.
|
|
|
103
103
|
|
|
104
104
|
## 7. Deploy (async)
|
|
105
105
|
|
|
106
|
-
Deploy the folder with `
|
|
106
|
+
Deploy the folder with `grid_deploy`. A **runtime deploy is ASYNC**: the first
|
|
107
107
|
response is `status: "building"`, NOT a live URL yet.
|
|
108
108
|
- Poll `grid_status` (or the returned poll_url) until the entity is live.
|
|
109
109
|
- Surface a liveness signal while it builds — never a bare silent wait.
|
|
@@ -41,7 +41,7 @@ requires the **local edition** (Claude Desktop / Claude Code) or the CLI.
|
|
|
41
41
|
|
|
42
42
|
## 3. Fetch the blueprint and READ AGENTS.md
|
|
43
43
|
|
|
44
|
-
`
|
|
44
|
+
`grid_get_template("template", "calendar-scheduler")`. The deliverable is the
|
|
45
45
|
**`AGENTS.md` structure guide** — read it before writing anything. It defines:
|
|
46
46
|
- the `services/web/` file tree (calendar page, event + booking routes, `lib/`),
|
|
47
47
|
- the Mongo collections (`events`, `availability`, optional `bookings`) + fields,
|
|
@@ -56,7 +56,7 @@ There is no app code to copy — you generate it from the guide.
|
|
|
56
56
|
|
|
57
57
|
## 4. Scaffold + fill cloudgrid.yaml
|
|
58
58
|
|
|
59
|
-
`
|
|
59
|
+
`grid_create_project` an app `<name>` FIRST (creates the entity + `.cloudgrid/link.json`
|
|
60
60
|
and a starter `cloudgrid.yaml` with empty `services:{}`; `plug` needs a linked
|
|
61
61
|
directory). Then put the app under **`services/web/`** and set `cloudgrid.yaml` to
|
|
62
62
|
the blueprint's active fields:
|
|
@@ -108,7 +108,7 @@ scheduler hitting an authenticated `POST /api/cron/reminders` route on `web`).
|
|
|
108
108
|
|
|
109
109
|
- Map any secrets in the `vault:` block, then **store the values**:
|
|
110
110
|
`grid secrets set auth-provider-key …`, `grid secrets set stripe-live-key sk_live_…`,
|
|
111
|
-
`grid secrets set sendgrid-key SG.…`. Non-secret public config → `
|
|
111
|
+
`grid secrets set sendgrid-key SG.…`. Non-secret public config → `grid_set_env`.
|
|
112
112
|
- Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` / legacy
|
|
113
113
|
`MONGODB_URL`) — the grid injects them.
|
|
114
114
|
|
|
@@ -119,7 +119,7 @@ secrets) before deploying. Don't require it.
|
|
|
119
119
|
|
|
120
120
|
## 9. Deploy (async)
|
|
121
121
|
|
|
122
|
-
Deploy the folder with `
|
|
122
|
+
Deploy the folder with `grid_deploy`. A **runtime deploy is ASYNC**: the first
|
|
123
123
|
response is `status: "building"`, NOT a live URL yet.
|
|
124
124
|
- Poll `grid_status` (or the returned poll_url) until the entity is live.
|
|
125
125
|
- Surface a liveness signal while it builds — never a bare silent wait.
|
|
@@ -4,7 +4,7 @@ when: changelog, release notes, what's new, product updates page, version histor
|
|
|
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 changelog template, fill it with the user's release entries, deploy it, and return the live share URL.
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -13,7 +13,7 @@ summary: Fetch the changelog template, fill it with the user's release entries,
|
|
|
13
13
|
Detect the intent ("build me a changelog / release notes page for 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", "changelog")` to load
|
|
17
17
|
the self-contained HTML changelog (reverse-chronological versioned entries with
|
|
18
18
|
tagged change items).
|
|
19
19
|
2. **Fill the template.** Replace the placeholders with the user's content:
|
|
@@ -4,7 +4,7 @@ when: company website, business site, corporate site, about-us site, small-busin
|
|
|
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 company-website template, fill it with the user's content across hero/about/services/team/contact, deploy it, and return the live share URL.
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -14,9 +14,9 @@ Detect the intent ("build me a company website / business site / about-us page
|
|
|
14
14
|
for X") and follow this recipe. Do not ask setup questions first; use sensible
|
|
15
15
|
defaults from what the user tells you and build.
|
|
16
16
|
|
|
17
|
-
1. **Fetch the template.** Call `
|
|
17
|
+
1. **Fetch the template.** Call `grid_get_template("template", "company-website")` to
|
|
18
18
|
load the self-contained multi-section HTML company site.
|
|
19
|
-
2. **(Optional) Fetch the example.** Call `
|
|
19
|
+
2. **(Optional) Fetch the example.** Call `grid_get_template("example", "company-website")`
|
|
20
20
|
to see a filled site as a reference for tone and structure.
|
|
21
21
|
3. **Fill the template.** Replace the `{{PLACEHOLDER}}` tokens with the user's
|
|
22
22
|
content, section by section:
|
|
@@ -41,7 +41,7 @@ edition** (Claude Desktop / Claude Code) or the CLI.
|
|
|
41
41
|
|
|
42
42
|
## 3. Read the blueprint
|
|
43
43
|
|
|
44
|
-
Fetch the structure guide: `
|
|
44
|
+
Fetch the structure guide: `grid_get_template("template", "course-platform")`. It
|
|
45
45
|
contains AGENTS.md — the CloudGrid-specific spec you must follow:
|
|
46
46
|
|
|
47
47
|
- the file tree under `services/web/` (catalog page, course detail, gated lesson
|
|
@@ -57,7 +57,7 @@ contains AGENTS.md — the CloudGrid-specific spec you must follow:
|
|
|
57
57
|
|
|
58
58
|
## 4. Scaffold + fill cloudgrid.yaml
|
|
59
59
|
|
|
60
|
-
`
|
|
60
|
+
`grid_create_project` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
|
|
61
61
|
and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. Run `init` FIRST —
|
|
62
62
|
`plug` needs a linked directory. Then set `cloudgrid.yaml` to the shape below and
|
|
63
63
|
write the app under **`services/web/`** (`path: /` is the URL mount, NOT the
|
|
@@ -101,17 +101,17 @@ rules:
|
|
|
101
101
|
|
|
102
102
|
## 6. Config (secrets + env)
|
|
103
103
|
|
|
104
|
-
- Secrets → `
|
|
104
|
+
- Secrets → `grid_set_secret`: `grid secrets set stripe-live-key`,
|
|
105
105
|
`grid secrets set stripe-webhook-secret`, `grid secrets set auth-provider-key`.
|
|
106
106
|
The `vault:` block injects them as `STRIPE_KEY`, `STRIPE_WEBHOOK_SECRET`,
|
|
107
107
|
`AUTH_PROVIDER_KEY`.
|
|
108
|
-
- Non-secret config (e.g. the auth **publishable** key) → `
|
|
108
|
+
- Non-secret config (e.g. the auth **publishable** key) → `grid_set_env`.
|
|
109
109
|
- Do **NOT** set the DB vars yourself (`DATABASE_MONGODB_URL` / legacy
|
|
110
110
|
`MONGODB_URL`) — the grid injects them.
|
|
111
111
|
|
|
112
112
|
## 7. Deploy (async)
|
|
113
113
|
|
|
114
|
-
Deploy the folder with `
|
|
114
|
+
Deploy the folder with `grid_deploy`. A **runtime deploy is ASYNC**: the first
|
|
115
115
|
response is `status: "building"`, NOT a live URL yet.
|
|
116
116
|
- Poll `grid_status` (or the returned poll_url) until the entity is live.
|
|
117
117
|
- 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", "crm")`. It is a minimal, real Next.js +
|
|
67
67
|
`mongodb`-driver contact manager under `services/web/`: a lazy client in
|
|
68
68
|
`services/web/lib/db.js`, an App-Router GET/POST/PATCH/DELETE route on a
|
|
69
69
|
`contacts` collection, a server-component page, and a client table.
|
|
@@ -72,7 +72,7 @@ and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
|
|
|
72
72
|
fallback) — the grid injects it at dev-time and runtime.
|
|
73
73
|
- **Put the DB connection behind a lazy getter — never read the connection
|
|
74
74
|
string at module top level, or `next build` fails.**
|
|
75
|
-
- (Optional) fetch `
|
|
75
|
+
- (Optional) fetch `grid_get_template("example", "crm")` for a richer filled
|
|
76
76
|
reference to imitate.
|
|
77
77
|
|
|
78
78
|
## 5. (Optional) Run locally
|
|
@@ -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.
|
|
@@ -4,7 +4,7 @@ when: dashboard, metrics, KPIs, stats page, status board, charts, analytics view
|
|
|
4
4
|
needs: none
|
|
5
5
|
deploy: inspiration
|
|
6
6
|
editions: all
|
|
7
|
-
capabilities_note: static — no infrastructure, data is baked into the page. Publishes as an inspiration (instant, works on hosted) via
|
|
7
|
+
capabilities_note: static — no infrastructure, data is baked into the page. Publishes as an inspiration (instant, works on hosted) via grid_deploy.
|
|
8
8
|
summary: Fetch the dashboard template, fill it with the user's metrics and inline charts, deploy it, and return the live share URL.
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -13,9 +13,9 @@ summary: Fetch the dashboard template, fill it with the user's metrics and inlin
|
|
|
13
13
|
Detect the intent ("build me a dashboard for X metrics / status") 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", "dashboard")` to load
|
|
17
17
|
the self-contained HTML dashboard template.
|
|
18
|
-
2. **(Optional) Fetch the example.** Call `
|
|
18
|
+
2. **(Optional) Fetch the example.** Call `grid_get_template("example", "dashboard")`
|
|
19
19
|
to see a filled dashboard as a reference for structure and layout.
|
|
20
20
|
3. **Fill the template.** Replace the placeholders with the user's content:
|
|
21
21
|
- The dashboard title and (optional) status line.
|
|
@@ -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", "directory")`. It is a minimal, real Next.js +
|
|
68
68
|
`mongodb`-driver directory under `services/web/`: a lazy client in
|
|
69
69
|
`services/web/lib/db.js`, an App-Router GET/POST/DELETE route on an
|
|
70
70
|
`entries` collection, a server-component page, and a client list with search +
|
|
@@ -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.
|
|
@@ -4,8 +4,8 @@ when: multi-page documentation SITE, developer docs portal, knowledge base, help
|
|
|
4
4
|
needs: none
|
|
5
5
|
deploy: static build
|
|
6
6
|
editions: local
|
|
7
|
-
capabilities_note: a built, multi-page static documentation site (Astro Starlight) — sidebar nav, client-side search, and llms.txt / llms-full.txt generated on every build. No infrastructure (no needs:). Because it BUILDS from multiple files, it deploys async and needs the local edition; the hosted MCP cannot build it. Served at the entity root via
|
|
8
|
-
summary: Scaffold an Astro Starlight docs site from the docs-app template, fill in the content, build it, deploy the folder with
|
|
7
|
+
capabilities_note: a built, multi-page static documentation site (Astro Starlight) — sidebar nav, client-side search, and llms.txt / llms-full.txt generated on every build. No infrastructure (no needs:). Because it BUILDS from multiple files, it deploys async and needs the local edition; the hosted MCP cannot build it. Served at the entity root via grid_deploy.
|
|
8
|
+
summary: Scaffold an Astro Starlight docs site from the docs-app template, fill in the content, build it, deploy the folder with grid_deploy (async → poll to a live URL), then ask the user what visibility they want. llms.txt / llms-full.txt are generated automatically.
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Workflow: docs-app
|
|
@@ -45,9 +45,9 @@ and builds your project.
|
|
|
45
45
|
|
|
46
46
|
## 3. Scaffold
|
|
47
47
|
|
|
48
|
-
`
|
|
48
|
+
`grid_create_project` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
|
|
49
49
|
and writes a `cloudgrid.yaml`. Then fetch the template:
|
|
50
|
-
`
|
|
50
|
+
`grid_get_template("template", "docs-app")` — a minimal Astro Starlight project:
|
|
51
51
|
|
|
52
52
|
```
|
|
53
53
|
package.json Astro + Starlight + starlight-llms-txt
|
|
@@ -98,7 +98,7 @@ looks for `services/site/` and fails with "Service directory not found". No
|
|
|
98
98
|
|
|
99
99
|
## 6. Build + deploy (async)
|
|
100
100
|
|
|
101
|
-
Deploy the folder with `
|
|
101
|
+
Deploy the folder with `grid_deploy`. The platform (Cloud Build) runs `npm run
|
|
102
102
|
build` for you and serves the `dist/` output — you do NOT need to build first. A build deploy is **ASYNC**: the first response is
|
|
103
103
|
`status: "building"` with a `poll_url` / entity, NOT a live URL yet.
|
|
104
104
|
- Poll `grid_status` (or the returned poll_url) until the entity is live.
|
|
@@ -112,7 +112,7 @@ build` for you and serves the `dist/` output — you do NOT need to build first.
|
|
|
112
112
|
`<url>/llms-full.txt` (full content), generated automatically.
|
|
113
113
|
- This is a NEW deploy, so ASK the user who should be able to open it (private /
|
|
114
114
|
a space / your grid / anyone with the link / anyone signed in) and set their
|
|
115
|
-
choice with `
|
|
115
|
+
choice with `grid_set_sharing`. Do not pick the visibility for them.
|
|
116
116
|
|
|
117
117
|
To iterate, edit the content and re-plug the SAME entity (`target_entity_id`) so
|
|
118
118
|
it updates the same URL.
|