@aglyn/aglyn 1.0.0-beta.285 → 1.0.0-beta.288
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +11 -11
- package/src/lib/app-utils/account-acquisition.d.ts +14 -0
- package/src/lib/app-utils/account-acquisition.js +19 -0
- package/src/lib/app-utils/account-acquisition.js.map +1 -1
- package/src/lib/app-utils/api-plugins.d.ts +25 -0
- package/src/lib/app-utils/api-plugins.js +13 -0
- package/src/lib/app-utils/api-plugins.js.map +1 -1
- package/src/lib/app-utils/business-profile-values.d.ts +15 -3
- package/src/lib/app-utils/business-profile-values.js +19 -3
- package/src/lib/app-utils/business-profile-values.js.map +1 -1
- package/src/lib/app-utils/business-profile.d.ts +5 -3
- package/src/lib/app-utils/business-profile.js +2 -1
- package/src/lib/app-utils/business-profile.js.map +1 -1
- package/src/lib/app-utils/contacts.d.ts +11 -0
- package/src/lib/app-utils/contacts.js +18 -0
- package/src/lib/app-utils/contacts.js.map +1 -1
- package/src/lib/app-utils/docs-deflection.d.ts +1 -1
- package/src/lib/app-utils/docs-deflection.js +17 -0
- package/src/lib/app-utils/docs-deflection.js.map +1 -1
- package/src/lib/app-utils/docs-help-sections.generated.js +5 -2
- package/src/lib/app-utils/docs-help-sections.generated.js.map +1 -1
- package/src/lib/app-utils/docs-help.generated.d.ts +9 -9
- package/src/lib/app-utils/docs-help.generated.js +20 -0
- package/src/lib/app-utils/docs-help.generated.js.map +1 -1
- package/src/lib/app-utils/docs-index.generated.js +168 -63
- package/src/lib/app-utils/docs-index.generated.js.map +1 -1
- package/src/lib/app-utils/docs-retrieval.d.ts +17 -0
- package/src/lib/app-utils/docs-retrieval.js +28 -0
- package/src/lib/app-utils/docs-retrieval.js.map +1 -1
- package/src/lib/app-utils/host-naming.d.ts +2 -1
- package/src/lib/app-utils/host-naming.js +65 -2
- package/src/lib/app-utils/host-naming.js.map +1 -1
- package/src/lib/app-utils/host-permissions.d.ts +159 -3
- package/src/lib/app-utils/host-permissions.js +384 -12
- package/src/lib/app-utils/host-permissions.js.map +1 -1
- package/src/lib/app-utils/org-permission-editor.d.ts +128 -1
- package/src/lib/app-utils/org-permission-editor.js +176 -1
- package/src/lib/app-utils/org-permission-editor.js.map +1 -1
- package/src/lib/app-utils/org-permissions.d.ts +62 -1
- package/src/lib/app-utils/org-permissions.js +55 -5
- package/src/lib/app-utils/org-permissions.js.map +1 -1
- package/src/lib/app-utils/org-role-grants.d.ts +28 -0
- package/src/lib/app-utils/org-role-grants.js +180 -2
- package/src/lib/app-utils/org-role-grants.js.map +1 -1
- package/src/lib/app-utils/org-roles.js +11 -2
- package/src/lib/app-utils/org-roles.js.map +1 -1
- package/src/lib/app-utils/redirect-query.d.ts +39 -0
- package/src/lib/app-utils/redirect-query.js +57 -0
- package/src/lib/app-utils/redirect-query.js.map +1 -0
- package/src/lib/app-utils/release-flags.js +2 -2
- package/src/lib/app-utils/release-flags.js.map +1 -1
- package/src/lib/app-utils/site-starter-links.d.ts +42 -0
- package/src/lib/app-utils/site-starter-links.js +79 -0
- package/src/lib/app-utils/site-starter-links.js.map +1 -0
- package/src/lib/app-utils/site-starter-nodes.d.ts +91 -0
- package/src/lib/app-utils/site-starter-nodes.js +210 -0
- package/src/lib/app-utils/site-starter-nodes.js.map +1 -0
- package/src/lib/app-utils/site-starter-theme.d.ts +90 -0
- package/src/lib/app-utils/site-starter-theme.js +241 -0
- package/src/lib/app-utils/site-starter-theme.js.map +1 -0
- package/src/lib/app-utils/webhook-delivery.js +6 -1
- package/src/lib/app-utils/webhook-delivery.js.map +1 -1
- package/src/lib/foundation/definitions/organization.types.d.ts +12 -2
- package/src/lib/foundation/definitions/organization.types.js.map +1 -1
- package/src/lib/plugin-manager/first-party-plugins.generated.js +39 -0
- package/src/lib/plugin-manager/first-party-plugins.generated.js.map +1 -1
- package/src/lib/plugin-manager/plugin-closure-notices.d.ts +88 -0
- package/src/lib/plugin-manager/plugin-closure-notices.js +123 -0
- package/src/lib/plugin-manager/plugin-closure-notices.js.map +1 -0
- package/src/lib/plugin-manager/plugin-contact-capture.d.ts +15 -0
- package/src/lib/plugin-manager/plugin-contact-capture.js +24 -1
- package/src/lib/plugin-manager/plugin-contact-capture.js.map +1 -1
- package/src/lib/plugin-manager/plugin-customer-display-verifier.d.ts +77 -0
- package/src/lib/plugin-manager/plugin-customer-display-verifier.js +74 -0
- package/src/lib/plugin-manager/plugin-customer-display-verifier.js.map +1 -0
- package/src/lib/plugin-manager/plugin-customer-display.d.ts +135 -0
- package/src/lib/plugin-manager/plugin-customer-display.js +189 -0
- package/src/lib/plugin-manager/plugin-customer-display.js.map +1 -0
- package/src/lib/plugin-manager/plugin-entitlements.d.ts +59 -0
- package/src/lib/plugin-manager/plugin-entitlements.js +32 -3
- package/src/lib/plugin-manager/plugin-entitlements.js.map +1 -1
- package/src/lib/plugin-manager/plugin-events.d.ts +45 -0
- package/src/lib/plugin-manager/plugin-events.js.map +1 -1
- package/src/lib/plugin-manager/plugin-permissions.d.ts +74 -0
- package/src/lib/plugin-manager/plugin-permissions.js +91 -1
- package/src/lib/plugin-manager/plugin-permissions.js.map +1 -1
- package/src/lib/plugin-manager/plugin-site-starters.d.ts +7 -0
- package/src/lib/plugin-manager/plugin-site-starters.js.map +1 -1
- package/src/lib/plugin-manager/plugin-tax-return-sources.d.ts +87 -4
- package/src/lib/plugin-manager/plugin-tax-return-sources.js +155 -35
- package/src/lib/plugin-manager/plugin-tax-return-sources.js.map +1 -1
|
@@ -282,7 +282,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
282
282
|
title: 'AI jobs and activity',
|
|
283
283
|
heading: 'AI jobs in Assist',
|
|
284
284
|
anchor: '#ai-jobs-in-assist',
|
|
285
|
-
text: 'The AI jobs list at the top of the Assist panel follows the workspace\'s jobs wherever you are in the console. It opens on its own while a job is running or waiting for you, counts the jobs that need you and are running, and shows each job\'s steps, credits and plan, with Cancel while it runs.\nThe AI chip in the top bar, beside the notifications bell, appears while any job is running or waiting: AI · plan ready, AI · needs attention, AI · planning or AI · working. Choose it to open that job in the list.\nA notification arrives when a plan is ready, when a job finishes and when it stops. Turn them off under AI job needs you, AI job finished and AI job stopped in your notification settings.'
|
|
285
|
+
text: 'The AI jobs list at the top of the Assist panel follows the workspace\'s jobs wherever you are in the console. It opens on its own while a job is running or waiting for you, counts the jobs that need you and are running, and shows each job\'s steps, credits and plan, with Cancel while it runs.\nThe AI chip in the top bar, beside the notifications bell, appears while any job is running or waiting: AI · plan ready, AI · needs attention, AI · planning or AI · working. Choose it to open that job in the list.\nA notification arrives when a plan is ready, when a job finishes and when it stops. A plan still waiting for you a day after it was ready gets one reminder, and never another. Turn them off under AI job needs you, AI job finished and AI job stopped in your notification settings.'
|
|
286
286
|
},
|
|
287
287
|
{
|
|
288
288
|
path: '/ai/ai-jobs-and-activity',
|
|
@@ -394,7 +394,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
394
394
|
title: 'Build from Assist chat',
|
|
395
395
|
heading: 'The plan card',
|
|
396
396
|
anchor: '#the-plan-card',
|
|
397
|
-
text: 'The card shows Planning what to build on this site… while the plan is made, then the Proposed plan, one line per part:\n- Reuses something the site already has, and what for;\n- Creates something new, and why nothing you have will do;\n- Builds the page with its title, address, layout and sections;\n- any video player a page will carry, and what loading it costs your visitors.\nUnder the lines is the Estimated cost, such as About 106 credits (up to 650): about what builds like it cost, and the most it can cost. What the build costs is what its steps spend. On the Free plan the card also says how many free credits you have left this month. If you asked for the new pages to go live, a Publish the new pages when they are built box is there too, unticked until you tick it.\nIf the build will likely use more than your credits left, the card says so instead of offering Confirm plan, and gives you three choices: Build what fits (it builds what your credits cover and pauses, then Resume carries on), Build the home page first (only the home page and what it needs), or Upgrade. See Before a job starts.\nNothing is built while the card waits. The plan follows the building rules, and a plan that breaks them, or asks for more than your plan includes, is stopped before you are asked to confirm it.'
|
|
397
|
+
text: 'The card shows Planning what to build on this site… while the plan is made, then the Proposed plan, one line per part:\n- Reuses something the site already has, and what for;\n- Creates something new, and why nothing you have will do;\n- Builds the page with its title, address, layout and sections;\n- any video player a page will carry, and what loading it costs your visitors;\n- Leaves out anything you asked for that this build can\'t make, such as a page whose purpose is a feature your site doesn\'t have, and why. No page in the plan sends visitors to it.\nUnder the lines is the Estimated cost, such as About 106 credits (up to 650): about what builds like it cost, and the most it can cost. What the build costs is what its steps spend. On the Free plan the card also says how many free credits you have left this month. If you asked for the new pages to go live, a Publish the new pages when they are built box is there too, unticked until you tick it.\nIf the build will likely use more than your credits left, the card says so instead of offering Confirm plan, and gives you three choices: Build what fits (it builds what your credits cover and pauses, then Resume carries on), Build the home page first (only the home page and what it needs), or Upgrade. See Before a job starts.\nNothing is built while the card waits. The plan follows the building rules, and a plan that breaks them, or asks for more than your plan includes, is stopped before you are asked to confirm it.'
|
|
398
398
|
},
|
|
399
399
|
{
|
|
400
400
|
path: '/ai/assist-builds',
|
|
@@ -408,7 +408,14 @@ export const DOCS_SECTION_INDEX = [
|
|
|
408
408
|
title: 'Build from Assist chat',
|
|
409
409
|
heading: 'One job, many parts',
|
|
410
410
|
anchor: '#one-job-many-parts',
|
|
411
|
-
text: 'Everything in the plan is built by one job, each part by the same builder that makes it on its own page, in the order the parts need each other: the layout and the form before the page that places them.\n- Each part stands on its own. A part that fails does not undo the others. What depends on it is built without it, or not built, and the card says which.\n- Everything is a draft. Pages are unpublished drafts unless you ticked the publish box. Products have no photo and the price you stated, if any. Booking services and funnels are drafts to activate. Overlays and automations are switched off, A/B tests are stopped, and campaigns are unsent and aimed at nobody. The exceptions are a redirect, CRM setup, store setup, site settings, tracking tags, privacy changes and media library changes: a redirect rule, a CRM pipeline, custom field or picklist value, the shipping, pickup, delivery and tax settings, the site\'s settings, its tracking tags, who can see it and a file\'s folder, tags, name and alt text have no draft, so they work as soon as the build saves them, as they do when you save them yourself. The plan card lists each one before you confirm, and Aglyn AI uses only the prices and rates you state.\n- Names are your own. A new variable or function never takes a name the site already uses.\n- Settings are saved live. A change to the site\'s settings has no draft: like a save in Settings, it reaches your live site as soon as that part is built. Making the site Spanish sets its language; it does not translate the pages. A value that cannot be used, such as an email address that is not one, is named on
|
|
411
|
+
text: 'Everything in the plan is built by one job, each part by the same builder that makes it on its own page, in the order the parts need each other: the layout and the form before the page that places them.\n- Each part stands on its own. A part that fails does not undo the others. What depends on it is built without it, or not built, and the card says which.\n- Everything is a draft. Pages are unpublished drafts unless you ticked the publish box. Products have no photo and the price you stated, if any. Booking services and funnels are drafts to activate. Overlays and automations are switched off, A/B tests are stopped, and campaigns are unsent and aimed at nobody. The exceptions are a redirect, CRM setup, store setup, site settings, tracking tags, privacy changes and media library changes: a redirect rule, a CRM pipeline, custom field or picklist value, the shipping, pickup, delivery and tax settings, the site\'s settings, its tracking tags, who can see it and a file\'s folder, tags, name and alt text have no draft, so they work as soon as the build saves them, as they do when you save them yourself. The plan card lists each one before you confirm, and Aglyn AI uses only the prices and rates you state.\n- Names are your own. A new variable or function never takes a name the site already uses.\n- Photos fit your business. A page\'s pictures are searched for with words from the page and from the site\'s business profile: what the business does, its name and who it is for.\n- Settings are saved live. A change to the site\'s settings has no draft: like a save in Settings, it reaches your live site as soon as that part is built. Making the site Spanish sets its language; it does not translate the pages. A value that cannot be used, such as an email address that is not one, is named on th'
|
|
412
|
+
},
|
|
413
|
+
{
|
|
414
|
+
path: '/ai/assist-builds',
|
|
415
|
+
title: 'Build from Assist chat',
|
|
416
|
+
heading: 'What a build can\'t do yet',
|
|
417
|
+
anchor: '#what-it-cannot-do',
|
|
418
|
+
text: 'Assist says so when you ask for one of these, and plans the rest:\n- Choose the photos on a page. A build picks each picture itself. To use one of your own, add it to the site\'s media library and place it on the page in the Besigner with Browse media.\n- Translate pages. Making the site Spanish sets its language; the pages keep their words. See Multilingual.\n- Lay a site out right to left. Pages are laid out left to right, also in a right-to-left language such as Arabic or Hebrew.\n- Take files in the chat. Assist reads text only, so it cannot receive a file, an image or a screenshot. Upload it to the site\'s media library instead. A build can then use an image there as the site\'s logo, favicon or social image.'
|
|
412
419
|
},
|
|
413
420
|
{
|
|
414
421
|
path: '/ai/assist-builds',
|
|
@@ -583,7 +590,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
583
590
|
title: 'Business profile',
|
|
584
591
|
heading: '',
|
|
585
592
|
anchor: '',
|
|
586
|
-
text: 'Business profile\nEvery AI job for a site starts from what the site already knows about the business: its name, what it does, its services, the area it serves, who it is for, its tone of voice, and the contact details you entered. Aglyn AI writes for this business instead of guessing, and it never makes up a way to reach you.'
|
|
593
|
+
text: 'Business profile\nEvery AI job for a site starts from what the site already knows about the business: its name, what it does, its services, the area it serves, who it is for, its tone of voice, the year it was founded, and the contact details you entered. Aglyn AI writes for this business instead of guessing, and it never makes up a way to reach you.'
|
|
587
594
|
},
|
|
588
595
|
{
|
|
589
596
|
path: '/ai/business-profile',
|
|
@@ -597,21 +604,21 @@ export const DOCS_SECTION_INDEX = [
|
|
|
597
604
|
title: 'Business profile',
|
|
598
605
|
heading: 'The Business profile card',
|
|
599
606
|
anchor: '#the-business-profile-card',
|
|
600
|
-
text: 'The Business profile card holds what Aglyn AI writes for:\n- What the business does, in a sentence or two;\n- Services, one per line, up to 12;\n- Who it is for and Area served;\n- Tone of voice: Friendly and warm, Professional and clear, Playful and upbeat, Premium and refined, or Plain and direct, and Notes on tone for anything else.\nAglyn AI reads it on every job for the site and never replaces what you write here.'
|
|
607
|
+
text: 'The Business profile card holds what Aglyn AI writes for:\n- What the business does, in a sentence or two;\n- Services, one per line, up to 12;\n- Who it is for and Area served;\n- Tone of voice: Friendly and warm, Professional and clear, Playful and upbeat, Premium and refined, or Plain and direct, and Notes on tone for anything else;\n- Year founded, as four digits, such as 2015. An About page or a "Since" line uses it instead of leaving a gap where the year would go.\nAglyn AI reads it on every job for the site and never replaces what you write here.'
|
|
601
608
|
},
|
|
602
609
|
{
|
|
603
610
|
path: '/ai/business-profile',
|
|
604
611
|
title: 'Business profile',
|
|
605
612
|
heading: 'Where the values come from',
|
|
606
613
|
anchor: '#where-the-values-come-from',
|
|
607
|
-
text: 'When a site is started with Aglyn AI, the profile is filled from your answers to the guided start, and from what the plan wrote about the business. Each field says where its value came from:\n- Your answers when the site was started, or Suggested by Aglyn AI: a suggestion. Edit it and it becomes yours.\n- An empty field that Aglyn AI still has a value for says so: the description in your SEO settings, or the workspace\'s default.\nWhat you type is never replaced. A later job can fill an empty field, but it never overwrites one you wrote, and a field you cleared stays clear.\nWorkspace defaults {#workspace-defaults}\nSettings → Profile has a Business profile defaults card. A site uses those values wherever its own profile is empty, so a workspace that runs many sites for one business writes them once. Only managers can change them.'
|
|
614
|
+
text: 'When a site is started with Aglyn AI, the profile is filled from your answers to the guided start, including the Year founded from More details, and from what the plan wrote about the business. Each field says where its value came from:\n- Your answers when the site was started, or Suggested by Aglyn AI: a suggestion. Edit it and it becomes yours.\n- An empty field that Aglyn AI still has a value for says so: the description in your SEO settings, or the workspace\'s default.\nWhat you type is never replaced. A later job can fill an empty field, but it never overwrites one you wrote, and a field you cleared stays clear.\nWorkspace defaults {#workspace-defaults}\nSettings → Profile has a Business profile defaults card. A site uses those values wherever its own profile is empty, so a workspace that runs many sites for one business writes them once. Only managers can change them. The year founded is set on each site\'s own card.'
|
|
608
615
|
},
|
|
609
616
|
{
|
|
610
617
|
path: '/ai/business-profile',
|
|
611
618
|
title: 'Business profile',
|
|
612
619
|
heading: 'Contact details are never invented',
|
|
613
620
|
anchor: '#contact-details-are-never-invented',
|
|
614
|
-
text: 'The name, business type, email, phone, address, opening hours and social profiles come only from Setup → Basic details and Setup → SEO, exactly as entered. A detail you have not entered reads Not entered, and Aglyn AI writes
|
|
621
|
+
text: 'The name, business type, email, phone, address, opening hours and social profiles come only from Setup → Basic details and Setup → SEO, exactly as entered. A detail you have not entered reads Not entered, and Aglyn AI writes the sentence without it instead of making one up or leaving a gap for you to fill. The same goes for prices, reviews and testimonials.'
|
|
615
622
|
},
|
|
616
623
|
{
|
|
617
624
|
path: '/ai/business-profile',
|
|
@@ -877,7 +884,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
877
884
|
title: 'Generate a form from a description',
|
|
878
885
|
heading: 'What a form cannot collect',
|
|
879
886
|
anchor: '#what-a-form-cannot-collect',
|
|
880
|
-
text: 'A form collects text, choices and ratings. When your brief asks for something else, such as a file or photo upload, a signature or a payment, the form leaves it out and the job says so beside Open draft. For a roofing quote request that asks for photos of the damage, for example, the form asks for a written description of the damage instead.
|
|
887
|
+
text: 'A form collects text, choices and ratings. When your brief asks for something else, such as a file or photo upload, a signature or a payment, the form leaves it out and the job says so beside Open draft. For a roofing quote request that asks for photos of the damage, for example, the form asks for a written description of the damage instead. A fact the brief did not give is left out of the form. If the form still shows one in square brackets, such as a label naming your studio, the job lists it for you to fill in before the form goes on a page.'
|
|
881
888
|
},
|
|
882
889
|
{
|
|
883
890
|
path: '/ai/generate-a-form',
|
|
@@ -1017,7 +1024,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
1017
1024
|
title: 'How Aglyn AI builds',
|
|
1018
1025
|
heading: 'Finding your AI jobs',
|
|
1019
1026
|
anchor: '#finding-your-ai-jobs',
|
|
1020
|
-
text: 'You never have to remember where a job went:\n- The window that started it shows where it stands as it happens: queued, planning, plan ready, building, then done or stopped. Once it is done, its first button opens what it built, such as your site\'s draft pages or the draft page in the editor.\n- Open AI jobs, in that window, opens the Assist panel on its AI jobs list with your job highlighted, so you can close the window and follow it there.\n- The AI chip in the top bar, beside the notifications bell, is there while any of your workspace\'s jobs is running or waiting for you. It reads AI · plan ready when a plan is waiting for you to confirm it, AI · needs attention when a job stopped for something only you can change, and AI · planning or AI · working while jobs run. Choose it to open AI jobs on that job.\n- The Assist button at the bottom right shows a badge while a job runs, and a count in the warning color while one needs you.\n- A notification arrives when a job\'s plan is ready for you to confirm, when it finishes and when it stops. It opens the job, or what it built. You can turn these off under AI job needs you, AI job finished and AI job stopped in your notification settings.\n- A site\'s AI jobs page lists every job that worked on that site, newest first, with its kind, its brief, where it stands and the credits it used; each opens its own page. AI jobs in the trail above a job\'s page opens it.\nAI jobs opens on its own while anything is running or waiting for you, and lists each job with where it stands.'
|
|
1027
|
+
text: 'You never have to remember where a job went:\n- The window that started it shows where it stands as it happens: queued, planning, plan ready, building, then done or stopped. Once it is done, its first button opens what it built, such as your site\'s draft pages or the draft page in the editor.\n- Open AI jobs, in that window, opens the Assist panel on its AI jobs list with your job highlighted, so you can close the window and follow it there.\n- The AI chip in the top bar, beside the notifications bell, is there while any of your workspace\'s jobs is running or waiting for you. It reads AI · plan ready when a plan is waiting for you to confirm it, AI · needs attention when a job stopped for something only you can change, and AI · planning or AI · working while jobs run. Choose it to open AI jobs on that job.\n- The Assist button at the bottom right shows a badge while a job runs, and a count in the warning color while one needs you.\n- A notification arrives when a job\'s plan is ready for you to confirm, when it finishes and when it stops. It opens the job, or what it built. A plan still waiting a day after it was ready gets one reminder, and never another. You can turn these off under AI job needs you, AI job finished and AI job stopped in your notification settings.\n- A site\'s AI jobs page lists every job that worked on that site, newest first, with its kind, its brief, where it stands and the credits it used; each opens its own page. AI jobs in the trail above a job\'s page opens it.\nAI jobs opens on its own while anything is running or waiting for you, and lists each job with where it stands.'
|
|
1021
1028
|
},
|
|
1022
1029
|
{
|
|
1023
1030
|
path: '/ai/how-aglyn-ai-builds',
|
|
@@ -1031,7 +1038,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
1031
1038
|
title: 'How Aglyn AI builds',
|
|
1032
1039
|
heading: 'When an answer breaks a rule',
|
|
1033
1040
|
anchor: '#when-an-answer-breaks-a-rule',
|
|
1034
|
-
text: 'A plan or document that breaks a rule is not used. The AI is asked once more and told which rules it broke. If the second answer still breaks one, the job stops and shows you which rules. Choose Try again to ask once more, or cancel the job. Every answer counts toward your AI usage, including the ones that were not used.'
|
|
1041
|
+
text: 'A plan or document that breaks a rule is not used. The AI is asked once more and told which rules it broke. If the second answer still breaks one, the job stops and shows you which rules. A button or link the second answer leaves with nowhere to go does not stop the job: it is left out, as rule 10 says. Choose Try again to ask once more, or cancel the job. Every answer counts toward your AI usage, including the ones that were not used.'
|
|
1035
1042
|
},
|
|
1036
1043
|
{
|
|
1037
1044
|
path: '/ai/how-aglyn-ai-builds',
|
|
@@ -1199,7 +1206,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
1199
1206
|
title: 'Aglyn AI: the AI website builder',
|
|
1200
1207
|
heading: 'Who can use it',
|
|
1201
1208
|
anchor: '#who-can-use-it',
|
|
1202
|
-
text: 'Aglyn AI is a permission as well as a plan feature. Organization members hold it through the Use AI assistance and Generate with AI keys on their role (owners, admins and editors by default; viewers not), and site collaborators through the
|
|
1209
|
+
text: 'Aglyn AI is a permission as well as a plan feature. Organization members hold it through the Use AI assistance and Generate with AI keys on their role (owners, admins and editors by default; viewers not), and site collaborators through the same two permissions, set per site under Permissions on the site\'s Users card (see AI access for collaborators). A member whose role lacks the key is refused with a message naming it — see Custom roles & permissions.\nNobody can raise their own allotment.'
|
|
1203
1210
|
},
|
|
1204
1211
|
{
|
|
1205
1212
|
path: '/ai/overview',
|
|
@@ -1374,7 +1381,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
1374
1381
|
title: 'Start a new site with AI',
|
|
1375
1382
|
heading: 'Style',
|
|
1376
1383
|
anchor: '#style',
|
|
1377
|
-
text: 'The Style step shows each style as a card with a picture: an example home page of that kind of site, drawn in its style, each with a photo. A photographer\'s opens on a gallery, a café\'s on its heading centered over a photo of the café with its menu under it, an online store\'s on two photos of what it sells, a blog\'s on a centered heading above a wide photo, an events site\'s on its dates beside two photos of the day and a real estate site\'s on a card over a photo of a home, so you can see each style\'s colors, fonts, buttons and corners, and the shape of its pages, before you pick. The picked card is outlined in color and carries a check. See each style\'s layout. Pick for me comes first and is chosen unless you choose another. It names the style your first answer suggests, such as From your answer: Home services & trades. The style decides how the site looks and which pages it usually has: an online store, a portfolio, a restaurant, a blog and so on. Each site gets its own variation, so two sites with the same style still look different, and yours will not match the picture exactly. See Looks and themes for AI sites.\nMore details here: a Brand color, picked from the colors shown. It becomes your site\'s main color, kept readable everywhere it is used. Let the style choose leaves it to the style.\nSites you like {#sites-you-like}\nSites you like
|
|
1384
|
+
text: 'The Style step shows each style as a card with a picture: an example home page of that kind of site, drawn in its style, each with a photo. A photographer\'s opens on a gallery, a café\'s on its heading centered over a photo of the café with its menu under it, an online store\'s on two photos of what it sells, a blog\'s on a centered heading above a wide photo, an events site\'s on its dates beside two photos of the day and a real estate site\'s on a card over a photo of a home, so you can see each style\'s colors, fonts, buttons and corners, and the shape of its pages, before you pick. The picked card is outlined in color and carries a check. See each style\'s layout. Pick for me comes first and is chosen unless you choose another. It names the style your first answer suggests, such as From your answer: Home services & trades. The style decides how the site looks and which pages it usually has: an online store, a portfolio, a restaurant, a blog and so on. Each site gets its own variation, so two sites with the same style still look different, and yours will not match the picture exactly. See Looks and themes for AI sites.\nMore details here: a Brand color, picked from the colors shown. It becomes your site\'s main color, kept readable everywhere it is used. Let the style choose leaves it to the style.\nSites you like {#sites-you-like}\nSites you like is an optional block under the style cards. Type the address of a website whose look you like, such as https://example.com, in Site 1. A paid plan can name up to three sites. On the Free plan, Site 2 and Site 3 are shown but cannot be used, with the reason and an Upgrade link.\nAglyn AI takes only how those sites are laid out and styled: the order of their sections, their spacing and header, their colors, the mood of their type, their '
|
|
1378
1385
|
},
|
|
1379
1386
|
{
|
|
1380
1387
|
path: '/ai/start-with-ai',
|
|
@@ -1402,7 +1409,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
1402
1409
|
title: 'Start a new site with AI',
|
|
1403
1410
|
heading: 'What gets built',
|
|
1404
1411
|
anchor: '#what-gets-built',
|
|
1405
|
-
text: 'Plan my site starts the job straight away. A guided start has no plan to approve. It builds, in this order:\n1. A look: a base theme, colors, fonts and the style of buttons, cards and forms, made for your kind of site. See Looks and themes.\n2. A header and footer, as the layout every page sits in, with a link to each page. The footer shows the phone and email you gave, as links that call and write.\n3. A contact form, saved on the Forms page, routed the way you chose, and placed on the page that needs it.\n4. Your first posts or products, when the site is a blog or, on paid plans, a store. See A store from the start and A blog from the start. Your first events, when your business holds them and your workspace has the Event Calendar add-on. See Events from the start.\n5. Your pages, each with its sections, its address and its own search title and description. A home page opens with a hero and has several bands below it, such as services, about, social proof and a closing call to action. Photos come from your media library or a stock photo, and every photo gets a description for screen readers and search engines. The page with your contact form also shows the phone and email you gave. A list a page shows, such as your packages or your questions and answers, is kept as a dataset on plans that include datasets. It is shared with this site only, so you edit it on the Data page, and it is deleted with the site if you delete the site
|
|
1412
|
+
text: 'Plan my site starts the job straight away. A guided start has no plan to approve. It builds, in this order:\n1. A look: a base theme, colors, fonts and the style of buttons, cards and forms, made for your kind of site. See Looks and themes.\n2. A header and footer, as the layout every page sits in, with a link to each page. The footer shows the phone and email you gave, as links that call and write.\n3. A contact form, saved on the Forms page, routed the way you chose, and placed on the page that needs it.\n4. Your first posts or products, when the site is a blog or, on paid plans, a store. See A store from the start and A blog from the start. Your first events, when your business holds them and your workspace has the Event Calendar add-on. See Events from the start.\n5. Your pages, each with its sections, its address and its own search title and description. A home page opens with a hero and has several bands below it, such as services, about, social proof and a closing call to action. Photos come from your media library or a stock photo, and every photo gets a description for screen readers and search engines. The page with your contact form also shows the phone and email you gave. A list a page shows, such as your packages or your questions and answers, is kept as a dataset on plans that include datasets. It is shared with this site only, so you edit it on the Data page, and it is deleted with the site if you delete the site. When your answers give no entries for a list, such as a race schedule with no dates, the list starts with sample rows that look complete, so the page does too. A dated list\'s samples fall on weekends over the coming season, and a list of past results gets past dates, so the two never show the same rows. On the Data page each sample row is marked Samp'
|
|
1406
1413
|
},
|
|
1407
1414
|
{
|
|
1408
1415
|
path: '/ai/start-with-ai',
|
|
@@ -1451,7 +1458,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
1451
1458
|
title: 'Start a new site with AI',
|
|
1452
1459
|
heading: 'A store from the start',
|
|
1453
1460
|
anchor: '#a-store-from-the-start',
|
|
1454
|
-
text: 'On a paid plan, a site with the Online store style also gets three to six products, each with a description and a photo, and a Cart button in the header. Each product gets a suggested price for what it is, so it can be bought; review or change it, and add your own photo, in Products. A product without a price shows Price coming soon on the store, with no Add to cart, until you give it one. See Product copy and catalogs with AI.\nIt also gets the pages every store needs, ready to use and published with the rest of the site. They do not count toward the pages you asked for:\n- Your account at /account, where shoppers sign in or create an account, see their orders with status and tracking, keep their addresses, and find the items they saved with Save on a product page. User accounts are turned on for the site.\n- Your cart at /cart, with checkout.\nThese two are set to Unlisted, so search engines don\'t index them. The policy pages below are listed like the rest of your site.\n- Shipping & returns, Privacy policy and Terms of sale, written as drafts. The facts only you know, such as your return
|
|
1461
|
+
text: 'On a paid plan, a site with the Online store style also gets three to six products, each with a description and a photo, and a Cart button in the header. Each product gets a suggested price for what it is, so it can be bought; review or change it, and add your own photo, in Products. A product without a price shows Price coming soon on the store, with no Add to cart, until you give it one. See Product copy and catalogs with AI.\nWhen you describe what you sell as kinds of product, such as "OEM and aftermarket parts, tires, riding gear", and name no product, the first products are samples: a plain item of each kind, such as Knobby dirt bike tire, at a suggested price. Products marks each one Sample, and its editor asks you to replace it with your own product. Saving your changes to a sample makes it yours. Your store shows them as ordinary products, never with the word "sample". When you name the products you sell, those are the ones made, as before.\nThe home page\'s Newsletter sign-up band is the store\'s own email sign-up field, which adds subscribers to your contacts. Your contact form stays on the contact page.\nIt also gets the pages every store needs, ready to use and published with the rest of the site. They do not count toward the pages you asked for:\n- Your account at /account, where shoppers sign in or create an account, see their orders with status and tracking, keep their addresses, and find the items they saved with Save on a product page. User accounts are turned on for the site.\n- Your cart at /cart, with checkout.\nThese two are set to Unlisted, so search engines don\'t index them. The policy pages below are listed like the rest of your site.\n- Shipping & returns, Privacy policy and Terms of sale, written as drafts. The facts only you know, such as your return '
|
|
1455
1462
|
},
|
|
1456
1463
|
{
|
|
1457
1464
|
path: '/ai/start-with-ai',
|
|
@@ -1500,7 +1507,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
1500
1507
|
title: 'Stock photos in AI sites',
|
|
1501
1508
|
heading: 'Where the photos come from',
|
|
1502
1509
|
anchor: '#where-the-photos-come-from',
|
|
1503
|
-
text: 'Photos come from Pixabay, a library of free photos. The job searches it with words from your page and your kind of business, such as ceramic serving bowl for a potter\'s work card or dog grooming salon for a groomer\'s hero, and picks a photo that fits the space.\nA picture of a thing only takes a photo that shows that thing in your line of work: a potter\'s bowl is never filled with a bowl of fruit or a bird at a feeder. When nothing shows the thing itself, the space gets a photo of your craft instead, such as handmade ceramics. One start never uses the same photo twice.\
|
|
1510
|
+
text: 'Photos come from Pixabay, a library of free photos. The job searches it with words from your page and your kind of business, such as ceramic serving bowl for a potter\'s work card or dog grooming salon for a groomer\'s hero, and picks a photo that fits the space.\nA picture of a thing only takes a photo that shows that thing in your line of work: a potter\'s bowl is never filled with a bowl of fruit or a bird at a feeder. When nothing shows the thing itself, the space gets a photo of your craft instead, such as handmade ceramics. One start never uses the same photo twice.\nPhotos are searched for your kind of business first, as your business type describes it: a dirt bike repair shop\'s pictures show dirt bikes and motorcycles, never a bicycle or a race car, and a taco trailer that also takes catering requests shows tacos, not a buffet. A photo tagged with a brand, such as a car or motorcycle maker, is never used unless your business type names that brand. Brands are recognized by the words a photo is tagged with, so look over your pictures for a logo before you publish. A band of pictures that finds no fitting photo takes photos the start already copied for your site, and when there are none, the band is left out of the page rather than shown as captions with no pictures.\nWhen a photo cannot be copied into your library, for example because Pixabay is busy and asks to wait, the job waits and tries again. If it still cannot, the space takes another photo the same job already copied for your site, chosen to suit the space: one the page does not show yet where there is one, and never the same one as the picture beside it. On a new site, a page never shows a photo twice this way.\nA space with no such photo yet holds a starter photo for a moment. Once every page is built, and befo'
|
|
1504
1511
|
},
|
|
1505
1512
|
{
|
|
1506
1513
|
path: '/ai/stock-photos',
|
|
@@ -1920,7 +1927,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
1920
1927
|
title: 'Element catalog',
|
|
1921
1928
|
heading: 'Input',
|
|
1922
1929
|
anchor: '#input',
|
|
1923
|
-
text: 'Buttons and widgets.\nA Button\'s Type decides what it does inside a Form: Submit sends the form (and the Form\'s built-in button steps aside, so the one you designed is the only one), Reset clears it, and Button does nothing on its own, for buttons that run an interaction. A Button that links to a page or URL ignores its Type.\nThe calculator elements belong to no built-in feature. They come from Calculators, a plugin you install from the marketplace, and appear under Input once it is installed:\n| Element | What it\'s for |\n| Function Widget | Runs one of your no-code functions on the live site and shows what it returns — a quote calculator, a shipping estimate, a score. Function name is the function from the site\'s Functions card; the widget draws an input per parameter — a number box, a switch or a list, under the label and starting value the function sets — a run button you can relabel, and the result under a Result label prefix. Results to show lists several named results instead of one, one per line as name | Label, and Update as the visitor types recomputes on every change, so there is no button. The function runs in the visitor\'s browser: its definition, and the site variables it names, are part of the page, so keep anything private out of both. |\n| Calculator | A container bound to one of your functions. Everything inside it reads that function: place Calculator Inputs and Calculator Results anywhere in it, between whatever stacks, grids and text the design calls for. Function name is the function from the site\'s Functions card. The results are always current; there is no run button. |\n| Calculator Input | Asks one parameter of the Calculator it sits in. Ask as picks the control: Automatic follows
|
|
1930
|
+
text: 'Buttons and widgets.\nA Button\'s Type decides what it does inside a Form: Submit sends the form (and the Form\'s built-in button steps aside, so the one you designed is the only one), Reset clears it, and Button does nothing on its own, for buttons that run an interaction. A Button that links to a page or URL ignores its Type. For a button that opens a WhatsApp chat, see Add a WhatsApp button.\nThe calculator elements belong to no built-in feature. They come from Calculators, a plugin you install from the marketplace, and appear under Input once it is installed:\n| Element | What it\'s for |\n| Function Widget | Runs one of your no-code functions on the live site and shows what it returns — a quote calculator, a shipping estimate, a score. Function name is the function from the site\'s Functions card; the widget draws an input per parameter — a number box, a switch or a list, under the label and starting value the function sets — a run button you can relabel, and the result under a Result label prefix. Results to show lists several named results instead of one, one per line as name | Label, and Update as the visitor types recomputes on every change, so there is no button. The function runs in the visitor\'s browser: its definition, and the site variables it names, are part of the page, so keep anything private out of both. |\n| Calculator | A container bound to one of your functions. Everything inside it reads that function: place Calculator Inputs and Calculator Results anywhere in it, between whatever stacks, grids and text the design calls for. Function name is the function from the site\'s Functions card. The results are always current; there is no run button. |\n| Calculator Input | Asks one parameter of the Calculator it sits in. Ask as picks the control: Automatic follows t'
|
|
1924
1931
|
},
|
|
1925
1932
|
{
|
|
1926
1933
|
path: '/building-sites/besigner/element-catalog',
|
|
@@ -2762,6 +2769,48 @@ export const DOCS_SECTION_INDEX = [
|
|
|
2762
2769
|
anchor: '#related',
|
|
2763
2770
|
text: '- Element catalog — every other element in the drawer\n- SEO overview — how a page describes itself to search engines\n- The Besigner'
|
|
2764
2771
|
},
|
|
2772
|
+
{
|
|
2773
|
+
path: '/building-sites/besigner/whatsapp-button',
|
|
2774
|
+
title: 'Add a WhatsApp button',
|
|
2775
|
+
heading: '',
|
|
2776
|
+
anchor: '',
|
|
2777
|
+
text: 'Add a WhatsApp button\nA WhatsApp button opens a chat with your business number in WhatsApp, on the visitor\'s phone or computer. In Aglyn it is an ordinary Button that links to WhatsApp\'s chat address, wa.me, with the WhatsApp icon in front of its label. You set all of it with the Button\'s own fields.'
|
|
2778
|
+
},
|
|
2779
|
+
{
|
|
2780
|
+
path: '/building-sites/besigner/whatsapp-button',
|
|
2781
|
+
title: 'Add a WhatsApp button',
|
|
2782
|
+
heading: 'Before you start',
|
|
2783
|
+
anchor: '#before-you-start',
|
|
2784
|
+
text: 'You need the number your business uses on WhatsApp, written the way WhatsApp\'s chat address wants it: the country code and then the number, digits only. Leave out the +, spaces, dashes and brackets. In many countries you dial a 0 before a number at home; leave that out too. For example, +1 (555) 555-0123 becomes 15555550123.'
|
|
2785
|
+
},
|
|
2786
|
+
{
|
|
2787
|
+
path: '/building-sites/besigner/whatsapp-button',
|
|
2788
|
+
title: 'Add a WhatsApp button',
|
|
2789
|
+
heading: '1. Add the button',
|
|
2790
|
+
anchor: '#1-add-the-button',
|
|
2791
|
+
text: 'Open the page in the Besigner and add a Button. It is in the Input group of the Elements tab, or type button in Search elements. Place it where visitors look for a way to reach you: the header, beside your contact details, or the footer.'
|
|
2792
|
+
},
|
|
2793
|
+
{
|
|
2794
|
+
path: '/building-sites/besigner/whatsapp-button',
|
|
2795
|
+
title: 'Add a WhatsApp button',
|
|
2796
|
+
heading: '2. Fill in its fields',
|
|
2797
|
+
anchor: '#2-fill-in-its-fields',
|
|
2798
|
+
text: 'Select the button and open its Attributes tab:\n| Field | What to enter |\n| Text | The label, such as Chat on WhatsApp. You can also type it on the canvas. |\n| Variant | Contained for a filled button that stands out. |\n| Theme color | Any of your theme\'s colors. |\n| External URL | https://wa.me/ and then your number, such as https://wa.me/15555550123. Leave Link to page at None (use external URL): a page picked there wins over this address. |\n| Open link in | New tab, so your site stays open while the visitor chats. |\n| Start icon | The WhatsApp icon. See Pick the WhatsApp icon. |\nPick the WhatsApp icon {#pick-the-whatsapp-icon}\nUnder Start icon, click the icon to open the picker. Type whatsapp in Search icons..., click the WhatsApp icon, and press Choose. The icon now shows before the label. To put it after the label instead, use End icon.\nStart the chat with a message {#prefilled-message}\nTo have a message already typed when the chat opens, add ?text= and the message to the end of the address, with %20 for each space:\nhttps://wa.me/15555550123?text=Hello%20from%20your%20website\nWhatsApp puts the message in the chat box, and the visitor sends it.\nAnnounce it as a link {#render-as-link}\nThe button only opens a chat, so you can set Render as to Link (button styling). It looks the same, and screen readers announce it as the link it is.'
|
|
2799
|
+
},
|
|
2800
|
+
{
|
|
2801
|
+
path: '/building-sites/besigner/whatsapp-button',
|
|
2802
|
+
title: 'Add a WhatsApp button',
|
|
2803
|
+
heading: '3. Publish and try it',
|
|
2804
|
+
anchor: '#3-publish-and-try-it',
|
|
2805
|
+
text: 'A button doesn\'t follow its link in the Besigner or in preview, so clicking it there does nothing. Publish the page, open it on your site and click the button: WhatsApp opens a chat with your number.\nA new Free workspace For a Free workspace\'s first 14 days, links to other websites go through a short "You\'re leaving" page first, and the WhatsApp link does too. See Links on a new Free site.'
|
|
2806
|
+
},
|
|
2807
|
+
{
|
|
2808
|
+
path: '/building-sites/besigner/whatsapp-button',
|
|
2809
|
+
title: 'Add a WhatsApp button',
|
|
2810
|
+
heading: 'Related',
|
|
2811
|
+
anchor: '#related',
|
|
2812
|
+
text: '- Where a link opens: the Open link in choices\n- Live chat: a chat window on every page, from your Tidio or LiveChat account'
|
|
2813
|
+
},
|
|
2765
2814
|
{
|
|
2766
2815
|
path: '/building-sites/bindings/overview',
|
|
2767
2816
|
title: 'Bindings, Variables & Functions',
|
|
@@ -2970,7 +3019,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
2970
3019
|
title: 'Manage your domains',
|
|
2971
3020
|
heading: '',
|
|
2972
3021
|
anchor: '',
|
|
2973
|
-
text: 'Manage your domains\nYour workspace\'s Domains page lists every domain it holds through Aglyn: the ones connected to a site, the ones that aren\'t connected yet, and the ones on their way. Open it from your workspace\'s menu.
|
|
3022
|
+
text: 'Manage your domains\nYour workspace\'s Domains page lists every domain it holds through Aglyn: the ones connected to a site, the ones that aren\'t connected yet, and the ones on their way. Open it from your workspace\'s menu. Opening it takes the Manage the workspace\'s domains permission, which workspace owners and admins have.\nPlan availability Starter and above for buying, transferring in and connecting domains. On a plan without domains, the page still lists the domains you hold, and you can still turn auto-renew on or off, edit their contacts and DNS records, or move them to another registrar.'
|
|
2974
3023
|
},
|
|
2975
3024
|
{
|
|
2976
3025
|
path: '/building-sites/custom-domains/manage-domains',
|
|
@@ -3271,7 +3320,14 @@ export const DOCS_SECTION_INDEX = [
|
|
|
3271
3320
|
title: 'Multilingual',
|
|
3272
3321
|
heading: 'Language switcher',
|
|
3273
3322
|
anchor: '#language-switcher',
|
|
3274
|
-
text: 'Add a language switcher so visitors can move between locales themselves
|
|
3323
|
+
text: 'Add a language switcher so visitors can move between locales themselves.'
|
|
3324
|
+
},
|
|
3325
|
+
{
|
|
3326
|
+
path: '/building-sites/multilingual/overview',
|
|
3327
|
+
title: 'Multilingual',
|
|
3328
|
+
heading: 'Text direction',
|
|
3329
|
+
anchor: '#text-direction',
|
|
3330
|
+
text: 'Pages are laid out left to right in every language. Right-to-left sites, for languages such as Arabic, Hebrew, Persian and Urdu, are not supported yet: you can publish a page written in one of them, but its layout stays left to right.\nHow-tos\n- Add a locale\n- Add a language switcher\n- Translate with Weglot — your own Weglot account translates pages in the visitor\'s browser (for visitors, not for search ranking)\nThis is multilingual v1.'
|
|
3275
3331
|
},
|
|
3276
3332
|
{
|
|
3277
3333
|
path: '/building-sites/multilingual/overview',
|
|
@@ -3441,6 +3497,13 @@ export const DOCS_SECTION_INDEX = [
|
|
|
3441
3497
|
anchor: '#manage-redirects',
|
|
3442
3498
|
text: '- Create, edit, and delete redirect rules from the redirect manager page.\n- Rules are validated on save, with chain-loop and page-collision checks so a redirect can\'t send visitors in circles or shadow a real page.\n- The published site enforces redirect rules during route resolution.\nWho can manage redirects A redirect changes what the live site serves at an address, so it takes a publishing role — Editor or Admin. The Author role can see the redirects page but cannot add, change or remove a rule. See Teams & roles.'
|
|
3443
3499
|
},
|
|
3500
|
+
{
|
|
3501
|
+
path: '/building-sites/redirects/overview',
|
|
3502
|
+
title: 'Redirects',
|
|
3503
|
+
heading: 'Query strings pass through',
|
|
3504
|
+
anchor: '#query-strings-pass-through',
|
|
3505
|
+
text: 'A redirect keeps the visitor\'s query string. Put the parameters you want on the destination, not on the short address: a rule from /booth to /signup?utmsource=event&utmmedium=qr sends a visitor who arrives at /booth?ref=flyer to /signup?utmsource=event&utmmedium=qr&ref=flyer.\nWhen the visitor\'s address and the destination name the same parameter, the destination\'s value is kept. To change or remove a parameter, edit the rule\'s destination; the short address, and anything already printed with it, stays the same.'
|
|
3506
|
+
},
|
|
3444
3507
|
{
|
|
3445
3508
|
path: '/building-sites/redirects/overview',
|
|
3446
3509
|
title: 'Redirects',
|
|
@@ -3509,7 +3572,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
3509
3572
|
title: 'Generate a page from a prompt',
|
|
3510
3573
|
heading: 'How the page is built',
|
|
3511
3574
|
anchor: '#how-the-page-is-built',
|
|
3512
|
-
text: 'The job first builds anything the plan creates, one at a time: a layout, a form or a reusable component, each as a draft, the same way a layout, form or component job builds one. Then it builds the page one section at a time, top to bottom, in the background, so you can leave the Pages list while it works. Each section is checked against the building rules as part of the whole page: one top-level heading and headings in order, your theme\'s colors, spacing and type, and your components placed as instances instead of copied.\n- Pictures are image slots with a description of what belongs there, for you to fill from the media library.\n- Facts the brief does not give, such as a price, a phone number or an address,
|
|
3575
|
+
text: 'The job first builds anything the plan creates, one at a time: a layout, a form or a reusable component, each as a draft, the same way a layout, form or component job builds one. Then it builds the page one section at a time, top to bottom, in the background, so you can leave the Pages list while it works. Each section is checked against the building rules as part of the whole page: one top-level heading and headings in order, your theme\'s colors, spacing and type, and your components placed as instances instead of copied.\n- Pictures are image slots with a description of what belongs there, for you to fill from the media library.\n- Facts the brief does not give, such as a price, a phone number or an address, are left out, never invented. If the draft still shows one in square brackets, AI jobs lists it beside the draft, including the ones a component on the page shows until you set your own, named once for that component however often the page places it.'
|
|
3513
3576
|
},
|
|
3514
3577
|
{
|
|
3515
3578
|
path: '/building-sites/screens-and-layouts/generate-a-page',
|
|
@@ -3593,7 +3656,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
3593
3656
|
title: 'Layouts',
|
|
3594
3657
|
heading: 'Generate a layout with Aglyn AI',
|
|
3595
3658
|
anchor: '#generate-a-layout-with-aglyn-ai',
|
|
3596
|
-
text: 'An AI build job can make a layout from a brief: the header, navigation and footer you have in mind. The job proposes a plan first, and builds once you confirm it: a header that links your pages, the slot each page renders in, and a footer. When your site already has a navigation or menu component, the layout places it rather than building another. The layout follows the building rules, so it carries no page title of its own and takes its colors and type from your theme.\nOpen Layouts for the site and choose Create with AI, beside Templates and Create New Layout. Write what the header, navigation and footer should hold, then choose Plan the layout. The window shows the plan when it is ready, with Confirm plan; Open AI jobs follows the job in the Assist panel instead.\nA link in the layout goes only to a page that does what its words say, and one on a colored band, such as a footer in your primary color, uses the band\'s text color. Where the brief leaves out a fact, such as your address or opening hours, the footer
|
|
3659
|
+
text: 'An AI build job can make a layout from a brief: the header, navigation and footer you have in mind. The job proposes a plan first, and builds once you confirm it: a header that links your pages, the slot each page renders in, and a footer. When your site already has a navigation or menu component, the layout places it rather than building another. The layout follows the building rules, so it carries no page title of its own and takes its colors and type from your theme.\nOpen Layouts for the site and choose Create with AI, beside Templates and Create New Layout. Write what the header, navigation and footer should hold, then choose Plan the layout. The window shows the plan when it is ready, with Confirm plan; Open AI jobs follows the job in the Assist panel instead.\nA link in the layout goes only to a page that does what its words say, and one on a colored band, such as a footer in your primary color, uses the band\'s text color. Where the brief leaves out a fact, such as your address or opening hours, the footer leaves it out. If the draft still shows one in square brackets, AI jobs lists it beside the draft.\nThe layout arrives as a new draft in Layouts, and Open draft on the job opens it in the Besigner. No page uses it until you assign it, so nothing on the live site changes. It counts against your shared-layout allowance like a layout you create yourself, and when the site has none to spare the job says so before it starts, not after it has spent anything.'
|
|
3597
3660
|
},
|
|
3598
3661
|
{
|
|
3599
3662
|
path: '/building-sites/screens-and-layouts/layouts',
|
|
@@ -4580,14 +4643,21 @@ export const DOCS_SECTION_INDEX = [
|
|
|
4580
4643
|
title: 'Product catalog',
|
|
4581
4644
|
heading: 'Products, options, and variants',
|
|
4582
4645
|
anchor: '#products-options-and-variants',
|
|
4583
|
-
text: 'A product is what you manage; a variant is what a customer actually buys. Products define up to 3 options (like Size or Color, each with up to 25 values), and the products hub expands them into a variants matrix — up to 100 variants per product, each with its own SKU, barcode, price, compare-at price, weight, image, and inventory count.\n- Types: physical (shippable), digital (delivered as downloads), or service.\n- Status: draft (invisible to visitors), active, or archived. A product created for you rather than added in the editor — a proposed product, for one — starts as a draft with no photo, at the price it was given (an AI proposal\'s suggested price) or else a default price, for you to change. It counts toward your plan\'s product allowance like any other product.\n- Pricing: a variant with a compare-at price above its price shows a sale badge on storefront blocks.\n- Inventory: leave blank for untracked, 0 means sold out — the same semantics the original product block used. Stock is not tracked on a digital or service subscription-only product: nothing decrements it, on the first charge or on any renewal, so the field is disabled there. A physical subscription tracks normally — every paid cycle decrements one unit per box shipped — and Both — buyer chooses keeps tracking on the one-time sales.\nProducts created with the earlier single-price product block are lifted into this model automatically as a single default variant — nothing breaks and no migration step is needed.'
|
|
4646
|
+
text: 'A product is what you manage; a variant is what a customer actually buys. Products define up to 3 options (like Size or Color, each with up to 25 values), and the products hub expands them into a variants matrix — up to 100 variants per product, each with its own SKU, barcode, price, compare-at price, weight, image, and inventory count.\n- Types: physical (shippable), digital (delivered as downloads), or service.\n- Status: draft (invisible to visitors), active, or archived. Draft and archived products can\'t be bought online, from the cart or with Buy now. A product created for you rather than added in the editor — a proposed product, for one — starts as a draft with no photo, at the price it was given (an AI proposal\'s suggested price) or else a default price, for you to change. It counts toward your plan\'s product allowance like any other product.\n- Pricing: a variant with a compare-at price above its price shows a sale badge on storefront blocks.\n- Inventory: leave blank for untracked, 0 means sold out — the same semantics the original product block used. Stock is not tracked on a digital or service subscription-only product: nothing decrements it, on the first charge or on any renewal, so the field is disabled there. A physical subscription tracks normally — every paid cycle decrements one unit per box shipped — and Both — buyer chooses keeps tracking on the one-time sales.\nProducts created with the earlier single-price product block are lifted into this model automatically as a single default variant — nothing breaks and no migration step is needed.'
|
|
4584
4647
|
},
|
|
4585
4648
|
{
|
|
4586
4649
|
path: '/commerce-and-bookings/commerce/catalog',
|
|
4587
4650
|
title: 'Product catalog',
|
|
4588
4651
|
heading: 'Sell in person only',
|
|
4589
4652
|
anchor: '#sell-in-person-only',
|
|
4590
|
-
text: 'Every product sells online and in person unless you say otherwise. To sell a product only in person, open it in the product editor and, under At the register beside Quick key at the register, turn off Sell online. The products list marks it In person only.\nA product that is in person only:\n- still sells in person: at the register, at the self-service kiosk, in the Aglyn POS apps, and on draft orders;\n- has no page on your site: its /products/{slug} address answers "page not found", and it is left out of product grids, collections, search, related products, wishlists
|
|
4653
|
+
text: 'Every product sells online and in person unless you say otherwise. To sell a product only in person, open it in the product editor and, under At the register beside Quick key at the register, turn off Sell online. The products list marks it In person only.\nA product that is in person only:\n- still sells in person: at the register, at the self-service kiosk, in the Aglyn POS apps, and on draft orders;\n- has no page on your site: its /products/{slug} address answers "page not found", and it is left out of product grids, collections, search, related products, wishlists and the sitemap;\n- cannot be bought online: it can\'t be added to a cart, a cart that already holds it can\'t check out until the line is removed, and Buy now refuses it;\n- is in no channel: it is left out of every sales channel feed (Google, Meta, TikTok, Pinterest, Snapchat and Microsoft), marketplace and delivery app menu. An inventory sync still counts its stock.\nIts reviews still show on your site by default. With Sell online off, the editor offers Reviews on your site:\n- Show, marked Sold in store (the default): its reviews appear in your store\'s reviews across every product and count toward the average, with the product\'s name, a Sold in store label, and no link, since it has no page.\n- Hide: its reviews appear nowhere on your site, neither in the list nor in the average. You still see and moderate them under Review moderation.\nBack-in-stock emails for it wait until it sells online again. Turn Sell online back on and everything above returns, its reviews included. The switch comes with the point of sale; on a plan without it, a product already set to in person only still shows the switch so you can put it back online.'
|
|
4654
|
+
},
|
|
4655
|
+
{
|
|
4656
|
+
path: '/commerce-and-bookings/commerce/catalog',
|
|
4657
|
+
title: 'Product catalog',
|
|
4658
|
+
heading: 'Offer on the kiosk',
|
|
4659
|
+
anchor: '#offer-on-the-kiosk',
|
|
4660
|
+
text: 'The self-service kiosk offers every product it can sell unless you say otherwise. To keep a product off the kiosk, open it in the product editor and, under At the register, turn off Offer on the kiosk. The kiosk leaves it out of its product grid, and a kiosk cart that still holds it is refused at checkout. The register, the Aglyn POS apps and your site sell it as before.\nFor a product with options, Variants the kiosk offers lists each variant. Clear one to keep only that variant off the kiosk, such as a size you serve only at the counter. Turn Offer on the kiosk back on and the product returns to the kiosk with the variants you left checked.\nThe choice comes with the point of sale, like the rest of At the register.'
|
|
4591
4661
|
},
|
|
4592
4662
|
{
|
|
4593
4663
|
path: '/commerce-and-bookings/commerce/catalog',
|
|
@@ -4622,7 +4692,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
4622
4692
|
title: 'Product catalog',
|
|
4623
4693
|
heading: 'Product reviews',
|
|
4624
4694
|
anchor: '#product-reviews',
|
|
4625
|
-
text: 'Shoppers rate a product from 1 to 5 and write a review in the Product reviews block on your product page template. Pro plan and above.\nShow reviews on your site {#show-reviews}\nThe Product reviews element, in Besigner\'s Commerce elements, shows published reviews with the average rating, and the form customers write theirs in.\n1. Open your product page template in Besigner and add Product reviews below the product details.\n2. Leave Product id blank, so the block shows whichever product the page is showing. Pick a product only to pin the block to that one product.\n3. Optionally change its Heading, which reads Reviews when blank.\n4. Publish the site.\nTo show your store\'s latest published reviews across every product, on a home page for example, set Show to Whole store and choose Max reviews (6 by default, 12 at most). It shows nothing until a review is published.\nReview settings {#review-settings}\nThe Reviews card on Products → Promotions decides who can review your products and when customers are asked for a review.\nWho can review. By default only customers who bought the product can review it, and their reviews show a Verified buyer badge. A customer is verified when they are signed in to their account on your store with the email their order went to, or when they open the link in their review-request email. Typing an email address into the form never verifies anyone. Everyone else sees "Only customers who bought this can review" and a Sign in link. To accept reviews from anyone, set Who can review to Anyone on the Reviews card in Promotions: verified buyers still publish right away, and everyone else gives a
|
|
4695
|
+
text: 'Shoppers rate a product from 1 to 5 and write a review in the Product reviews block on your product page template. Pro plan and above.\nShow reviews on your site {#show-reviews}\nThe Product reviews element, in Besigner\'s Commerce elements, shows published reviews with the average rating, and the form customers write theirs in.\n1. Open your product page template in Besigner and add Product reviews below the product details.\n2. Leave Product id blank, so the block shows whichever product the page is showing. Pick a product only to pin the block to that one product.\n3. Optionally change its Heading, which reads Reviews when blank.\n4. Publish the site.\nTo show your store\'s latest published reviews across every product, on a home page for example, set Show to Whole store and choose Max reviews (6 by default, 12 at most). It shows nothing until a review is published. A review of a product you sell in person only is marked Sold in store and doesn\'t link anywhere, unless you chose to hide that product\'s reviews from your site.\nReview settings {#review-settings}\nThe Reviews card on Products → Promotions decides who can review your products and when customers are asked for a review.\nWho can review. By default only customers who bought the product can review it, and their reviews show a Verified buyer badge. A customer is verified when they are signed in to their account on your store with the email their order went to, or when they open the link in their review-request email. Typing an email address into the form never verifies anyone. Everyone else sees "Only customers who bought this can review" and a Sign in link. To accept reviews from anyone, set Who can review to Anyone on the Reviews card in Promotions: verified buyers still publish right away, and everyone else gives a nam'
|
|
4626
4696
|
},
|
|
4627
4697
|
{
|
|
4628
4698
|
path: '/commerce-and-bookings/commerce/catalog',
|
|
@@ -5030,6 +5100,13 @@ export const DOCS_SECTION_INDEX = [
|
|
|
5030
5100
|
anchor: '#customer-emails',
|
|
5031
5101
|
text: '| When | Email | What it says |\n| -- | -- | -- |\n| An order is paid | Order receipt | The items, the total, any license keys and download links, and your receipt footer. Sent for checkout and Buy buttons, for payment links you send from a draft order, and for register sales when the customer gives an email. |\n| You ship part or all of an order | Order shipped | The items in that package, the carrier and tracking number with a tracking link, and how many items are still to ship. One email per package. |\n| You mark an order delivered | Order delivered | The order and its items. |\n| You refund an order | Order refunded | The amount, the items you refunded by name (if you picked any), and whether the order is now refunded in full. One email per refund. |\n| You cancel an order | Order canceled | The order and its items. Canceling doesn\'t refund a payment: refund first if the customer paid. |\n| You mark a pickup order ready | Order ready for pickup | The location and its address, your pickup hours and arrival instructions. See Pickup & local delivery. |\n| A pickup order is collected | Order picked up | A short confirmation, with the items. |\n| Your driver takes a local delivery out | Order out for delivery | The items and the delivery time the customer booked. When you mark it delivered, they get Order delivered. |\nA dropship supplier who posts tracking for their part of an order sends the customer the same Order shipped email.\nEach email is sent once. If a payment confirmation arrives twice, or you click a button twice, the customer still gets one email. A second package or a second partial refund is a new email.\nRegister sales and orders with only digital or service items don\'t send a shipping or delivery email unless you add a tracking number.\nTracking links\nTracking links'
|
|
5032
5102
|
},
|
|
5103
|
+
{
|
|
5104
|
+
path: '/commerce-and-bookings/commerce/order-notifications',
|
|
5105
|
+
title: 'Order emails & status page',
|
|
5106
|
+
heading: 'Who on your side is told',
|
|
5107
|
+
anchor: '#who-is-told',
|
|
5108
|
+
text: 'The emails above go to your customer. Your side is notified of a new order in two ways:\n| Who | What they get | For which orders |\n| -- | -- | -- |\n| Everyone who is an Admin or Editor of the site | A New order notification in the console, and a copy by email | Orders from the cart, from a product\'s Buy now button, and from a draft order\'s payment link |\n| The workspace owner | The New sale email, sent to the email address they sign in with | Orders from a product\'s Buy now button |\nThe workspace\'s owner and admins are Admin on every site, so the notification reaches them too. Authors and Viewers aren\'t told. For a Buy now order, the owner gets the New sale email instead of the notification\'s email copy, so the sale doesn\'t reach their inbox twice. The notification still shows in their console.\nEach person gets the notification as their own notification settings say. Out of the box, New order arrives in the console and by email. The same people also get a New order notification when a buyer asks for a return, when a chargeback is decided, and when a delivery address is outside your local delivery zones.\nTurning them off {#switch-off-team-notices}\nTo turn off the notification, each person changes their own settings; nobody can switch it off for someone else. On Notifications → Settings, under What you are told about, open Forms & bookings and switch New order off under In console, Email, or both. To stop it for one site only, pick the site in Workspace or site under One workspace or one site, open Forms & bookings there, and set New order to Off for either channel. Switching New order off also stops the return, chargeback and delivery-zone notices, because they are the same kind of notification. See Notification settings.\nThe New sale email can\'t be turned off: it has no'
|
|
5109
|
+
},
|
|
5033
5110
|
{
|
|
5034
5111
|
path: '/commerce-and-bookings/commerce/order-notifications',
|
|
5035
5112
|
title: 'Order emails & status page',
|
|
@@ -5084,14 +5161,14 @@ export const DOCS_SECTION_INDEX = [
|
|
|
5084
5161
|
title: 'Fulfillment, returns and webhooks',
|
|
5085
5162
|
heading: 'Returns',
|
|
5086
5163
|
anchor: '#returns',
|
|
5087
|
-
text: 'A return is its own record beside the order: what is coming back and why, what you decided, the return label, what went back in stock, and the refund. Every return is listed under Returns in the Products hub, newest first; the Status filter shows one state at a time.\nHow a buyer asks {#buyer-requests}\nA buyer asks for a return themselves, from either of two places:\n- the Request a return link beside an order in their account on your store, when they are signed in;\n- the Request a return button on the order\'s status page — the View your order link in every order email — which needs no account. The button shows only while the return window is open and something on the order can still come back.\nBoth open the return page at /order-return in your site\'s header and footer. The page is unlisted, so search engines leave it out; to design your own, make a page at /order-return and place the Return request block on it. The buyer chooses how many of each item to send back and a reason for each — Arrived damaged, Wrong item, Not as described, Size or fit, No longer needed or Other — and can add a note. Only items that have shipped can be returned, and never more than were bought or are already coming back.
|
|
5164
|
+
text: 'A return is its own record beside the order: what is coming back and why, what you decided, the return label, what went back in stock, and the refund. Every return is listed under Returns in the Products hub, newest first; the Status filter shows one state at a time.\nHow a buyer asks {#buyer-requests}\nA buyer asks for a return themselves, from either of two places:\n- the Request a return link beside an order in their account on your store, when they are signed in;\n- the Request a return button on the order\'s status page — the View your order link in every order email — which needs no account. The button shows only while the return window is open and something on the order can still come back.\nBoth open the return page at /order-return in your site\'s header and footer. The page is unlisted, so search engines leave it out; to design your own, make a page at /order-return and place the Return request block on it. The buyer chooses how many of each item to send back and a reason for each — Arrived damaged, Wrong item, Not as described, Size or fit, No longer needed or Other — and can add a note. Only items that have shipped can be returned, and never more than were bought or are already coming back. The workspace owner is sent the Return requested email, and the site\'s admins and editors get a New order notification in the console, each as their own notification settings say. See Who on your side is told.\nUnder Checkout → Returns:\n- Accept return requests online — turn it off to take returns only by contact. You can still start a return for a buyer from the order.\n- Return window in days — counted from the last shipment, or from the order date for an order with nothing to ship. 0 to 365.\n- Returnable product types — physical products only, by default.\nRun a return {#run-a-r'
|
|
5088
5165
|
},
|
|
5089
5166
|
{
|
|
5090
5167
|
path: '/commerce-and-bookings/commerce/orders-and-returns',
|
|
5091
5168
|
title: 'Fulfillment, returns and webhooks',
|
|
5092
5169
|
heading: 'Order webhooks',
|
|
5093
5170
|
anchor: '#order-webhooks',
|
|
5094
|
-
text: 'An order webhook posts each order event to an address you choose, as it happens: a warehouse system, an ERP, a spreadsheet script. Add them under Notifications → Order webhooks in the Products hub. Managing webhooks needs the
|
|
5171
|
+
text: 'An order webhook posts each order event to an address you choose, as it happens: a warehouse system, an ERP, a spreadsheet script. Add them under Notifications → Order webhooks in the Products hub. Managing webhooks needs the Manage order webhooks permission. By default, as with refunds, that\'s an admin of the whole workspace who is also the site\'s admin.\nAdd endpoint asks for:\n- Endpoint URL — an https:// address on a public server. Redirects are not followed, so give the final address.\n- Events — any of the events below.\nWhen you add an endpoint, its signing secret is shown once. Copy it into your endpoint\'s settings; Roll secret makes a new one if it is lost. A store can keep 10 endpoints. Pause stops deliveries to one without deleting it, and Send test event posts a webhook.test event now.\n| Event | When |\n| order.paid | An order was paid: online, buy-now, a payment link, a POS sale or a subscription renewal. |\n| order.fulfilled | A shipment was recorded, once per shipment. |\n| order.delivered | The order was marked delivered. |\n| order.refunded | Money went back to the buyer, once per refund, including a refund made in the Stripe Dashboard. |\n| order.cancelled | The order was canceled. |\n| return.requested | A buyer asked for a return, or you opened one. |\n| return.approved | You approved a return, or opened one yourself. |\n| return.declined | You declined a return request. |\n| return.received | The returned items arrived. |\n| return.refunded | A return was refunded. |\nWhen an endpoint is down\nAn endpoint has 8 seconds to answer each event. One that doesn\'t is sent the event again, on a schedule that lasts about a day, and the site\'s admins and editors are notified in the console if the last try fails.\nWhoever builds your endpoint needs Order webhooks for developer'
|
|
5095
5172
|
},
|
|
5096
5173
|
{
|
|
5097
5174
|
path: '/commerce-and-bookings/commerce/orders-and-returns',
|
|
@@ -5140,7 +5217,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
5140
5217
|
title: 'Commerce',
|
|
5141
5218
|
heading: 'Orders',
|
|
5142
5219
|
anchor: '#orders',
|
|
5143
|
-
text: 'Every paid checkout becomes an order with a sequential number, line-item snapshots, totals, and a timeline:\n- Statuses: pending → paid → fulfilled (or partially) → delivered, with cancel/refund exits guarded by a status machine. The seven of them, and the labels the console shows, are in Statuses and channels.\n- Fulfill with tracking, in one shipment or several, print packing slips and invoices, and add internal notes — see Fulfillment, returns and webhooks.\n- Ship with the tools you already use: ShipStation imports your orders and sends each shipment back, ShippingEasy receives each order as it is paid and sends each label back, and Pirate Ship, Shippo or EasyPost work through a spreadsheet out and a file of tracking numbers back.\n- Returns: buyers ask from their account or the order-status page, and you approve, receive with restock and refund — see Returns. Order webhooks send each order event to your own systems — see Order webhooks.\n- Refunds (full or partial) go through Stripe and reverse the platform fee. Refunding needs the admin
|
|
5220
|
+
text: 'Every paid checkout becomes an order with a sequential number, line-item snapshots, totals, and a timeline:\n- Statuses: pending → paid → fulfilled (or partially) → delivered, with cancel/refund exits guarded by a status machine. The seven of them, and the labels the console shows, are in Statuses and channels.\n- Fulfill with tracking, in one shipment or several, print packing slips and invoices, and add internal notes — see Fulfillment, returns and webhooks.\n- Ship with the tools you already use: ShipStation imports your orders and sends each shipment back, ShippingEasy receives each order as it is paid and sends each label back, and Pirate Ship, Shippo or EasyPost work through a spreadsheet out and a file of tracking numbers back.\n- Returns: buyers ask from their account or the order-status page, and you approve, receive with restock and refund — see Returns. Order webhooks send each order event to your own systems — see Order webhooks.\n- Refunds (full or partial) go through Stripe and reverse the platform fee. Refunding needs the Refund orders permission. By default, that\'s an admin of the site who is also a member of the whole workspace: a workspace owner or admin, or a member given access to every site. A collaborator invited to this one site as its admin can run the till and fulfill orders, but can\'t send money back out of the business unless the site grants them Refund orders.\n- Chargebacks are shown apart from refunds. When a shopper disputes a charge with their bank, the order gets a Chargeback open badge and the list warns you with the date Stripe needs your evidence by — answer it in the Stripe dashboard, because an unanswered dispute is decided for the shopper. If the dispute is lost the money is reversed, the order reads Charged back rather than Refunded, an'
|
|
5144
5221
|
},
|
|
5145
5222
|
{
|
|
5146
5223
|
path: '/commerce-and-bookings/commerce/overview',
|
|
@@ -5261,6 +5338,13 @@ export const DOCS_SECTION_INDEX = [
|
|
|
5261
5338
|
anchor: '#registers',
|
|
5262
5339
|
text: 'Create your registers under Products → Point of sale → POS registers — one per till or device that takes in-person payments. Before your first register exists, the register page and the POS devices card each show an Add a register button that takes you there. Give each a name (and, if you use inventory locations, the location it sells from). Every POS sale is tagged with its register so you can reconcile end-of-day takings per till. Your plan caps how many registers you can run; add more with the register add-on in Billing. If you downgrade below your register count, the extra registers (newest first) stop taking payments and show Over plan limit until you remove them or upgrade again — none are deleted.'
|
|
5263
5340
|
},
|
|
5341
|
+
{
|
|
5342
|
+
path: '/commerce-and-bookings/commerce/pos-and-reservations',
|
|
5343
|
+
title: 'POS & reservations',
|
|
5344
|
+
heading: 'Who can do what at the register',
|
|
5345
|
+
anchor: '#who-can-do-what-at-the-register',
|
|
5346
|
+
text: 'Anyone with the Use the point of sale permission for the site can open the register. The permission decides on its own: owners, admins and editors hold it by default and viewers don\'t, and a site viewer you grant it in a custom role or for one member works the register too. Five finer permissions then decide which of its jobs are theirs:\n| Permission | What it covers |\n| Sell at the register | Ringing up sales and taking payment, at the register, the kiosk and the Aglyn POS apps |\n| Refunds and returns | Refunding point of sale orders at the register, up to its refund limit, and taking returns and exchanges |\n| Give discounts at the register | The register\'s Discount %. A shopper\'s discount code and the store\'s own promotions apply without it |\n| Cash drawer and shifts | Opening and closing shifts, cash in and out, X and Z reports, and opening the drawer without a sale |\n| Registers and devices | Adding, changing and removing card readers, receipt printers and customer displays, and the reader start-up screen |\nEach one follows Use the point of sale until you set it, so everyone who could use the register keeps exactly what they had. To narrow one, for example a cashier who rings sales but does not refund, deny it in a custom role or for one member. A control someone does not hold stays on screen, disabled, with the reason. A cashier switched in with a PIN needs Sell at the register too.\nThe register belongs to its site. An editor who works across the whole workspace but has Viewer or Author access to one site doesn\'t work that site\'s register, while keeping it on every other site. To let them sell there anyway, choose Permissions beside them on that site\'s Users card and allow Sell at the register (or Use the point of sale for the whole register). To let them keep the '
|
|
5347
|
+
},
|
|
5264
5348
|
{
|
|
5265
5349
|
path: '/commerce-and-bookings/commerce/pos-and-reservations',
|
|
5266
5350
|
title: 'POS & reservations',
|
|
@@ -5301,21 +5385,21 @@ export const DOCS_SECTION_INDEX = [
|
|
|
5301
5385
|
title: 'POS & reservations',
|
|
5302
5386
|
heading: 'Customer display',
|
|
5303
5387
|
anchor: '#customer-display',
|
|
5304
|
-
text: 'A customer display is a tablet facing your customer. It shows your store\'s logo (or name) and a welcome line between sales, the basket with its total as you ring it up, and it lets the customer choose a tip and a receipt themselves.\nTo pair one, start from either place:\n- On the register, tap Pair display next to the Register heading.\n- In the console, open Products → Point of sale → POS devices and tap Pair display beside the register the tablet belongs to. Use this when you are setting a tablet up away from the till.\nThen:\n1. Keep Customer display selected. You see an address and a 6-digit code. The code works once and expires in 10 minutes.\n2. On the tablet, open that address — your console address followed by /kiosk/commerce/pos-display — and enter the code. No one signs in on the tablet.\nOnce paired, the register\'s button reads Display connected. During a sale the display shows:\n- The basket — each line, the subtotal, any discount, the total and what has been paid so far. Once a tip is added it is shown on its own line, with the Total with tip under it. Amounts are in your store\'s currency.\n- Tip choices — when tips are on and the cashier taps Ask on display: a button per percentage, an amount the customer types, or no tip.\n- "Tap, insert or swipe your card on the reader." while a card reader payment waits.\n- Receipt choice — when Receipts at the register is Ask the customer: email, text (shown only when text messages are available for your store), print or no receipt. When the customer asks for an email receipt and Offer email sign-up on the customer display is on (it is by default), an unticked Email me news and offers box is shown under the address. Only a
|
|
5388
|
+
text: 'A customer display is a tablet facing your customer. It shows your store\'s logo (or name) and a welcome line between sales, the basket with its total as you ring it up, and it lets the customer choose a tip and a receipt themselves.\nOther features can use it too. At check-in, Waivers can open a waiver on the display for the rider to sign.\nTo pair one, start from either place:\n- On the register, tap Pair display next to the Register heading.\n- In the console, open Products → Point of sale → POS devices and tap Pair display beside the register the tablet belongs to. Use this when you are setting a tablet up away from the till.\nThen:\n1. Keep Customer display selected. You see an address and a 6-digit code. The code works once and expires in 10 minutes.\n2. On the tablet, open that address — your console address followed by /kiosk/commerce/pos-display — and enter the code. No one signs in on the tablet.\nOnce paired, the register\'s button reads Display connected. During a sale the display shows:\n- The basket — each line, the subtotal, any discount, the total and what has been paid so far. Once a tip is added it is shown on its own line, with the Total with tip under it. Amounts are in your store\'s currency.\n- Tip choices — when tips are on and the cashier taps Ask on display: a button per percentage, an amount the customer types, or no tip.\n- "Tap, insert or swipe your card on the reader." while a card reader payment waits.\n- Receipt choice — when Receipts at the register is Ask the customer: email, text (shown only when text messages are available for your store), print or no receipt. When the customer asks for an email receipt and Offer email sign-up on the customer display is on (it is by default), an unticked Email me news and offers box is shown under the address. Only a'
|
|
5305
5389
|
},
|
|
5306
5390
|
{
|
|
5307
5391
|
path: '/commerce-and-bookings/commerce/pos-and-reservations',
|
|
5308
5392
|
title: 'POS & reservations',
|
|
5309
5393
|
heading: 'Self-service kiosk',
|
|
5310
5394
|
anchor: '#self-service-kiosk',
|
|
5311
|
-
text: 'A self-service kiosk is a tablet your customers order from themselves. They browse your products by category, choose sizes and modifiers, review the total with tax, and pay — or send the order to the counter. It belongs to one register, and its orders are register sales: the same prices, tax, automatic promotions and stock as a sale you ring up.\nTo pair one:\n1. Tap Pair display on the register, or beside the register under Products → Point of sale → POS devices, then choose Self-service kiosk. It shows an address and a 6-digit code that works once and expires in 10 minutes.\n2. On the tablet, open that address — your console address followed by /kiosk/commerce/pos-kiosk — and enter the code. No one signs in on the tablet. A customer display code does not pair a kiosk, and a kiosk code does not pair a display.\nWhile you pair a kiosk, the code screen also says what the kiosk still needs to take payment, each with a link to where you fix it:\n- Stripe — until your store\'s Stripe account is connected and can take charges, the kiosk can\'t take cards. Open Payments goes to Products → Payments.\n- A card reader on this register — Pay with card uses a reader assigned to the kiosk\'s register, not one set to Any register. Open POS devices goes to the card readers on Products → Point of sale. With several readers on the register, choose the kiosk\'s from its staff menu once it is paired.\n- A way to pay at all — with Kiosk: let customers pay at the counter off and no card reader ready,
|
|
5395
|
+
text: 'A self-service kiosk is a tablet your customers order from themselves. They browse your products by category, choose sizes and modifiers, review the total with tax, and pay — or send the order to the counter. It belongs to one register, and its orders are register sales: the same prices, tax, automatic promotions and stock as a sale you ring up.\nThe kiosk offers your active products except subscription-only products, gift cards and digital downloads, which need more than a counter can hand over. You choose the rest: turn off Offer on the kiosk on a product, or clear one of its variants, to keep it off the kiosk (see Offer on the kiosk).\nTo pair one:\n1. Tap Pair display on the register, or beside the register under Products → Point of sale → POS devices, then choose Self-service kiosk. It shows an address and a 6-digit code that works once and expires in 10 minutes.\n2. On the tablet, open that address — your console address followed by /kiosk/commerce/pos-kiosk — and enter the code. No one signs in on the tablet. A customer display code does not pair a kiosk, and a kiosk code does not pair a display.\nWhile you pair a kiosk, the code screen also says what the kiosk still needs to take payment, each with a link to where you fix it:\n- Stripe — until your store\'s Stripe account is connected and can take charges, the kiosk can\'t take cards. Open Payments goes to Products → Payments.\n- A card reader on this register — Pay with card uses a reader assigned to the kiosk\'s register, not one set to Any register. Open POS devices goes to the card readers on Products → Point of sale. With several readers on the register, choose the kiosk\'s from its staff menu once it is paired.\n- A way to pay at all — with Kiosk: let customers pay at the counter off and no card reader ready, customer'
|
|
5312
5396
|
},
|
|
5313
5397
|
{
|
|
5314
5398
|
path: '/commerce-and-bookings/commerce/pos-and-reservations',
|
|
5315
5399
|
title: 'POS & reservations',
|
|
5316
5400
|
heading: 'Reservations',
|
|
5317
5401
|
anchor: '#reservations',
|
|
5318
|
-
text: 'For stays (cabins, rooms, rentals):\n1. Add resources on the Products page — nightly rate, weekend multiplier, minimum nights, deposit percent, and free-cancellation window.\n2. Drop the Reservation widget on any page in the besigner and point it at the resource id. Guests pick dates, see a live quote, and pay the deposit (or full amount) at checkout. Every reservation is paid this way, so it needs Stripe connected; until it is, the Reservations card warns that guests can\'t reserve and links to Payments.\n3. Manage stays from the Reservations card: check in, check out (with a folio summary if the guest charged store purchases to the room), walk-ins, no-shows, and cancellations.\
|
|
5402
|
+
text: 'For stays (cabins, rooms, rentals):\n1. Add resources on the Products page — nightly rate, weekend multiplier, minimum nights, deposit percent, and free-cancellation window.\n2. Drop the Reservation widget on any page in the besigner and point it at the resource id. Guests pick dates, see a live quote, and pay the deposit (or full amount) at checkout. Every reservation is paid this way, so it needs Stripe connected; until it is, the Reservations card warns that guests can\'t reserve and links to Payments.\n3. Manage stays from the Reservations card: check in, check out (with a folio summary if the guest charged store purchases to the room), walk-ins, no-shows, and cancellations.\nGuests. The Reservation widget asks how many guests (optional), up to what the resource Sleeps, or 50 when that isn\'t set. A walk-in takes the same Guests field, and the Reservations card shows the count on each stay. At the check-in window, a resource set to One check-in per guest under At check-in gives each guest their own check-in and wristband; see check-in at the window.\nTo change the count after a stay is booked, choose Guests on the stay in the Reservations card, enter the new number and Save. It takes 1 up to what the resource Sleeps, while the stay is pending, confirmed or checked in. Changing it needs the Book walk-ins and change guests permission on the site, the same as booking a walk-in, and the change is recorded in the site\'s activity with who made it.\nSeveral identical units\nWhen you have several of the same thing, such as 12 RV hookups, 30 tent sites or four matching cabins, add them as one resource and set Spots or units available to how many there are. Each night can then take that many stays:\n- A guest can book a range of dates as long as at least one unit is free on every night'
|
|
5319
5403
|
},
|
|
5320
5404
|
{
|
|
5321
5405
|
path: '/commerce-and-bookings/commerce/pos-and-reservations',
|
|
@@ -5343,14 +5427,14 @@ export const DOCS_SECTION_INDEX = [
|
|
|
5343
5427
|
title: 'POS hardware',
|
|
5344
5428
|
heading: 'Card readers',
|
|
5345
5429
|
anchor: '#card-readers',
|
|
5346
|
-
text: 'The register takes card-present payments on Stripe\'s smart readers:\n| Reader | Notes |\n| Stripe Reader S700 / S710 | Android-based smart reader for the countertop or the hand. |\n| BBPOS WisePOS E | Countertop smart reader. |\
|
|
5430
|
+
text: 'The register takes card-present payments on Stripe\'s smart readers:\n| Reader | Notes |\n| Stripe Reader S700 / S710 | Android-based smart reader for the countertop or the hand. |\n| Stripe Reader T600 | Countertop smart reader, on Wi-Fi or on Ethernet with the hub. |\n| BBPOS WisePOS E | Countertop smart reader. |\nAll are sold by Stripe. They are smart readers: each one talks to Stripe over its own internet connection, so it does not need to be plugged into or paired by Bluetooth with the device the register runs on. Card readers are shown in the console only when they are available for your store.\nGetting a reader\nReaders take payments through Aglyn\'s Stripe account, which pays your store out, so a reader is registered to your store in Aglyn rather than in a Stripe Dashboard of your own. Any supported reader can be added with the pairing code it shows, including one that was registered somewhere else before: generating a new pairing code on the reader and adding it here moves it to your store.\nWhere the Hardware card is available, you can buy a reader from Aglyn instead and have Stripe ship it to you; see Buy a reader from Aglyn.\nStripe sells its readers through the Terminal hardware shop in the Stripe Dashboard. If you buy one there with a Stripe account of your own, add it here with a fresh pairing code from the reader, as above. Use the pairing code rather than the reader\'s serial number or order number: those two only register a reader to the Stripe account that ordered it.\nSetting one up\n1. Charge the reader and switch it on. Stripe recommends leaving it plugged in and on, even when not in use, so it receives software updates.\n2. Connect it to the internet: Wi-Fi from the reader\'s Settings, or Ethernet through Stripe\'s optional dock or hub. Stripe\'s setup guides for '
|
|
5347
5431
|
},
|
|
5348
5432
|
{
|
|
5349
5433
|
path: '/commerce-and-bookings/commerce/pos-hardware',
|
|
5350
5434
|
title: 'POS hardware',
|
|
5351
5435
|
heading: 'Buy a reader from Aglyn',
|
|
5352
5436
|
anchor: '#buy-a-reader-from-aglyn',
|
|
5353
|
-
text: 'Rolling out Buying readers from Aglyn is not yet available on aglyn.com-hosted workspaces. Until it is, no Hardware card appears on Products → Point of sale; buy a reader from Stripe and add it with its pairing code, as in Getting a reader.\nThe Hardware card on Products → Point of sale sells Stripe\'s card readers and their accessories. Aglyn places the order with Stripe, and Stripe ships it straight to you. Because Aglyn sells it, the reader is ready to take payments through Aglyn: add it to a register with its pairing code when it arrives.\nWhat\'s on offer\n| Item | What it\'s for |\n| Stripe Reader S710 | Handheld
|
|
5437
|
+
text: 'Rolling out Buying readers from Aglyn is not yet available on aglyn.com-hosted workspaces. Until it is, no Hardware card appears on Products → Point of sale; buy a reader from Stripe and add it with its pairing code, as in Getting a reader.\nThe Hardware card on Products → Point of sale sells Stripe\'s card readers and their accessories. Aglyn places the order with Stripe, and Stripe ships it straight to you. Because Aglyn sells it, the reader is ready to take payments through Aglyn: add it to a register with its pairing code when it arrives.\nWhat\'s on offer\n| Item | What it\'s for |\n| Stripe Reader S710 | Handheld for events and parking lots. It can use 4G with Stripe\'s cellular service, which is billed monthly for each reader; without it, the S710 uses Wi-Fi |\n| Stripe Reader S700 | Handheld or countertop reader on Wi-Fi |\n| Stripe Reader T600 | Countertop reader on Wi-Fi, or on Ethernet with the hub |\n| BBPOS WisePOS E | Countertop reader on Wi-Fi |\n| Stripe Reader M2 | Pairs with the Aglyn POS app on your phone or tablet by Bluetooth |\n| Charging docks for the S700/S710, the WisePOS E and the M2, and the M2 mount | Keep a reader charged and in place at the counter |\n| The Stripe Reader Hub | Connects an S700, S710 or T600 to Ethernet and power |\n| A case for the S700/S710, and spare cables and chargers | Protect a handheld reader, or replace a lost cable or charger |\nThe card shows only what is available to order, with its price.\nPlace an order\n1. Open Products → Point of sale and find the Hardware card.\n2. Choose a quantity for each item, up to 10 of each and 20 items in one order.\n3. Choose a shipping speed. The summary shows the items, shipping and, where tax applies, says it is calculated at checkout.\n4. Select Check out in the card\'s header. Enter the shipping add'
|
|
5354
5438
|
},
|
|
5355
5439
|
{
|
|
5356
5440
|
path: '/commerce-and-bookings/commerce/pos-hardware',
|
|
@@ -5399,7 +5483,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
5399
5483
|
title: 'Running the register',
|
|
5400
5484
|
heading: '',
|
|
5401
5485
|
anchor: '',
|
|
5402
|
-
text: 'Running the register\nEverything a till needs between the first sale of the day and the last: a counted cash drawer, a quick way to change who is ringing, the customer in front of you, returns, and a proper printed receipt. All of it runs from the register at /{site}/pos. Staff PINs are set on Products → Point of sale, and the register\'s rules under the site\'s Admin → Plugins → Commerce.\nPlan availability These are part of the point of sale, so they need Pro or above, like the register itself. Only members who can use the register —
|
|
5486
|
+
text: 'Running the register\nEverything a till needs between the first sale of the day and the last: a counted cash drawer, a quick way to change who is ringing, the customer in front of you, returns, and a proper printed receipt. All of it runs from the register at /{site}/pos. Staff PINs are set on Products → Point of sale, and the register\'s rules under the site\'s Admin → Plugins → Commerce.\nPlan availability These are part of the point of sale, so they need Pro or above, like the register itself. Only members who can use the register — anyone with the Use the point of sale permission for the site, which owners, admins and editors hold by default — can open shifts, switch in, look customers up or take returns. Each also needs its own finer permission.'
|
|
5403
5487
|
},
|
|
5404
5488
|
{
|
|
5405
5489
|
path: '/commerce-and-bookings/commerce/pos-operations',
|
|
@@ -5413,21 +5497,21 @@ export const DOCS_SECTION_INDEX = [
|
|
|
5413
5497
|
title: 'Running the register',
|
|
5414
5498
|
heading: 'Day and event totals',
|
|
5415
5499
|
anchor: '#day-and-event-totals',
|
|
5416
|
-
text: 'When several people take payments on their own registers, Commerce → Orders → Day totals adds the whole day up across every register, shift and cashier. It opens on today, counted in your site\'s time zone. Pick From and To dates to see another day or a whole event, up to 31 days at a time, and Today to come back.\n- Totals: orders, gross sales, discounts, tax, tips, refunds and net sales. Only sales rung at a register count; online orders don\'t.\n- By tender: cash, card, gift card, room charge and store credit, each with what it took, what was refunded to it, and the net.\n- By register and by cashier: each register\'s and each staff member\'s orders, gross sales, tips, refunds and net sales. Every table sorts by any of its columns.\n- Cash drawers: the starting cash of the shifts that opened on those days, cash sales, paid in, paid out, safe drops and cash refunds, then what the closed drawers should have held against what was counted, and whether they came up short or over. Drawers still open show what they should hold now.\n- Shifts: every shift that opened, closed or was still open on those days, with its register, times, starting cash, net sales, expected and counted cash and the variance.\nSales count on the day they were rung, and refunds on the day they were given back, whenever the sale was
|
|
5500
|
+
text: 'When several people take payments on their own registers, Commerce → Orders → Day totals adds the whole day up across every register, shift and cashier. It opens on today, counted in your site\'s time zone. Pick From and To dates to see another day or a whole event, up to 31 days at a time, and Today to come back.\n- Totals: orders, gross sales, discounts, tax, tips, refunds and net sales. Only sales rung at a register count; online orders don\'t.\n- By tender: cash, card, gift card, room charge and store credit, each with what it took, what was refunded to it, and the net.\n- By register and by cashier: each register\'s and each staff member\'s orders, gross sales, tips, refunds and net sales. Every table sorts by any of its columns.\n- Cash drawers: the starting cash of the shifts that opened on those days, cash sales, paid in, paid out, safe drops and cash refunds, then what the closed drawers should have held against what was counted, and whether they came up short or over. Drawers still open show what they should hold now.\n- Shifts: every shift that opened, closed or was still open on those days, with its register, times, starting cash, net sales, expected and counted cash and the variance.\nSales count on the day they were rung, and refunds on the day they were given back, whenever the sale was and wherever the refund was given: at a register, from the order\'s Refund button in Commerce → Orders, or in your Stripe Dashboard. A refund from the order or from Stripe counts under the register the sale was rung at, under the person who gave it (Stripe refunds show as No cashier recorded), and against the card it went back to. It moves no cash drawer, so shift reports leave it out. The day is your site\'s, so a refund at 11:59 PM counts that day and one at midnight counts the next'
|
|
5417
5501
|
},
|
|
5418
5502
|
{
|
|
5419
5503
|
path: '/commerce-and-bookings/commerce/pos-operations',
|
|
5420
5504
|
title: 'Running the register',
|
|
5421
5505
|
heading: 'Check-in at the window',
|
|
5422
5506
|
anchor: '#check-in-at-the-window',
|
|
5423
|
-
text: 'For a track, a campground, a lot or an event: people who bought a day pass, camping or parking online, or at the register, are looked up at the window, checked in and handed a wristband.\nChoose what needs check-in. In the product editor, under Check-in, turn on Needs check-in for a ride pass, a camping spot or parking. People per item says how many people one item admits: buy 3 of a pass with 1 person per item and that is 3 check-ins; a family camping spot set to 4 admits 4. A product with options can set each variant on its own, so a spectator ticket on the same product needs no wristband. Turning it on also covers what was already sold today.\
|
|
5507
|
+
text: 'For a track, a campground, a lot or an event: people who bought a day pass, camping or parking online, or at the register, are looked up at the window, checked in and handed a wristband.\nChoose what needs check-in. In the product editor, under Check-in, turn on Needs check-in for a ride pass, a camping spot or parking. People per item says how many people one item admits: buy 3 of a pass with 1 person per item and that is 3 check-ins; a family camping spot set to 4 admits 4. A product with options can set each variant on its own, so a spectator ticket on the same product needs no wristband. Turning it on also covers what was already sold today.\nLet buyers pick the day. Under Check-in, turn on Ask the buyer which day to sell passes ahead. The product page then offers an optional Day you will use it date picker, from today (on your site\'s calendar) up to two years ahead, never a day that has passed. A buyer who leaves it blank gets a pass for the day they buy. Each day is its own line in the cart, the cart and the order show the day ("For Sat, Nov 1"), and checkout turns away a pass whose day passed while it sat in the cart. A variant with its own check-in setting has its own Ask which day switch. Sales at the register are for the day they are rung.\nWhat is due on a day. Each paid order\'s check-in items are due on the day the buyer picked, or, when they picked none, on the day the order was placed, counted in your site\'s time zone, whether it was bought online or at the register. Guests whose stay covers the day are due too, one check-in for each day of the stay, or one for each guest (see Stays: one check-in or one per guest below). An item refunded on its own, or an order refunded in full or canceled, is no longer due; anyone already checked in stays on the list.\nRain c'
|
|
5424
5508
|
},
|
|
5425
5509
|
{
|
|
5426
5510
|
path: '/commerce-and-bookings/commerce/pos-operations',
|
|
5427
5511
|
title: 'Running the register',
|
|
5428
5512
|
heading: 'Staff PINs',
|
|
5429
5513
|
anchor: '#staff-pins',
|
|
5430
|
-
text: 'A shared tablet stays signed in; each person switches in with their own PIN instead of signing out.\n- Set your 4–6 digit PIN on the Staff PINs card on Products → Point of sale. A PIN that is one digit repeated or a straight run like 1234 is refused.\n- At the register, tap Switch cashier, pick your name and enter your PIN. Every sale, shift and return you ring is recorded under you until someone else switches in.\n- A PIN never grants more than your role: the register checks your role and your Manage POS permission each time it is used, so removing someone\'s access takes effect on their next tap.\n- Five wrong PINs in a row lock that person out for 15 minutes.
|
|
5514
|
+
text: 'A shared tablet stays signed in; each person switches in with their own PIN instead of signing out.\n- Set your 4–6 digit PIN on the Staff PINs card on Products → Point of sale. A PIN that is one digit repeated or a straight run like 1234 is refused.\n- At the register, tap Switch cashier, pick your name and enter your PIN. Every sale, shift and return you ring is recorded under you until someone else switches in.\n- A PIN never grants more than your role: the register checks your role and your Manage POS permission each time it is used, so removing someone\'s access takes effect on their next tap.\n- Five wrong PINs in a row lock that person out for 15 minutes. Anyone with Approve refunds over the register\'s limit can reset or remove anyone\'s PIN, which also lifts a lockout.\n- Lock the register after (minutes idle) in Admin → Plugins → Commerce locks the register after that long without a tap, so the next person has to enter their PIN. Tap Lock to lock it yourself.\nPINs are stored only as salted hashes and nobody can read them back, not even a workspace admin.'
|
|
5431
5515
|
},
|
|
5432
5516
|
{
|
|
5433
5517
|
path: '/commerce-and-bookings/commerce/pos-operations',
|
|
@@ -5441,7 +5525,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
5441
5525
|
title: 'Running the register',
|
|
5442
5526
|
heading: 'Returns and exchanges',
|
|
5443
5527
|
anchor: '#returns-and-exchanges',
|
|
5444
|
-
text: 'Tap Return on the register, then type the order number, scan the barcode at the foot of the receipt, or enter the customer\'s email.\n1. Pick the items coming back, how many of each, and the reason.\n2. Leave Put the items back in stock on to restock them at the register\'s location.\n3. Refund. The money goes back to how the customer paid:\n- Card — refunded through Stripe to the same card.\n- Cash — paid out of the drawer; the register tells you how much to hand over, and the open shift counts it.\n- Gift card — added back to the same gift card. A voided or frozen gift card cannot take a refund.\n- Room charge — taken back off the stay\'s folio.\nA sale paid more than one way is refunded to cards first, then gift cards and room charges, and to cash last. Turn on Split by hand to choose the amounts yourself; a payment can never take back more than it paid.\nEach unit\'s refund is its price less its share of any discount, plus its share of the tax, so returning items one at a time refunds exactly what returning them together would.\nEvery register return is also listed under Returns, beside the returns customers ask for online, already marked refunded. Items a customer has already asked to return online are held for that return: the register shows them as In an online return and will not refund them a second time.\nExchanges: after the return, tap Ring up the exchange to start a new sale for the same customer.\nRefund limits and manager approval\nCashier refund limit ($) in Admin → Plugins → Commerce is the largest return a cashier may refund without a manager. It is $0 by default, so every register refund needs a manager until you raise it. Above the limit the register asks
|
|
5528
|
+
text: 'Tap Return on the register, then type the order number, scan the barcode at the foot of the receipt, or enter the customer\'s email.\n1. Pick the items coming back, how many of each, and the reason.\n2. Leave Put the items back in stock on to restock them at the register\'s location.\n3. Refund. The money goes back to how the customer paid:\n- Card — refunded through Stripe to the same card.\n- Cash — paid out of the drawer; the register tells you how much to hand over, and the open shift counts it.\n- Gift card — added back to the same gift card. A voided or frozen gift card cannot take a refund.\n- Room charge — taken back off the stay\'s folio.\nA sale paid more than one way is refunded to cards first, then gift cards and room charges, and to cash last. Turn on Split by hand to choose the amounts yourself; a payment can never take back more than it paid.\nEach unit\'s refund is its price less its share of any discount, plus its share of the tax, so returning items one at a time refunds exactly what returning them together would.\nEvery register return is also listed under Returns, beside the returns customers ask for online, already marked refunded. Items a customer has already asked to return online are held for that return: the register shows them as In an online return and will not refund them a second time.\nExchanges: after the return, tap Ring up the exchange to start a new sale for the same customer.\nRefund limits and manager approval\nCashier refund limit ($) in Admin → Plugins → Commerce is the largest return a cashier may refund without a manager. It is $0 by default, so every register refund needs a manager until you raise it. Above the limit the register asks someone with Approve refunds over the register\'s limit to enter their PIN to approve that one refund, and anyone '
|
|
5445
5529
|
},
|
|
5446
5530
|
{
|
|
5447
5531
|
path: '/commerce-and-bookings/commerce/pos-operations',
|
|
@@ -6050,7 +6134,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
6050
6134
|
title: 'Use ShippingEasy with Aglyn',
|
|
6051
6135
|
heading: 'Connect ShippingEasy',
|
|
6052
6136
|
anchor: '#connect',
|
|
6053
|
-
text: 'The ShippingEasy card, on Products → Shipping & delivery, sends each paid order to your ShippingEasy account and takes each label back, using the API keys from Before you start. You need
|
|
6137
|
+
text: 'The ShippingEasy card, on Products → Shipping & delivery, sends each paid order to your ShippingEasy account and takes each label back, using the API keys from Before you start. You need the Connect shipping apps permission, which a site\'s admins have.\n1. In Aglyn, open Products → Shipping & delivery and find the ShippingEasy card.\n2. Select Connect ShippingEasy and paste the API key, API secret and store API key. Aglyn checks them with ShippingEasy before it saves them, and keeps the secret encrypted. Nobody can see the secret in Aglyn again, including you.\n3. The card shows a Callback URL. Copy it and paste it into your API store\'s settings in ShippingEasy, so each label you buy there comes back to Aglyn.\n4. Select Send open orders to send the orders that were paid before you connected.'
|
|
6054
6138
|
},
|
|
6055
6139
|
{
|
|
6056
6140
|
path: '/commerce-and-bookings/commerce/use-shippingeasy',
|
|
@@ -6099,7 +6183,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
6099
6183
|
title: 'Use ShipStation with Aglyn',
|
|
6100
6184
|
heading: 'Connect ShipStation',
|
|
6101
6185
|
anchor: '#connect',
|
|
6102
|
-
text: 'The ShipStation card, on Products → Shipping & delivery, connects your store to ShipStation as a Custom Store, so ShipStation imports your paid orders and sends each shipment back. You need
|
|
6186
|
+
text: 'The ShipStation card, on Products → Shipping & delivery, connects your store to ShipStation as a Custom Store, so ShipStation imports your paid orders and sends each shipment back. You need the Connect shipping apps permission, which a site\'s admins have.\n1. In Aglyn, open Products → Shipping & delivery and find the ShipStation card.\n2. Select Connect ShipStation. The card shows the URL to custom XML page, a username and a password. Aglyn keeps the password encrypted, and anyone with Connect shipping apps can select Show on the card to see it again later.\n3. In ShipStation, go to Settings → Selling Channels → Store Setup, select Connect a Store or Marketplace and choose Custom Store.\n4. Paste the URL, username and password from Aglyn.\n5. Type the status names exactly as the Aglyn card shows them. ShipStation matches them letter for letter:\n| ShipStation field | Type |\n| Unpaid Status | unpaid |\n| Paid Status | paid |\n| Shipped Status | shipped |\n| Canceled Status | canceled |\n| On-Hold Status | onhold |\n6. Select Test Connection, then Connect.'
|
|
6103
6187
|
},
|
|
6104
6188
|
{
|
|
6105
6189
|
path: '/commerce-and-bookings/commerce/use-shipstation',
|
|
@@ -6120,7 +6204,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
6120
6204
|
title: 'Use ShipStation with Aglyn',
|
|
6121
6205
|
heading: 'Make a new password or disconnect',
|
|
6122
6206
|
anchor: '#manage',
|
|
6123
|
-
text: '- Show next to the password shows it again. Only
|
|
6207
|
+
text: '- Show next to the password shows it again. Only someone with Connect shipping apps can see it, and each time it\'s shown is recorded in the site\'s activity.\n- New password on the ShipStation card makes a new password and ends the old one at once. Paste the new password into ShipStation\'s store settings.\n- Disconnect stops ShipStation reading your orders. Shipments it sends afterwards are refused. Orders it already shipped stay shipped.\nThe card also shows when ShipStation last imported orders and last sent a shipment, so you can tell the connection is working.'
|
|
6124
6208
|
},
|
|
6125
6209
|
{
|
|
6126
6210
|
path: '/commerce-and-bookings/commerce/use-shipstation',
|
|
@@ -6141,7 +6225,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
6141
6225
|
title: 'Waivers',
|
|
6142
6226
|
heading: '',
|
|
6143
6227
|
anchor: '',
|
|
6144
|
-
text: 'Waivers\nWaivers replaces the clipboard. You write your waiver once, in your own words, and riders and guests sign it:\n- before they arrive, from a link or a QR code on their own phone, or from a Sign waiver element on your site;\n- at the window, on a tablet you hand them;\n- on paper, if they\'d rather, and you record it with a photo of the page.\nA parent or guardian can sign for riders under 18. Every signature keeps the exact words that were signed, and the signer gets a signed copy as a PDF by email. Staff can find anyone\'s waiver by name, email or day.\nWaivers come with every plan that includes selling, at no extra cost. Open them from the site\'s Waivers tab.\nWho can use it
|
|
6228
|
+
text: 'Waivers\nWaivers replaces the clipboard. You write your waiver once, in your own words, and riders and guests sign it:\n- before they arrive, from a link or a QR code on their own phone, or from a Sign waiver element on your site;\n- at the window, on a tablet you hand them;\n- on paper, if they\'d rather, and you record it with a photo of the page.\nA parent or guardian can sign for riders under the waiver\'s adult age, 18 unless you change it. Every signature keeps the exact words that were signed, and the signer gets a signed copy as a PDF by email. Staff can find anyone\'s waiver by name, email or day.\nWaivers come with every plan that includes selling, at no extra cost. Open them from the site\'s Waivers tab.\nWho can use it Two permissions decide who can do what in Waivers. Both are on for a site\'s admins and editors and off for its viewers, and either can be set in a custom role or for one member:\n- Manage waivers: write, publish and retire waivers, and void a signature.\n- Collect waivers: see who signed, sign riders in at the window and record paper waivers.\nThe permission decides, not the role: someone at the window whose role is viewer can collect waivers once they are allowed Collect waivers, and an admin a custom role denies it can\'t. Viewers can\'t see signatures otherwise, because they hold people\'s dates of birth and their children\'s names.\nBoth belong to the site. An editor who works across the whole workspace but has Viewer or Author access to one site holds neither there, unless that site\'s Users card allows it for them, or their custom role or own permissions keep it on such sites — see A site\'s access narrows its register and waivers.'
|
|
6145
6229
|
},
|
|
6146
6230
|
{
|
|
6147
6231
|
path: '/commerce-and-bookings/commerce/waivers',
|
|
@@ -6155,7 +6239,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
6155
6239
|
title: 'Waivers',
|
|
6156
6240
|
heading: 'Write a waiver',
|
|
6157
6241
|
anchor: '#write-a-waiver',
|
|
6158
|
-
text: '1. Open Waivers and select New waiver.\n2. Give it a Title, like Rider release and waiver. Signers see it at the top.\n3. Write the Waiver text in your own words. Use the toolbar for headings, bold text and lists.\n4. Under Boxes every signer must tick, add the statements a signer must agree to one by one, like I have read this waiver and I understand it. Nobody can sign until every box is ticked.\n5. Leave A parent or guardian may sign for riders under 18 on if minors ride.\
|
|
6242
|
+
text: '1. Open Waivers and select New waiver.\n2. Give it a Title, like Rider release and waiver. Signers see it at the top.\n3. Write the Waiver text in your own words. Use the toolbar for headings, bold text and lists.\n4. Under Boxes every signer must tick, add the statements a signer must agree to one by one, like I have read this waiver and I understand it. Nobody can sign until every box is ticked.\n5. Choose the Adult age, from 18 to 21. Signers younger than that need a parent or guardian to sign for them (see Minors). It starts at 18.\n6. Leave A parent or guardian may sign for riders under 18 on if minors ride. The number in it follows the adult age you chose.\n7. Choose how long one signature is good for (see How long a signature lasts).\n8. Select Save, then Publish.\nA waiver takes signatures only while it is Published. Unpublish pauses it, and Retire stops it for good. Neither one touches the signatures already taken.\nYour waiver, your words Aglyn doesn\'t write or review what your waiver says. Ask your own lawyer what yours should cover and how your state treats waivers, especially ones signed for minors.\nVersions\nEvery time you save a change to the words, the boxes, the adult age, the minors setting or how long it lasts, the waiver gets a new version. Version history lists each one. Signatures already taken keep the version they signed and stay valid for the days they cover, and their signed copy shows those words, not the new ones. If a waiver changes while somebody is filling it in, they\'re asked to read the new version before they sign.'
|
|
6159
6243
|
},
|
|
6160
6244
|
{
|
|
6161
6245
|
path: '/commerce-and-bookings/commerce/waivers',
|
|
@@ -6169,7 +6253,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
6169
6253
|
title: 'Waivers',
|
|
6170
6254
|
heading: 'Share it before riders arrive',
|
|
6171
6255
|
anchor: '#share-it-before-riders-arrive',
|
|
6172
|
-
text: 'On the Waivers card, select Share beside a waiver:\n- Copy link gives you a link to send in a confirmation, a text or a post.\n- Download QR code gives you a code to print for the gate, the window or your ticket emails.\nThe link opens a page made for phones. The signer reads the waiver, fills in their name, email, phone and date of birth, ticks the boxes, signs with a finger or types their name
|
|
6256
|
+
text: 'On the Waivers card, select Share beside a waiver:\n- Copy link gives you a link to send in a confirmation, a text or a post.\n- Download QR code gives you a code to print for the gate, the window or your ticket emails.\nThe link opens on your own site, at /sign-waiver, with your site\'s header and footer: on your custom domain when one is connected, or on your site\'s .aglyn.app address. If you connect a custom domain later, links and QR codes you already handed out still work: your .aglyn.app address sends signers on to it.\nThe page is made for phones. The signer reads the waiver, fills in their name, email, phone and date of birth, ticks the boxes, agrees to sign electronically, and signs with a finger or types their name. They see a confirmation with Download your signed copy (PDF), and a signed copy goes to their email.\nSigning electronically {#signing-electronically}\nBefore the signature, under Signing electronically, the signer ticks a box agreeing to sign electronically, for themselves and any minors they list. The wording says what that covers (this waiver and its signed copy), what they need (a device with a web browser, and a way to open a PDF), that they can sign on paper instead, and that after signing they can ask you for a paper copy at no charge, change the email for their copy, or withdraw their agreement for anything not yet sent, by contacting you. It names your business and how to reach you: the site\'s Contact email and Contact phone, or else the Support email under Setup → Details → Business details. The signing page shows the same contact under the waiver\'s title, and the signed copy email repeats it. Add one so signers know how to reach you.\nEach signature keeps the exact words its signer agreed to, with their version. Signatures taken under the earlie'
|
|
6173
6257
|
},
|
|
6174
6258
|
{
|
|
6175
6259
|
path: '/commerce-and-bookings/commerce/waivers',
|
|
@@ -6183,14 +6267,14 @@ export const DOCS_SECTION_INDEX = [
|
|
|
6183
6267
|
title: 'Waivers',
|
|
6184
6268
|
heading: 'At check-in',
|
|
6185
6269
|
anchor: '#at-check-in',
|
|
6186
|
-
text: 'When you check people in at the register (see Check-in at the window), each customer shows their waiver for the day:\n- Waiver signed: a signature covers today.\n- Signed for 2 of 3 riders: a signature covers today, but for fewer people than the customer is checking in. Have the rest sign.\n- Waiver needed or Waiver not on file: nobody has signed for today yet.\nSelect Sign waiver to sign right there on the register\'s device, the same way as at the window. The status updates when you\'re done
|
|
6270
|
+
text: 'When you check people in at the register (see Check-in at the window), each customer shows their waiver for the day:\n- Waiver signed: a signature covers today.\n- Signed for 2 of 3 riders: a signature covers today, but for fewer people than the customer is checking in. Have the rest sign.\n- Waiver needed or Waiver not on file: nobody has signed for today yet.\n- Waiver not matched — check by name: no waiver was signed with the customer\'s email, and the register doesn\'t know their date of birth, so it can\'t tell whether someone signed for them under another email, such as a parent. It never guesses from a name alone.\nSelect Sign waiver to sign right there on the register\'s device, the same way as at the window. The status updates when you\'re done.\nHow a rider is matched to a waiver {#how-a-rider-is-matched}\nA customer is matched to a waiver by the email they bought with first. When no waiver was signed with that email, they are matched by their full name and date of birth together: the person who signed, or a minor a parent or guardian listed on their waiver. Capital letters and extra spaces in the name don\'t matter; the spelling and the date of birth must be the same. A name on its own is never a match, because two riders can share one.\nWhen the customer is one of your contacts and their record on this site has a Birthdate, that birth date is used, with their name, so you don\'t have to ask. A birth date another of your sites keeps is never used.\nWhen a customer shows Waiver not matched — check by name, select Find by name. Ask the rider their date of birth, enter it beside their name and select Check: it says whether a signed waiver covers them today. Below it, the signatures search opens on their name, so you can read through the waivers signed with it.\nOn the customer d'
|
|
6187
6271
|
},
|
|
6188
6272
|
{
|
|
6189
6273
|
path: '/commerce-and-bookings/commerce/waivers',
|
|
6190
6274
|
title: 'Waivers',
|
|
6191
6275
|
heading: 'Minors',
|
|
6192
6276
|
anchor: '#minors',
|
|
6193
|
-
text: '
|
|
6277
|
+
text: 'Each waiver sets its own Adult age, from 18 to 21. It starts at 18, and every waiver written before the setting existed reads as 18. The examples here use 18.\nWhen A parent or guardian may sign for riders under 18 is on, the signer can turn on I\'m also signing for riders under 18 and add each minor\'s full name and date of birth, then say how they\'re related to them, like Parent or Legal guardian. One signature covers the adult and every minor on it.\nThe signer must be the adult age or older on the day they sign. Anyone younger can\'t sign for themselves, and a "minor" who is the adult age or older is asked to sign their own waiver. Someone whose birthday is today counts as that age today.\nChanging the adult age starts a new version. Signatures already taken stay valid for the version they signed.'
|
|
6194
6278
|
},
|
|
6195
6279
|
{
|
|
6196
6280
|
path: '/commerce-and-bookings/commerce/waivers',
|
|
@@ -6211,14 +6295,21 @@ export const DOCS_SECTION_INDEX = [
|
|
|
6211
6295
|
title: 'Waivers',
|
|
6212
6296
|
heading: 'Contacts',
|
|
6213
6297
|
anchor: '#contacts',
|
|
6214
|
-
text: 'A signer who gives an email is added to your contacts, or matched to the contact you already have for them, with the signing on their timeline.'
|
|
6298
|
+
text: 'A signer who gives an email is added to your contacts, or matched to the contact you already have for them, with the signing on their timeline. Their source reads Waiver signed in your contacts list, on their record and in the contact reports.'
|
|
6215
6299
|
},
|
|
6216
6300
|
{
|
|
6217
6301
|
path: '/commerce-and-bookings/commerce/waivers',
|
|
6218
6302
|
title: 'Waivers',
|
|
6219
6303
|
heading: 'Privacy',
|
|
6220
6304
|
anchor: '#privacy',
|
|
6221
|
-
text: 'Signatures are stored privately in your workspace. They\'re never in your media library, and only the people with Collect waivers or Manage waivers can see them.
|
|
6305
|
+
text: 'Signatures are stored privately in your workspace. They\'re never in your media library, and only the people with Collect waivers or Manage waivers can see them.'
|
|
6306
|
+
},
|
|
6307
|
+
{
|
|
6308
|
+
path: '/commerce-and-bookings/commerce/waivers',
|
|
6309
|
+
title: 'Waivers',
|
|
6310
|
+
heading: 'How long signed waivers are kept',
|
|
6311
|
+
anchor: '#keeping-signed-waivers',
|
|
6312
|
+
text: 'A signed waiver is your record of what a rider agreed to. Every one is kept for your retention period, then deleted, with its drawn signature and any photo of a paper page. A signature\'s record shows Kept until and the date it will be deleted.\nThe retention period is counted from the last day the waiver covers. For a waiver signed for minors, it\'s counted from the day the youngest of them reaches the waiver\'s adult age, if that\'s later.\nWhen you erase a person from your workspace, the waivers they signed are kept for the same period, not erased:\n- its link to the person\'s contact is removed, because the contact is erased;\n- on the Signatures card its status reads Kept until and the date it will be deleted, and its record says when the person asked;\n- a waiver whose period has already run out is deleted when the erasure runs.\nTo set the period:\n1. Go to Sites → your site → Admin → Plugins and select Waivers.\n2. On the Waivers settings card, set Years to keep a signed waiver, from 1 to 30. It starts at 7.\n3. Press Save site settings.\nTo give every site in a workspace the same period, set it on the plugin\'s workspace page under Plugins. Each site follows that period unless you change it on the site\'s own page. A change applies to every waiver already signed on the site within the hour, as well as to new ones: a longer period keeps them longer, and a shorter one deletes those it has already run out on.\nAsk your lawyer Aglyn doesn\'t know how long you need to keep a signed waiver. Ask your own lawyer, especially about waivers signed for minors.'
|
|
6222
6313
|
},
|
|
6223
6314
|
{
|
|
6224
6315
|
path: '/commerce-and-bookings/commerce/waivers',
|
|
@@ -6673,7 +6764,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
6673
6764
|
title: 'The contact record',
|
|
6674
6765
|
heading: 'Deleting and erasing',
|
|
6675
6766
|
anchor: '#deleting-and-erasing',
|
|
6676
|
-
text: 'Delete contact removes the person from this site\'s CRM — its notes, tags and timeline. Other sites in your workspace that captured the same person keep their own records, and the person\'s form submissions, orders, bookings and membership records are separate and are deleted from their own pages. It is a housekeeping act, and it is not a privacy erasure.\nWhen no other site holds the person, the record itself is deleted, and what pointed at it is tidied in the same act: every other contact\'s Reports to that named them is cleared, on every site, and the person is taken off every deal\'s contact roles — a deal whose Primary they were is left with none. When other sites still hold the person, your site lets go of them, and the Reports to of your site\'s contacts that named them is cleared; the other sites\' are not. The same happens for a contact deleted over the REST API.\nDeleting a contact does not forget that they turned down your marketing email. If the person said no to email from a site, that answer is kept after the record is gone, and adding their address to an email list is still refused, even when you confirm you have permission. It stops applying only when the person opts in again themselves, for example through one of your forms.\nErase this person is the privacy erasure — what you use when someone asks to be forgotten under GDPR, the CCPA or any similar law. It removes the person from every site in the workspace, whoever captured them, and it cannot be undone.
|
|
6767
|
+
text: 'Delete contact removes the person from this site\'s CRM — its notes, tags and timeline. Other sites in your workspace that captured the same person keep their own records, and the person\'s form submissions, orders, bookings and membership records are separate and are deleted from their own pages. It is a housekeeping act, and it is not a privacy erasure.\nWhen no other site holds the person, the record itself is deleted, and what pointed at it is tidied in the same act: every other contact\'s Reports to that named them is cleared, on every site, and the person is taken off every deal\'s contact roles — a deal whose Primary they were is left with none. When other sites still hold the person, your site lets go of them, and the Reports to of your site\'s contacts that named them is cleared; the other sites\' are not. The same happens for a contact deleted over the REST API.\nDeleting a contact does not forget that they turned down your marketing email. If the person said no to email from a site, that answer is kept after the record is gone, and adding their address to an email list is still refused, even when you confirm you have permission. It stops applying only when the person opts in again themselves, for example through one of your forms.\nErase this person is the privacy erasure — what you use when someone asks to be forgotten under GDPR, the CCPA or any similar law. It removes the person from every site in the workspace, whoever captured them, and it cannot be undone. It takes the Privacy requests permission over the whole workspace, which owners and admins hold by default; for everyone else the item is present but disabled, and its tooltip says why. It is offered on a site\'s hub and on the organization\'s alike. The same erasure can be filed by address, without opening a re'
|
|
6677
6768
|
},
|
|
6678
6769
|
{
|
|
6679
6770
|
path: '/content-and-data/crm/contact-record',
|
|
@@ -7821,7 +7912,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
7821
7912
|
title: 'Datasets & Dynamic Content',
|
|
7822
7913
|
heading: 'Typed documents',
|
|
7823
7914
|
anchor: '#typed-documents',
|
|
7824
|
-
text: 'Edit records in the typed document editor — each field renders the right input for its type, so data stays clean.'
|
|
7915
|
+
text: 'Edit records in the typed document editor — each field renders the right input for its type, so data stays clean.\nSample rows {#sample-rows}\nA site started with AI fills a list your answers gave no entries for with sample rows, so its pages look complete from the start. Each one is marked Sample in the records table, and its editor asks you to replace it with your own. Change its values and press Save: the row is yours, and the mark is gone. Delete the samples you do not need. Visitors to your site never see the mark.'
|
|
7825
7916
|
},
|
|
7826
7917
|
{
|
|
7827
7918
|
path: '/content-and-data/datasets/overview',
|
|
@@ -9048,6 +9139,13 @@ export const DOCS_SECTION_INDEX = [
|
|
|
9048
9139
|
anchor: '#zones-a-plugin-hosts--plugin-zones',
|
|
9049
9140
|
text: 'CONSOLEWIDGETSLOTS is the catalog of zones the console SHELL draws, and a slot id has always been an open string — so a plugin could already host a zone of its own on a page it owns. What it could not do is say what that zone HANDS a widget. A zone token carries the props type, so the plugin declares both.\n| API | Semantics |\n| definePluginZone (id) | The token. Pure — it registers nothing and reads nothing — so a plugin may define it at module scope and register it from its register fn. |\n| registerPluginZone({ zone, label, surface, description?, layout? }, { pluginId? }) | Publishes it. Owner = the loader\'s marker inside a register fn, else pluginId; no owner throws, and a zone id another plugin declared throws naming both while the incumbent keeps its zone. The same plugin re-declaring replaces its own. |\n| layout | stack (the default): the zone is one block of the page, its widgets are cards, and it takes no room when nothing drew. bare: the zone adds no element, because each widget is one item of a layout the HOST draws — a button in a row of actions, a control beside a form\'s fields, a dialog that portals out. The shell reads it for a plugin-hosted zone; the core catalog\'s zones keep the layouts the console gives them. |\n| listPluginZones() / pluginZone(id) / pluginIdForZone(id) | Every declared zone with its owner, one by id, and the owner alone. |\n| PluginZoneProps | The props type, off the token. |\nA token ships nothing. It is { id }, and props never holds a value — the props are carried at the type level and erased. That is load-bearing, not tidy: the zone catalog is on the published page\'s static graph, so a declaration that put prop SHAPES there would make every published page carry the console\'s vocabulary. Import this module by its own subpath (@aglyn/agly'
|
|
9050
9141
|
},
|
|
9142
|
+
{
|
|
9143
|
+
path: '/developers/plugins/reference/plugin-manager-api',
|
|
9144
|
+
title: 'Plugin-manager API reference',
|
|
9145
|
+
heading: 'A screen on a paired customer display — `plugin-customer-display`',
|
|
9146
|
+
anchor: '#a-screen-on-a-paired-customer-display--plugin-customer-display',
|
|
9147
|
+
text: 'A register can pair a screen that faces the customer. That screen belongs to the plugin that runs the register, so another plugin that needs the customer\'s own hands on a screen — a form to fill in, a document to sign — asks for it through core, and neither plugin names the other.\nThe paired display is the authorization. Staff paired it to one store, so a screen\'s page needs no staff session and nothing minted for it: it sends its own server the display\'s credential, and that server asks core who the display is.\n| API | Semantics |\n| CustomerDisplayScreen | { pluginId, path, params }: one of the asking plugin\'s own public console pages (ConsolePublicPage, at /kiosk/{pluginId}{path}), with up to eight short plain string parameters. Never a customer\'s details, and never the display\'s credential: they ride the display\'s state and its address bar. |\n| sanitizeCustomerDisplayScreen(raw) | The screen as a register may store it, or null. The display\'s host checks every screen with it before storing one. |\n| customerDisplayScreenHref(screen, returnTo) | Where the display opens the screen: the plugin\'s page, its parameters, and return set to the display\'s own /kiosk/… address. null for anything out of shape. |\n| customerDisplayReturnPath(search) | The /kiosk/… address the screen\'s page sends the display back to, or null. Nothing outside the console\'s public pages is ever returned. |\n| registerCustomerDisplayHost(host) | Offers { show(screen), close(pluginId) } to every plugin on the page, replacing any other; answers the function that withdraws it, and only it. close takes the plugin\'s screen off the display when it is the one showing, back to the register\'s own screen. |\n| customerDisplayHost() / subscribeCustomerDisplayHost(listener) | The host on this page, or null, and a sub'
|
|
9148
|
+
},
|
|
9051
9149
|
{
|
|
9052
9150
|
path: '/developers/plugins/reference/plugin-manager-api',
|
|
9053
9151
|
title: 'Plugin-manager API reference',
|
|
@@ -9186,7 +9284,14 @@ export const DOCS_SECTION_INDEX = [
|
|
|
9186
9284
|
title: 'Plugin-manager API reference',
|
|
9187
9285
|
heading: 'Sales on the operator\'s tax return — `plugin-tax-return-sources`',
|
|
9188
9286
|
anchor: '#sales-on-the-operators-tax-return--plugin-tax-return-sources',
|
|
9189
|
-
text: 'The operator of a deployment files a sales tax return for the sales it FACILITATED, not only its own. If your plugin sells through the platform\'s own account — tax Stripe computes against the operator\'s registrations lands in the operator\'s balance — your sales belong on that return. The return is the platform\'s: the period, the jurisdiction and registration, the verdict and the export. What you sold, how each row classifies and who is liable for it, and the words a preparer reads about it, are yours.\nAnd declare it, in plugins.config.json:\n| API | Semantics |\n| registerTaxReturnSource(source, { pluginId? }) | One source per plugin; registering again replaces it. |\n| readTaxReturnSources(request) | Every source\'s answer, declared sources first. Never throws, never drops a declared source. |\n| PLUGINTAXRETURNSOURCES | The plugins that declared taxReturnSource, compiled from the config. |\
|
|
9287
|
+
text: 'The operator of a deployment files a sales tax return for the sales it FACILITATED, not only its own. If your plugin sells through the platform\'s own account — tax Stripe computes against the operator\'s registrations lands in the operator\'s balance — your sales belong on that return. The return is the platform\'s: the period, the jurisdiction and registration, the verdict and the export. What you sold, how each row classifies and who is liable for it, and the words a preparer reads about it, are yours.\nAnd declare it, in plugins.config.json:\n| API | Semantics |\n| registerTaxReturnSource(source, { pluginId? }) | One source per plugin; registering again replaces it. Its read answers one section, or a list of them — one per kind of sale the plugin records apart, each its own card. A list is all or nothing: an empty one, or one malformed section, refuses the plugin. |\n| readTaxReturnSources(request) | Every source\'s answer, declared sources first. Never throws, never drops a declared source. |\n| PLUGINTAXRETURNSOURCES | The plugins that declared taxReturnSource, compiled from the config. |\n| operatorSales (on an answer) | The operator\'s OWN sales the section holds — sales where the operator is the seller, not a merchant — by part and jurisdiction, in integer cents. The platform adds the filing jurisdiction\'s to its filing figures and lists every part and jurisdiction beside them. Leave it out for facilitated sales. A part id is unique on the return: a second source stating one already there is refused, so nothing folds in twice. |\n| taxReturnOperatorSalesIn(sections, code) / taxReturnOperatorSalesRows(sections) | The own sales in one jurisdiction summed over every part, and every part and jurisdiction as rows: what the platform folds in and what its breakdown lists. |\nAn unr'
|
|
9288
|
+
},
|
|
9289
|
+
{
|
|
9290
|
+
path: '/developers/plugins/reference/plugin-manager-api',
|
|
9291
|
+
title: 'Plugin-manager API reference',
|
|
9292
|
+
heading: 'Before a closure — `plugin-closure-notices`',
|
|
9293
|
+
anchor: '#before-a-closure--plugin-closure-notices',
|
|
9294
|
+
text: 'When a workspace is deleted or an account is closed, a plugin finishes its share through plugin-org-erasure and plugin-user-erasure. If that share changes something the person paid for or relies on — an order canceled and refunded, a booking released — say so BEFORE they confirm: register a notice source, and the console\'s Delete organization card and Close your account? dialog print your notices above the confirm.\n| API | Semantics |\n| registerClosureNoticeSource(source, { pluginId? }) | One source per plugin; registering again replaces it. |\n| readClosureNotices(subject) | Every source\'s notices, warnings first, each with its pluginId. Never throws: a source that threw, or answered a notice with no words, no severity or no items, is listed in unavailable, and the screens say some details could not be checked. With nothing registered, it runs the app\'s boot step once and asks again. |\n| GET /api/closure-notices?subject=workspace&orgId=… or ?subject=account | The console\'s route the screens call: the workspace\'s owner (or staff), or the signed-in person for their own account. |\nA notice is information, never a gate: nothing it answers holds a closure back.'
|
|
9190
9295
|
},
|
|
9191
9296
|
{
|
|
9192
9297
|
path: '/developers/plugins/reference/plugin-manager-api',
|
|
@@ -9221,7 +9326,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
9221
9326
|
title: 'Plugin-manager API reference',
|
|
9222
9327
|
heading: 'Contact capture — `plugin-contact-capture` (`/server`)',
|
|
9223
9328
|
anchor: '#contact-capture--plugin-contact-capture-server',
|
|
9224
|
-
text: 'A silo that meets a person — a form submission, a member sign-up, an order, a booking — hands them to whichever plugin keeps people, instead of importing its writer.\n| API | Semantics |\n| registerPluginContactCaptureWriter(writer, { pluginId? }) | A slot: a workspace keeps one set of people, so a second plugin\'s writer throws naming both and the incumbent keeps serving. |\n| capturePluginContact(request) | { ok: true, record: \'contact\', contactId, created } or { ok: true, record: \'lead\', leadId, created } — created: false is a returning visit — or { ok: false, reason, error }, or null when no plugin keeps people. null and a refusal are different answers: null is a workspace with no record system, where nothing has gone wrong. |\n| registerPluginContactSource({ source, label, openLabel?, recordKind? }, { pluginId? }) | One source word has one owner. openLabel is what a link from a timeline entry says, and a door with nothing to open declares none. recordKind is the kind plugin-record-routes addresses the silo\'s own document by. |\n| pluginContactCaptureWriter() / listPluginContactSources() / pluginContactSource(source) | The writer with its owner, every declared door, and one by its word. |\
|
|
9329
|
+
text: 'A silo that meets a person — a form submission, a member sign-up, an order, a booking — hands them to whichever plugin keeps people, instead of importing its writer.\n| API | Semantics |\n| registerPluginContactCaptureWriter(writer, { pluginId? }) | A slot: a workspace keeps one set of people, so a second plugin\'s writer throws naming both and the incumbent keeps serving. |\n| capturePluginContact(request) | { ok: true, record: \'contact\', contactId, created } or { ok: true, record: \'lead\', leadId, created } — created: false is a returning visit — or { ok: false, reason, error }, or null when no plugin keeps people. null and a refusal are different answers: null is a workspace with no record system, where nothing has gone wrong. |\n| registerPluginContactSource({ source, label, openLabel?, recordKind? }, { pluginId? }) | One source word has one owner. openLabel is what a link from a timeline entry says, and a door with nothing to open declares none. recordKind is the kind plugin-record-routes addresses the silo\'s own document by. |\n| pluginContactCaptureWriter() / listPluginContactSources() / pluginContactSource(source) | The writer with its owner, every declared door, and one by its word. |\n| labelContactSource(source, fallback?) | How a contact\'s source word reads on screen: the core\'s own label, else the label its plugin declared, else fallback (or the word itself). A plugin cannot relabel a core source. It answers from what this process registered, so declare a door from your declarations entry when the console\'s browser should label it. |\nA refusal is returned, never thrown. Each of these silos has already accepted the submission or taken the money, so a throw would cost it the thing it was recording. reason is invalid-email, band, erased or error, and error is customer'
|
|
9225
9330
|
},
|
|
9226
9331
|
{
|
|
9227
9332
|
path: '/developers/plugins/reference/plugin-manager-api',
|
|
@@ -9347,7 +9452,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
9347
9452
|
title: 'Plugin-manager API reference',
|
|
9348
9453
|
heading: 'Platform events — `plugin-events` (`/server`)',
|
|
9349
9454
|
anchor: '#platform-events--plugin-events-server',
|
|
9350
|
-
text: 'Core raises the events; a plugin that must react to what a core route did subscribes from its serverDeclarations entry, so the subscription is in place before the first request. Payloads carry the actor and the before / after, never a reference to the plugin.\n| Event | Raised by | Payload |\n| org.seatAddons.changed | the add-on checkout and the billing webhook | { orgId, actor, before, after } — the org.seatAddons maps |\n| org.permissions.changed | the member, role and host-member routes | { orgId, actor, subject: { type, id?, name? }, permission, granted } |\n| host.records.removed | the public API\'s deletes and a person\'s erasure, after the delete lands | { orgId, hostIds, collection, records: [{ id, data }] } — each removed document as it stood |\n| host.email.engaged | the email delivery webhook, for a message tagged with a site, after the delivery log records it | { hostId, events: [{ to, type, at, firstOfType }] } — opens and clicks only; firstOfType marks the first of its type for that message |\n| billing.invoice.paid | the billing webhook, once the invoice resolves to a workspace | { orgId, invoiceId, amountPaidCents, currency, paidOutOfBand, metadata } |\n| billing.invoice.failed | the billing webhook | { orgId, invoiceId, amountDueCents, metadata } |\n| billing.invoice.closed | the billing webhook, on voided and on
|
|
9455
|
+
text: 'Core raises the events; a plugin that must react to what a core route did subscribes from its serverDeclarations entry, so the subscription is in place before the first request. Payloads carry the actor and the before / after, never a reference to the plugin.\n| Event | Raised by | Payload |\n| org.seatAddons.changed | the add-on checkout and the billing webhook | { orgId, actor, before, after } — the org.seatAddons maps |\n| org.permissions.changed | the member, role and host-member routes | { orgId, actor, subject: { type, id?, name? }, permission, granted } |\n| org.logo.changed | the organization settings route, once a profile or white-label brand save has answered | { orgId, actor, changed } — changed lists logo, logoDark, brandLogo and brandLogoDark as they moved |\n| org.created | both doors that create a workspace (the new-workspace page and an account\'s first site), once it exists and its welcome is sent | { orgId, owner: { uid, email, emailVerified }, via } — via is workspace-page or first-site |\n| host.records.removed | the public API\'s deletes and a person\'s erasure, after the delete lands | { orgId, hostIds, collection, records: [{ id, data }] } — each removed document as it stood |\n| host.email.engaged | the email delivery webhook, for a message tagged with a site, after the delivery log records it | { hostId, events: [{ to, type, at, firstOfType }] } — opens and clicks only; firstOfType marks the first of its type for that message |\n| billing.invoice.paid | the billing webhook, once the invoice resolves to a workspace | { orgId, invoiceId, amountPaidCents, currency, paidOutOfBand, metadata } |\n| billing.invoice.failed | the billing webhook | { orgId, invoiceId, amountDueCents, metadata } |\n| billing.invoice.closed | the billing webhook, on voided and on marked'
|
|
9351
9456
|
},
|
|
9352
9457
|
{
|
|
9353
9458
|
path: '/developers/plugins/reference/plugin-manager-api',
|
|
@@ -9956,7 +10061,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
9956
10061
|
title: 'Aglyn Assist',
|
|
9957
10062
|
heading: 'What it can do',
|
|
9958
10063
|
anchor: '#what-it-can-do',
|
|
9959
|
-
text: '- Answer how-to questions about building sites, publishing, domains, commerce, bookings, workflows, datasets, team roles, and billing.\n- Link you to the source — under each written answer is a Sources list naming the documentation sections it drew on, each one a link straight to that section. See Where an answer came from.\n- Guide you on the page you\'re on (Starter and up) — the assistant knows which console page you\'re viewing and answers about that page, rather than giving you a general answer you then have to translate.\n- Offer to take you to the right page (Starter and up) — when what you asked for starts somewhere else, it can show a card that opens that page for you. See Offers to open a page.\n- Propose edits in the Besigner (with AI generation on your plan) — ask for a change to the page, component or layout you have open, and it shows exactly what would change before anything does. See Edits in the Besigner.\nAglyn Assist answers and directs. It never saves, publishes or changes a setting on its own. The one thing it can change is the canvas you have open in the Besigner — and only when you apply a change it proposed, as unsaved edits you can undo — so there\'s nothing it can do by
|
|
10064
|
+
text: '- Answer how-to questions about building sites, publishing, domains, commerce, bookings, workflows, datasets, team roles, and billing.\n- Link you to the source — under each written answer is a Sources list naming the documentation sections it drew on, each one a link straight to that section. See Where an answer came from.\n- Guide you on the page you\'re on (Starter and up) — the assistant knows which console page you\'re viewing and answers about that page, rather than giving you a general answer you then have to translate.\n- Offer to take you to the right page (Starter and up) — when what you asked for starts somewhere else, it can show a card that opens that page for you. See Offers to open a page.\n- Propose edits in the Besigner (with AI generation on your plan) — ask for a change to the page, component or layout you have open, and it shows exactly what would change before anything does. See Edits in the Besigner.\n- Answer in your language — ask in any language and it answers in that language. It looks your question up in this documentation, which is in English, so its Sources are English pages.\n- Know where your AI jobs stand — it can see the workspace\'s open AI jobs, so it can tell you that a plan is ready and that nothing is built until you choose Confirm plan. It also knows which plan your workspace is on.\nThe chat takes text only: you can\'t attach a file, an image or a screenshot to a message. To use a picture or a document on your site, upload it on the site\'s Media page; see Media library.\nAglyn Assist answers and directs. It never saves, publishes or changes a setting on its own. The one thing it can change is the canvas you have open in the Besigner — and only when you apply a change it proposed, as unsaved edits you can undo — so there\'s nothing it can do by'
|
|
9960
10065
|
},
|
|
9961
10066
|
{
|
|
9962
10067
|
path: '/getting-started/aglyn-assist',
|
|
@@ -9998,7 +10103,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
9998
10103
|
title: 'Aglyn Assist',
|
|
9999
10104
|
heading: 'Answers straight from the documentation',
|
|
10000
10105
|
anchor: '#answers-straight-from-the-documentation',
|
|
10001
|
-
text: 'Most of what people ask the assistant — "how do I connect a domain", "where do I save a template" — is already written down on these pages. When your question clearly matches one of them, the assistant hands you that page\'s own words, with a link to the full page, instead of writing you a fresh answer.\nYou will recognize these replies: they open with the name of the page, quote it, and close by offering to go further if it missed what you meant.\nThere are two things worth knowing about them.\n- They are never a summary. The text is copied from the documentation exactly as written, so it cannot drift from what the page actually says. If the assistant is not confident which page answers you, it writes you a real answer instead of quoting a page that only looks close.\n- They do not count against your message limit, because they cost nothing to produce. Ask as many as you like.\nIf a quoted page did not cover what you meant, just ask again with more detail — the follow-up gets a written answer.'
|
|
10106
|
+
text: 'Most of what people ask the assistant — "how do I connect a domain", "where do I save a template" — is already written down on these pages. When your question clearly matches one of them, the assistant hands you that page\'s own words, with a link to the full page, instead of writing you a fresh answer.\nYou will recognize these replies: they open with the name of the page, quote it, and close by offering to go further if it missed what you meant.\nThere are two things worth knowing about them.\n- They are never a summary. The text is copied from the documentation exactly as written, so it cannot drift from what the page actually says. If the assistant is not confident which page answers you, it writes you a real answer instead of quoting a page that only looks close.\n- They do not count against your message limit, because they cost nothing to produce. Ask as many as you like.\nIf a quoted page did not cover what you meant, just ask again with more detail — the follow-up gets a written answer.\nA question asked in another language is never answered with a quote, since the pages are in English: it always gets a written answer in your language. Nor is a question about your own workspace, such as which plan it is on or whether an AI job is done, since the pages describe every workspace and not yours.'
|
|
10002
10107
|
},
|
|
10003
10108
|
{
|
|
10004
10109
|
path: '/getting-started/aglyn-assist',
|
|
@@ -10138,7 +10243,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
10138
10243
|
title: 'The console tour',
|
|
10139
10244
|
heading: 'Workspace settings & notifications',
|
|
10140
10245
|
anchor: '#workspace-settings--notifications',
|
|
10141
|
-
text: 'Organization-wide settings (name, workspace URL) live under Organization → Settings, which also holds Profile, API keys, Branding, Single sign-on, Privacy, Ownership and Delete. Turning plugins on and off for the workspace is its own section, Organization → Plugins — Marketplace is for finding and installing new ones, not for administering what you already run:\nOrganization settings {#organization-settings}\nOrganization → Settings is where you run the workspace itself: its name and workspace URL under General, then — for owners and admins — Profile, Plugins, API keys, Branding, Single sign-on, Privacy, Holds & reviews and Import & export, each a section in the rail on the left. Integrations follows Single sign-on once a plugin adds workspace settings there. Privacy, Holds & reviews and Import & export are grouped under Data & compliance. Ownership and Delete, under Danger zone, appear to the workspace owner only.\nGeneral {#organization-general}\nThe General card renames the organization, changes its workspace URL and sets the time zone its sites inherit — "workspace" is the console\'s word for your organization\'s home.\nChanging the workspace URL changes the address teammates use to reach the workspace, so share the new one after you save.\nThe notifications feed\nYour in-app notification feed — billing, publishing, workflow failures — lives under Notifications, which has two sections in the rail on the left: All notifications and Settings. The first shows what arrived, newest first, with Mark all read above it. The feed\'s Filters narrows it by Type (is one type, or is any of up to thirty — a larger pick is refused, with a note above the feed) and by Status (is New or Read), and both can stand together. Each filter in force shows as
|
|
10246
|
+
text: 'Organization-wide settings (name, workspace URL) live under Organization → Settings, which also holds Profile, API keys, Branding, Single sign-on, Privacy, Ownership and Delete. Turning plugins on and off for the workspace is its own section, Organization → Plugins — Marketplace is for finding and installing new ones, not for administering what you already run:\nOrganization settings {#organization-settings}\nOrganization → Settings is where you run the workspace itself: its name and workspace URL under General, then — for owners and admins, or whoever a custom role grants each one — Profile, Plugins, API keys, Branding, Single sign-on, Privacy, Holds & reviews and Import & export, each a section in the rail on the left. Integrations follows Single sign-on once a plugin adds workspace settings there. Privacy, Holds & reviews and Import & export are grouped under Data & compliance. Ownership and Delete, under Danger zone, appear to the workspace owner only.\nGeneral {#organization-general}\nThe General card renames the organization, changes its workspace URL and sets the time zone its sites inherit — "workspace" is the console\'s word for your organization\'s home.\nChanging the workspace URL changes the address teammates use to reach the workspace, so share the new one after you save.\nThe notifications feed\nYour in-app notification feed — billing, publishing, workflow failures — lives under Notifications, which has two sections in the rail on the left: All notifications and Settings. The first shows what arrived, newest first, with Mark all read above it. The feed\'s Filters narrows it by Type (is one type, or is any of up to thirty — a larger pick is refused, with a note above the feed) and by Status (is New or Read), and both can stand together. Each filter in force shows as '
|
|
10142
10247
|
},
|
|
10143
10248
|
{
|
|
10144
10249
|
path: '/getting-started/create-a-site',
|
|
@@ -11139,14 +11244,14 @@ export const DOCS_SECTION_INDEX = [
|
|
|
11139
11244
|
title: 'Funnels',
|
|
11140
11245
|
heading: 'Create a funnel',
|
|
11141
11246
|
anchor: '#create',
|
|
11142
|
-
text: '1. Open your site\'s Analytics page and find Funnels.\n2. Select New funnel, name it, and add steps with the pickers.\n3. Save. Saving needs a site
|
|
11247
|
+
text: '1. Open your site\'s Analytics page and find Funnels.\n2. Select New funnel, name it, and add steps with the pickers.\n3. Save. Saving needs the Manage funnels permission, which a site\'s admins and editors have.\nCreate with AI {#create-with-ai}\nWhen Aglyn AI is available to your workspace, Create with AI turns a description — "people who read a blog post, then booked a consultation" — into a draft funnel. The draft uses only the pages, forms, services, products and bars or popups your site has; a step the model suggests that your site does not have is left out and listed. Nothing is saved until you review the draft and select Save. It uses AI credits like other generation.\nDraft funnels {#drafts}\nWhen Aglyn AI builds part of your site from one request, it can set a funnel up too. That funnel arrives as a draft, marked Draft on the Funnels card, and changes nothing on your live site: it does not turn recording on, it has no results, Insights does not read it, and it cannot be followed up on. Its steps use only pages your site already publishes, and forms, services, products or bars and popups your site has — including ones the same request made.\nSelect the draft to review its steps, edit it if you like (it stays a draft), then select Activate. Activating checks every step against your site again, makes the funnel live and turns recording on if it was off, so it counts visits from then on. Activating needs Manage funnels. A draft counts towards the 20 funnels a site keeps.'
|
|
11143
11248
|
},
|
|
11144
11249
|
{
|
|
11145
11250
|
path: '/marketing-and-automation/analytics/funnels',
|
|
11146
11251
|
title: 'Funnels',
|
|
11147
11252
|
heading: 'Act on a drop-off',
|
|
11148
11253
|
anchor: '#act-on-drop-off',
|
|
11149
|
-
text: 'Below each step after the first, Act on this drop-off drafts an automation for the people who reached the step before it and did not go on. Pick:\n- After — how long to wait for them to go on: 1 hour, 1 day, 3 days or 7 days.\n- Then — send them a follow-up email, or create a CRM task for your team.\nThe automation is saved switched off on your site\'s Automation page. Edit its words there, then switch it on. It starts on the trigger Left a funnel, with conditions for this funnel, this step and this wait, and it can use the funnel\'s name, the step\'s name, the next step\'s name and the person\'s email.\nWho it reaches:\n- Only people who submitted a form on your site. Anonymous visitors are never followed up.\n- Only once per person, for each funnel, step and wait, and only if they had not reached the next step in any of their recorded visits.\n- A follow-up email is a mailing, not a reply: it carries its unsubscribe link and is never sent to someone who unsubscribed or whose address is suppressed.\n- People who dropped off in the last wait period before you created the automation are included; earlier ones are not.\nAglyn checks for drop-offs every 15 minutes, so a follow-up can arrive up to a quarter of an hour after its wait. Drafting needs
|
|
11254
|
+
text: 'Below each step after the first, Act on this drop-off drafts an automation for the people who reached the step before it and did not go on. Pick:\n- After — how long to wait for them to go on: 1 hour, 1 day, 3 days or 7 days.\n- Then — send them a follow-up email, or create a CRM task for your team.\nThe automation is saved switched off on your site\'s Automation page. Edit its words there, then switch it on. It starts on the trigger Left a funnel, with conditions for this funnel, this step and this wait, and it can use the funnel\'s name, the step\'s name, the next step\'s name and the person\'s email.\nWho it reaches:\n- Only people who submitted a form on your site. Anonymous visitors are never followed up.\n- Only once per person, for each funnel, step and wait, and only if they had not reached the next step in any of their recorded visits.\n- A follow-up email is a mailing, not a reply: it carries its unsubscribe link and is never sent to someone who unsubscribed or whose address is suppressed.\n- People who dropped off in the last wait period before you created the automation are included; earlier ones are not.\nAglyn checks for drop-offs every 15 minutes, so a follow-up can arrive up to a quarter of an hour after its wait. Drafting needs Manage funnels and a plan that includes automations. Add an Email from the site step after the step you follow up on to see in the funnel how many people the follow-up brought back.'
|
|
11150
11255
|
},
|
|
11151
11256
|
{
|
|
11152
11257
|
path: '/marketing-and-automation/analytics/funnels',
|
|
@@ -11909,14 +12014,14 @@ export const DOCS_SECTION_INDEX = [
|
|
|
11909
12014
|
title: 'Org automations',
|
|
11910
12015
|
heading: 'Create one',
|
|
11911
12016
|
anchor: '#create-one',
|
|
11912
|
-
text: '1. At the organization level, open Automation → Org automations and choose Add org automation.\n2. Name it and pick the trigger event. Optionally add a filter or conditions — the same ones the actions builder offers.\n3. Choose where it runs on: Every site — including sites you add later — or Chosen sites, up to 30 of them.\n4. Add the steps, then save.\nTo start from a description instead, choose Create with AI in the card\'s header: Aglyn AI drafts one and opens it in the editor, switched off, for you to place on sites and save. See Automations with AI.\
|
|
12017
|
+
text: '1. At the organization level, open Automation → Org automations and choose Add org automation.\n2. Name it and pick the trigger event. Optionally add a filter or conditions — the same ones the actions builder offers.\n3. Choose where it runs on: Every site — including sites you add later — or Chosen sites, up to 30 of them.\n4. Add the steps, then save.\nTo start from a description instead, choose Create with AI in the card\'s header: Aglyn AI drafts one and opens it in the editor, switched off, for you to place on sites and save. See Automations with AI.\nCreating and editing org automations takes the Manage org automations permission, which a workspace\'s owners, admins and editors have. An organization holds up to 100 of them; deleting one frees its place.\nTriggers\nOrg automations start on what the server records about a person: Form submitted, New lead, Contact created, Contact changed stage, New booking, Member signed up, Member signed in, Deal moved, Deal won, Deal lost and CRM task completed. What each event carries for filters and conditions is listed under the filter field as you pick it.\nPage views and on-page events (clicks, scroll depth, exit intent) are not offered: they belong to one site\'s pages. Build those as actions on the site.\nSteps\nSend an email, Notify site admins, Enroll in a list, Assign to a campaign, Write to a dataset, Update a dataset record, the five CRM steps, Fire a custom event, Wait, Wait for something to happen and End the flow here.\nWhat is left out belongs to one site, so an org automation cannot run it:\n- Run a workflow — a workflow calls its own site\'s functions and variables;\n- Send a webhook — a webhook holds its own site\'s address and secret;\n- every in-page step — popups, drawers, menus, show and hide, CSS classes, custom HTML and Java'
|
|
11913
12018
|
},
|
|
11914
12019
|
{
|
|
11915
12020
|
path: '/marketing-and-automation/workflows-and-actions/org-automations',
|
|
11916
12021
|
title: 'Org automations',
|
|
11917
12022
|
heading: 'Pause it on one site',
|
|
11918
12023
|
anchor: '#pause-it-on-one-site',
|
|
11919
|
-
text: 'Each site\'s Automation → Actions section shows Org automations on this site: the ones placed on it, whether each runs here, and Pause here / Resume here.
|
|
12024
|
+
text: 'Each site\'s Automation → Actions section shows Org automations on this site: the ones placed on it, whether each runs here, and Pause here / Resume here. Anyone with Pause org automations on a site (a site\'s admins and editors, by default) can pause an org automation on that site — only there; anyone with Manage org automations can pause it on any of the organization\'s sites from the organization hub, with Pause on… and the Paused on chips.\nPausing stops it on that site, including for anyone waiting inside it there, and leaves every other site running it.'
|
|
11920
12025
|
},
|
|
11921
12026
|
{
|
|
11922
12027
|
path: '/marketing-and-automation/workflows-and-actions/org-automations',
|
|
@@ -12182,7 +12287,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
12182
12287
|
title: 'Downgrading, canceling & your data',
|
|
12183
12288
|
heading: 'Deleting your organization',
|
|
12184
12289
|
anchor: '#deleting-your-organization',
|
|
12185
|
-
text: 'Deletion is separate from canceling and is the only thing that removes your data. It\'s intentional and reversible for a short window:\n1. Request deletion — an owner starts it from the organization settings; you confirm by typing the organization name. Export anything you want to keep before you start (Setup → Backup & restore) — the hold is the window for it, and nothing is kept for you afterwards.\n2. A hold period follows the request. During the hold nothing is deleted and you can cancel the request to fully restore.\n3. After the hold, the organization — its sites, files, datasets, and account records — is permanently erased. This step is irreversible, and we keep no copy of the erased data. What we retain is an internal record that the erasure happened: which organization, when it was requested, and how many sites, members and credentials were removed. Sales-tax records, and Aglyn\'s records of card readers you bought from Aglyn, are kept because tax law requires it; they hold no names or street addresses.\nDeletion covers your organization\'s sites and their stored files and data. If you own an organization that still has other members, transfer or remove them first — a shared organization isn\'t deleted out from under its members.\nGDPR / right to erasure You can request erasure of your personal data at any time. Deletion permanently removes your records and leaves us with no copy of them — only a record that the erasure was carried out, which is itself kept for a limited period.
|
|
12290
|
+
text: 'Deletion is separate from canceling and is the only thing that removes your data. It\'s intentional and reversible for a short window:\n1. Request deletion — an owner starts it from the organization settings; you confirm by typing the organization name. Export anything you want to keep before you start (Setup → Backup & restore) — the hold is the window for it, and nothing is kept for you afterwards.\n2. A hold period follows the request. During the hold nothing is deleted and you can cancel the request to fully restore.\n3. After the hold, the organization — its sites, files, datasets, and account records — is permanently erased. This step is irreversible, and we keep no copy of the erased data. What we retain is an internal record that the erasure happened: which organization, when it was requested, and how many sites, members and credentials were removed. Sales-tax records, and Aglyn\'s records of card readers you bought from Aglyn, are kept because tax law requires it; they hold no names or street addresses, and the card reader records are deleted seven years after each sale. A card reader order that has not shipped by then is canceled and refunded in full first; the deletion does not wait for it. The Delete organization card lists any such order above the confirm, with its number, items and amount.\nDeletion covers your organization\'s sites and their stored files and data. If you own an organization that still has other members, transfer or remove them first — a shared organization isn\'t deleted out from under its members.\nGDPR / right to erasure You can request erasure of your personal data at any time. Deletion permanently removes your records and leaves us with no copy of them — only a record that the erasure was carried out, which is itself kept for a limited period.'
|
|
12186
12291
|
},
|
|
12187
12292
|
{
|
|
12188
12293
|
path: '/workspace-and-billing/billing-and-plans/downgrading-and-canceling',
|
|
@@ -12553,7 +12658,7 @@ export const DOCS_SECTION_INDEX = [
|
|
|
12553
12658
|
title: 'Signing In & Sessions',
|
|
12554
12659
|
heading: 'Privacy requests',
|
|
12555
12660
|
anchor: '#privacy-requests',
|
|
12556
|
-
text: 'Settings → Privacy is where a workspace answers the people its sites hold: someone who asks for the data you keep about them, or asks to be forgotten. The section is shown to workspace owners and admins, and it is on every plan, Free included. These are obligations rather than features, so they sit outside the CRM and do not wait for a plan that includes it.\nExporting contacts and leads\nExport contacts exports every contact the workspace holds, and Export leads every lead its sites captured. Each opens the same export dialog as the CRM\'s Export…: choose the fields (custom fields included) and the format — CSV, JSON or NDJSON — and the file covers every record, whether or not your plan includes the CRM. Exporting needs the Manage data permission, which owners and admins hold. If fewer rows arrive than the server promised, because a connection dropped, nothing is saved and you are told so; try again.\nErasing a person\nErase a person is the privacy erasure, for someone who asks to be forgotten under the GDPR, the CCPA or any similar law. Type the person\'s email address, type it again to confirm, and choose Erase permanently. It cannot be undone.\n- It is filed by address, across the workspace. It reaches every site of the workspace, whether or not any page shows the person.\n- Capture stops at once. From the moment the request is filed, your sites stop capturing the address, and no campaign is sent to it.\n- The nightly erasure job completes it. Before you choose, the card lists what the job removes, what it keeps with the person taken off, and what it does not reach:\n| | |\n| Removed across the workspace | The contact record on every site — profile, notes, tags, timeline and custom
|
|
12661
|
+
text: 'Settings → Privacy is where a workspace answers the people its sites hold: someone who asks for the data you keep about them, or asks to be forgotten. The section is shown to members with the Privacy requests permission — workspace owners and admins by default, and anyone a custom role grants it — and it is on every plan, Free included. These are obligations rather than features, so they sit outside the CRM and do not wait for a plan that includes it.\nExporting contacts and leads\nExport contacts exports every contact the workspace holds, and Export leads every lead its sites captured. Each opens the same export dialog as the CRM\'s Export…: choose the fields (custom fields included) and the format — CSV, JSON or NDJSON — and the file covers every record, whether or not your plan includes the CRM. Exporting needs the Manage data permission, which owners and admins hold. If fewer rows arrive than the server promised, because a connection dropped, nothing is saved and you are told so; try again.\nErasing a person\nErase a person is the privacy erasure, for someone who asks to be forgotten under the GDPR, the CCPA or any similar law. Type the person\'s email address, type it again to confirm, and choose Erase permanently. It cannot be undone.\n- It is filed by address, across the workspace. It reaches every site of the workspace, whether or not any page shows the person.\n- Capture stops at once. From the moment the request is filed, your sites stop capturing the address, and no campaign is sent to it.\n- The nightly erasure job completes it. Before you choose, the card lists what the job removes, what it keeps with the person taken off, and what it does not reach:\n| | |\n| Removed across the workspace | The contact record on every site — profile, notes, tags, timeline and custom f'
|
|
12557
12662
|
},
|
|
12558
12663
|
{
|
|
12559
12664
|
path: '/workspace-and-billing/signing-in-and-sessions',
|
|
@@ -12616,21 +12721,21 @@ export const DOCS_SECTION_INDEX = [
|
|
|
12616
12721
|
title: 'Custom roles & permissions',
|
|
12617
12722
|
heading: 'Create a custom role',
|
|
12618
12723
|
anchor: '#create-a-custom-role',
|
|
12619
|
-
text: '1. On the organization Team page, find the Custom roles card and choose New role.\n2. Give it a name. The permissions are grouped by area (Organization, Billing, Team, Sites, Data, Marketplace and plugins) and by plugin (AI, Commerce and the others your workspace uses), and Search permissions finds one by name or description.\n3. Set each permission to Allow, Deny or Inherit. Inherit falls back to the member\'s org role default, and each one says which org roles hold it by default. The switch beside a group\'s heading sets every permission in it at once.\n4. Save, then assign it to members from the roster\'s Custom role column.\nThe permission catalog covers organization settings, the activity log, billing (view and manage separately), member management, site creation and deletion, organization data, marketplace publishing, plugin installs, the two AI keys, and every permission the workspace\'s plugins add, such as Use the point of sale (managePos). A plugin\'s permissions are listed while the plugin is on for the workspace. Owners, admins and editors hold the point of sale by default and viewers don\'t, so a custom role can hand the register to a viewer or take it from an editor
|
|
12724
|
+
text: '1. On the organization Team page, find the Custom roles card and choose New role.\n2. Give it a name. The permissions are grouped by area (Organization, Billing, Team, Sites, Data, Marketplace and plugins) and by plugin (AI, Commerce and the others your workspace uses), and Search permissions finds one by name or description.\n3. Set each permission to Allow, Deny or Inherit. Inherit falls back to the member\'s org role default, and each one says which org roles hold it by default. The switch beside a group\'s heading sets every permission in it at once.\n4. Save, then assign it to members from the roster\'s Custom role column.\nThe permission catalog covers organization settings, the activity log, API keys, privacy requests, holds and reviews, billing (view and manage separately), member management, site creation and deletion, the site permissions, organization data, marketplace publishing, plugin installs, the two AI keys, and every permission the workspace\'s plugins add, such as Use the point of sale (managePos) and the reservation permissions. A plugin\'s permissions are listed while the plugin is on for the workspace. Owners, admins and editors hold the point of sale by default and viewers don\'t, so a custom role can hand the register to a viewer or take it from an editor. The permission decides on its own: a member\'s role on the site no longer has to be admin or editor too, so a site viewer you grant the register can work it.\nPoint of sale permissions {#point-of-sale-permissions}\nUse the point of sale (managePos) opens the register. Five finer permissions split what it covers: Sell at the register, Refunds and returns, Give discounts at the register, Cash drawer and shifts and Registers and devices. Each one follows Use the point of sale until a role or a member sets it, '
|
|
12620
12725
|
},
|
|
12621
12726
|
{
|
|
12622
12727
|
path: '/workspace-and-billing/teams-and-roles/custom-roles',
|
|
12623
12728
|
title: 'Custom roles & permissions',
|
|
12624
12729
|
heading: 'Effective permissions',
|
|
12625
12730
|
anchor: '#effective-permissions',
|
|
12626
|
-
text: 'Not sure what someone can actually do?
|
|
12731
|
+
text: 'Not sure what someone can actually do? The roster\'s Permissions column says what is set for each member alone — Role defaults when nothing is, or how many permissions are allowed and denied for them — and sorts by it. Choose it to open the member\'s permissions: every permission with its final verdict and where that verdict comes from (their org role, their custom role, or set for this member). The same list is the Permissions card on the member\'s own page under Team.'
|
|
12627
12732
|
},
|
|
12628
12733
|
{
|
|
12629
12734
|
path: '/workspace-and-billing/teams-and-roles/custom-roles',
|
|
12630
12735
|
title: 'Custom roles & permissions',
|
|
12631
12736
|
heading: 'Per-member overrides',
|
|
12632
12737
|
anchor: '#per-member-overrides',
|
|
12633
|
-
text: 'Need one person to have slightly more (or less) than their role?
|
|
12738
|
+
text: 'Need one person to have slightly more (or less) than their role? Set a per-member override on top of the role instead of creating a whole new role for one exception.\n1. Open the member from the Team roster (or choose their Permissions cell).\n2. In Permissions, find the permission (grouped like the role editor, with Search permissions) and set it to Allow or Deny. Inherit clears the override, and says what the member falls back to. For an editor, a permission a site can narrow also offers Follow the site role or Keep this permission for sites where their access is narrower — see A site\'s access narrows its register and waivers.\n3. Choose Save permissions.\nOverrides win over both the org role and the custom role. A few rules hold them in check:\n- Only members who can manage people (members.manage) change overrides.\n- The owner keeps every permission, so no override applies to them.\n- Nobody changes their own overrides; ask another admin.\n- You can only allow a permission you hold yourself, so managing people is not a way into billing or the register. The owner can allow anything.\nEvery change is recorded in the organization\'s activity log, one row per permission, naming who changed it and what it became. Members who work on named sites (not the whole workspace) get their permissions from their site access instead; set those per site on the site\'s Users card — see AI access for collaborators. A site that gives a workspace editor narrower access sets their register and waivers there, on the same card — see A site\'s access narrows its register and waivers.'
|
|
12634
12739
|
},
|
|
12635
12740
|
{
|
|
12636
12741
|
path: '/workspace-and-billing/teams-and-roles/custom-roles',
|