@mediamonks/canopy-cli 0.7.5 → 0.7.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/docs/cli-create.md +46 -0
  2. package/dist/docs/cli-db.md +86 -0
  3. package/dist/docs/cli-delete.md +44 -0
  4. package/dist/docs/cli-deploy.md +58 -0
  5. package/dist/docs/cli-dev.md +63 -0
  6. package/dist/docs/cli-docs.md +47 -0
  7. package/dist/docs/cli-download.md +42 -0
  8. package/dist/docs/cli-egress.md +37 -0
  9. package/dist/docs/cli-feedback.md +51 -0
  10. package/dist/docs/cli-index.md +61 -0
  11. package/dist/docs/cli-init.md +46 -0
  12. package/dist/docs/cli-login.md +43 -0
  13. package/dist/docs/cli-logout.md +32 -0
  14. package/dist/docs/cli-logs.md +57 -0
  15. package/dist/docs/cli-open.md +41 -0
  16. package/dist/docs/cli-projects.md +43 -0
  17. package/dist/docs/cli-promote.md +44 -0
  18. package/dist/docs/cli-rollback.md +45 -0
  19. package/dist/docs/cli-skill.md +39 -0
  20. package/dist/docs/cli-staging.md +54 -0
  21. package/dist/docs/cli-token.md +47 -0
  22. package/dist/docs/cli-upgrade.md +43 -0
  23. package/dist/docs/cli-usage.md +43 -0
  24. package/dist/docs/cli-whoami.md +46 -0
  25. package/dist/docs/developers-agents-and-ai.md +95 -0
  26. package/dist/docs/developers-architecture.md +106 -0
  27. package/dist/docs/index.json +331 -0
  28. package/dist/docs/infrastructure.md +5 -8
  29. package/dist/docs/overview-faq.md +105 -0
  30. package/dist/docs/overview-how-it-works.md +81 -0
  31. package/dist/docs/overview-use-cases.md +76 -0
  32. package/dist/docs/overview-what-is-canopy.md +75 -0
  33. package/dist/docs/platform-ai-usage.md +65 -0
  34. package/dist/docs/platform-client-access.md +53 -0
  35. package/dist/docs/platform-deploys-and-rollbacks.md +93 -0
  36. package/dist/docs/platform-egress.md +75 -0
  37. package/dist/docs/platform-feedback.md +79 -0
  38. package/dist/docs/platform-members-and-access.md +71 -0
  39. package/dist/docs/platform-project-data.md +66 -0
  40. package/dist/docs/platform-schedules.md +90 -0
  41. package/dist/docs/platform-sites-and-profiles.md +61 -0
  42. package/dist/docs/static-serving.md +5 -8
  43. package/dist/docs/troubleshooting.md +6 -8
  44. package/dist/{docs-DQmUReJR.mjs → docs-DOiL2Sw-.mjs} +42 -20
  45. package/dist/feedback-BZG8E8zG.mjs +258 -0
  46. package/dist/index.mjs +10 -9
  47. package/dist/{logs-DBLDS3aQ.mjs → logs-DuzM-_Rn.mjs} +1 -1
  48. package/dist/{package-yVoO2pq4.mjs → package-BNiOibhj.mjs} +1 -1
  49. package/dist/{projects-D2fDeWNU.mjs → projects-C9TBoiW7.mjs} +5 -8
  50. package/dist/skill/canopy/SKILL.md +17 -8
  51. package/dist/{skill-12Ga-2UT.mjs → skill-DRTg-mJR.mjs} +1 -1
  52. package/dist/templates/worker/AGENTS.md +0 -3
  53. package/dist/templates/worker/README.md +1 -5
  54. package/dist/{upgrade-Du6U0xjp.mjs → upgrade-BDaM4M6Y.mjs} +1 -1
  55. package/package.json +1 -1
@@ -0,0 +1,106 @@
1
+ ---
2
+ title: How the platform serves your project
3
+ description: What happens between a browser and your deployed code — auth wall, static assets, the optional backend worker, and where data lives.
4
+ ---
5
+
6
+ You never manage servers on Canopy, but it helps to know what the platform
7
+ does with a request. This page covers the pieces a project developer actually
8
+ touches; platform internals stay out of it.
9
+
10
+ ## The request path
11
+
12
+ Every project lives at `https://<slug>.canopy.<domain>`. Requests hit the
13
+ **gateway** first, which enforces authentication before any of your project's
14
+ bytes are served — then either serves your deployed static files or, if the
15
+ project has one, dispatches `/api/*` to your backend worker.
16
+
17
+ ```mermaid
18
+ flowchart TD
19
+ B[Browser] --> G["Gateway<br/>auth wall: OneLogin session<br/>or client password"]
20
+ G -->|"most paths"| A["Static assets<br/>deployed build, SPA fallback"]
21
+ G -->|"/api/*"| W["Backend worker<br/>(optional, canopy.json 'worker')"]
22
+ G -->|"/_api/data/v1/*"| P["Platform data plane<br/>auth · db · blob · ai"]
23
+ W --> P
24
+ P --> D[("Project database<br/>+ blob prefix")]
25
+ ```
26
+
27
+ ## The auth wall
28
+
29
+ Authentication is a platform property — your app cannot opt out, and must not
30
+ build its own. A visitor without a valid session is redirected into the
31
+ OneLogin sign-in flow; on projects with client access enabled, outsiders get a
32
+ password page and receive a scope-limited `external` session instead. Only
33
+ after that does any project code or asset get served. Your app just asks
34
+ `canopy.auth.user()` who came through the door
35
+ (see the [SDK reference](https://docs.canopy.website/sdk)).
36
+
37
+ ## Static assets and the SPA fallback
38
+
39
+ A deploy uploads your built files as an immutable, numbered version; serving
40
+ reads whichever version is live. Requests for paths that don't match a file
41
+ fall back to `index.html`, so client-side routes like `/settings` work on a
42
+ hard refresh without any configuration. Rollback just repoints "live" at an
43
+ earlier version — instant, nothing rebuilt.
44
+
45
+ The full path — including caching, version-pinned `v12-dot-<slug>` preview
46
+ hosts, and the security review — is in
47
+ [How static files are served](https://docs.canopy.website/guides/static-serving).
48
+
49
+ ## The optional backend worker
50
+
51
+ Most projects are frontend-only: the SDK talks straight to the platform, and
52
+ no server code exists. When you need server-side code — say, calling an
53
+ external API with a secret the browser can't hold — the `worker` template adds
54
+ a backend, declared in `canopy.json`:
55
+
56
+ ```json
57
+ {
58
+ "slug": "my-app",
59
+ "build": "npm run build",
60
+ "dist": "dist",
61
+ "worker": "worker/index.ts"
62
+ }
63
+ ```
64
+
65
+ Requests under `/api/*` reach the worker (Hono-style handlers); everything
66
+ else is still static serving. Three things to know:
67
+
68
+ - **Requests arrive authenticated.** The worker sits behind the same gateway
69
+ wall as the frontend.
70
+ - **Platform access goes through the same SDK**, via the `CANOPY` service
71
+ binding — same budgets, same data isolation as the browser:
72
+
73
+ ```ts
74
+ app.get("/api/hello", async (c) => {
75
+ const canopy = createCanopy({ fetch: c.env.CANOPY.fetch.bind(c.env.CANOPY) });
76
+ const user = await canopy.auth.user();
77
+ return c.json({ message: `Hello, ${user.name}!` });
78
+ });
79
+ ```
80
+
81
+ - **Secrets and schedules come from the dashboard.** Secrets (Settings →
82
+ Secrets) land as Workers-shaped bindings (`c.env.MY_API_KEY`, not
83
+ `process.env`); dashboard Schedules invoke an exported
84
+ `scheduled(event, env)` — switch on `event.name`.
85
+
86
+ > **Warning:** Backend workers are capability-gated per target: today the GCP target runs them, while on
87
+ > Cloudflare sites a worker deploy answers a clear "not supported yet". Frontend-only projects
88
+ > deploy everywhere.
89
+
90
+ ## Where your data lives
91
+
92
+ Every project gets its own database and its own blob-storage prefix. No other
93
+ project can read them, and deleting the project tears everything down. The
94
+ document API is portable across targets; raw SQL speaks the target's dialect
95
+ (`sqlite` or `postgres` — ask `canopy.db.dialect()`). Dumps, snapshots, and
96
+ restores are CLI commands — see the [project data guide](https://docs.canopy.website/guides/data).
97
+
98
+ ## Sites
99
+
100
+ A _site_ is one installation of the whole platform. The CLI ships three
101
+ profiles — `main` (canopy.website, Cloudflare), `staging` (thanarie.dev,
102
+ Cloudflare), and `gcp-pilot` (canopy.monks.zone, GCP) — and always shows which
103
+ one you're on. Projects pin theirs in `canopy.json`; `--profile` or
104
+ `CANOPY_PROFILE` overrides per command. Most projects only ever use `main`.
105
+ Target differences (dialect, full-text search, worker support) surface as
106
+ capabilities, not separate APIs.
@@ -0,0 +1,331 @@
1
+ {
2
+ "sections": [
3
+ {
4
+ "key": "overview",
5
+ "title": "Overview",
6
+ "description": "What Canopy is and how it works, in plain language.",
7
+ "topics": [
8
+ {
9
+ "slug": "overview-what-is-canopy",
10
+ "title": "What is Canopy?",
11
+ "summary": "A fully managed home for vibecoded Monks projects — hosting, sign-in, data, files, and AI, all set up before your first prompt."
12
+ },
13
+ {
14
+ "slug": "overview-use-cases",
15
+ "title": "Use cases",
16
+ "summary": "What kinds of projects belong on Canopy — and which ones should live somewhere else."
17
+ },
18
+ {
19
+ "slug": "overview-how-it-works",
20
+ "title": "How it works",
21
+ "summary": "The life of a Canopy project in plain words — create, build, deploy, roll back."
22
+ },
23
+ {
24
+ "slug": "overview-faq",
25
+ "title": "FAQ",
26
+ "summary": "Quick answers to the questions people ask before (and just after) putting a project on Canopy."
27
+ }
28
+ ]
29
+ },
30
+ {
31
+ "key": "guides",
32
+ "title": "Guides",
33
+ "description": "Hands-on walkthroughs — build, ship, and operate a project.",
34
+ "topics": [
35
+ {
36
+ "slug": "getting-started",
37
+ "title": "Getting started",
38
+ "summary": "Install the CLI, sign in with OneLogin, and ship your first project."
39
+ },
40
+ {
41
+ "slug": "dev",
42
+ "title": "Local development",
43
+ "summary": "Running a project locally against live or sandboxed data."
44
+ },
45
+ {
46
+ "slug": "deploy",
47
+ "title": "Deploying a project",
48
+ "summary": "How canopy deploy builds, uploads, and makes a version live."
49
+ },
50
+ {
51
+ "slug": "staging",
52
+ "title": "Staging & promoting",
53
+ "summary": "Deploy to a safe copy of your project first — own database cloned from live — then promote the exact same version."
54
+ },
55
+ {
56
+ "slug": "data",
57
+ "title": "Working with project data",
58
+ "summary": "Pulling, snapshotting, and restoring your project database."
59
+ },
60
+ {
61
+ "slug": "migrations",
62
+ "title": "Migrations & Drizzle",
63
+ "summary": "Evolve your own tables with versioned SQL migrations — generated by Drizzle or written by hand — applied safely by canopy deploy."
64
+ },
65
+ {
66
+ "slug": "ci",
67
+ "title": "CI and deploy tokens",
68
+ "summary": "Push-to-main deploys using a project-scoped deploy token."
69
+ },
70
+ {
71
+ "slug": "porting-nextjs",
72
+ "title": "Porting a Next.js app",
73
+ "summary": "How to restructure a Next.js (App Router) project so it runs on Canopy."
74
+ },
75
+ {
76
+ "slug": "cli",
77
+ "title": "CLI command reference",
78
+ "summary": "Every canopy command, its flags, and what it does."
79
+ },
80
+ {
81
+ "slug": "static-serving",
82
+ "title": "How static files are served",
83
+ "summary": "The full path a browser request takes to a deployed file."
84
+ },
85
+ {
86
+ "slug": "infrastructure",
87
+ "title": "Infrastructure as code",
88
+ "summary": "Terraform for the account-level Cloudflare pieces Canopy needs."
89
+ },
90
+ {
91
+ "slug": "troubleshooting",
92
+ "title": "Troubleshooting",
93
+ "summary": "Common errors and how to resolve them."
94
+ }
95
+ ]
96
+ },
97
+ {
98
+ "key": "platform",
99
+ "title": "Platform",
100
+ "description": "Each platform feature explained in depth.",
101
+ "topics": [
102
+ {
103
+ "slug": "platform-deploys-and-rollbacks",
104
+ "title": "Deploys & rollbacks",
105
+ "summary": "Every deploy is a numbered version you can preview, download, and make live again — rolling back is instant and loses nothing."
106
+ },
107
+ {
108
+ "slug": "platform-project-data",
109
+ "title": "Project data",
110
+ "summary": "Every project gets its own private database and file storage — browse it in the dashboard, snapshot it before risky changes, and pull it locally."
111
+ },
112
+ {
113
+ "slug": "platform-schedules",
114
+ "title": "Schedules",
115
+ "summary": "Run named cron jobs in your project's backend — configured in the dashboard, so you can change the cadence without redeploying."
116
+ },
117
+ {
118
+ "slug": "platform-egress",
119
+ "title": "Outbound requests",
120
+ "summary": "Which external hosts your project's backend may fetch — a per-project allowlist you manage yourself."
121
+ },
122
+ {
123
+ "slug": "platform-ai-usage",
124
+ "title": "AI access & usage",
125
+ "summary": "Projects talk to AI models through the platform — no API keys to manage, a hard daily budget per project, and full visibility of spend."
126
+ },
127
+ {
128
+ "slug": "platform-members-and-access",
129
+ "title": "Members & access",
130
+ "summary": "Everything on Canopy sits behind Monks sign-in. Collaborators manage a project; other Monks can view the live app — unless you tighten it."
131
+ },
132
+ {
133
+ "slug": "platform-feedback",
134
+ "title": "Feedback & bug reports",
135
+ "summary": "A built-in feedback widget on every project, a ticket-lite inbox behind it, and a CLI that lets agents work the backlog."
136
+ },
137
+ {
138
+ "slug": "platform-client-access",
139
+ "title": "Client access",
140
+ "summary": "Share a project with clients who have no Monks account — a shared password unlocks that one project's URL and nothing else."
141
+ },
142
+ {
143
+ "slug": "platform-sites-and-profiles",
144
+ "title": "Sites & profiles",
145
+ "summary": "Canopy runs as more than one installation. Most people only ever use main — here's what the others are and how the CLI keeps them straight."
146
+ }
147
+ ]
148
+ },
149
+ {
150
+ "key": "cli",
151
+ "title": "CLI reference",
152
+ "description": "Every canopy command: usage, flags, and examples.",
153
+ "topics": [
154
+ {
155
+ "slug": "cli-index",
156
+ "title": "Installing the CLI",
157
+ "summary": "Install the canopy CLI, sign in, and learn the conventions every command shares."
158
+ },
159
+ {
160
+ "slug": "cli-login",
161
+ "title": "canopy login",
162
+ "summary": "Sign in to Canopy through OneLogin in your browser and store CLI tokens for every site."
163
+ },
164
+ {
165
+ "slug": "cli-whoami",
166
+ "title": "canopy whoami",
167
+ "summary": "Show which account and site the CLI is currently talking to, and whether your token is still valid."
168
+ },
169
+ {
170
+ "slug": "cli-logout",
171
+ "title": "canopy logout",
172
+ "summary": "Sign out of Canopy by removing all locally stored CLI tokens."
173
+ },
174
+ {
175
+ "slug": "cli-create",
176
+ "title": "canopy create",
177
+ "summary": "Register a new project on Canopy and scaffold it locally from a starter template."
178
+ },
179
+ {
180
+ "slug": "cli-init",
181
+ "title": "canopy init",
182
+ "summary": "Set up a local folder for a project that already exists on Canopy — scaffold a starter or link an existing app."
183
+ },
184
+ {
185
+ "slug": "cli-projects",
186
+ "title": "canopy projects",
187
+ "summary": "List your Canopy projects with their status, role, and live URLs."
188
+ },
189
+ {
190
+ "slug": "cli-delete",
191
+ "title": "canopy delete",
192
+ "summary": "Permanently delete a Canopy project — its deploys, database, and files."
193
+ },
194
+ {
195
+ "slug": "cli-dev",
196
+ "title": "canopy dev",
197
+ "summary": "Run your project locally with a Vite dev server, against live platform data or a local sandbox."
198
+ },
199
+ {
200
+ "slug": "cli-deploy",
201
+ "title": "canopy deploy",
202
+ "summary": "Build the project and push a new version live, from your machine or from CI."
203
+ },
204
+ {
205
+ "slug": "cli-promote",
206
+ "title": "canopy promote",
207
+ "summary": "Make the staged version live — migrations replay against the live database first, then the exact staged artifacts go live."
208
+ },
209
+ {
210
+ "slug": "cli-staging",
211
+ "title": "canopy staging",
212
+ "summary": "Inspect, refresh, or tear down the project's staging channel."
213
+ },
214
+ {
215
+ "slug": "cli-rollback",
216
+ "title": "canopy rollback",
217
+ "summary": "Make an earlier deploy live again by moving the live pointer to a previous version."
218
+ },
219
+ {
220
+ "slug": "cli-download",
221
+ "title": "canopy download",
222
+ "summary": "Download the deployed files of any version of a project as a zip archive."
223
+ },
224
+ {
225
+ "slug": "cli-token",
226
+ "title": "canopy token",
227
+ "summary": "Create, list, and revoke project-scoped deploy tokens for CI and push-to-main deploys."
228
+ },
229
+ {
230
+ "slug": "cli-egress",
231
+ "title": "canopy egress",
232
+ "summary": "Manage which outbound hosts the project's backend worker may fetch."
233
+ },
234
+ {
235
+ "slug": "cli-db",
236
+ "title": "canopy db",
237
+ "summary": "Pull, snapshot, list, restore, and migrate a project's database from the terminal."
238
+ },
239
+ {
240
+ "slug": "cli-logs",
241
+ "title": "canopy logs",
242
+ "summary": "Read your project worker's logs (console output) from the terminal — no cloud console access needed."
243
+ },
244
+ {
245
+ "slug": "cli-usage",
246
+ "title": "canopy usage",
247
+ "summary": "Show a project's AI spend, storage footprint, and deploy count from the terminal."
248
+ },
249
+ {
250
+ "slug": "cli-feedback",
251
+ "title": "canopy feedback",
252
+ "summary": "Read and triage a project's feedback inbox, or file a bug/feedback report — against a project or against Canopy itself."
253
+ },
254
+ {
255
+ "slug": "cli-open",
256
+ "title": "canopy open",
257
+ "summary": "Open the deployed project in your browser."
258
+ },
259
+ {
260
+ "slug": "cli-docs",
261
+ "title": "canopy docs",
262
+ "summary": "Read the Canopy docs from the terminal — live from the platform, with offline fallbacks."
263
+ },
264
+ {
265
+ "slug": "cli-skill",
266
+ "title": "canopy skill",
267
+ "summary": "Install the Canopy agent skill into a repo so coding agents know how to drive the platform."
268
+ },
269
+ {
270
+ "slug": "cli-upgrade",
271
+ "title": "canopy upgrade",
272
+ "summary": "Update the Canopy CLI to the latest published version, using the installer that put it there."
273
+ }
274
+ ]
275
+ },
276
+ {
277
+ "key": "sdk",
278
+ "title": "SDK reference",
279
+ "description": "The typed client your project code uses — auth, data, files, AI, services.",
280
+ "topics": [
281
+ {
282
+ "slug": "sdk",
283
+ "title": "Using the SDK",
284
+ "summary": "One typed client for auth, data, files, AI, and services — no keys, no connection strings, the platform authenticates for you."
285
+ },
286
+ {
287
+ "slug": "sdk-auth",
288
+ "title": "Auth",
289
+ "summary": "Read who the platform signed in — you never build a login screen."
290
+ },
291
+ {
292
+ "slug": "sdk-database",
293
+ "title": "Database",
294
+ "summary": "Document-style collections on your project's private database, plus a raw SQL escape hatch."
295
+ },
296
+ {
297
+ "slug": "sdk-files",
298
+ "title": "Files",
299
+ "summary": "Upload, download, and list files on your project's private blob storage."
300
+ },
301
+ {
302
+ "slug": "sdk-ai",
303
+ "title": "AI",
304
+ "summary": "Metered LLM access through the project's budget-capped gateway key — chat, streaming, and an OpenAI-compatible endpoint."
305
+ },
306
+ {
307
+ "slug": "sdk-services",
308
+ "title": "Services",
309
+ "summary": "Curated internal data services, invoked through the platform's connector — auth handled for you."
310
+ }
311
+ ]
312
+ },
313
+ {
314
+ "key": "developers",
315
+ "title": "For developers",
316
+ "description": "Architecture and building with agents.",
317
+ "topics": [
318
+ {
319
+ "slug": "developers-architecture",
320
+ "title": "How the platform serves your project",
321
+ "summary": "What happens between a browser and your deployed code — auth wall, static assets, the optional backend worker, and where data lives."
322
+ },
323
+ {
324
+ "slug": "developers-agents-and-ai",
325
+ "title": "Building with agents",
326
+ "summary": "Teach your coding agent Canopy — the agent skill, offline docs, template guardrails, and prompts that work."
327
+ }
328
+ ]
329
+ }
330
+ ]
331
+ }
@@ -340,21 +340,18 @@ export CANOPY_PROJECT_PROTOCOL="https"
340
340
 
341
341
  cd ../../examples/kitchen-sink
342
342
  canopy-dev --profile main create "Kitchen Sink" --slug kitchen-sink --no-scaffold
343
- # CF target: capabilities.workers = false — strip worker for this deploy
344
- cp canopy.json canopy.json.bak
345
- # remove the "worker" key (jq / editor), then:
346
343
  canopy-dev --profile main deploy
347
- mv canopy.json.bak canopy.json
348
344
  ```
349
345
 
350
346
  `canopy.json` already carries the slug, build command, dist dir, and a
351
347
  usual `"profile": "main"` pin, so `deploy` builds them — no separate
352
348
  `pnpm build` needed. Still pass `--profile` for the intended site so a
353
349
  stray active profile cannot send the deploy elsewhere
354
- (docs/10-cli-sites.md). A kitchen-sink deploy that keeps
355
- `"worker": "worker/index.ts"` will 501 `not_supported_on_target` on
356
- Cloudflare; assets-only is enough to exercise `db` / `blob` / `ai.chat`
357
- through the platform data plane.
350
+ (docs/10-cli-sites.md). On a site without worker support
351
+ (`capabilities.workers = false`), a deploy that keeps
352
+ `"worker": "worker/index.ts"` will 501 `not_supported_on_target` — strip
353
+ the `worker` key for an assets-only deploy there; that's still enough to
354
+ exercise `db` / `blob` / `ai.chat` through the platform data plane.
358
355
 
359
356
  ### 11. AI Gateway keys + spend rule (script)
360
357
 
@@ -0,0 +1,105 @@
1
+ ---
2
+ title: FAQ
3
+ description: Quick answers to the questions people ask before (and just after) putting a project on Canopy.
4
+ ---
5
+
6
+ Short answers to common questions. If yours isn't here, the guides go deeper —
7
+ start with [getting started](https://docs.canopy.website/guides/getting-started).
8
+
9
+ ## Who can see my project?
10
+
11
+ By default, any Monk who signs in with OneLogin. If that's too broad, switch
12
+ the project to **collaborators only** in Settings — then only the people you've
13
+ invited can open the live app (it still appears in the company project list,
14
+ and platform admins can still manage it).
15
+
16
+ ## Can clients without OneLogin see it?
17
+
18
+ Yes. You can put a shared **password** on a project from its Settings. Anyone
19
+ you give the password to can view the app without a Monks account — useful for
20
+ sharing work-in-progress with a client. That's the only way in without
21
+ OneLogin; there is no fully public option.
22
+
23
+ ## Can I make my project public?
24
+
25
+ No, and that's deliberate. Nothing on Canopy is reachable without OneLogin or a
26
+ project password. If your project needs an anonymous public audience, it
27
+ belongs on dedicated hosting — see [Use cases](https://docs.canopy.website/overview/use-cases).
28
+
29
+ ## What happens if a deploy breaks something?
30
+
31
+ Nothing you can't undo. Every deploy is a numbered version, and you can make
32
+ any earlier version live again in one step from the dashboard or the CLI. You
33
+ can also open any past version at its own preview link to compare before
34
+ deciding.
35
+
36
+ ## Where does my data live?
37
+
38
+ With the project. Each project has its own private database and its own file
39
+ storage space — no other project can touch them. You can browse the data in
40
+ the dashboard, and take or restore database snapshots. Deleting a project
41
+ deletes everything it owned.
42
+
43
+ ## Can my project use AI models? What stops a runaway bill?
44
+
45
+ Projects get access to the major AI models through the platform, with a hard
46
+ spend cap per project. If something loops out of control, it stops at the cap.
47
+ You can see exactly what's been spent — by model — in the dashboard's Usage
48
+ tab or from the CLI.
49
+
50
+ ## Does it cost anything?
51
+
52
+ The platform is run by the Monks platform team, and it's designed so that idle
53
+ projects cost essentially nothing. The costs that do exist — mainly AI usage —
54
+ are visible per project in the dashboard and capped hard, so there are no
55
+ surprises.
56
+
57
+ ## Do I need to know how to code?
58
+
59
+ You need to be able to work with an AI coding agent — the agent writes the
60
+ code, and Canopy's bundled skills keep it on the safe path. The
61
+ [getting started guide](https://docs.canopy.website/guides/getting-started) shows how to connect your
62
+ agent so it knows how the platform works.
63
+
64
+ ## Can I work on it with teammates?
65
+
66
+ Yes. Invite people from the project's page in the dashboard with the people
67
+ picker — as admins or collaborators. Combined with collaborators-only mode,
68
+ this also controls who can open the live app.
69
+
70
+ ## Can I bring an app I already started?
71
+
72
+ Yes. You don't have to start from a Canopy template — an existing app can be
73
+ onboarded onto the platform and gain the same URL, sign-in, and deploy flow.
74
+ The [getting started guide](https://docs.canopy.website/guides/getting-started) covers both paths.
75
+
76
+ ## Can I host my Next.js app on Canopy?
77
+
78
+ Not as-is — Canopy serves pages as static files and deliberately runs no
79
+ app servers, so server-side rendering, server components fetching at request
80
+ time, and server actions have nowhere to run. What works well is a port:
81
+ the frontend becomes a static build, backend logic moves into the project's
82
+ worker under `/api/*`, and the platform takes over auth, database, files, and
83
+ AI. For apps that only lightly use Next's server side that's a small job; the
84
+ [porting guide](https://docs.canopy.website/guides/porting-nextjs) walks through it and helps you judge
85
+ whether your app is a good fit.
86
+
87
+ ## Can it deploy automatically when we change the code?
88
+
89
+ Yes. Create a project-scoped deploy token, add it to your repository's CI, and
90
+ merging to `main` ships a new version on its own. The token can only deploy
91
+ that one project — it can't touch your data. See the [CI guide](https://docs.canopy.website/guides/ci).
92
+
93
+ ## What if my project outgrows Canopy?
94
+
95
+ It graduates. Canopy optimizes for many small projects, not for making one
96
+ project big — so when yours needs scale, guarantees, or a public audience, it
97
+ exports cleanly (code, database file, and file archive) and moves to dedicated
98
+ hosting. No lock-in, no rewrite.
99
+
100
+ ## Is my project backed up if something goes wrong?
101
+
102
+ You have two safety nets you control: versions (every deploy is kept, with
103
+ rollback and download) and database snapshots (take one before a risky change,
104
+ restore it if needed). For anything beyond that, remember Canopy offers no
105
+ production guarantees — see [Use cases](https://docs.canopy.website/overview/use-cases).
@@ -0,0 +1,81 @@
1
+ ---
2
+ title: How it works
3
+ description: The life of a Canopy project in plain words — create, build, deploy, roll back.
4
+ ---
5
+
6
+ Every Canopy project follows the same simple lifecycle. Here's what happens at
7
+ each step, without the technical machinery.
8
+
9
+ ## Create a project
10
+
11
+ A project starts in one of two ways: your coding agent runs the Canopy CLI to
12
+ create one from a starter template, or you register an app you already started.
13
+ Either way, the project appears in the
14
+ [dashboard](https://dashboard.canopy.website) the moment it exists — with its
15
+ sign-in wall, database, file storage, and AI access already arranged.
16
+
17
+ Starters come in three shapes — a simple static site, a fully-typed React app,
18
+ or a React app with server-side code — so you begin from the shape that fits.
19
+ The details live in the [getting started guide](https://docs.canopy.website/guides/getting-started).
20
+
21
+ ## Your project gets its own address
22
+
23
+ Each project has a short name (its _slug_) and lives at its own URL:
24
+ `your-slug.canopy.website`. You don't buy domains or configure anything — the
25
+ address exists as soon as the project does.
26
+
27
+ ## Everything sits behind Monks sign-in
28
+
29
+ Visitors to your project's URL hit OneLogin before they see anything. By
30
+ default any Monk can open it. From the project's Settings you can tighten that
31
+ to collaborators only, or add a shared client password so people outside Monks
32
+ can view it. There is no "make it public" switch — that's by design.
33
+
34
+ ## Deploys create versions
35
+
36
+ When you (or your agent) publish the project — one command from the terminal, a
37
+ drag-and-drop upload in the dashboard, or automatically when code lands in your
38
+ repository — Canopy records it as a new numbered **version** and makes it live.
39
+
40
+ Versions are what make deploying low-stakes:
41
+
42
+ - Every past version keeps a stable preview link, so you can open an older
43
+ build next to the newest one.
44
+ - You can download the exact files behind any version.
45
+ - If a deploy breaks something, you pick an earlier version in the dashboard or
46
+ CLI and make it live again in one step. That's a **rollback**, and it takes
47
+ seconds.
48
+
49
+ More detail in the [deploying guide](https://docs.canopy.website/guides/deploy) and the
50
+ [CI guide](https://docs.canopy.website/guides/ci) for automatic deploys on push.
51
+
52
+ ## Data lives with the project
53
+
54
+ Whatever your app saves — records, uploads — goes into that project's own
55
+ private database and storage space. No other project can read it, and deleting
56
+ a project deletes everything it owned. You can browse the data from the
57
+ dashboard, and take or restore **snapshots** of the database when you want a
58
+ safety net before a risky change. See the [project data guide](https://docs.canopy.website/guides/data).
59
+
60
+ ## Usage is visible
61
+
62
+ The dashboard's Usage tab shows how active a project is (page loads today and
63
+ over the last 7 days), what its AI calls have cost by model, and its database,
64
+ file, and deploy footprint. AI spending also has a hard per-project cap — a
65
+ loop gone wrong stops at the cap instead of running up a bill.
66
+
67
+ ## Words you'll hear
68
+
69
+ | Word | What it means |
70
+ | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
71
+ | **Project** | One app on Canopy: its code, its URL, its database, its files, its settings, its people. |
72
+ | **Deploy** | Publishing your project so the new state is live at its URL. |
73
+ | **Version** | The numbered result of each deploy. Every version keeps a preview link and can be downloaded. |
74
+ | **Rollback** | Making an earlier version live again, in one step. |
75
+ | **Snapshot** | A saved copy of a project's database you can restore later. |
76
+ | **Slug** | The project's short name — the first part of its URL. |
77
+ | **Site** (or **profile**) | An installation of the Canopy platform. Most people only ever use the main one; the CLI can point at others (like staging) and always shows which one you're on. |
78
+ | **Collaborator** | A teammate invited to a project through the dashboard's people picker. |
79
+
80
+ - [Getting started](https://docs.canopy.website/guides/getting-started) — From nothing to a live project, step by step.
81
+ - [Local development](https://docs.canopy.website/guides/dev) — Preview changes on your machine against your real project data.