@picked/client 0.0.101-next.2 → 0.0.101-next.3
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/README.md +34 -158
- package/dist/{api-AaQeg3Ij.cjs → api-9o_emCM5.cjs} +1 -1
- package/dist/{api-BlRFU0Fi.js → api-BbQt8aW3.js} +1 -1
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/plugins/dynamic-experiences/index.js +1 -1
- package/dist/cjs/server/index.js +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/plugins/dynamic-experiences/index.js +2 -2
- package/dist/esm/server/index.js +2 -2
- package/dist/{plugin-CVD2TnRC.cjs → plugin-I8_6ncy_.cjs} +1 -1
- package/dist/{plugin-DhznDG-h.js → plugin-uZJ45vK6.js} +2 -2
- package/dist/{preview-unavailable-xWLCr93y.cjs → preview-unavailable-BUNxTYLe.cjs} +1 -1
- package/dist/{preview-unavailable-mW4Pj3Ph.js → preview-unavailable-BYFD2a58.js} +1 -1
- package/dist/{provider-zag5m5GH.cjs → provider-Bzi_Kb-n.cjs} +1 -1
- package/dist/{provider-COb_V-yq.js → provider-CQKp0iUJ.js} +1 -1
- package/package.json +5 -5
- package/dist/docs/_root.css +0 -101
- package/dist/docs/explanation/conditions-and-the-logic-engine.md +0 -94
- package/dist/docs/explanation/content-references.md +0 -99
- package/dist/docs/explanation/feature-flag-allocation.md +0 -218
- package/dist/docs/explanation/how-picked-works.md +0 -124
- package/dist/docs/explanation/how-pickedql-works.md +0 -76
- package/dist/docs/explanation/pages-and-flows.md +0 -64
- package/dist/docs/explanation/the-content-model.md +0 -87
- package/dist/docs/explanation/the-two-apis.md +0 -68
- package/dist/docs/explanation/why-server-side-rendering.md +0 -76
- package/dist/docs/explanation/workspaces-and-versions.md +0 -71
- package/dist/docs/how-to/add-a-step-field-or-action.md +0 -43
- package/dist/docs/how-to/analytics/index.md +0 -316
- package/dist/docs/how-to/archive-or-delete-a-workspace.md +0 -46
- package/dist/docs/how-to/authenticate-the-cli.md +0 -101
- package/dist/docs/how-to/authenticate-with-a-magic-link.md +0 -47
- package/dist/docs/how-to/authenticate-with-a-password.md +0 -59
- package/dist/docs/how-to/authenticate-with-an-api-key.md +0 -51
- package/dist/docs/how-to/authenticate-with-oauth.md +0 -40
- package/dist/docs/how-to/build-a-flow.md +0 -93
- package/dist/docs/how-to/call-an-external-api-from-a-workflow.md +0 -102
- package/dist/docs/how-to/connect-the-mcp-server.md +0 -46
- package/dist/docs/how-to/create-a-content-entry.md +0 -48
- package/dist/docs/how-to/create-a-project.md +0 -29
- package/dist/docs/how-to/create-an-experience.md +0 -42
- package/dist/docs/how-to/create-and-revoke-an-api-key.md +0 -42
- package/dist/docs/how-to/debug-with-the-chrome-extension.md +0 -57
- package/dist/docs/how-to/define-a-page-layout.md +0 -46
- package/dist/docs/how-to/fill-and-publish-a-page.md +0 -66
- package/dist/docs/how-to/install-the-gtm-template.md +0 -84
- package/dist/docs/how-to/install-the-sdk.md +0 -93
- package/dist/docs/how-to/install-the-vite-plugin.md +0 -69
- package/dist/docs/how-to/invite-and-remove-members.md +0 -35
- package/dist/docs/how-to/point-one-entry-at-another.md +0 -61
- package/dist/docs/how-to/preview-a-workspace.md +0 -28
- package/dist/docs/how-to/publish-a-workspace.md +0 -30
- package/dist/docs/how-to/read-a-feature-flag.md +0 -113
- package/dist/docs/how-to/read-a-referenced-entry.md +0 -109
- package/dist/docs/how-to/register-a-component.md +0 -55
- package/dist/docs/how-to/register-an-action-handler.md +0 -85
- package/dist/docs/how-to/register-an-api-that-uses-oauth2.md +0 -107
- package/dist/docs/how-to/render-a-step-form.md +0 -131
- package/dist/docs/how-to/render-an-unpublished-preview.md +0 -41
- package/dist/docs/how-to/retry-a-failed-call-with-a-loop.md +0 -81
- package/dist/docs/how-to/reuse-a-section.md +0 -53
- package/dist/docs/how-to/reuse-a-step-field-or-action.md +0 -28
- package/dist/docs/how-to/roll-back-a-published-version.md +0 -26
- package/dist/docs/how-to/run-an-ab-test.md +0 -49
- package/dist/docs/how-to/run-code-on-a-form-submission.md +0 -125
- package/dist/docs/how-to/server-render-a-page.md +0 -81
- package/dist/docs/how-to/set-a-content-security-policy.md +0 -32
- package/dist/docs/how-to/set-up-mfa.md +0 -113
- package/dist/docs/how-to/switch-workspaces.md +0 -122
- package/dist/docs/how-to/upload-and-use-an-asset.mdx +0 -73
- package/dist/docs/how-to/validate-a-field.md +0 -52
- package/dist/docs/how-to/wait-for-an-action-response.md +0 -182
- package/dist/docs/how-to/write-a-condition.md +0 -45
- package/dist/docs/how-to/write-a-predicate.md +0 -60
- package/dist/docs/index.md +0 -59
- package/dist/docs/reference/dashboard/actions.mdx +0 -56
- package/dist/docs/reference/dashboard/api-keys.mdx +0 -38
- package/dist/docs/reference/dashboard/conditions.mdx +0 -42
- package/dist/docs/reference/dashboard/content/asset-library.mdx +0 -63
- package/dist/docs/reference/dashboard/content/blocks.mdx +0 -57
- package/dist/docs/reference/dashboard/content/content-entries.mdx +0 -95
- package/dist/docs/reference/dashboard/content/models.mdx +0 -108
- package/dist/docs/reference/dashboard/content/pages.mdx +0 -61
- package/dist/docs/reference/dashboard/experiences.mdx +0 -51
- package/dist/docs/reference/dashboard/external-apis.md +0 -169
- package/dist/docs/reference/dashboard/features.mdx +0 -154
- package/dist/docs/reference/dashboard/fields.mdx +0 -106
- package/dist/docs/reference/dashboard/flow-builder/canvas.mdx +0 -58
- package/dist/docs/reference/dashboard/flow-builder/condition-builder.md +0 -57
- package/dist/docs/reference/dashboard/flow-builder/keyboard-shortcuts.md +0 -72
- package/dist/docs/reference/dashboard/flow-builder/nodes.md +0 -63
- package/dist/docs/reference/dashboard/labels.md +0 -321
- package/dist/docs/reference/dashboard/lead-search.md +0 -224
- package/dist/docs/reference/dashboard/projects.mdx +0 -44
- package/dist/docs/reference/dashboard/reports.mdx +0 -43
- package/dist/docs/reference/dashboard/steps.mdx +0 -37
- package/dist/docs/reference/dashboard/team-management.md +0 -29
- package/dist/docs/reference/dashboard/workflow-runs.md +0 -142
- package/dist/docs/reference/dashboard/workflow-templates.md +0 -182
- package/dist/docs/reference/dashboard/workflow-test-runs.md +0 -77
- package/dist/docs/reference/dashboard/workspace-versioning.mdx +0 -30
- package/dist/docs/reference/dashboard/workspaces.mdx +0 -76
- package/dist/docs/reference/delivery-api/experience-content.md +0 -152
- package/dist/docs/reference/delivery-api/index.md +0 -45
- package/dist/docs/reference/delivery-api/preview-caching-crawling.md +0 -79
- package/dist/docs/reference/delivery-api/project-config.md +0 -65
- package/dist/docs/reference/delivery-api/workspace-schema.md +0 -107
- package/dist/docs/reference/glossary.md +0 -201
- package/dist/docs/reference/management-api/authentication.md +0 -87
- package/dist/docs/reference/management-api/authorization-and-scopes.md +0 -291
- package/dist/docs/reference/management-api/error-handling.md +0 -232
- package/dist/docs/reference/management-api/pagination.md +0 -192
- package/dist/docs/reference/pickedql/data-sources.md +0 -174
- package/dist/docs/reference/pickedql/dimensions.md +0 -103
- package/dist/docs/reference/pickedql/filtering.md +0 -64
- package/dist/docs/reference/pickedql/index.md +0 -18
- package/dist/docs/reference/pickedql/schema.md +0 -172
- package/dist/docs/reference/pickedql/virtual-functions.md +0 -248
- package/dist/docs/reference/sdk/actions.md +0 -154
- package/dist/docs/reference/sdk/analytics-events.md +0 -453
- package/dist/docs/reference/sdk/conditions.md +0 -147
- package/dist/docs/reference/sdk/content-security-policy.md +0 -21
- package/dist/docs/reference/sdk/content.md +0 -253
- package/dist/docs/reference/sdk/experiences.md +0 -51
- package/dist/docs/reference/sdk/features.md +0 -256
- package/dist/docs/reference/sdk/fields.md +0 -255
- package/dist/docs/reference/sdk/index.md +0 -68
- package/dist/docs/reference/sdk/plugins/create-experience.md +0 -123
- package/dist/docs/reference/sdk/plugins/dynamic-experiences.md +0 -74
- package/dist/docs/reference/sdk/plugins/index.md +0 -29
- package/dist/docs/reference/sdk/plugins/window-object.md +0 -25
- package/dist/docs/reference/sdk/predicates.md +0 -43
- package/dist/docs/reference/sdk/ssr/index.md +0 -33
- package/dist/docs/reference/sdk/ssr/rendering-and-hydration.md +0 -103
- package/dist/docs/reference/sdk/ssr/serialize.md +0 -80
- package/dist/docs/reference/sdk/ssr/slots-and-placements.md +0 -113
- package/dist/docs/reference/sdk/steps.md +0 -86
- package/dist/docs/reference/sdk/type-generation.md +0 -265
- package/dist/docs/reference/tools/chrome-extension.md +0 -16
- package/dist/docs/reference/tools/cli.md +0 -292
- package/dist/docs/reference/tools/image-optimisation-service.md +0 -104
- package/dist/docs/reference/tools/mcp.md +0 -136
- package/dist/docs/reference/tools/vite-plugin.md +0 -163
- package/dist/docs/tutorials/first-api-call.md +0 -235
- package/dist/docs/tutorials/first-experience-in-the-dashboard.mdx +0 -143
- package/dist/docs/tutorials/first-experience.mdx +0 -254
- package/dist/docs/tutorials/first-server-rendered-page.mdx +0 -186
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: how-to
|
|
3
|
-
layout: docs
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# How to build a flow
|
|
7
|
-
|
|
8
|
-
This guide shows you how to put a flow together on the canvas. You need an experience
|
|
9
|
-
first. See [How to create an experience](/how-to/create-an-experience).
|
|
10
|
-
|
|
11
|
-
## Add nodes
|
|
12
|
-
|
|
13
|
-
Drag a step, an action, or a condition from the library onto the canvas. A new
|
|
14
|
-
node appears where you drop it.
|
|
15
|
-
|
|
16
|
-
You can also drop a block directly onto an arrow that is there already. The flow
|
|
17
|
-
builder puts the node into the line. The first arrow splits into two arrows, with the
|
|
18
|
-
new node between them. A **+** indicator appears when you hold the pointer over a
|
|
19
|
-
valid arrow.
|
|
20
|
-
|
|
21
|
-
## Connect nodes
|
|
22
|
-
|
|
23
|
-
Click the output handle of a node, on the right side. Drag to the input handle of
|
|
24
|
-
another node, on the left side. An arrow then joins the two nodes.
|
|
25
|
-
|
|
26
|
-
The flow follows the arrows from left to right, and it starts at the origin. Every
|
|
27
|
-
node after the origin is part of the experience flow.
|
|
28
|
-
|
|
29
|
-
## Branch with conditions
|
|
30
|
-
|
|
31
|
-
Connect the origin, or any other node, to a condition node. The condition evaluates
|
|
32
|
-
its rule and sends the flow down one of two paths.
|
|
33
|
-
|
|
34
|
-
Connect the green handle, for a true result, to the nodes that must run when the
|
|
35
|
-
condition holds. Connect the red handle, for a false result, to the other path. Each
|
|
36
|
-
path can lead to more steps, more actions, and more conditions.
|
|
37
|
-
|
|
38
|
-
## Assign fields to steps
|
|
39
|
-
|
|
40
|
-
Drag a field from the library onto a step node and drop it. That step then
|
|
41
|
-
holds the field.
|
|
42
|
-
|
|
43
|
-
You can assign more than one field to one step. The step node gives the number of
|
|
44
|
-
assigned fields. To see which fields it holds, choose the step. Then read the **Fields**
|
|
45
|
-
section in the inspector.
|
|
46
|
-
|
|
47
|
-
## Choose nodes
|
|
48
|
-
|
|
49
|
-
Click a node to choose it. Its inspector opens in the right panel.
|
|
50
|
-
|
|
51
|
-
Drag on empty canvas to choose every node inside a rectangle. Press `Cmd/Ctrl+A` to
|
|
52
|
-
choose every node.
|
|
53
|
-
|
|
54
|
-
When you choose more than one node, the inspector gives a count and a list in groups.
|
|
55
|
-
Click an item in that list to open its inspector.
|
|
56
|
-
|
|
57
|
-
## Move nodes
|
|
58
|
-
|
|
59
|
-
Drag a node to move it. Each node snaps to the grid.
|
|
60
|
-
|
|
61
|
-
Use the arrow keys to move a node a small distance. Hold `Shift` to move it further.
|
|
62
|
-
|
|
63
|
-
## Delete nodes
|
|
64
|
-
|
|
65
|
-
Choose one or more nodes. Press `Delete` or `Backspace`. The flow builder removes
|
|
66
|
-
those nodes and every arrow that joins them.
|
|
67
|
-
|
|
68
|
-
## Duplicate nodes
|
|
69
|
-
|
|
70
|
-
Choose one or more nodes. Press `Cmd/Ctrl+D`. A copy of each node appears next to the
|
|
71
|
-
first one.
|
|
72
|
-
|
|
73
|
-
## Undo and redo
|
|
74
|
-
|
|
75
|
-
Press `Cmd/Ctrl+Z` to undo. Press `Cmd/Ctrl+Shift+Z` to redo. You can also use the two
|
|
76
|
-
buttons at the bottom left of the canvas.
|
|
77
|
-
|
|
78
|
-
The flow builder records each change that you make to the flow. This includes each node
|
|
79
|
-
that you add or delete, each connection, each move, and each change in the inspector.
|
|
80
|
-
Text that you type into one field with no stop of more than one second is one change.
|
|
81
|
-
|
|
82
|
-
When the cursor is in a text field, `Cmd/Ctrl+Z` undoes the text in that field. When you
|
|
83
|
-
save the flow or discard your changes, the flow builder starts a new record.
|
|
84
|
-
|
|
85
|
-
You cannot undo the delete of a step, an action, a condition, or a field from the
|
|
86
|
-
workspace. The flow builder removes it from each change in the record.
|
|
87
|
-
|
|
88
|
-
## Related
|
|
89
|
-
|
|
90
|
-
- [Canvas](/reference/dashboard/flow-builder/canvas) — the panels and the view controls.
|
|
91
|
-
- [Nodes](/reference/dashboard/flow-builder/nodes) — every node type.
|
|
92
|
-
- [Keyboard shortcuts](/reference/dashboard/flow-builder/keyboard-shortcuts)
|
|
93
|
-
- [About how Picked works](/explanation/how-picked-works) — why a flow is a graph.
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: how-to
|
|
3
|
-
layout: docs
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# How to call an external API from a workflow
|
|
7
|
-
|
|
8
|
-
This guide shows you how to make a workflow send a request to a system outside Picked.
|
|
9
|
-
It also shows you how to read the answer in a later node.
|
|
10
|
-
|
|
11
|
-
A workflow can only call an origin that you register first. An origin is the scheme, the
|
|
12
|
-
host and the optional port of an address, such as `https://api.vendor.test`. When you
|
|
13
|
-
register one, every path on it becomes available to the workflow.
|
|
14
|
-
|
|
15
|
-
## 1. Register the external API
|
|
16
|
-
|
|
17
|
-
1. Open **Integrations**.
|
|
18
|
-
2. Choose **Configure external APIs**.
|
|
19
|
-
3. Choose **New external API**.
|
|
20
|
-
4. Enter a **Display name**. This name is for you. Picked does not send it with the
|
|
21
|
-
request.
|
|
22
|
-
5. Enter the **Origin**, such as `https://api.vendor.test`. Do not enter a path, a query
|
|
23
|
-
or a fragment.
|
|
24
|
-
6. If the API needs an authorization header, set **Credential** to **Authorization
|
|
25
|
-
header**.
|
|
26
|
-
7. Enter the header name and its value.
|
|
27
|
-
8. Choose **Register external API**.
|
|
28
|
-
|
|
29
|
-
For an API whose access tokens expire, refer to
|
|
30
|
-
[How to register an API that uses OAuth2](/how-to/register-an-api-that-uses-oauth2).
|
|
31
|
-
|
|
32
|
-
The header value is write-only. After you save it, Picked shows only the header name and
|
|
33
|
-
a mask. To replace the value, choose **Rotate authorization header**.
|
|
34
|
-
|
|
35
|
-
## 2. Add an External API node
|
|
36
|
-
|
|
37
|
-
1. Open the workflow.
|
|
38
|
-
2. Choose **Add node**.
|
|
39
|
-
3. Choose **Add tool**.
|
|
40
|
-
4. Choose **External API**.
|
|
41
|
-
5. Set `method` to the request method, such as `GET` or `POST`.
|
|
42
|
-
6. Set `url` to the full address, such as `https://api.vendor.test/v1/orders`. Picked
|
|
43
|
-
lists the origins you registered below the field.
|
|
44
|
-
7. For a `POST` or a `PUT`, set `body` to the JSON to send.
|
|
45
|
-
|
|
46
|
-
:::warning
|
|
47
|
-
Do not enter a credential in `headers`. Picked refuses the workflow when you save it.
|
|
48
|
-
Picked sends the authorization header from the registration for you.
|
|
49
|
-
:::
|
|
50
|
-
|
|
51
|
-
## 3. Read the answer
|
|
52
|
-
|
|
53
|
-
A later node reads what the call recorded:
|
|
54
|
-
|
|
55
|
-
- `{{ nodes.<node-id>.status }}` — the HTTP status.
|
|
56
|
-
- `{{ nodes.<node-id>.ok }}` — true for a status from 200 to 299.
|
|
57
|
-
- `{{ nodes.<node-id>.body }}` — the parsed JSON answer.
|
|
58
|
-
|
|
59
|
-
## 4. Continue after an error status
|
|
60
|
-
|
|
61
|
-
By default, a status outside 200 to 299 fails the node and stops the run. The run page
|
|
62
|
-
shows the node that failed. Refer to the [workflow runs reference](/reference/dashboard/workflow-runs). To test
|
|
63
|
-
the status in the workflow instead:
|
|
64
|
-
|
|
65
|
-
1. Set `failOnErrorStatus` to off.
|
|
66
|
-
2. Add a condition node after the External API node.
|
|
67
|
-
3. Test `{{ nodes.<node-id>.status }}` in the condition.
|
|
68
|
-
|
|
69
|
-
## 5. Continue after a failed call
|
|
70
|
-
|
|
71
|
-
A timeout or a connection failure also fails the node. To continue the run after a
|
|
72
|
-
failed call:
|
|
73
|
-
|
|
74
|
-
1. Connect the node's error exit to a condition node.
|
|
75
|
-
2. Test `{{ nodes.<node-id>.error.retryable }}` in the condition.
|
|
76
|
-
3. Connect the condition's `false` exit to the nodes that record the failure.
|
|
77
|
-
|
|
78
|
-
To send the request again, refer to
|
|
79
|
-
[How to retry a failed call with a loop](/how-to/retry-a-failed-call-with-a-loop).
|
|
80
|
-
|
|
81
|
-
The run follows the error exit only when the call fails. These failures stop the run at
|
|
82
|
-
the node:
|
|
83
|
-
|
|
84
|
-
- A required argument has no value.
|
|
85
|
-
- An argument has a value that the tool does not accept. For example, the value has the
|
|
86
|
-
wrong type, `method` is not one of the six methods, or `timeoutMs` is not from
|
|
87
|
-
1000 to 30000.
|
|
88
|
-
- A template cannot be rendered.
|
|
89
|
-
- The workflow does not have a scope that the tool needs.
|
|
90
|
-
- An error occurs in Picked.
|
|
91
|
-
|
|
92
|
-
Refer to the [External APIs reference](/reference/dashboard/external-apis#errors) for each
|
|
93
|
-
reason.
|
|
94
|
-
|
|
95
|
-
## Related
|
|
96
|
-
|
|
97
|
-
- [How to retry a failed call with a loop](/how-to/retry-a-failed-call-with-a-loop) — send
|
|
98
|
-
the request again after a wait.
|
|
99
|
-
- [External APIs](/reference/dashboard/external-apis) — every argument, every limit and
|
|
100
|
-
every error message.
|
|
101
|
-
- [Workflow templates](/reference/dashboard/workflow-templates) — the data that a node can
|
|
102
|
-
read, and templates in a condition.
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: how-to
|
|
3
|
-
layout: docs
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# How to connect the MCP server
|
|
7
|
-
|
|
8
|
-
This guide shows you how to control your Picked workspace from an AI tool that writes
|
|
9
|
-
code. The server URL is `https://api.picked.app/mcp`.
|
|
10
|
-
|
|
11
|
-
## Claude Desktop
|
|
12
|
-
|
|
13
|
-
1. Open **Settings > Connectors > Add custom connector**.
|
|
14
|
-
2. Set **Name** to `Picked`.
|
|
15
|
-
3. Set **URL** to `https://api.picked.app/mcp`.
|
|
16
|
-
4. Click **Connect**.
|
|
17
|
-
5. Answer the authorization prompt.
|
|
18
|
-
|
|
19
|
-
## Claude Code, Cursor, Windsurf, and others
|
|
20
|
-
|
|
21
|
-
Add `.mcp.json` to the root of your repository:
|
|
22
|
-
|
|
23
|
-
```json
|
|
24
|
-
{
|
|
25
|
-
"mcpServers": {
|
|
26
|
-
"picked": {
|
|
27
|
-
"type": "http",
|
|
28
|
-
"url": "https://api.picked.app/mcp"
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
Cursor reads the same content from `.cursor/mcp.json`.
|
|
35
|
-
|
|
36
|
-
## Two-factor authentication
|
|
37
|
-
|
|
38
|
-
The authorization prompt signs you in to Picked. If your account must use MFA, the prompt
|
|
39
|
-
asks for the code from your authenticator app before it connects the tool. Picked staff,
|
|
40
|
-
and members of an organization that requires MFA, must use it. When an organization
|
|
41
|
-
turns the requirement on, the tools its members connected before that point do not
|
|
42
|
-
work. Connect them again to continue.
|
|
43
|
-
|
|
44
|
-
## Related
|
|
45
|
-
|
|
46
|
-
- [MCP server](/reference/tools/mcp) — every tool that the server gives you.
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: how-to
|
|
3
|
-
layout: docs
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# How to create a content entry
|
|
7
|
-
|
|
8
|
-
This guide shows you how to make one instance of a Model and fill it with data. You need
|
|
9
|
-
a Model first. See [How to define a page layout](/how-to/define-a-page-layout).
|
|
10
|
-
|
|
11
|
-
A Page makes its own entry when you create the page. Use this guide for the content that
|
|
12
|
-
no Page and no Step owns, such as an author or a product.
|
|
13
|
-
|
|
14
|
-
## 1. Open the entries list
|
|
15
|
-
|
|
16
|
-
1. Open your workspace.
|
|
17
|
-
2. Click **CMS** in the sidebar.
|
|
18
|
-
3. Click **Content entries**.
|
|
19
|
-
|
|
20
|
-
## 2. Create the entry
|
|
21
|
-
|
|
22
|
-
1. Click **New content**.
|
|
23
|
-
2. Choose the **Model** for the entry.
|
|
24
|
-
3. Fill in each field. The form comes from the schema of the Model.
|
|
25
|
-
4. Click **Create entry**.
|
|
26
|
-
|
|
27
|
-
The Model is fixed when you create the entry. To move content to another Model, make a
|
|
28
|
-
new entry and copy the values across.
|
|
29
|
-
|
|
30
|
-
## 3. Correct every error
|
|
31
|
-
|
|
32
|
-
An invalid field shows an error next to it while you edit. The error carries the path to
|
|
33
|
-
the exact field. Correct each one before you publish, because Picked serves valid content
|
|
34
|
-
only.
|
|
35
|
-
|
|
36
|
-
## Find an entry again
|
|
37
|
-
|
|
38
|
-
The entries list shows a title for each entry. The title is the first single-line text
|
|
39
|
-
field of the entry. It shows the entry id when no such field holds a value.
|
|
40
|
-
|
|
41
|
-
Use the **Model** filter to narrow the list to one Model.
|
|
42
|
-
|
|
43
|
-
## Related
|
|
44
|
-
|
|
45
|
-
- [Content entries](/reference/dashboard/content/content-entries) — the editor reference.
|
|
46
|
-
- [Models](/reference/dashboard/content/models) — every field type.
|
|
47
|
-
- [How to point one entry at another](/how-to/point-one-entry-at-another)
|
|
48
|
-
- [How to publish a workspace](/how-to/publish-a-workspace)
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: how-to
|
|
3
|
-
layout: docs
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# How to create a project
|
|
7
|
-
|
|
8
|
-
This guide shows you how to add a project. A project is one site or one application, and
|
|
9
|
-
it holds its own experiences, content, and options.
|
|
10
|
-
|
|
11
|
-
## Steps
|
|
12
|
-
|
|
13
|
-
1. Open your organization.
|
|
14
|
-
2. Click **New project**.
|
|
15
|
-
3. Enter a name.
|
|
16
|
-
4. Click **Create project**.
|
|
17
|
-
|
|
18
|
-
The project home page opens. It shows your SDK snippet and the setup tasks that are still
|
|
19
|
-
open.
|
|
20
|
-
|
|
21
|
-
## Next
|
|
22
|
-
|
|
23
|
-
Copy the snippet and add it to your site. See
|
|
24
|
-
[How to install the SDK](/how-to/install-the-sdk).
|
|
25
|
-
|
|
26
|
-
## Related
|
|
27
|
-
|
|
28
|
-
- [Projects](/reference/dashboard/projects) — the project surface.
|
|
29
|
-
- [Add Picked to your application](/tutorials/first-experience) — the whole path.
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: how-to
|
|
3
|
-
layout: docs
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# How to create an experience
|
|
7
|
-
|
|
8
|
-
An experience is a Flow or a Page. This guide adds a **Flow**: the interactive kind, of
|
|
9
|
-
more than one step, which the browser renders. A **Page** is the standalone kind that your
|
|
10
|
-
server renders for a search engine, and
|
|
11
|
-
[How to fill and publish a page](/how-to/fill-and-publish-a-page) covers it.
|
|
12
|
-
|
|
13
|
-
[About pages and flows](/explanation/pages-and-flows) sets out the difference, and which
|
|
14
|
-
kind a piece of work needs.
|
|
15
|
-
|
|
16
|
-
## Steps
|
|
17
|
-
|
|
18
|
-
1. Open your project.
|
|
19
|
-
2. Click **Flows** in the sidebar. The experiences list opens.
|
|
20
|
-
3. Click **New experience**.
|
|
21
|
-
4. Enter a name.
|
|
22
|
-
5. Leave **Type** on the **Flow** option.
|
|
23
|
-
6. Open **Advanced**.
|
|
24
|
-
7. Enter a component name. It must match a component that you register in your
|
|
25
|
-
application.
|
|
26
|
-
8. Click **Create flow**.
|
|
27
|
-
|
|
28
|
-
The flow editor opens with an empty canvas.
|
|
29
|
-
|
|
30
|
-
## Set the options
|
|
31
|
-
|
|
32
|
-
Click the canvas background to open the experience inspector.
|
|
33
|
-
|
|
34
|
-
- **Condition** — the experience starts only for a visitor who matches it. Keep it blank
|
|
35
|
-
to start for every visitor.
|
|
36
|
-
- **Initialize Open** — the experience opens by itself when the page loads.
|
|
37
|
-
|
|
38
|
-
## Related
|
|
39
|
-
|
|
40
|
-
- [How to build a flow](/how-to/build-a-flow) — add your first node.
|
|
41
|
-
- [About pages and flows](/explanation/pages-and-flows) — Page or Flow.
|
|
42
|
-
- [Experiences](/reference/dashboard/experiences) — every option.
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: how-to
|
|
3
|
-
layout: docs
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# How to create and revoke an API key
|
|
7
|
-
|
|
8
|
-
This guide shows you how to give your code access to the Picked API. Use a key where your
|
|
9
|
-
own code calls the API, such as a server-side integration.
|
|
10
|
-
|
|
11
|
-
An API key does not sign the [CLI](/reference/tools/cli) in. The CLI reads a session, which
|
|
12
|
-
`picked login` writes. See
|
|
13
|
-
[How to authenticate the CLI](/how-to/authenticate-the-cli) for the commands that CI can
|
|
14
|
-
run without one.
|
|
15
|
-
|
|
16
|
-
## Create a key
|
|
17
|
-
|
|
18
|
-
1. Open your organization.
|
|
19
|
-
2. Click **API Keys**.
|
|
20
|
-
3. Click **Create API Key**.
|
|
21
|
-
4. Enter a **Name**, such as `Production key`.
|
|
22
|
-
5. Set **Project** to one project. The default, **All projects**, gives the key every
|
|
23
|
-
project.
|
|
24
|
-
6. Choose the **Permissions** that your integration needs.
|
|
25
|
-
7. Click **Create API Key**.
|
|
26
|
-
|
|
27
|
-
:::warning
|
|
28
|
-
Copy the key immediately. The dashboard does not show it again.
|
|
29
|
-
:::
|
|
30
|
-
|
|
31
|
-
## Revoke a key
|
|
32
|
-
|
|
33
|
-
1. Open the API keys list.
|
|
34
|
-
2. Click **Revoke** next to the key.
|
|
35
|
-
3. Click **Revoke Key** to confirm.
|
|
36
|
-
|
|
37
|
-
Picked invalidates the key immediately. No later request can use it.
|
|
38
|
-
|
|
39
|
-
## Related
|
|
40
|
-
|
|
41
|
-
- [API keys](/reference/dashboard/api-keys) — the scopes.
|
|
42
|
-
- [Authentication](/reference/management-api/authentication) — how to send the key.
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: how-to
|
|
3
|
-
layout: docs
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# How to debug with the Chrome extension
|
|
7
|
-
|
|
8
|
-
This guide shows you how to add a Picked panel to Chrome DevTools and check your
|
|
9
|
-
integration on any page that runs the SDK.
|
|
10
|
-
|
|
11
|
-
## 1. Install the extension
|
|
12
|
-
|
|
13
|
-
Install it from the
|
|
14
|
-
[Chrome Web Store](https://chromewebstore.google.com/detail/picked-developer-tools/nimmdamgnhlhdpngnalkpmnleebngidh).
|
|
15
|
-
|
|
16
|
-
## 2. Add the devtools plugin
|
|
17
|
-
|
|
18
|
-
```typescript
|
|
19
|
-
import { createClient } from 'picked'
|
|
20
|
-
import { svelteDevtoolsPlugin } from '@picked/svelte/plugins/devtools'
|
|
21
|
-
|
|
22
|
-
const picked = createClient({
|
|
23
|
-
projectId: 'your-project-id',
|
|
24
|
-
plugins: [svelteDevtoolsPlugin()],
|
|
25
|
-
})
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
The extension then connects to the SDK.
|
|
29
|
-
|
|
30
|
-
## 3. Add a tool of your own
|
|
31
|
-
|
|
32
|
-
A custom tool is a framework-adapted component, and it receives the live Picked client
|
|
33
|
-
exactly as an experience component does.
|
|
34
|
-
|
|
35
|
-
```typescript
|
|
36
|
-
import { adaptReactComponent } from '@picked/react'
|
|
37
|
-
import { svelteDevtoolsPlugin } from '@picked/svelte/plugins/devtools'
|
|
38
|
-
import MyTool from './MyTool'
|
|
39
|
-
|
|
40
|
-
const picked = createClient({
|
|
41
|
-
projectId: 'your-project-id',
|
|
42
|
-
plugins: [
|
|
43
|
-
svelteDevtoolsPlugin({
|
|
44
|
-
customTools: [
|
|
45
|
-
{ id: 'my-tool', label: 'My Tool', component: adaptReactComponent(MyTool) },
|
|
46
|
-
],
|
|
47
|
-
}),
|
|
48
|
-
],
|
|
49
|
-
})
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
Your tools appear under a **Custom Tools** tab. In React use `usePicked()`, and in Svelte
|
|
53
|
-
use `getPicked()`.
|
|
54
|
-
|
|
55
|
-
## Related
|
|
56
|
-
|
|
57
|
-
- [Chrome extension](/reference/tools/chrome-extension) — the panel reference.
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: how-to
|
|
3
|
-
layout: docs
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# How to define a page layout
|
|
7
|
-
|
|
8
|
-
This guide shows you how to define the shape of a page. A page layout sets which fields a
|
|
9
|
-
page can hold, and it holds no data itself.
|
|
10
|
-
|
|
11
|
-
## Steps
|
|
12
|
-
|
|
13
|
-
1. Open your workspace.
|
|
14
|
-
2. Click **Pages** in the sidebar, then **Page Layouts**.
|
|
15
|
-
3. Click **New model**.
|
|
16
|
-
4. Set **Category** to **Page layout**.
|
|
17
|
-
5. Enter a **Name** and a **Key**. The key is stable, and your SDK code and your API
|
|
18
|
-
calls both use it.
|
|
19
|
-
6. Add your fields. Choose a type for each one.
|
|
20
|
-
7. Click **Create model**.
|
|
21
|
-
|
|
22
|
-
The category is fixed when you create the Model. You cannot change it later.
|
|
23
|
-
|
|
24
|
-
## Make a field repeatable
|
|
25
|
-
|
|
26
|
-
Turn on **repeatable** on any field. It then renders as a sortable list of values. Use it
|
|
27
|
-
for a gallery, or for a list of features.
|
|
28
|
-
|
|
29
|
-
## Group related fields
|
|
30
|
-
|
|
31
|
-
Add a **Group** field to hold a set of fields under one key. Make the group repeatable to
|
|
32
|
-
describe a list of objects, such as a list of feature cards.
|
|
33
|
-
|
|
34
|
-
## Define content with no layout role
|
|
35
|
-
|
|
36
|
-
A Model needs no category. Leave **Category** as **None (general content)** for content
|
|
37
|
-
that no Page and no Step renders, such as an author or a product. Reach such a Model
|
|
38
|
-
under **CMS** in the sidebar, and point at its entries with a **Reference** field.
|
|
39
|
-
|
|
40
|
-
## Related
|
|
41
|
-
|
|
42
|
-
- [About the content model](/explanation/the-content-model) — why the schema and the data
|
|
43
|
-
are separate.
|
|
44
|
-
- [Models](/reference/dashboard/content/models) — every field type.
|
|
45
|
-
- [How to reuse a section](/how-to/reuse-a-section)
|
|
46
|
-
- [How to point one entry at another](/how-to/point-one-entry-at-another)
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: how-to
|
|
3
|
-
layout: docs
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# How to fill and publish a page
|
|
7
|
-
|
|
8
|
-
This guide shows you how to make a server-rendered Page and put content in it. You need a
|
|
9
|
-
page layout first. See [How to define a page layout](/how-to/define-a-page-layout).
|
|
10
|
-
|
|
11
|
-
## 1. Create the page
|
|
12
|
-
|
|
13
|
-
1. Open your project.
|
|
14
|
-
2. Choose a workspace.
|
|
15
|
-
3. Click **Pages** in the sidebar.
|
|
16
|
-
4. Click **New experience**.
|
|
17
|
-
5. Choose the **Page** type.
|
|
18
|
-
6. Choose a page layout.
|
|
19
|
-
7. Click **Create page**.
|
|
20
|
-
|
|
21
|
-
Picked makes a content entry and links it to the page on the first save.
|
|
22
|
-
|
|
23
|
-
## 2. Fill in the content
|
|
24
|
-
|
|
25
|
-
1. Open the **Properties** tab.
|
|
26
|
-
2. Fill in each field. The inspector on the right edits the field that you choose.
|
|
27
|
-
3. Watch the preview panel as the page fills in.
|
|
28
|
-
|
|
29
|
-
## 3. Correct every error
|
|
30
|
-
|
|
31
|
-
An invalid field shows an error next to it while you edit. Correct each one before you
|
|
32
|
-
publish. Picked serves valid content only.
|
|
33
|
-
|
|
34
|
-
## 4. Choose the status
|
|
35
|
-
|
|
36
|
-
Open the **Settings** tab and set the status.
|
|
37
|
-
|
|
38
|
-
- Set **Active** to serve the page to everyone.
|
|
39
|
-
- Set **Draft** to keep the page out of the published site. Picked serves a
|
|
40
|
-
draft page through a preview link, and to nobody else.
|
|
41
|
-
|
|
42
|
-
Use **Draft** for a page that is ready to review but not ready to be public.
|
|
43
|
-
When you publish the workspace, Picked releases your other changes and leaves
|
|
44
|
-
that page staged.
|
|
45
|
-
|
|
46
|
-
## 5. Publish
|
|
47
|
-
|
|
48
|
-
Publish the workspace to apply your changes to the live site. See
|
|
49
|
-
[How to publish a workspace](/how-to/publish-a-workspace).
|
|
50
|
-
|
|
51
|
-
When you publish the workspace, Picked does not make a draft page public. To
|
|
52
|
-
make that page public, set the status to **Active** and publish the workspace
|
|
53
|
-
again.
|
|
54
|
-
|
|
55
|
-
## Change the layout later
|
|
56
|
-
|
|
57
|
-
Use the change-layout control on the **Settings** tab. When you unlink a layout, Picked
|
|
58
|
-
separates the content entry from the page. It deletes no entry, but the page then has no
|
|
59
|
-
content to render.
|
|
60
|
-
|
|
61
|
-
## Related
|
|
62
|
-
|
|
63
|
-
- [About pages and flows](/explanation/pages-and-flows) — when to choose a Page.
|
|
64
|
-
- [Your first server-rendered page](/tutorials/first-server-rendered-page) — the whole
|
|
65
|
-
path, with the SDK.
|
|
66
|
-
- [Pages](/reference/dashboard/content/pages) — the editor reference.
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: how-to
|
|
3
|
-
layout: docs
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# How to install the GTM template
|
|
7
|
-
|
|
8
|
-
This guide shows you how to track an ecommerce event in Google Tag Manager and send it to
|
|
9
|
-
Picked. You need a GTM container and your Picked Tag ID.
|
|
10
|
-
|
|
11
|
-
## Automatic installation
|
|
12
|
-
|
|
13
|
-
Install the template from the GTM Community Gallery:
|
|
14
|
-
|
|
15
|
-
1. In Tag Manager, click **Templates**.
|
|
16
|
-
2. In the **Tag Templates** section, click **Search Gallery**.
|
|
17
|
-
3. Search for `Picked Ecommerce`.
|
|
18
|
-
4. Click the Picked Ecommerce template to read its detail.
|
|
19
|
-
5. Click the **Add to workspace** button.
|
|
20
|
-
6. Read the permissions that it needs.
|
|
21
|
-
7. Click **Add**.
|
|
22
|
-
|
|
23
|
-

|
|
24
|
-
|
|
25
|
-
## Manual installation
|
|
26
|
-
|
|
27
|
-
To import the template file yourself:
|
|
28
|
-
|
|
29
|
-
1. Download the
|
|
30
|
-
[template file](https://github.com/picked-app/gtm-template/blob/main/template.tpl)
|
|
31
|
-
from GitHub with the download icon.
|
|
32
|
-
2. In Google Tag Manager, go to **Templates**.
|
|
33
|
-
3. Click **New**.
|
|
34
|
-
4. Open the three-dot menu.
|
|
35
|
-
5. Click **Import**.
|
|
36
|
-
6. Choose the file that you downloaded.
|
|
37
|
-
7. Click **Save**.
|
|
38
|
-
|
|
39
|
-
## Setup
|
|
40
|
-
|
|
41
|
-
### 1. Create a Tag ID variable
|
|
42
|
-
|
|
43
|
-
Sign in to the [Picked Dashboard](https://dashboard.picked.app) and copy the Tag ID of
|
|
44
|
-
your project. Save it as a constant variable in GTM, for example `Picked Tag ID`.
|
|
45
|
-
|
|
46
|
-

|
|
47
|
-
|
|
48
|
-
### 2. Create an ecommerce data variable
|
|
49
|
-
|
|
50
|
-
Create a **Data Layer Variable** with the variable name `ecommerce`. It captures what
|
|
51
|
-
GA4 Enhanced Ecommerce writes to the data layer.
|
|
52
|
-
|
|
53
|
-

|
|
54
|
-
|
|
55
|
-
### 3. Create event triggers
|
|
56
|
-
|
|
57
|
-
Add a trigger for each ecommerce event that you want to track, for example
|
|
58
|
-
`add_to_cart`, `purchase`, or `view_item`.
|
|
59
|
-
|
|
60
|
-

|
|
61
|
-
|
|
62
|
-
### 4. Create tags
|
|
63
|
-
|
|
64
|
-
Create a new tag for each event. Choose the tag template called **Picked Ecommerce**. Assign
|
|
65
|
-
the trigger that matches. Then set the options below.
|
|
66
|
-
|
|
67
|
-

|
|
68
|
-
|
|
69
|
-
## Options
|
|
70
|
-
|
|
71
|
-
| Option | Description |
|
|
72
|
-
| --- | --- |
|
|
73
|
-
| **Tag ID** | The Tag ID of your Picked project. Find it in the [Picked Dashboard](https://dashboard.picked.app). |
|
|
74
|
-
| **Event** | The ecommerce event to track, for example `add_to_cart` or `purchase`. |
|
|
75
|
-
| **Send ecommerce data** | Turn this on to send the data from GA4 Enhanced Ecommerce to Picked. Turn it on for every ecommerce event. |
|
|
76
|
-
| **GA4 Enhanced Ecommerce Data** | The GTM variable that holds the data from GA4 Enhanced Ecommerce. Use the data layer variable from step 2. |
|
|
77
|
-
| **Additional data** | An optional GTM variable, for more metadata with the event. |
|
|
78
|
-
|
|
79
|
-

|
|
80
|
-
|
|
81
|
-
## Related
|
|
82
|
-
|
|
83
|
-
- [About how Picked works](/explanation/how-picked-works) — what Picked does with the
|
|
84
|
-
event.
|