@mediamonks/canopy-cli 0.7.11 → 0.7.12
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/dist/{deploy-BCtEY1is.mjs → deploy-B1WrPq5W.mjs} +8 -1
- package/dist/{dev-DtoZrexp.mjs → dev-BnUYGQQm.mjs} +5 -4
- package/dist/dev-CySBxW7I.mjs +2 -0
- package/dist/{dev-worker-BZgtEM9V.mjs → dev-worker-IWnHvQ1f.mjs} +42 -7
- package/dist/{docs-BV9qhLJx.mjs → docs-DxB7NhZs.mjs} +1 -1
- package/dist/{feedback-Cb8ccQ_R.mjs → feedback-B-GXUBPs.mjs} +1 -1
- package/dist/index.mjs +10 -10
- package/dist/{local-C5AhA4GM.mjs → local-BGRd_FMZ.mjs} +6 -469
- package/dist/{package-BBpw-n7k.mjs → package-CDLufecy.mjs} +1 -1
- package/dist/{skill-DJHlTEhS.mjs → skill-BOWfqwr2.mjs} +1 -1
- package/dist/src-Bu4Ze32I.mjs +470 -0
- package/dist/{upgrade-B86Ao6T5.mjs → upgrade-fhfrid_O.mjs} +1 -1
- package/package.json +3 -3
- package/dist/dev-BYxSHUH6.mjs +0 -2
- package/dist/docs/ci.md +0 -50
- package/dist/docs/cli-create.md +0 -46
- package/dist/docs/cli-db.md +0 -86
- package/dist/docs/cli-delete.md +0 -44
- package/dist/docs/cli-deploy.md +0 -58
- package/dist/docs/cli-dev.md +0 -82
- package/dist/docs/cli-docs.md +0 -47
- package/dist/docs/cli-download.md +0 -42
- package/dist/docs/cli-egress.md +0 -37
- package/dist/docs/cli-feedback.md +0 -75
- package/dist/docs/cli-index.md +0 -61
- package/dist/docs/cli-init.md +0 -46
- package/dist/docs/cli-login.md +0 -43
- package/dist/docs/cli-logout.md +0 -32
- package/dist/docs/cli-logs.md +0 -57
- package/dist/docs/cli-open.md +0 -41
- package/dist/docs/cli-projects.md +0 -43
- package/dist/docs/cli-promote.md +0 -44
- package/dist/docs/cli-rollback.md +0 -45
- package/dist/docs/cli-skill.md +0 -39
- package/dist/docs/cli-staging.md +0 -54
- package/dist/docs/cli-token.md +0 -47
- package/dist/docs/cli-upgrade.md +0 -43
- package/dist/docs/cli-usage.md +0 -43
- package/dist/docs/cli-whoami.md +0 -46
- package/dist/docs/cli.md +0 -86
- package/dist/docs/data.md +0 -85
- package/dist/docs/deploy.md +0 -81
- package/dist/docs/dev.md +0 -72
- package/dist/docs/developers-agents-and-ai.md +0 -95
- package/dist/docs/developers-architecture.md +0 -106
- package/dist/docs/getting-started.md +0 -108
- package/dist/docs/index.json +0 -331
- package/dist/docs/infrastructure.md +0 -406
- package/dist/docs/migrations.md +0 -183
- package/dist/docs/overview-faq.md +0 -105
- package/dist/docs/overview-how-it-works.md +0 -82
- package/dist/docs/overview-use-cases.md +0 -76
- package/dist/docs/overview-what-is-canopy.md +0 -75
- package/dist/docs/platform-ai-usage.md +0 -65
- package/dist/docs/platform-client-access.md +0 -54
- package/dist/docs/platform-deploys-and-rollbacks.md +0 -93
- package/dist/docs/platform-egress.md +0 -75
- package/dist/docs/platform-feedback.md +0 -114
- package/dist/docs/platform-members-and-access.md +0 -71
- package/dist/docs/platform-project-data.md +0 -76
- package/dist/docs/platform-schedules.md +0 -90
- package/dist/docs/platform-sites-and-profiles.md +0 -61
- package/dist/docs/porting-nextjs.md +0 -233
- package/dist/docs/sdk-ai.md +0 -103
- package/dist/docs/sdk-auth.md +0 -57
- package/dist/docs/sdk-database.md +0 -126
- package/dist/docs/sdk-files.md +0 -82
- package/dist/docs/sdk-services.md +0 -58
- package/dist/docs/sdk.md +0 -126
- package/dist/docs/staging.md +0 -106
- package/dist/docs/static-serving.md +0 -318
- package/dist/docs/troubleshooting.md +0 -102
- package/dist/skill/canopy/SKILL.md +0 -160
- package/dist/templates/spa/.github/workflows/canopy-deploy.yml +0 -34
- package/dist/templates/spa/AGENTS.md +0 -47
- package/dist/templates/spa/README.md +0 -14
- package/dist/templates/spa/_gitignore +0 -4
- package/dist/templates/spa/canopy.json +0 -5
- package/dist/templates/spa/index.html +0 -12
- package/dist/templates/spa/package.json +0 -21
- package/dist/templates/spa/src/app.tsx +0 -25
- package/dist/templates/spa/src/canopy.ts +0 -5
- package/dist/templates/spa/src/main.tsx +0 -10
- package/dist/templates/spa/src/style.css +0 -29
- package/dist/templates/spa/tsconfig.json +0 -16
- package/dist/templates/spa/vite.config.ts +0 -7
- package/dist/templates/static/AGENTS.md +0 -45
- package/dist/templates/static/README.md +0 -9
- package/dist/templates/static/_gitignore +0 -2
- package/dist/templates/static/canopy.json +0 -4
- package/dist/templates/static/index.html +0 -21
- package/dist/templates/static/main.js +0 -9
- package/dist/templates/static/style.css +0 -29
- package/dist/templates/worker/.dev.vars.example +0 -9
- package/dist/templates/worker/.github/workflows/canopy-deploy.yml +0 -34
- package/dist/templates/worker/AGENTS.md +0 -63
- package/dist/templates/worker/README.md +0 -17
- package/dist/templates/worker/_gitignore +0 -5
- package/dist/templates/worker/canopy.json +0 -6
- package/dist/templates/worker/index.html +0 -12
- package/dist/templates/worker/package.json +0 -22
- package/dist/templates/worker/src/app.tsx +0 -25
- package/dist/templates/worker/src/canopy.ts +0 -5
- package/dist/templates/worker/src/main.tsx +0 -10
- package/dist/templates/worker/src/style.css +0 -29
- package/dist/templates/worker/tsconfig.json +0 -16
- package/dist/templates/worker/vite.config.ts +0 -7
- package/dist/templates/worker/worker/index.ts +0 -52
|
@@ -1,105 +0,0 @@
|
|
|
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).
|
|
@@ -1,82 +0,0 @@
|
|
|
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. The password stays visible in Settings, so you can look it up and
|
|
33
|
-
share it again later. There is no "make it public" switch — that's by design.
|
|
34
|
-
|
|
35
|
-
## Deploys create versions
|
|
36
|
-
|
|
37
|
-
When you (or your agent) publish the project — one command from the terminal, a
|
|
38
|
-
drag-and-drop upload in the dashboard, or automatically when code lands in your
|
|
39
|
-
repository — Canopy records it as a new numbered **version** and makes it live.
|
|
40
|
-
|
|
41
|
-
Versions are what make deploying low-stakes:
|
|
42
|
-
|
|
43
|
-
- Every past version keeps a stable preview link, so you can open an older
|
|
44
|
-
build next to the newest one.
|
|
45
|
-
- You can download the exact files behind any version.
|
|
46
|
-
- If a deploy breaks something, you pick an earlier version in the dashboard or
|
|
47
|
-
CLI and make it live again in one step. That's a **rollback**, and it takes
|
|
48
|
-
seconds.
|
|
49
|
-
|
|
50
|
-
More detail in the [deploying guide](https://docs.canopy.website/guides/deploy) and the
|
|
51
|
-
[CI guide](https://docs.canopy.website/guides/ci) for automatic deploys on push.
|
|
52
|
-
|
|
53
|
-
## Data lives with the project
|
|
54
|
-
|
|
55
|
-
Whatever your app saves — records, uploads — goes into that project's own
|
|
56
|
-
private database and storage space. No other project can read it, and deleting
|
|
57
|
-
a project deletes everything it owned. You can browse the data from the
|
|
58
|
-
dashboard, and take or restore **snapshots** of the database when you want a
|
|
59
|
-
safety net before a risky change. See the [project data guide](https://docs.canopy.website/guides/data).
|
|
60
|
-
|
|
61
|
-
## Usage is visible
|
|
62
|
-
|
|
63
|
-
The dashboard's Usage tab shows how active a project is (page loads today and
|
|
64
|
-
over the last 7 days), what its AI calls have cost by model, and its database,
|
|
65
|
-
file, and deploy footprint. AI spending also has a hard per-project cap — a
|
|
66
|
-
loop gone wrong stops at the cap instead of running up a bill.
|
|
67
|
-
|
|
68
|
-
## Words you'll hear
|
|
69
|
-
|
|
70
|
-
| Word | What it means |
|
|
71
|
-
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
72
|
-
| **Project** | One app on Canopy: its code, its URL, its database, its files, its settings, its people. |
|
|
73
|
-
| **Deploy** | Publishing your project so the new state is live at its URL. |
|
|
74
|
-
| **Version** | The numbered result of each deploy. Every version keeps a preview link and can be downloaded. |
|
|
75
|
-
| **Rollback** | Making an earlier version live again, in one step. |
|
|
76
|
-
| **Snapshot** | A saved copy of a project's database you can restore later. |
|
|
77
|
-
| **Slug** | The project's short name — the first part of its URL. |
|
|
78
|
-
| **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. |
|
|
79
|
-
| **Collaborator** | A teammate invited to a project through the dashboard's people picker. |
|
|
80
|
-
|
|
81
|
-
- [Getting started](https://docs.canopy.website/guides/getting-started) — From nothing to a live project, step by step.
|
|
82
|
-
- [Local development](https://docs.canopy.website/guides/dev) — Preview changes on your machine against your real project data.
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Use cases
|
|
3
|
-
description: What kinds of projects belong on Canopy — and which ones should live somewhere else.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
Canopy is built for many small projects, not one big one. It shines when you
|
|
7
|
-
want to get an idea in front of colleagues or a client quickly, with real data
|
|
8
|
-
and real AI behind it, without asking anyone to set up infrastructure.
|
|
9
|
-
|
|
10
|
-
## Good fits
|
|
11
|
-
|
|
12
|
-
**Client-facing prototypes.** You're pitching a concept and want the client to
|
|
13
|
-
click through something real, not a slide deck. Build it with your agent,
|
|
14
|
-
deploy it, and share the link with a project password — the client sees a
|
|
15
|
-
working app without needing a Monks account, and nobody else on the internet
|
|
16
|
-
can.
|
|
17
|
-
|
|
18
|
-
**Internal tools.** A small utility your team needs: a content checker, a
|
|
19
|
-
campaign asset tracker, a review queue. It sits behind Monks sign-in
|
|
20
|
-
automatically, saves its data to its own database, and stays available without
|
|
21
|
-
anyone babysitting a server.
|
|
22
|
-
|
|
23
|
-
**Demos and experiments with AI.** You want to show what a model can do with
|
|
24
|
-
your workflow — a summarizer, a brief generator, a chat over project material.
|
|
25
|
-
Canopy gives the project AI access with a hard spend cap, so an enthusiastic
|
|
26
|
-
demo (or a runaway loop) can never turn into a scary bill.
|
|
27
|
-
|
|
28
|
-
**Microsites that need data or uploads.** A small site for a workshop, an
|
|
29
|
-
internal survey, a moodboard collector. Structured data and file uploads work
|
|
30
|
-
through simple calls — no database setup, and uploaded files are never left
|
|
31
|
-
publicly exposed.
|
|
32
|
-
|
|
33
|
-
**Projects with client or project data.** Canopy projects may hold real client
|
|
34
|
-
material. Each project's data is isolated — its own database, its own storage
|
|
35
|
-
space — and everything sits behind sign-in, so work-in-progress with real
|
|
36
|
-
content is a normal use, not an exception.
|
|
37
|
-
|
|
38
|
-
### A few concrete scenarios
|
|
39
|
-
|
|
40
|
-
- A strategist vibecoding a pitch prototype over a weekend, sharing it Monday
|
|
41
|
-
behind a client password.
|
|
42
|
-
- A producer building a tracker the whole team uses daily, with teammates
|
|
43
|
-
invited as collaborators.
|
|
44
|
-
- A developer prototyping an AI-assisted workflow with a custom backend,
|
|
45
|
-
scheduled jobs, and secrets — still inside platform auth and budgets.
|
|
46
|
-
|
|
47
|
-
## Not a fit
|
|
48
|
-
|
|
49
|
-
Canopy has deliberate anti-goals. If your project is one of these, it belongs
|
|
50
|
-
on another platform from day one:
|
|
51
|
-
|
|
52
|
-
- **Public production apps.** Nothing on Canopy is reachable without OneLogin
|
|
53
|
-
or a project password. A public marketing site, a consumer app, or anything
|
|
54
|
-
meant for anonymous visitors can't live here.
|
|
55
|
-
- **Apps that need production guarantees.** There are no SLAs, no autoscaling,
|
|
56
|
-
no multi-region hosting. If downtime would be a real incident, you need
|
|
57
|
-
dedicated hosting.
|
|
58
|
-
- **Arbitrary server stacks.** Canopy is not a general-purpose cloud — no
|
|
59
|
-
bring-your-own database, no arbitrary long-running servers or containers.
|
|
60
|
-
Projects use the platform's building blocks.
|
|
61
|
-
- **Data pipelines and integration hubs.** Canopy can talk to existing internal
|
|
62
|
-
services, but it's not the place where data warehousing or pipelines live.
|
|
63
|
-
|
|
64
|
-
> **Note:** The rule of thumb: Canopy is the greenhouse, not the forest. When a project proves itself and
|
|
65
|
-
> needs scale, guarantees, or a public audience, it graduates — exporting its code, database, and
|
|
66
|
-
> files cleanly to dedicated hosting.
|
|
67
|
-
|
|
68
|
-
## Not sure?
|
|
69
|
-
|
|
70
|
-
If your project mostly needs to be seen by Monks or a specific client, saves a
|
|
71
|
-
modest amount of data, and would benefit from shipping this week instead of
|
|
72
|
-
this quarter — it's probably a Canopy project. If in doubt, start on Canopy;
|
|
73
|
-
graduation is a supported path, not a rewrite.
|
|
74
|
-
|
|
75
|
-
- [What is Canopy?](https://docs.canopy.website/overview/what-is-canopy) — The platform in plain language — who it's for and what's managed.
|
|
76
|
-
- [FAQ](https://docs.canopy.website/overview/faq) — Who can see my project, what happens when a deploy breaks, and more.
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: What is Canopy?
|
|
3
|
-
description: A fully managed home for vibecoded Monks projects — hosting, sign-in, data, files, and AI, all set up before your first prompt.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
Canopy is where Monks put the projects they vibecode with AI tools. You describe
|
|
7
|
-
an idea, your AI agent builds it, and Canopy runs it — with sign-in, a database,
|
|
8
|
-
file storage, and AI access already wired up and safe before you write (or
|
|
9
|
-
prompt) a single line.
|
|
10
|
-
|
|
11
|
-
Think of it as a greenhouse: a protected place where small projects can grow
|
|
12
|
-
quickly. When one proves its value, it can graduate to its own dedicated home —
|
|
13
|
-
nothing is trapped here.
|
|
14
|
-
|
|
15
|
-
## Who it's for
|
|
16
|
-
|
|
17
|
-
Canopy serves two kinds of builders on one platform:
|
|
18
|
-
|
|
19
|
-
- **Vibers** — producers, designers, PMs, and strategists who build with AI
|
|
20
|
-
agents. The platform is your guardrail: you can't accidentally publish
|
|
21
|
-
something to the open internet, leak a file, or run up a runaway AI bill,
|
|
22
|
-
because the safe path is the only path.
|
|
23
|
-
- **Coders** — developers who want the same paved road (auth, database, storage
|
|
24
|
-
arranged for them) plus escape hatches like raw SQL and their own backend
|
|
25
|
-
code when they need more control.
|
|
26
|
-
|
|
27
|
-
If you can prompt an AI coding agent, you can ship on Canopy.
|
|
28
|
-
|
|
29
|
-
## What "fully managed" means
|
|
30
|
-
|
|
31
|
-
You never touch infrastructure. The platform team owns and operates everything
|
|
32
|
-
behind the scenes, so for you it looks like this:
|
|
33
|
-
|
|
34
|
-
- **Hosting.** Every project gets its own web address on `canopy.website`. You
|
|
35
|
-
don't set up servers, domains, or certificates.
|
|
36
|
-
- **Sign-in, always on.** Every project sits behind Monks OneLogin
|
|
37
|
-
automatically. Any Monk can open it by default; you can tighten access to
|
|
38
|
-
collaborators only, or add a shared password so clients without a Monks
|
|
39
|
-
account can see work-in-progress. Nothing on Canopy is ever truly public.
|
|
40
|
-
- **Data and files.** Each project has its own private database and file
|
|
41
|
-
storage. No tables to design, no migrations, no connection strings — and no
|
|
42
|
-
other project can see your data.
|
|
43
|
-
- **AI with guardrails.** Projects can talk to the major AI models through the
|
|
44
|
-
platform, with a hard spend cap per project and full visibility of what
|
|
45
|
-
you've spent.
|
|
46
|
-
- **Deploys.** Putting a new version online is one step — from the terminal,
|
|
47
|
-
from the dashboard, or automatically when code lands in your repository. Every
|
|
48
|
-
deploy becomes a version you can preview and roll back to.
|
|
49
|
-
|
|
50
|
-
> **Note:** Curious how a project moves from idea to live URL? See [How it works](https://docs.canopy.website/overview/how-it-works).
|
|
51
|
-
|
|
52
|
-
## What you need to get access
|
|
53
|
-
|
|
54
|
-
- **A Monks account.** You sign in to everything — the dashboard and every
|
|
55
|
-
project — with OneLogin. Your Canopy account is created automatically the
|
|
56
|
-
first time you sign in.
|
|
57
|
-
- **The dashboard.** [dashboard.canopy.website](https://dashboard.canopy.website)
|
|
58
|
-
is where you see your projects, invite teammates, browse data, check usage,
|
|
59
|
-
and manage settings.
|
|
60
|
-
- **The Canopy CLI (optional but usual).** A small command-line tool your AI
|
|
61
|
-
agent uses to create, preview, and deploy projects. The
|
|
62
|
-
[getting started guide](https://docs.canopy.website/guides/getting-started) walks you through
|
|
63
|
-
installing it and connecting your coding agent — the agent does most of the
|
|
64
|
-
typing for you.
|
|
65
|
-
|
|
66
|
-
## What Canopy is not
|
|
67
|
-
|
|
68
|
-
Canopy is deliberately not a production hosting platform. There are no uptime
|
|
69
|
-
guarantees, no autoscaling, and nothing reachable by the anonymous public
|
|
70
|
-
internet. Projects that outgrow the greenhouse graduate: they export cleanly
|
|
71
|
-
(code, database, files) and move to dedicated hosting. See
|
|
72
|
-
[Use cases](https://docs.canopy.website/overview/use-cases) for what belongs here and what doesn't.
|
|
73
|
-
|
|
74
|
-
- [How it works](https://docs.canopy.website/overview/how-it-works) — The life of a project, from creation to rollback, in plain words.
|
|
75
|
-
- [Getting started](https://docs.canopy.website/guides/getting-started) — Install the CLI, sign in, and ship your first project.
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: AI access & usage
|
|
3
|
-
description: Projects talk to AI models through the platform — no API keys to manage, a hard daily budget per project, and full visibility of spend.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
Canopy projects can call AI models without you ever handling an API key. The
|
|
7
|
-
platform routes every request through its own metered gateway, tracks what
|
|
8
|
-
each project spends, and enforces a hard daily budget — so a runaway loop in
|
|
9
|
-
a vibecoded app becomes a capped bill and a visible chart, not a surprise
|
|
10
|
-
invoice.
|
|
11
|
-
|
|
12
|
-
## What your app gets
|
|
13
|
-
|
|
14
|
-
The SDK exposes AI as a first-class building block:
|
|
15
|
-
|
|
16
|
-
```ts
|
|
17
|
-
const reply = await canopy.ai.chat({
|
|
18
|
-
messages: [{ role: "user", content: "Summarize this note…" }],
|
|
19
|
-
});
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
- **No keys in your code.** Requests authenticate as the project; the
|
|
23
|
-
platform holds the provider credentials.
|
|
24
|
-
- **A curated model list.** Each site enables a set of models
|
|
25
|
-
(`provider/model`, e.g. `anthropic/claude-haiku-4-5`) with a sensible
|
|
26
|
-
default — ask for a model outside the list and the API tells you what _is_
|
|
27
|
-
available.
|
|
28
|
-
- **Streaming** via `canopy.ai.chatStream()` for chat-style UIs.
|
|
29
|
-
- **An OpenAI-compatible endpoint.** `canopy.ai.endpoint()` returns a base
|
|
30
|
-
URL and model list you can plug into ecosystem tools (like the Vercel AI
|
|
31
|
-
SDK) — same key handling, same budget, same tracking.
|
|
32
|
-
|
|
33
|
-
## The daily budget
|
|
34
|
-
|
|
35
|
-
Every project has a daily AI budget in USD. When a project's spend for the
|
|
36
|
-
day crosses it, further AI calls answer with an `ai_budget_exceeded` error
|
|
37
|
-
until the day rolls over. The budget is enforced from the same spend ledger
|
|
38
|
-
the dashboard displays, so what you see and what's enforced can never
|
|
39
|
-
disagree.
|
|
40
|
-
|
|
41
|
-
> **Note:** Hitting the cap doesn't break the rest of your app — pages, data, and files keep working. Only AI
|
|
42
|
-
> calls pause until the next day.
|
|
43
|
-
|
|
44
|
-
## The Usage tab
|
|
45
|
-
|
|
46
|
-
Open a project in the dashboard and the **Usage** tab shows where it stands:
|
|
47
|
-
|
|
48
|
-
- **LLM spend** — estimated cost, request count, and tokens over the recent
|
|
49
|
-
window, broken down by model and by day.
|
|
50
|
-
- **Activity** — page loads today and over the last 7 days, plus when the
|
|
51
|
-
project was last visited. A quick answer to "is anyone actually using
|
|
52
|
-
this?"
|
|
53
|
-
- **Storage & deploys** — database size, blob storage footprint, and how many
|
|
54
|
-
versions have shipped.
|
|
55
|
-
|
|
56
|
-
## From the terminal
|
|
57
|
-
|
|
58
|
-
`canopy usage` prints the same view without leaving your shell:
|
|
59
|
-
|
|
60
|
-
```bash
|
|
61
|
-
canopy usage # AI spend, activity, storage, deploys
|
|
62
|
-
canopy usage --json # machine-readable, for agents and scripts
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
- [Getting started](https://docs.canopy.website/guides/getting-started) — Create a project and let your coding agent wire up AI, data, and files.
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Client access
|
|
3
|
-
description: Share a project with clients who have no Monks account — a shared password unlocks that one project's URL and nothing else.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
Everything on Canopy normally requires a Monks sign-in — which is exactly
|
|
7
|
-
right until you want a client to see work-in-progress. Client access solves
|
|
8
|
-
that: you set a shared password on a project, send the client the URL and the
|
|
9
|
-
password, and they're in. No account creation, no invitations, no exceptions
|
|
10
|
-
punched through the platform for anyone else.
|
|
11
|
-
|
|
12
|
-
## How it works
|
|
13
|
-
|
|
14
|
-
With client access enabled, a visitor without a Monks session who opens the
|
|
15
|
-
project's URL gets a simple password page instead of the SSO redirect. Enter
|
|
16
|
-
the right password and the app loads; Monks can still click through to
|
|
17
|
-
company sign-in from the same page.
|
|
18
|
-
|
|
19
|
-
The unlock is deliberately narrow:
|
|
20
|
-
|
|
21
|
-
- **One project only.** The password grants access to that project's own
|
|
22
|
-
subdomain and nothing else — it can't be used on any other project or on
|
|
23
|
-
the dashboard.
|
|
24
|
-
- **The live app only.** Clients see what a signed-in viewer would see. They
|
|
25
|
-
never get the dashboard, the data browser, deploy history, or settings.
|
|
26
|
-
- **It expires.** Access is a temporary session on that browser; when it
|
|
27
|
-
lapses, the password page comes back.
|
|
28
|
-
|
|
29
|
-
## Enabling it
|
|
30
|
-
|
|
31
|
-
Open the project's **Settings** tab and use the **Who outside Monks can open
|
|
32
|
-
it** card:
|
|
33
|
-
|
|
34
|
-
1. Set a password. Pick something you're comfortable saying out loud on a
|
|
35
|
-
call — it's a shared secret, not a personal credential.
|
|
36
|
-
2. Send the client the project URL and the password.
|
|
37
|
-
|
|
38
|
-
To change the password, set a new one — previously handed-out passwords stop
|
|
39
|
-
working for new sign-ins. To turn client access off entirely, remove the
|
|
40
|
-
password from the same card; visitors are back to Monks-only immediately.
|
|
41
|
-
|
|
42
|
-
> **Warning:** A shared password is deliberately lightweight protection — right for work-in-progress previews,
|
|
43
|
-
> wrong for anything sensitive. Anyone who has it can view the app and share it further, so rotate
|
|
44
|
-
> it when a review round ends.
|
|
45
|
-
|
|
46
|
-
## Playing well with other access controls
|
|
47
|
-
|
|
48
|
-
Client access is independent of
|
|
49
|
-
[collaborators-only mode](https://docs.canopy.website/platform/members-and-access): you can lock
|
|
50
|
-
the app down for Monks outside the team while a client with the password
|
|
51
|
-
still gets in. That combination — "the client and the project team, nobody
|
|
52
|
-
else" — is a common setup during a review phase.
|
|
53
|
-
|
|
54
|
-
- [Members & access](https://docs.canopy.website/platform/members-and-access) — Who can view and who can manage a project, and how to tighten it.
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Deploys & rollbacks
|
|
3
|
-
description: Every deploy is a numbered version you can preview, download, and make live again — rolling back is instant and loses nothing.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
Every time you publish a project, Canopy records it as a numbered version —
|
|
7
|
-
v1, v2, v3, and so on. The live site is simply a pointer at one of those
|
|
8
|
-
versions. That one idea powers everything on this page: previews, rollbacks,
|
|
9
|
-
and downloads are all just different ways of looking at (or pointing at) a
|
|
10
|
-
version that already exists.
|
|
11
|
-
|
|
12
|
-
## What a deploy contains
|
|
13
|
-
|
|
14
|
-
A deploy is the built files of your app — the HTML, JavaScript, CSS, and other
|
|
15
|
-
assets your build produces. Projects with a custom backend also ship their
|
|
16
|
-
worker code in the same deploy, so frontend and backend always move together
|
|
17
|
-
as one version.
|
|
18
|
-
|
|
19
|
-
A deploy only goes live after every file has been uploaded and validated. A
|
|
20
|
-
connection that drops halfway never leaves your project in a broken state —
|
|
21
|
-
the previous version keeps serving until the new one is complete.
|
|
22
|
-
|
|
23
|
-
## Ways to deploy
|
|
24
|
-
|
|
25
|
-
- **From the terminal** — `canopy deploy` builds your project and publishes a
|
|
26
|
-
new version. This is what your coding agent runs. See the
|
|
27
|
-
[deploy guide](https://docs.canopy.website/guides/deploy) for details.
|
|
28
|
-
- **From the dashboard** — on the project's Overview tab, upload a new version
|
|
29
|
-
by dragging in a zip, a folder, or loose files. No command line required.
|
|
30
|
-
- **Automatically from CI** — create a project-scoped deploy token, add it to
|
|
31
|
-
your repository's secrets, and merging to `main` ships a new version on its
|
|
32
|
-
own. See [CI and deploy tokens](https://docs.canopy.website/guides/ci).
|
|
33
|
-
|
|
34
|
-
The dashboard's deploy history shows every version with who published it and
|
|
35
|
-
where it came from (CLI, dashboard, or CI).
|
|
36
|
-
|
|
37
|
-
## Rolling back
|
|
38
|
-
|
|
39
|
-
If a deploy goes wrong, point the site back at an earlier version. Rollback
|
|
40
|
-
moves the live pointer — nothing is copied, rebuilt, or deleted, so it takes
|
|
41
|
-
effect immediately and every version keeps its identity. Projects with a
|
|
42
|
-
custom backend roll their backend back to the matching version too.
|
|
43
|
-
|
|
44
|
-
- **Dashboard** — open the project's Overview tab and pick the version to make
|
|
45
|
-
live from the deploy history.
|
|
46
|
-
- **CLI**:
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
canopy rollback # pick a version from a list
|
|
50
|
-
canopy rollback v3 # make v3 live directly
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
You can also "roll forward": after reverting to v3, making v5 live again is
|
|
54
|
-
the same one-step operation. Any version in the history can be live.
|
|
55
|
-
|
|
56
|
-
## The staging channel
|
|
57
|
-
|
|
58
|
-
Beyond previews, every project can have a full **staging channel**: a staged
|
|
59
|
-
version served at `https://staging-dot-<slug>.canopy.website` with its own
|
|
60
|
-
database (a copy of live), its own files, and its own backend. Deploy there
|
|
61
|
-
with `canopy deploy --staging` (or the dashboard's upload dialog), verify, and
|
|
62
|
-
**promote** — the exact staged version becomes live, schema migrations
|
|
63
|
-
replaying against the live database first. See
|
|
64
|
-
[Staging & promoting](https://docs.canopy.website/guides/staging).
|
|
65
|
-
|
|
66
|
-
## Previewing any version
|
|
67
|
-
|
|
68
|
-
Every version has its own stable preview URL, so you can open an old build
|
|
69
|
-
next to the current one without touching what's live:
|
|
70
|
-
|
|
71
|
-
```
|
|
72
|
-
https://v12-dot-<slug>.canopy.website
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
Preview URLs sit behind the same sign-in as the live site — they're for
|
|
76
|
-
comparing builds and reviewing history, not for sharing something different
|
|
77
|
-
from what access settings allow. A preview shows an old frontend against the
|
|
78
|
-
live data; for a full candidate environment (frontend + backend + own
|
|
79
|
-
database) use the staging channel above.
|
|
80
|
-
|
|
81
|
-
## Downloading a version
|
|
82
|
-
|
|
83
|
-
You can download the exact files behind any past version as a zip — handy for
|
|
84
|
-
comparing builds or restoring something by hand:
|
|
85
|
-
|
|
86
|
-
- **Dashboard** — from the version's entry in the deploy history.
|
|
87
|
-
- **CLI** — `canopy download`, which lets you pick a version.
|
|
88
|
-
|
|
89
|
-
Downloads are limited to the project's members; the deploy bundle is your
|
|
90
|
-
source, not the public site.
|
|
91
|
-
|
|
92
|
-
- [Deploying](https://docs.canopy.website/guides/deploy) — Build commands, canopy.json, and what canopy deploy does step by step.
|
|
93
|
-
- [CI and deploy tokens](https://docs.canopy.website/guides/ci) — Ship a new version automatically on every push to main.
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Outbound requests
|
|
3
|
-
description: Which external hosts your project's backend may fetch — a per-project allowlist you manage yourself.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
Outbound `fetch` from a project's backend worker is **deny-by-default**: the
|
|
7
|
-
platform only lets requests through to platform infrastructure (your database,
|
|
8
|
-
files, AI, the Canopy API) and to the hosts on your project's own
|
|
9
|
-
**egress allowlist**. Anything else is answered locally with a 403
|
|
10
|
-
`egress_denied` — the request never leaves the runtime.
|
|
11
|
-
|
|
12
|
-
That default is deliberate: a thousand idle vibecoded projects should not be
|
|
13
|
-
able to call arbitrary internet hosts. When your project genuinely needs an
|
|
14
|
-
external API, you allow that host yourself — no platform-team ticket.
|
|
15
|
-
|
|
16
|
-
> **Note:** Enforcement applies on every target. On GCP the runtime answers the 403 itself; on Cloudflare the
|
|
17
|
-
> platform vets each outbound request outside your worker. Same rule, same error, one allowlist.
|
|
18
|
-
|
|
19
|
-
## Allowing a host
|
|
20
|
-
|
|
21
|
-
CLI, from the project directory:
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
canopy egress allow generativelanguage.googleapis.com
|
|
25
|
-
canopy egress list
|
|
26
|
-
canopy egress remove generativelanguage.googleapis.com
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
Or in the dashboard: **Settings → Outbound hosts**.
|
|
30
|
-
|
|
31
|
-
Changes apply to the **running** workers within moments — the platform re-rolls
|
|
32
|
-
the project's services with the new list, no deploy needed. Live and staging
|
|
33
|
-
share one list, like secrets: the staging worker is the same code and needs the
|
|
34
|
-
same hosts.
|
|
35
|
-
|
|
36
|
-
## What an entry looks like
|
|
37
|
-
|
|
38
|
-
- A bare hostname: `api.example.com` — matches exactly that host.
|
|
39
|
-
- A subdomain wildcard: `*.googleapis.com` — matches any subdomain
|
|
40
|
-
(`storage.googleapis.com`, `a.b.googleapis.com`) but **not** the apex
|
|
41
|
-
`googleapis.com`.
|
|
42
|
-
|
|
43
|
-
Hostnames only: no IP addresses, CIDR ranges, ports, schemes, or paths, and no
|
|
44
|
-
`*` catch-all. Entries are case-insensitive; unicode names are stored in their
|
|
45
|
-
punycode form. A project can list up to **32** hosts.
|
|
46
|
-
|
|
47
|
-
## What doesn't count as egress
|
|
48
|
-
|
|
49
|
-
Everything you reach through the SDK — `canopy.db`, `canopy.blob`,
|
|
50
|
-
`canopy.ai`, and `env.CANOPY.fetch` — goes through the platform and is always
|
|
51
|
-
allowed. The allowlist only governs direct `fetch` calls from your worker code
|
|
52
|
-
to the outside world. (Frontend code in the browser is unaffected — this is
|
|
53
|
-
about the worker.)
|
|
54
|
-
|
|
55
|
-
## When a request is denied
|
|
56
|
-
|
|
57
|
-
The blocked `fetch` resolves (in ~2ms, no network attempt) with status 403 and
|
|
58
|
-
body:
|
|
59
|
-
|
|
60
|
-
```json
|
|
61
|
-
{ "error": "egress_denied", "detail": "host api.example.com is not on the project allowlist" }
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
Allow the host and retry — see the
|
|
65
|
-
[troubleshooting entry](https://docs.canopy.website/guides/troubleshooting#egress_denied-403).
|
|
66
|
-
|
|
67
|
-
## Recently blocked hosts
|
|
68
|
-
|
|
69
|
-
You don't have to guess what got denied: the runtime reports every blocked
|
|
70
|
-
host back to the platform, and they show up as **Recently blocked** in
|
|
71
|
-
Settings → Outbound hosts (and in `canopy egress list`), with how often and
|
|
72
|
-
how recently each was hit. One click on **Allow** puts the host on the list
|
|
73
|
-
and clears it from the blocked section. Hosts that keep a low profile drop
|
|
74
|
-
off — the list remembers the 50 most recent — and allowing a host removes its
|
|
75
|
-
blocked entry immediately.
|