@picked/client 0.0.71-next.1 → 0.0.71-next.2

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 (148) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/{api-CgqRvuKL.js → api-B0ydpQBE.js} +1 -1
  3. package/dist/{api-CH2FNa6S.cjs → api-CObostrU.cjs} +1 -1
  4. package/dist/cjs/index.js +2 -2
  5. package/dist/cjs/plugins/dynamic-experiences/index.js +1 -1
  6. package/dist/cjs/server/index.js +1 -1
  7. package/dist/docs/explanation/conditions-and-the-logic-engine.md +94 -0
  8. package/dist/docs/explanation/feature-flag-allocation.md +176 -0
  9. package/dist/docs/explanation/how-picked-works.md +102 -0
  10. package/dist/docs/explanation/how-pickedql-works.md +76 -0
  11. package/dist/docs/explanation/pages-and-flows.md +64 -0
  12. package/dist/docs/explanation/the-content-model.md +77 -0
  13. package/dist/docs/explanation/the-two-apis.md +68 -0
  14. package/dist/docs/explanation/why-server-side-rendering.md +76 -0
  15. package/dist/docs/explanation/workspaces-and-versions.md +71 -0
  16. package/dist/docs/how-to/add-a-step-field-or-action.md +43 -0
  17. package/dist/docs/{pickedql/examples.md → how-to/analytics/index.md} +19 -6
  18. package/dist/docs/how-to/archive-or-delete-a-workspace.md +46 -0
  19. package/dist/docs/how-to/authenticate-with-a-magic-link.md +40 -0
  20. package/dist/docs/how-to/authenticate-with-a-password.md +51 -0
  21. package/dist/docs/how-to/authenticate-with-an-api-key.md +51 -0
  22. package/dist/docs/how-to/authenticate-with-oauth.md +40 -0
  23. package/dist/docs/{flow-builder/building-flows.md → how-to/build-a-flow.md} +13 -9
  24. package/dist/docs/how-to/connect-the-mcp-server.md +38 -0
  25. package/dist/docs/how-to/create-a-project.md +29 -0
  26. package/dist/docs/how-to/create-an-experience.md +42 -0
  27. package/dist/docs/how-to/create-and-revoke-an-api-key.md +37 -0
  28. package/dist/docs/how-to/debug-with-the-chrome-extension.md +57 -0
  29. package/dist/docs/how-to/define-a-page-layout.md +39 -0
  30. package/dist/docs/how-to/fill-and-publish-a-page.md +50 -0
  31. package/dist/docs/{gtm-template.md → how-to/install-the-gtm-template.md} +9 -3
  32. package/dist/docs/how-to/install-the-sdk.md +68 -0
  33. package/dist/docs/how-to/install-the-vite-plugin.md +56 -0
  34. package/dist/docs/how-to/invite-and-remove-members.md +34 -0
  35. package/dist/docs/how-to/preview-a-workspace.md +28 -0
  36. package/dist/docs/how-to/publish-a-workspace.md +30 -0
  37. package/dist/docs/how-to/read-a-feature-flag.md +101 -0
  38. package/dist/docs/how-to/register-a-component.md +55 -0
  39. package/dist/docs/how-to/register-an-action-handler.md +67 -0
  40. package/dist/docs/how-to/render-a-step-form.md +132 -0
  41. package/dist/docs/how-to/render-an-unpublished-preview.md +41 -0
  42. package/dist/docs/how-to/reuse-a-section.md +37 -0
  43. package/dist/docs/how-to/reuse-a-step-field-or-action.md +28 -0
  44. package/dist/docs/how-to/roll-back-a-published-version.md +26 -0
  45. package/dist/docs/how-to/run-an-ab-test.md +49 -0
  46. package/dist/docs/how-to/run-code-on-a-form-submission.md +125 -0
  47. package/dist/docs/how-to/server-render-a-page.md +81 -0
  48. package/dist/docs/how-to/set-a-content-security-policy.md +32 -0
  49. package/dist/docs/how-to/set-up-mfa.md +69 -0
  50. package/dist/docs/how-to/upload-and-use-an-asset.mdx +73 -0
  51. package/dist/docs/how-to/validate-a-field.md +52 -0
  52. package/dist/docs/how-to/write-a-condition.md +45 -0
  53. package/dist/docs/how-to/write-a-predicate.md +60 -0
  54. package/dist/docs/index.md +41 -70
  55. package/dist/docs/reference/dashboard/actions.mdx +53 -0
  56. package/dist/docs/{api-keys.mdx → reference/dashboard/api-keys.mdx} +7 -15
  57. package/dist/docs/reference/dashboard/conditions.mdx +42 -0
  58. package/dist/docs/reference/dashboard/content/asset-library.mdx +63 -0
  59. package/dist/docs/{content → reference/dashboard/content}/content-entries.mdx +11 -3
  60. package/dist/docs/{content → reference/dashboard/content}/layouts.mdx +11 -35
  61. package/dist/docs/reference/dashboard/content/pages.mdx +35 -0
  62. package/dist/docs/reference/dashboard/content/sections.mdx +28 -0
  63. package/dist/docs/{experiences.mdx → reference/dashboard/experiences.mdx} +9 -16
  64. package/dist/docs/{features.mdx → reference/dashboard/features.mdx} +26 -41
  65. package/dist/docs/{fields.mdx → reference/dashboard/fields.mdx} +26 -20
  66. package/dist/docs/{flow-builder/overview.mdx → reference/dashboard/flow-builder/canvas.mdx} +8 -13
  67. package/dist/docs/{flow-builder → reference/dashboard/flow-builder}/condition-builder.md +5 -13
  68. package/dist/docs/{flow-builder → reference/dashboard/flow-builder}/keyboard-shortcuts.md +7 -1
  69. package/dist/docs/{flow-builder → reference/dashboard/flow-builder}/nodes.md +10 -3
  70. package/dist/docs/reference/dashboard/projects.mdx +44 -0
  71. package/dist/docs/reference/dashboard/reports.mdx +43 -0
  72. package/dist/docs/reference/dashboard/steps.mdx +37 -0
  73. package/dist/docs/{team-management.md → reference/dashboard/team-management.md} +5 -22
  74. package/dist/docs/{workspace-versioning.mdx → reference/dashboard/workspace-versioning.mdx} +6 -10
  75. package/dist/docs/reference/dashboard/workspaces.mdx +76 -0
  76. package/dist/docs/{delivery-api → reference/delivery-api}/experience-content.md +11 -4
  77. package/dist/docs/reference/delivery-api/index.md +45 -0
  78. package/dist/docs/{delivery-api → reference/delivery-api}/preview-caching-crawling.md +12 -5
  79. package/dist/docs/{delivery-api → reference/delivery-api}/project-config.md +11 -4
  80. package/dist/docs/reference/glossary.md +173 -0
  81. package/dist/docs/reference/management-api/authentication.md +74 -0
  82. package/dist/docs/{api → reference/management-api}/authorization-and-scopes.md +10 -3
  83. package/dist/docs/{api → reference/management-api}/error-handling.md +9 -3
  84. package/dist/docs/{api → reference/management-api}/pagination.md +6 -0
  85. package/dist/docs/{pickedql → reference/pickedql}/data-sources.md +16 -9
  86. package/dist/docs/{pickedql → reference/pickedql}/dimensions.md +7 -0
  87. package/dist/docs/{pickedql → reference/pickedql}/filtering.md +7 -0
  88. package/dist/docs/reference/pickedql/index.md +18 -0
  89. package/dist/docs/{pickedql → reference/pickedql}/schema.md +13 -6
  90. package/dist/docs/{pickedql → reference/pickedql}/virtual-functions.md +7 -0
  91. package/dist/docs/reference/sdk/actions.md +30 -0
  92. package/dist/docs/{sdk → reference/sdk}/conditions.md +8 -1
  93. package/dist/docs/reference/sdk/content-security-policy.md +21 -0
  94. package/dist/docs/reference/sdk/experiences.md +51 -0
  95. package/dist/docs/{sdk → reference/sdk}/features.md +30 -117
  96. package/dist/docs/{sdk → reference/sdk}/fields.md +10 -88
  97. package/dist/docs/reference/sdk/index.md +68 -0
  98. package/dist/docs/{sdk → reference/sdk}/plugins/create-experience.md +10 -22
  99. package/dist/docs/reference/sdk/plugins/dynamic-experiences.md +26 -0
  100. package/dist/docs/reference/sdk/plugins/index.md +29 -0
  101. package/dist/docs/{sdk → reference/sdk}/plugins/window-object.md +6 -0
  102. package/dist/docs/reference/sdk/predicates.md +43 -0
  103. package/dist/docs/reference/sdk/ssr/index.md +33 -0
  104. package/dist/docs/{sdk → reference/sdk}/ssr/rendering-and-hydration.md +4 -63
  105. package/dist/docs/{sdk → reference/sdk}/ssr/serialize.md +6 -33
  106. package/dist/docs/{sdk → reference/sdk}/ssr/slots-and-placements.md +7 -1
  107. package/dist/docs/reference/sdk/steps.md +87 -0
  108. package/dist/docs/reference/tools/chrome-extension.md +16 -0
  109. package/dist/docs/{image-optimisation-service.md → reference/tools/image-optimisation-service.md} +8 -0
  110. package/dist/docs/{mcp.md → reference/tools/mcp.md} +5 -45
  111. package/dist/docs/{vite-plugin.md → reference/tools/vite-plugin.md} +8 -38
  112. package/dist/docs/{api/index.md → tutorials/first-api-call.md} +27 -15
  113. package/dist/docs/tutorials/first-experience-in-the-dashboard.mdx +143 -0
  114. package/dist/docs/tutorials/first-experience.mdx +255 -0
  115. package/dist/docs/tutorials/first-server-rendered-page.mdx +186 -0
  116. package/dist/esm/index.js +260 -257
  117. package/dist/esm/plugins/dynamic-experiences/index.js +2 -2
  118. package/dist/esm/server/index.js +1 -1
  119. package/dist/{plugin-DCW-tnjO.cjs → plugin-CNna0UjB.cjs} +1 -1
  120. package/dist/{plugin-D2UqFikQ.js → plugin-DUOJpHaq.js} +1 -1
  121. package/dist/types/entities/feature/feature.d.ts +16 -0
  122. package/dist/types/entities/feature/feature.d.ts.map +1 -1
  123. package/dist/types/picked.d.ts.map +1 -1
  124. package/package.json +1 -1
  125. package/dist/docs/actions.mdx +0 -98
  126. package/dist/docs/api/authentication.md +0 -403
  127. package/dist/docs/chrome-extension.md +0 -68
  128. package/dist/docs/conditions.mdx +0 -72
  129. package/dist/docs/content/asset-library.mdx +0 -124
  130. package/dist/docs/content/pages.mdx +0 -82
  131. package/dist/docs/content/sections.mdx +0 -44
  132. package/dist/docs/delivery-api/index.md +0 -53
  133. package/dist/docs/guides/build-a-personalized-page.mdx +0 -161
  134. package/dist/docs/pickedql/index.md +0 -54
  135. package/dist/docs/projects.mdx +0 -44
  136. package/dist/docs/reports.mdx +0 -20
  137. package/dist/docs/sdk/actions.md +0 -82
  138. package/dist/docs/sdk/content-security-policy.md +0 -33
  139. package/dist/docs/sdk/experiences.md +0 -64
  140. package/dist/docs/sdk/feature-allocation.md +0 -161
  141. package/dist/docs/sdk/index.md +0 -98
  142. package/dist/docs/sdk/plugins/dynamic-experiences.md +0 -84
  143. package/dist/docs/sdk/plugins/index.md +0 -9
  144. package/dist/docs/sdk/predicates.md +0 -128
  145. package/dist/docs/sdk/ssr/index.md +0 -79
  146. package/dist/docs/sdk/steps.md +0 -479
  147. package/dist/docs/steps.mdx +0 -53
  148. package/dist/docs/workspaces.mdx +0 -133
@@ -1,8 +1,9 @@
1
1
  ---
2
+ type: reference
2
3
  layout: docs
3
4
  ---
4
5
 
5
- import { Screenshot } from '../../components/Screenshot'
6
+ import { Screenshot } from '../../../../components/Screenshot'
6
7
 
7
8
  # Feature flags
8
9
 
@@ -14,27 +15,19 @@ which visitors see a change to your site, and you deploy no code.
14
15
  alt="The feature flags list for a workspace on the Picked dashboard"
15
16
  />
16
17
 
17
- ## Create a feature flag
18
-
19
- 1. Open your project.
20
- 2. Click **Feature flags** in the sidebar.
21
- 3. Click **New feature flag**.
22
- 4. Enter a name.
23
- 5. Click **Create feature flag**.
24
-
25
18
  ## Keys
26
19
 
27
20
  Each feature flag has a unique key. Your application uses this key to check whether
28
21
  Picked allocates a visitor to the feature flag. You set the key when you create the
29
22
  feature flag, and you cannot change it later.
30
23
 
31
- ## Configure allocation
24
+ ## Set the allocation
32
25
 
33
26
  Set the allocation from the detail page of the feature flag:
34
27
 
35
28
  | Control | What it does |
36
29
  | --- | --- |
37
- | **Enabled** | Whether Picked allocates a visitor to the feature flag. A feature flag that is off allocates nobody, and it records nothing. See [Turn a feature flag off](#turn-a-feature-flag-off). |
30
+ | **Enabled** | Whether Picked allocates a visitor to the feature flag. A disabled feature flag allocates nobody, and it records nothing. See [Disable a feature flag](#disable-a-feature-flag). |
38
31
  | **Weight** | The percentage of visitors that Picked allocates to the feature flag, from 0 to 100. |
39
32
  | **Description** | An internal note about what the feature flag tests. |
40
33
 
@@ -43,55 +36,40 @@ allocated, or not allocated. A weight of 30 allocates 30% of your visitors. The
43
36
  70% stay unallocated. A weight of 0 allocates nobody. A weight of 100 allocates
44
37
  everybody.
45
38
 
46
- ## How visitors are allocated
47
-
48
- The allocation is deterministic. Picked gives each visitor a stable value for each
49
- feature flag. It derives that value from the visitor ID and from the ID of the feature
50
- flag. It then compares the value against the weight. When the value is below the
51
- weight, Picked allocates the visitor.
39
+ ## How Picked allocates a visitor
52
40
 
53
- The same visitor always gets the same result for one feature flag, on every visit,
54
- while the weight stays the same. The version is not part of that value. It controls
55
- the cache only. See [Feature flag versions](#feature-flag-versions).
41
+ The allocation is deterministic. It derives from the visitor ID, the ID of the feature
42
+ flag, and the weight. Each feature flag gets its own value, so tests that run at the
43
+ same time are independent. See
44
+ [About feature flag allocation](/explanation/feature-flag-allocation).
56
45
 
57
- Each feature flag gets its own value, so tests that run at the same time are
58
- independent. Two feature flags, both at weight 50, split your visitors into four equal
59
- parts: allocated to both, to one, to the other, or to neither. Three feature flags at
60
- weight 50 give eight groups of 12.5%.
46
+ ## Disable a feature flag
61
47
 
62
- :::note
63
- Inside one feature flag, a larger weight only adds visitors. Everybody at weight 30 is
64
- still allocated at weight 50, so you can make a release wider and move nobody who is
65
- in it already. A smaller weight removes visitors from the top of the range.
66
- :::
67
-
68
- ## Turn a feature flag off
69
-
70
- A feature flag that is off allocates nobody, and it records nothing. The difference
48
+ A disabled feature flag allocates nobody, and it records nothing. The difference
71
49
  from a weight of 0 matters for your reports. The visitor is **not in the test at
72
50
  all**, and the visitor is not in the control group.
73
51
 
74
- The SDK does not evaluate a feature flag that is off. It stores no decision in the
52
+ The SDK does not evaluate a disabled feature flag. It stores no decision in the
75
53
  browser of the visitor, and it reports no decision to your analytics. Such a feature
76
54
  flag is absent from the feature list on every analytics event.
77
55
 
78
- An experience whose condition points at a feature flag that is off behaves as though
56
+ An experience whose condition points at a disabled feature flag behaves as though
79
57
  the visitor is not in the test. The condition reads as not allocated, and Picked
80
58
  records no assignment.
81
59
 
82
60
  This state is temporary, and it discards no decision that Picked made already. A
83
- visitor who was allocated before keeps that decision in the browser. When you turn the
84
- feature flag on again, Picked continues from that decision and does not allocate the
85
- visitor again.
61
+ visitor who was allocated before keeps that decision in the browser. When you enable the
62
+ feature flag again, Picked continues from that decision, and the visitor stays in the
63
+ group they were already in.
86
64
 
87
65
  :::note
88
- Expect a step change in your reports when you turn a feature flag off: fewer feature
66
+ Expect a step change in your reports when you disable a feature flag: fewer feature
89
67
  flags for each visitor, and fewer decision events. That is the feature flag that drops
90
68
  out, and you lose no data.
91
69
  :::
92
70
 
93
- A feature flag that is off stays visible in the developer tools, and a
94
- [URL override](/sdk/features#overrides-in-the-url) still turns one on for QA.
71
+ A disabled feature flag stays visible in the developer tools, and a
72
+ [URL override](/reference/sdk/features#overrides-in-the-url) still turns one on for QA.
95
73
 
96
74
  ## Feature flag versions
97
75
 
@@ -127,3 +105,10 @@ decision.
127
105
  To apply a weight change only to a visitor that Picked does not allocate yet, change
128
106
  the weight and leave the version as it is. An allocated visitor keeps the current
129
107
  allocation.
108
+
109
+ ## Related
110
+
111
+ - [About feature flag allocation](/explanation/feature-flag-allocation)
112
+ - [How to run an A/B test](/how-to/run-an-ab-test)
113
+ - [How to read a feature flag](/how-to/read-a-feature-flag)
114
+ - [How to add a step, a field, an action, or a condition](/how-to/add-a-step-field-or-action)
@@ -1,8 +1,9 @@
1
1
  ---
2
+ type: reference
2
3
  layout: docs
3
4
  ---
4
5
 
5
- import { Screenshot } from '../../components/Screenshot'
6
+ import { Screenshot } from '../../../../components/Screenshot'
6
7
 
7
8
  # Fields
8
9
 
@@ -11,22 +12,13 @@ information such as a name, an email address, a preference, or a choice.
11
12
 
12
13
  This page covers the experience field, which collects visitor input. An experience
13
14
  field is not the same as a content field. A content field is part of the schema of a
14
- CMS layout. See [Page and Step Layouts](/content/layouts) for those.
15
+ CMS layout. See [Page and Step Layouts](/reference/dashboard/content/layouts) for those.
15
16
 
16
17
  <Screenshot
17
18
  route="/{orgSlug}/{projectId}/workspaces/{workspaceId}/fields"
18
19
  alt="The fields list for a workspace on the Picked dashboard"
19
20
  />
20
21
 
21
- ## Create a field
22
-
23
- 1. Open your project.
24
- 2. Click **Fields** in the sidebar.
25
- 3. Click **New Field**.
26
- 4. Enter a name, a key, and a label.
27
- 5. Choose a type.
28
- 6. Click **Create**.
29
-
30
22
  ## Field types
31
23
 
32
24
  A field has one of many types. These are the common ones:
@@ -63,7 +55,7 @@ it. Your visitors do not see it.
63
55
  continue.
64
56
 
65
57
  **Validation rules**: Conditions for a constraint such as a smallest value, a largest
66
- value, or a pattern. See [Condition Builder](/flow-builder/condition-builder) for how
58
+ value, or a pattern. See [Condition Builder](/reference/dashboard/flow-builder/condition-builder) for how
67
59
  to build a validation rule.
68
60
 
69
61
  ## More than one value
@@ -78,17 +70,31 @@ buttons, add options. Each option has a value, and the response carries that val
78
70
 
79
71
  Each option can also carry a condition. When you set one, the option appears only to
80
72
  a visitor who matches the condition. See
81
- [Condition Builder](/flow-builder/condition-builder) for more detail.
73
+ [Condition Builder](/reference/dashboard/flow-builder/condition-builder) for more detail.
82
74
 
83
75
  ## Privacy
84
76
 
85
- **Do Not Track**: When this is on, Picked keeps the data of this field out of your
86
- analytics.
77
+ Two policies control where the value of a field can go. They are independent, and a
78
+ sensitive field usually needs both.
79
+
80
+ | Policy | What it does |
81
+ | --- | --- |
82
+ | **Do Not Track** | Picked keeps the value out of your analytics events. The events carry the field ID only. |
83
+ | **Do Not Store** | The SDK reads the value but does not put it in browser storage. |
84
+
85
+ Neither policy stops the flow from the use of the value inside the page. A field with both
86
+ policies set still holds its value there. The flow validates the step with it, and it
87
+ evaluates the conditions after the step with it. The policies control what leaves the
88
+ page.
89
+
90
+ Set both for a password, a tax number, or a payment detail. A field that only takes a
91
+ branch in a flow needs neither.
87
92
 
88
- **Do Not Store**: When this is on, Picked reads the data of this field but does not
89
- keep it. Use it for sensitive information such as a password or payment detail.
93
+ ## Related
90
94
 
91
- ## Reuse fields
95
+ - [How to add a step, a field, an action, or a condition](/how-to/add-a-step-field-or-action)
92
96
 
93
- A field is a project-level entity. Assign the same field to steps in more than one
94
- experience. A change to the options of a field applies at every place that uses it.
97
+ - [How to validate a field](/how-to/validate-a-field)
98
+ - [How to write a condition](/how-to/write-a-condition) — for a validation rule or an
99
+ option condition.
100
+ - [SDK fields](/reference/sdk/fields) — the `policies` object.
@@ -1,8 +1,9 @@
1
1
  ---
2
+ type: reference
2
3
  layout: docs
3
4
  ---
4
5
 
5
- import { Screenshot } from '../../../components/Screenshot'
6
+ import { Screenshot } from '../../../../../components/Screenshot'
6
7
 
7
8
  # Flow builder
8
9
 
@@ -12,14 +13,14 @@ inspector panel.
12
13
 
13
14
  <Screenshot
14
15
  route="/{orgSlug}/{projectId}/workspaces/{workspaceId}/experiences/{experienceId}"
15
- alt="The flow builder with the entity browser, canvas, and inspector panels"
16
+ alt="The flow builder with the library, canvas, and inspector panels"
16
17
  />
17
18
 
18
19
  ## Layout
19
20
 
20
21
  The flow builder has three panels, from left to right.
21
22
 
22
- **Entity browser**, on the left: it lists every step, action, condition, and field in
23
+ **Library**, on the left: it lists every step, action, condition, and field in
23
24
  your project. Drag an item from here onto the canvas.
24
25
 
25
26
  **Canvas**, in the middle: the area where you build your flow. A node stands for a
@@ -50,14 +51,8 @@ Click the auto-layout button in the toolbar. The flow builder then arranges ever
50
51
  node into a clean hierarchy. This is useful after you add many nodes, and when the
51
52
  canvas becomes messy.
52
53
 
53
- ## Save your work
54
+ ## Related
54
55
 
55
- Click **Save** in the toolbar to save your flow. The button is active when you have
56
- an unsaved change.
57
-
58
- The flow builder also saves by itself after a period of inactivity. A dot on the save
59
- button means that you have an unsaved change.
60
-
61
- ---
62
-
63
- **Flow Builder** · [Nodes](/flow-builder/nodes) · [Build Flows](/flow-builder/building-flows) · [Keyboard Shortcuts](/flow-builder/keyboard-shortcuts) · [Condition Builder](/flow-builder/condition-builder)
56
+ - [How to build a flow](/how-to/build-a-flow) — add, connect, and branch.
57
+ - [Keyboard shortcuts](/reference/dashboard/flow-builder/keyboard-shortcuts)
58
+ - [Nodes](/reference/dashboard/flow-builder/nodes)
@@ -1,4 +1,5 @@
1
1
  ---
2
+ type: reference
2
3
  layout: docs
3
4
  ---
4
5
 
@@ -12,7 +13,7 @@ places. With it you define a rule and you write no code.
12
13
  The dashboard uses the condition builder here:
13
14
 
14
15
  - **Condition nodes** — they set which branch the flow takes in the
15
- [flow builder](/flow-builder/overview).
16
+ [flow builder](/reference/dashboard/flow-builder/canvas).
16
17
  - **Experience conditions** — they control when an experience starts for a visitor.
17
18
  - **Initialize open conditions** — they control when an experience opens by itself as
18
19
  the page loads.
@@ -50,16 +51,7 @@ branch on whether Picked allocates a visitor to a flag.
50
51
  **Location** — the parts of the current page URL of the visitor. These are the
51
52
  pathname, the search parameters, the hostname, and the hash.
52
53
 
53
- ## Example
54
+ ## Related
54
55
 
55
- To show a step only to a visitor who is on one page and who accepted marketing:
56
-
57
- 1. Create an AND group.
58
- 2. Add a rule: **Location → pathname** equals `/pricing`.
59
- 3. Add a rule: **Responses → `marketing_opt_in`** equals `true`.
60
-
61
- The rule group matches only when both conditions are true.
62
-
63
- ---
64
-
65
- [Overview](/flow-builder/overview) · [Nodes](/flow-builder/nodes) · [Build Flows](/flow-builder/building-flows) · [Keyboard Shortcuts](/flow-builder/keyboard-shortcuts) · **Condition Builder**
56
+ - [How to write a condition](/how-to/write-a-condition) — a worked example.
57
+ - [About conditions and the logic engine](/explanation/conditions-and-the-logic-engine)
@@ -1,4 +1,5 @@
1
1
  ---
2
+ type: reference
2
3
  layout: docs
3
4
  ---
4
5
 
@@ -63,4 +64,9 @@ These shortcuts work when the canvas of the flow builder holds the keyboard inpu
63
64
 
64
65
  ---
65
66
 
66
- [Overview](/flow-builder/overview) · [Nodes](/flow-builder/nodes) · [Build Flows](/flow-builder/building-flows) · **Keyboard Shortcuts** · [Condition Builder](/flow-builder/condition-builder)
67
+ [Overview](/reference/dashboard/flow-builder/canvas) · [Nodes](/reference/dashboard/flow-builder/nodes) · [Build Flows](/how-to/build-a-flow) · **Keyboard Shortcuts** · [Condition Builder](/reference/dashboard/flow-builder/condition-builder)
68
+
69
+ ## Related
70
+
71
+ - [How to build a flow](/how-to/build-a-flow)
72
+ - [Canvas](/reference/dashboard/flow-builder/canvas) — the panels and the view controls.
@@ -1,4 +1,5 @@
1
1
  ---
2
+ type: reference
2
3
  layout: docs
3
4
  ---
4
5
 
@@ -19,7 +20,7 @@ You cannot move the origin, delete it, or make a copy of it. It is always there.
19
20
  A step node stands for a screen that a visitor sees. It appears as a blue rectangle
20
21
  on the canvas.
21
22
 
22
- A step holds fields. Drag a field from the entity browser onto a step node to assign
23
+ A step holds fields. Drag a field from the library onto a step node to assign
23
24
  it. The subtitle of the node gives the number of assigned fields.
24
25
 
25
26
  Each step has a `layoutName`. It tells the SDK which visual layout to use for this
@@ -43,7 +44,7 @@ right connects to the path for a true result. The red handle at the bottom right
43
44
  connects to the path for a false result.
44
45
 
45
46
  Define the rule in the inspector, with the visual condition builder. See
46
- [Conditions](/conditions) for more detail.
47
+ [Conditions](/reference/dashboard/conditions) for more detail.
47
48
 
48
49
  ## Handles
49
50
 
@@ -53,4 +54,10 @@ nodes.
53
54
 
54
55
  ---
55
56
 
56
- [Overview](/flow-builder/overview) · **Nodes** · [Build Flows](/flow-builder/building-flows) · [Keyboard Shortcuts](/flow-builder/keyboard-shortcuts) · [Condition Builder](/flow-builder/condition-builder)
57
+ [Overview](/reference/dashboard/flow-builder/canvas) · **Nodes** · [Build Flows](/how-to/build-a-flow) · [Keyboard Shortcuts](/reference/dashboard/flow-builder/keyboard-shortcuts) · [Condition Builder](/reference/dashboard/flow-builder/condition-builder)
58
+
59
+ ## Related
60
+
61
+ - [How to build a flow](/how-to/build-a-flow)
62
+ - [Canvas](/reference/dashboard/flow-builder/canvas)
63
+ - [About how Picked works](/explanation/how-picked-works) — why a flow is a graph.
@@ -0,0 +1,44 @@
1
+ ---
2
+ type: reference
3
+ layout: docs
4
+ ---
5
+
6
+ import { Screenshot } from '../../../../components/Screenshot'
7
+
8
+ # Projects
9
+
10
+ A project is one site or one application that you want to measure with Picked. Each
11
+ project has its own experiences, content, and options.
12
+
13
+ <Screenshot
14
+ route="/{orgSlug}"
15
+ alt="The organization home page on the Picked dashboard, with the projects in an organization"
16
+ />
17
+
18
+ ## Workspaces
19
+
20
+ Each project holds one or more [Workspaces](/reference/dashboard/workspaces). In a workspace you set the
21
+ options for an experience and you see a preview of it before you make it live.
22
+
23
+ ## Project home
24
+
25
+ When you open a project, you land on the project home page. It shows your SDK
26
+ snippet and a list of the setup tasks that are still open.
27
+
28
+ Copy the snippet and add it to your site. The snippet connects your site to the
29
+ project and lets Picked serve experiences to it. See
30
+ [SDK Installation](/reference/sdk) for the setup detail.
31
+
32
+ ## Project navigation
33
+
34
+ The sidebar shows the sections of your project: **Feature flags**, **Fields**, **Flows**,
35
+ **Pages**, and **Workspace settings**. **Flows** holds **Step Layouts**, and **Pages**
36
+ holds **Page Layouts** and **Sections**.
37
+
38
+ A step, an action, and a condition have no sidebar entry. You reach all three from the
39
+ library in the flow builder, because each one belongs to a flow.
40
+
41
+ ## Related
42
+
43
+ - [How to create a project](/how-to/create-a-project)
44
+ - [How to install the SDK](/how-to/install-the-sdk)
@@ -0,0 +1,43 @@
1
+ ---
2
+ type: reference
3
+ layout: docs
4
+ ---
5
+
6
+ import { Screenshot } from '../../../../components/Screenshot'
7
+
8
+ # Reports
9
+
10
+ A report is an embedded Metabase dashboard or question, attached to a Picked project. Use
11
+ a report to see how your visitors move through your experiences and your feature flags.
12
+
13
+ <Screenshot
14
+ route="/{orgSlug}/{projectId}/reports"
15
+ alt="The reports list for a project on the Picked dashboard"
16
+ />
17
+
18
+ ## Report options
19
+
20
+ | Option | Description |
21
+ | --- | --- |
22
+ | **Report name** | The name that the reports list shows. |
23
+ | **Description** | An optional note about what the report shows. |
24
+ | **Metabase report type** | `Dashboard` or `Question`. |
25
+ | **Metabase report ID** | The numeric ID from the Metabase URL. |
26
+ | **Display order** | Optional. It controls the position of the report in the list. |
27
+
28
+ The create form has a link that opens the report, so you can check that the ID is
29
+ correct before you save.
30
+
31
+ ## Permissions
32
+
33
+ A member needs permission in the organization to create, edit, or delete a report. The
34
+ dashboard hides those actions from a member without it.
35
+
36
+ ## Delete a report
37
+
38
+ Open the report settings page and click **Delete report**. You cannot reverse a delete.
39
+
40
+ ## Related
41
+
42
+ - [Analytics queries](/how-to/analytics) — query the same data with SQL.
43
+ - [About PickedQL](/explanation/how-pickedql-works) — what the query layer expands.
@@ -0,0 +1,37 @@
1
+ ---
2
+ type: reference
3
+ layout: docs
4
+ ---
5
+
6
+ import { Screenshot } from '../../../../components/Screenshot'
7
+
8
+ # Steps
9
+
10
+ A step is one screen or card that a visitor sees during an experience. Each step
11
+ holds one or more fields. A field collects data or shows content.
12
+
13
+ <Screenshot
14
+ route="/{orgSlug}/{projectId}/workspaces/{workspaceId}/steps"
15
+ alt="The steps list for a workspace on the Picked dashboard"
16
+ />
17
+
18
+ ## Set up a step
19
+
20
+ **Name**: The name that the dashboard shows. Your visitors do not see it.
21
+
22
+ **Key**: The identifier that your application uses for this step. Your
23
+ visitors do not see it.
24
+
25
+ **Layout Name**: The name of the component layout that renders this step. Examples
26
+ are `card`, `modal`, and `fullscreen`.
27
+
28
+ A step can also carry a **Step Layout**. A step layout is a reusable CMS schema, and
29
+ it gives the step a Content Entry. See [Page and Step Layouts](/reference/dashboard/content/layouts).
30
+
31
+ ## Related
32
+
33
+ - [How to add a step, a field, an action, or a condition](/how-to/add-a-step-field-or-action)
34
+
35
+ - [How to build a flow](/how-to/build-a-flow) — add a step and assign fields to it.
36
+ - [How to reuse a step, a field, or an action](/how-to/reuse-a-step-field-or-action)
37
+ - [Page and step layouts](/reference/dashboard/content/layouts) — the step layout schema.
@@ -1,4 +1,5 @@
1
1
  ---
2
+ type: reference
2
3
  layout: docs
3
4
  ---
4
5
 
@@ -15,28 +16,6 @@ to more than one organization.
15
16
  To move between organizations, use the organization control at the top of the
16
17
  sidebar.
17
18
 
18
- ## Invite members
19
-
20
- 1. Open your organization.
21
- 2. Click **Members**.
22
- 3. Click **Invite**.
23
- 4. Enter an email address.
24
- 5. Choose a role.
25
- 6. Click **Send Invite**.
26
-
27
- The person that you invite receives an email with a link to join your organization.
28
- A person without a Picked account must create one first.
29
-
30
- ## Remove members
31
-
32
- 1. Open your organization.
33
- 2. Click **Members**.
34
- 3. Find the member that you want to remove.
35
- 4. Click **Remove** next to the name of the member.
36
- 5. Confirm.
37
-
38
- The member loses access to every project in the organization immediately.
39
-
40
19
  ## Roles and permissions
41
20
 
42
21
  Each member holds a role, and the role controls what the member can reach. A role
@@ -44,3 +23,7 @@ decides whether a member can create a project, edit an experience, control other
44
23
  members, or read a report.
45
24
 
46
25
  Give each member the smallest role that the work of that member needs.
26
+
27
+ ## Related
28
+
29
+ - [How to invite and remove members](/how-to/invite-and-remove-members)
@@ -1,8 +1,9 @@
1
1
  ---
2
+ type: reference
2
3
  layout: docs
3
4
  ---
4
5
 
5
- import { Screenshot } from '../../components/Screenshot'
6
+ import { Screenshot } from '../../../../components/Screenshot'
6
7
 
7
8
  # Workspace versioning
8
9
 
@@ -22,13 +23,8 @@ The **Publish history** page lists each published version of every workspace in
22
23
  project, the newest first. The version that Picked serves now carries a **Live**
23
24
  badge.
24
25
 
25
- ## Roll back to an earlier version
26
+ ## Related
26
27
 
27
- 1. Open **Publish history** from the project sidebar.
28
- 2. Find the version that you want to restore.
29
- 3. Click **Restore**.
30
- 4. Read the diff preview. It shows what changes between the current live version and
31
- the version that you chose.
32
- 5. Click **Restore this version** to confirm.
33
-
34
- The restored version is live immediately. Your current draft does not change.
28
+ - [About workspaces and versions](/explanation/workspaces-and-versions) — why a roll-back
29
+ changes no data.
30
+ - [How to roll back a published version](/how-to/roll-back-a-published-version)
@@ -0,0 +1,76 @@
1
+ ---
2
+ type: reference
3
+ layout: docs
4
+ ---
5
+
6
+ import { Screenshot } from '../../../../components/Screenshot'
7
+
8
+ # Workspaces
9
+
10
+ A workspace is one version of the configuration of your project. Use a workspace to hold
11
+ a change, to see a preview of it, and to publish it when it is ready.
12
+
13
+ <Screenshot
14
+ route="/{orgSlug}/{projectId}/workspaces"
15
+ alt="The workspaces list inside a project on the Picked dashboard"
16
+ hide={['[data-testid="workspace-row-relative-time"]']}
17
+ />
18
+
19
+ ## How workspaces work
20
+
21
+ Each project has a workspace that holds your experiences, feature flags, steps, fields,
22
+ actions, and conditions. When you make a change in the dashboard, that change stays in
23
+ the workspace until you publish it. A change to a flow, to a feature flag, or to a step
24
+ all behave the same way.
25
+
26
+ A workspace is in one of three states:
27
+
28
+ - **Live** — the workspace that the SDK serves to your visitors. Each project has
29
+ exactly one live workspace.
30
+ - **Draft** — a workspace that no visitor sees. You can edit a draft, see a preview
31
+ of it, and publish it to make it live.
32
+ - **Archived** — a draft that you put to one side. An archived workspace is still
33
+ editable, but it does not appear in the default workspaces list.
34
+
35
+ ## Change previews
36
+
37
+ The publish modal shows a side-by-side change preview. It compares the current
38
+ workspace against the last published snapshot. Use it to see exactly what your
39
+ visitors get after you publish.
40
+
41
+ <Screenshot
42
+ route="/{orgSlug}/{projectId}/workspaces/{workspaceId}/experiences?action=publish"
43
+ alt="The publish modal with a change preview of added experiences, steps, and conditions"
44
+ selector='[role="dialog"]'
45
+ wait='[role="dialog"]'
46
+ hide={['[data-testid="publish-diff-replaces-version"]']}
47
+ renderWidth={720}
48
+ renderHeight={579}
49
+ />
50
+
51
+ The preview puts the changes into groups: experiences, feature flags, steps, fields,
52
+ actions, and conditions. Each row shows whether the record was **added**, **removed**,
53
+ or **modified**. For a modified record, expand the row to see which properties changed.
54
+
55
+ Some changes break other records. An example is a field that you remove while other
56
+ steps still point at it. The change preview shows a banner above the diff for these
57
+ entries, so that you can look at them again before you publish.
58
+
59
+ The first publish of a workspace has no earlier snapshot to compare against. The
60
+ publish modal shows the contents of the workspace as the first publish, with no diff.
61
+
62
+ ## Unpublished changes
63
+
64
+ The workspace records whether anything changed since the last publish. The toolbar then
65
+ shows a warning badge. It counts a change to any of these:
66
+
67
+ - An experience or a feature flag.
68
+ - A step, a field, an action, or a condition.
69
+
70
+ ## Related
71
+
72
+ - [About workspaces and versions](/explanation/workspaces-and-versions) — why a draft and
73
+ a version are separate.
74
+ - [How to see a preview of a workspace](/how-to/preview-a-workspace)
75
+ - [How to publish a workspace](/how-to/publish-a-workspace)
76
+ - [How to archive or delete a workspace](/how-to/archive-or-delete-a-workspace)
@@ -1,4 +1,5 @@
1
1
  ---
2
+ type: reference
2
3
  layout: docs
3
4
  ---
4
5
 
@@ -44,7 +45,7 @@ GET /api/v1/projects/:projectId/experiences/:id/content
44
45
 
45
46
  ## An HTML asset comes back in the response
46
47
 
47
- A layout can have an [HTML asset](/content/asset-library) field. The value of that
48
+ A layout can have an [HTML asset](/reference/dashboard/content/asset-library) field. The value of that
48
49
  field arrives inside the response. The endpoint changes the reference to
49
50
  `{ id, content }`. There, `content` holds the HTML that you uploaded, as a string. It
50
51
  is `null` when the endpoint cannot resolve it:
@@ -85,6 +86,12 @@ curl https://api.picked.app/api/v1/projects/proj_123/experiences/exp_123/content
85
86
  }
86
87
  ```
87
88
 
88
- See [Project Config](/delivery-api/project-config) for the endpoint that links a step
89
- to an entry. See [Asset Library](/content/asset-library) for an HTML asset. See
90
- [Server Snapshot](/sdk/ssr/serialize) for how the SDK reads this content.
89
+ See [Project Config](/reference/delivery-api/project-config) for the endpoint that links a step
90
+ to an entry. See [Asset Library](/reference/dashboard/content/asset-library) for an HTML asset. See
91
+ [Server Snapshot](/reference/sdk/ssr/serialize) for how the SDK reads this content.
92
+
93
+ ## Related
94
+
95
+ - [About the two APIs](/explanation/the-two-apis)
96
+ - [Project config](/reference/delivery-api/project-config)
97
+ - [Preview, cache, and crawlers](/reference/delivery-api/preview-caching-crawling)