@aglyn/aglyn 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/package.json +11 -11
  2. package/src/lib/app-utils/compose-reusable-components.d.ts +22 -0
  3. package/src/lib/app-utils/compose-reusable-components.js +94 -32
  4. package/src/lib/app-utils/compose-reusable-components.js.map +1 -1
  5. package/src/lib/app-utils/contacts.d.ts +15 -1
  6. package/src/lib/app-utils/contacts.js +15 -1
  7. package/src/lib/app-utils/contacts.js.map +1 -1
  8. package/src/lib/app-utils/crm.d.ts +61 -19
  9. package/src/lib/app-utils/crm.js +47 -26
  10. package/src/lib/app-utils/crm.js.map +1 -1
  11. package/src/lib/app-utils/default-site.d.ts +10 -3
  12. package/src/lib/app-utils/default-site.js +82 -6
  13. package/src/lib/app-utils/default-site.js.map +1 -1
  14. package/src/lib/app-utils/docs-help-sections.generated.js +11 -1
  15. package/src/lib/app-utils/docs-help-sections.generated.js.map +1 -1
  16. package/src/lib/app-utils/docs-help.generated.d.ts +5 -5
  17. package/src/lib/app-utils/docs-help.generated.js +23 -0
  18. package/src/lib/app-utils/docs-help.generated.js.map +1 -1
  19. package/src/lib/app-utils/docs-index.generated.js +43 -15
  20. package/src/lib/app-utils/docs-index.generated.js.map +1 -1
  21. package/src/lib/app-utils/host-tokens.d.ts +7 -0
  22. package/src/lib/app-utils/host-tokens.js +27 -4
  23. package/src/lib/app-utils/host-tokens.js.map +1 -1
  24. package/src/lib/app-utils/node-definition-sanitizer.js +5 -1
  25. package/src/lib/app-utils/node-definition-sanitizer.js.map +1 -1
  26. package/src/lib/app-utils/server.d.ts +1 -0
  27. package/src/lib/app-utils/server.js +1 -0
  28. package/src/lib/app-utils/server.js.map +1 -1
  29. package/src/lib/app-utils/site-brand-files.d.ts +87 -0
  30. package/src/lib/app-utils/site-brand-files.js +157 -0
  31. package/src/lib/app-utils/site-brand-files.js.map +1 -0
  32. package/src/lib/app-utils/site-starter-nodes.js +1 -0
  33. package/src/lib/app-utils/site-starter-nodes.js.map +1 -1
  34. package/src/lib/app-utils/site-starter-pick.d.ts +2 -2
  35. package/src/lib/app-utils/site-starter-pick.js +2 -2
  36. package/src/lib/app-utils/site-starter-pick.js.map +1 -1
  37. package/src/lib/plugin-manager/feature-plugins.d.ts +36 -2
  38. package/src/lib/plugin-manager/feature-plugins.js.map +1 -1
@@ -1320,6 +1320,13 @@ export const DOCS_SECTION_INDEX = [
1320
1320
  anchor: '#each-styles-layout',
1321
1321
  text: 'A style also decides how its pages are laid out, so two styles never read as the same page in different colors. Each style opens its pages in one of two ways of its own, and your site gets one of the two:\n- A photo across the whole page, with the words over it at the start (a trade, a nonprofit, a band) or centered in large type (a restaurant, a coming soon page).\n- A photo filling half the page, edge to edge, with the words in the other half (health and wellness, fitness).\n- The words beside a photo (business and services, courses and education), or beside two overlapping photos (an online store, an event, a salon).\n- A white card over a photo, holding the words (law, finance and consulting, real estate).\n- Large type above a wide photo (a design studio, a portfolio) or a centered heading above a wide photo (a blog, yoga, a landing page).\n- A round portrait above the words (a personal page).\nThe style also sets how its header is arranged, how its lists and cards are drawn (cards, lines under thin rules, or icons), whether its sections of text take a photo beside them, and whether a heading sits beside its items. The words, the sections and their order are still written for your business.'
1322
1322
  },
1323
+ {
1324
+ path: '/ai/site-looks',
1325
+ title: 'Looks and themes for AI sites',
1326
+ heading: 'An AI starter\'s look',
1327
+ anchor: '#an-ai-starters-look',
1328
+ text: 'AI starters are rolling out, and your workspace may not have them yet. When you start from an AI starter, its style arrives chosen on the Style step, and its card says which starter it came from. Its brand color arrives picked under More details on the same step, as Chosen color. Choose another style card or another brand color, or Let the style choose, to change them. Your site\'s look is then made from them as for any start: its own variation of the style, with its fonts chosen within the style, in the brand color you kept.'
1329
+ },
1323
1330
  {
1324
1331
  path: '/ai/site-looks',
1325
1332
  title: 'Looks and themes for AI sites',
@@ -1360,7 +1367,14 @@ export const DOCS_SECTION_INDEX = [
1360
1367
  title: 'Start a new site with AI',
1361
1368
  heading: 'How do you want to start?',
1362
1369
  anchor: '#how-do-you-want-to-start',
1363
- text: 'The first step asks for the site\'s Site name and Subdomain, its free address on Aglyn. The subdomain follows the name until you change it, and is checked as you type: if it is taken, the field says so and offers available ones to pick. Then it offers two cards:\n- Start from the starter site gives the site a ready-made home page with a header, footer and contact form, live at its address, for you to edit, in a style you choose: it asks you to Choose a style from the same cards as the Style step, without Pick for me, and Create site creates the site once you click one.\n- Start with AI (marked Recommended) asks the questions below and builds the site for you. On the Free plan the card says how many pages a Free start makes.\nBring my site is a third card for moving the website you have now into Aglyn. See Bring my site.\nNo site exists until you choose, and nothing is chosen for you. Create site, after you choose a style for the starter site, creates the site with the starter home page in that style and opens it. Plan my site creates the site and starts planning it. The close control and the Escape key create nothing: the window closes and no site is made. If you have typed or picked something, the window first asks Leave without your answers?, because what you typed is not saved. Once the site is being planned, closing only closes the window; the job carries on.\nIf your role cannot create sites, or your plan has no site left, Create site says so before asking anything. Plan my site checks that planning can start before it creates the site. If it cannot, the window says why and no site is made. On the Free plan, a start that may need more credits than you have left asks first, and the site is created only once you choose. If planning still cannot start after the site is crea'
1370
+ text: 'The first step asks for the site\'s Site name and Subdomain, its free address on Aglyn. The subdomain follows the name until you change it, and is checked as you type: if it is taken, the field says so and offers available ones to pick. Then it offers two cards:\n- Start from the starter site gives the site a ready-made home page with a header, footer and contact form, live at its address, for you to edit, in a style you choose: it asks you to Choose a style from the same cards as the Style step, without Pick for me, and Create site creates the site once you click one.\n- Start with AI (marked Recommended) asks the questions below and builds the site for you. On the Free plan the card says how many pages a Free start makes.\nBring my site is a third card for moving the website you have now into Aglyn. See Bring my site.\nThe first step also takes your logo and favicon. They are optional. A logo you add there is in your site\'s header and footer when the AI builds them, in place of its name.\nNo site exists until you choose, and nothing is chosen for you. Create site, after you choose a style for the starter site, creates the site with the starter home page in that style and opens it. Plan my site creates the site and starts planning it. The close control and the Escape key create nothing: the window closes and no site is made. If you have typed or picked something, the window first asks Leave without your answers?, because what you typed is not saved. Once the site is being planned, closing only closes the window; the job carries on.\nIf your role cannot create sites, or your plan has no site left, Create site says so before asking anything. Plan my site checks that planning can start before it creates the site. If it cannot, the window says why and no site is made. On the Free'
1371
+ },
1372
+ {
1373
+ path: '/ai/start-with-ai',
1374
+ title: 'Start a new site with AI',
1375
+ heading: 'Start from an AI starter',
1376
+ anchor: '#start-from-an-ai-starter',
1377
+ text: 'AI starters are rolling out, and your workspace may not have them yet. Where they are on, Start from a starter site opens Choose your starter, and its AI starters tab lists starters Aglyn AI writes your pages from. An AI starter is a set of answers and a look for one kind of site, never ready-made pages.\n1. On the first step, name your site and choose its address, then choose Start from a starter site.\n2. Choose the AI starters tab and pick a starter.\n3. Choose Continue.\nStart your site opens on Your site with its questions filled in from the starter, and says so above the first question. The starter\'s style is chosen on the Style step, and its card says which starter it came from. Its brand color is picked under that step\'s More details, as Chosen color. When the starter says what the site is for, that answer is filled in too. Otherwise you say it, as you would for any start. Change any answer you like, then choose Plan my site on Review. It works as always: it creates the site, then plans, writes and publishes its pages for your business.\nA starter with a price is bought before its answers are shown. Picking one says its price, with Buy and continue, and Continue waits until it is yours. Nothing is created until Plan my site, so closing the window before then leaves nothing behind. If the site is created and its pages cannot be planned, leaving gives it the starter\'s own pages, so it is never left empty.'
1364
1378
  },
1365
1379
  {
1366
1380
  path: '/ai/start-with-ai',
@@ -2851,7 +2865,7 @@ export const DOCS_SECTION_INDEX = [
2851
2865
  title: 'Bindings, Variables & Functions',
2852
2866
  heading: 'Site details',
2853
2867
  anchor: '#site-details',
2854
- text: '{{host.}} tokens name the site itself instead of hard-coding it, so copy stays right when the site is renamed, and a template installed on another site fills in that site\'s details.\n| Token | Fills in |\n| {{host.businessName}} | Setup → SEO → Entity → Name, or the site name when that is empty |\n| {{host.url}} | The site\'s address — its custom domain when one is connected |\n| {{host.supportEmail}} | Support email, from Setup → Details → Business details |\n| {{host.address}} | Postal address, from the same card |\n| {{host.socialLinks}} | The labels of the card\'s Social links |\nA detail the site hasn\'t set renders as nothing, never as the token. The canvas and Preview fill these in from the site you are editing, exactly as the published page does. In a field, the token shows as a pill named after the detail, such as Business name.'
2868
+ text: '{{host.}} tokens name the site itself instead of hard-coding it, so copy stays right when the site is renamed, and a template installed on another site fills in that site\'s details.\n| Token | Fills in |\n| {{host.businessName}} | Setup → SEO → Entity → Name, or the site name when that is empty |\n| {{host.logo}} | The site\'s logo, from Setup → Details → Site logo |\n| {{host.logoDark}} | The site\'s dark mode logo from the same card, or its logo when it has no dark one |\n| {{host.url}} | The site\'s address — its custom domain when one is connected |\n| {{host.supportEmail}} | Support email, from Setup → Details → Business details |\n| {{host.address}} | Postal address, from the same card |\n| {{host.socialLinks}} | The labels of the card\'s Social links |\nA detail the site hasn\'t set renders as nothing, never as the token. The canvas and Preview fill these in from the site you are editing, exactly as the published page does. In a field, the token shows as a pill named after the detail, such as Business name.'
2855
2869
  },
2856
2870
  {
2857
2871
  path: '/building-sites/bindings/overview',
@@ -3642,7 +3656,7 @@ export const DOCS_SECTION_INDEX = [
3642
3656
  title: 'Layouts',
3643
3657
  heading: 'Layout properties',
3644
3658
  anchor: '#layout-properties',
3645
- text: 'A layout can take properties, the way a reusable component does, so one frame can differ from page to page — a banner one page shows and another hides, a call to action worded per page — without a second layout.\n1. Open the layout in the Besigner and choose File ▸ Properties…\n2. Add property. Every property type a reusable component offers is here, with its default, help, settings and condition set with the same controls.\n3. Inside the layout, put the property\'s token — {{prop.bannerText}} — in any text or string attribute, or bind a field to it with the field\'s {} button: a switch to a Yes / no, an icon picker to an Icon. Hide when and Hide unless take a property too, so a page can remove part of the layout\'s chrome.\nEach page sets the values in Page Properties, under Shared layout, below the Layout picker: one field per property, drawn with the control its type names. Leave a field empty and the layout\'s default renders. Save layout values stores them on the page version being edited, beside its layout binding, so publishing that version publishes its values with it.\nValues are kept per layout. Binding a page to a different layout starts from that layout\'s defaults, and a page inside nested layouts sets each layout\'s properties separately.\nProperties saved on the layout\'s published version reach live pages straight away — that version is what they render. On any other version they go live when you publish it.\nPages the site builds on its own — search results, author pages, and a collection with no template page — render inside the site\'s built-in page layout with its properties\' defaults.'
3659
+ text: 'A layout can take properties, the way a reusable component does, so one frame can differ from page to page — a banner one page shows and another hides, a call to action worded per page — without a second layout.\n1. Open the layout in the Besigner and choose File ▸ Properties…\n2. Add property. Every property type a reusable component offers is here, with its default, help, settings and condition set with the same controls.\n3. Inside the layout, put the property\'s token — {{prop.bannerText}} — in any text or string attribute, or bind a field to it with the field\'s {} button: a switch to a Yes / no, an icon picker to an Icon. Hide when and Hide unless take a property too, so a page can remove part of the layout\'s chrome. They also take a site detail: a new site\'s header shows its logo with Hide unless set to the Logo detail, and its name with Hide when set to the same one, so it shows whichever the site has.\nEach page sets the values in Page Properties, under Shared layout, below the Layout picker: one field per property, drawn with the control its type names. Leave a field empty and the layout\'s default renders. Save layout values stores them on the page version being edited, beside its layout binding, so publishing that version publishes its values with it.\nValues are kept per layout. Binding a page to a different layout starts from that layout\'s defaults, and a page inside nested layouts sets each layout\'s properties separately.\nProperties saved on the layout\'s published version reach live pages straight away — that version is what they render. On any other version they go live when you publish it.\nPages the site builds on its own — search results, author pages, and a collection with no template page — render inside the site\'s built-in page layout with its properties\' d'
3646
3660
  },
3647
3661
  {
3648
3662
  path: '/building-sites/screens-and-layouts/layouts',
@@ -4447,14 +4461,14 @@ export const DOCS_SECTION_INDEX = [
4447
4461
  title: 'Site starters',
4448
4462
  heading: 'Starters and AI starters',
4449
4463
  anchor: '#starters-and-ai-starters',
4450
- text: 'Where Start your site is offered, Choose your starter has two tabs:\n- Starters are copied into your new site as they are: their pages, their header and footer, and their theme.\n- AI starters are a starting point for Aglyn AI\'s start, which writes the pages for your business. Creating a site from an AI starter is not available yet: Create site says so, and you can pick a starter from the Starters tab instead.'
4464
+ text: 'Where Start your site is offered, Choose your starter has two tabs:\n- Starters are copied into your new site as they are: their pages, their header and footer, and their theme.\n- AI starters are a starting point for Aglyn AI\'s start, which writes the pages for your business. Pick one and choose Continue: the start\'s questions open filled in from it, its style and, where it has one, its brand color chosen, for you to change, and Plan my site creates the site. See Start from an AI starter.'
4451
4465
  },
4452
4466
  {
4453
4467
  path: '/building-sites/site-templates/site-starters',
4454
4468
  title: 'Site starters',
4455
4469
  heading: 'A starter with a price',
4456
4470
  anchor: '#a-starter-with-a-price',
4457
- text: 'A card with a price says so when you pick it, with Buy and continue:\n1. Choose Buy and continue. The payment page opens.\n2. Pay. You come back to Create site with the same starter picked and You own this starter beneath the cards.\n3. Choose Create site.\nThe starter belongs to your workspace once it is paid for, so creating another site from it later asks for nothing more. If you come back without paying, the starter is still picked, and Buy and continue is there again. A starter you already own says You own this starter as soon as you pick it.'
4471
+ text: 'A card with a price says so when you pick it, with Buy and continue:\n1. Choose Buy and continue. The payment page opens.\n2. Pay. You come back to Create site with the same starter picked and You own this starter beneath the cards.\n3. Choose Create site.\nAn AI starter with a price works the same way, with Continue in place of Create site: its answers are shown only once it is yours.\nThe starter belongs to your workspace once it is paid for, so creating another site from it later asks for nothing more. If you come back without paying, the starter is still picked, and Buy and continue is there again. A starter you already own says You own this starter as soon as you pick it.'
4458
4472
  },
4459
4473
  {
4460
4474
  path: '/building-sites/site-templates/site-starters',
@@ -6722,7 +6736,7 @@ export const DOCS_SECTION_INDEX = [
6722
6736
  title: 'Activities & the timeline',
6723
6737
  heading: 'Reading the timeline',
6724
6738
  anchor: '#reading-the-timeline',
6725
- text: 'Every entry — on a contact\'s Timeline, and on the Activity card of a lead, a company or a deal — is a collapsed row, newest first:\n- Collapsed, a row shows its kind and its chips (Logged, Received, Sent, the delivery state, how a call went and how long it took), then its subject, or a note\'s first line, and under it who logged it, to or from whom, and when. An email reads as its subject, its recipient and its time.\n- Opened with the chevron at its start, a row shows the rest: an email\'s body, a note\'s every line. A row with nothing more to show has no chevron.\n- Expand all in the card header opens every row; Collapse all closes them again.\n- Edit and Delete stay on the row they act on.\nThe list is paged ten at a time by the footer under it, the same footer as every list in the console, with a menu for how many rows a page holds.\nA logged or sent Email activity and a Campaign entry are different things and are drawn differently: the first is a message somebody on your team wrote, sent or recorded, the second is a mailing the platform sent to an audience the person was in.\nA few Note entries are bookkeeping rather than something a person typed, and each is signed by what did it: Filed under and Removed from a campaign, by the member who changed the record\'s filing — or by Lead conversion, when a lead\'s campaigns were carried onto the contact it became — and Enrolled in a sequence and stopped, by Sequences. They read on the lead and the contact alike, above the emails they explain.'
6739
+ text: 'Every entry — on a contact\'s Timeline, and on the Activity card of a lead, a company or a deal — is a collapsed row, newest first:\n- Collapsed, a row shows its kind and its chips (Logged, Received, Sent, the delivery state, how a call went and how long it took), then its subject, or a note\'s first line, and under it who logged it, to or from whom, and when. An email reads as its subject, its recipient and its time.\n- Opened with the chevron at its start, a row shows the rest: an email\'s body, a note\'s every line. A row with nothing more to show has no chevron.\n- Expand all in the card header opens every row; Collapse all closes them again.\n- Edit and Delete stay on the row they act on.\nA company\'s Activity card also says, on each row, who or what it is about: the contact and the deal, each a link to its record. See who, what and which company.\nThe list is paged ten at a time by the footer under it, the same footer as every list in the console, with a menu for how many rows a page holds.\nA logged or sent Email activity and a Campaign entry are different things and are drawn differently: the first is a message somebody on your team wrote, sent or recorded, the second is a mailing the platform sent to an audience the person was in.\nA few Note entries are bookkeeping rather than something a person typed, and each is signed by what did it: Filed under and Removed from a campaign, by the member who changed the record\'s filing — or by Lead conversion, when a lead\'s campaigns were carried onto the contact it became — and Enrolled in a sequence and stopped, by Sequences. They read on the lead and the contact alike, above the emails they explain.'
6726
6740
  },
6727
6741
  {
6728
6742
  path: '/content-and-data/crm/activities',
@@ -6736,14 +6750,14 @@ export const DOCS_SECTION_INDEX = [
6736
6750
  title: 'Activities & the timeline',
6737
6751
  heading: 'Logging an activity',
6738
6752
  anchor: '#logging-an-activity',
6739
- text: 'Open the record — a contact\'s page under CRM › Contacts, a company\'s under Companies, a deal\'s under Deals, or a lead\'s under Leads — and choose Log activity in the header of the Timeline or Activity card. The activity is filed against that record; there is no picker, because what you are looking at is what the activity is about.\nLogging an activity is part of the CRM, included from Starter. On Free the CRM is shown locked, so there is no record page to log from.\n| Field | What it is |\n| Kind | Call, Email, Text message, WhatsApp, Facebook Messenger, Instagram, LinkedIn, Meeting, Note or Other — how the conversation happened, so a message on any channel is logged as itself rather than as Other. |\n| Direction | For a call: Outbound (your team placed it), Inbound (they called you) or Internal (a call between teammates about the record) — Salesforce\'s Call Type. For an email or a message (text, WhatsApp, Messenger, Instagram, LinkedIn): Outbound (you sent it) or Inbound (they wrote to you). Outbound to start; Not said leaves it off. |\n| When | When it happened, which is not always when you are logging it. Defaults to now. |\n| What happened | The body of the entry. |\n| Outcome | For a call or a meeting: how it ended — "left a voicemail", "agreed to a trial". |\n| Minutes | For a call or a meeting: how long it took. |\nA call, an email or a message with a direction reads as it in its chip — Inbound call, Outbound email, Internal call, Outbound WhatsApp message. The Log a CRM activity automation step and POST /v1/activities take the same direction (direction), and only on a call, an email or a message.\nEach entry shows who logged it and how long ago. The author can edit or delete their own entries; an org-wide member can edit or delete anyone\'s. A colleague with access to only '
6753
+ text: 'Open the record — a contact\'s page under CRM › Contacts, a company\'s under Companies, a deal\'s under Deals, or a lead\'s under Leads — and choose Log activity in the header of the Timeline or Activity card. Name and Related To open on that record, and you can change either one.\nLogging an activity is part of the CRM, included from Starter. On Free the CRM is shown locked, so there is no record page to log from.\n| Field | What it is |\n| Kind | Call, Email, Text message, WhatsApp, Facebook Messenger, Instagram, LinkedIn, Meeting, Note or Other — how the conversation happened, so a message on any channel is logged as itself rather than as Other. |\n| Direction | For a call: Outbound (your team placed it), Inbound (they called you) or Internal (a call between teammates about the record) — Salesforce\'s Call Type. For an email or a message (text, WhatsApp, Messenger, Instagram, LinkedIn): Outbound (you sent it) or Inbound (they wrote to you). Outbound to start; Not said leaves it off. |\n| When | When it happened, which is not always when you are logging it. Defaults to now. |\n| What happened | The body of the entry. |\n| Outcome | For a call or a meeting: how it ended — "left a voicemail", "agreed to a trial". |\n| Minutes | For a call or a meeting: how long it took. |\n| Name | The contact it was with. Opened from a contact, that contact; opened from a deal, the deal\'s Primary, with everyone on the deal at the top of the list, whatever their contact role. |\n| Related To | The company or the deal it is about. Opened from a company or a deal, that record. The open deals of the contact in Name, and of the company, lead the list. |\nAn entry needs at least one of Name and Related To. A lead\'s own log offers neither: the entry is filed on the lead, and it moves to the contact when the '
6740
6754
  },
6741
6755
  {
6742
6756
  path: '/content-and-data/crm/activities',
6743
6757
  title: 'Activities & the timeline',
6744
6758
  heading: 'Click to call',
6745
6759
  anchor: '#click-to-call',
6746
- text: 'A contact\'s, a lead\'s and a company\'s page carries Call beside Send email: one tap dials the number the record holds, through whatever your device uses for a phone. The number itself is a link everywhere it is printed — on the record page and on the properties card — so it can be dialed from where you are reading it rather than copied out.\nOnly a number a dialer can take is a link. Write phone numbers with the country code, like +1 512 555 0107; spaces, dots, dashes and parentheses are fine and are ignored. A value that is not a number — "ask reception", an extension typed as x44 — is shown as plain text and Call says why it is unavailable, rather than offering a link that would ring nothing.\nLog a call sits beside it and opens the dialog above with the kind already set to Call and the record already bound, so logging what was said is one button and one sentence. It is there whether or not the record has a number: a call placed from your own mobile is still a call to log. The kind is a starting point, not a lock — change it in the dialog if the conversation turned out to be something else. Calling and logging a call are part of the CRM, included from Starter; on Free the record pages that carry them are locked with the rest of the CRM.'
6760
+ text: 'A contact\'s, a lead\'s and a company\'s page carries Call beside Send email: one tap dials the number the record holds, through whatever your device uses for a phone. The number itself is a link everywhere it is printed — on the record page and on the properties card — so it can be dialed from where you are reading it rather than copied out.\nOnly a number a dialer can take is a link. Write phone numbers with the country code, like +1 512 555 0107; spaces, dots, dashes and parentheses are fine and are ignored. A value that is not a number — "ask reception", an extension typed as x44 — is shown as plain text and Call says why it is unavailable, rather than offering a link that would ring nothing.\nLog a call sits beside it and opens the dialog above with the kind already set to Call and the record already filled in, so logging what was said is one button and one sentence. It is there whether or not the record has a number: a call placed from your own mobile is still a call to log. The kind is a starting point, not a lock — change it in the dialog if the conversation turned out to be something else. Calling and logging a call are part of the CRM, included from Starter; on Free the record pages that carry them are locked with the rest of the CRM.'
6747
6761
  },
6748
6762
  {
6749
6763
  path: '/content-and-data/crm/activities',
@@ -6946,7 +6960,14 @@ export const DOCS_SECTION_INDEX = [
6946
6960
  title: 'Companies',
6947
6961
  heading: 'A company\'s page',
6948
6962
  anchor: '#a-companys-page',
6949
- text: 'The page names the company in the heading and the trail, and holds its properties, its contacts, its deals, its open tasks and the activity logged against it. The header of the first card carries the domain under the company\'s kind, the type, the industry, the rating and the owner as chips, Back to companies, Call and Log a call (see click to call), and Edit, which opens the same form the company was created with; Delete company is in the header\'s menu (⋮). The card lists the rest in the form\'s three groups — the parent company (a link to its page) and the other account information, the billing and shipping addresses, and the notes. The company\'s phone number is a link on the properties card too. Every CRM record page — contact, company, deal and lead — is headed the same way.\nUnder the fixed properties the card lists every custom field defined on the Companies tab of the Fields section, and Edit carries a control for each, so a company\'s own properties are saved in the same form as its name and domain.'
6963
+ text: 'The page names the company in the heading and the trail, and holds its properties, its contacts, its deals, its open tasks and the activity logged against it and rolled up from its people and its deals. The header of the first card carries the domain under the company\'s kind, the type, the industry, the rating and the owner as chips, Back to companies, Call and Log a call (see click to call), and Edit, which opens the same form the company was created with; Delete company is in the header\'s menu (⋮). The card lists the rest in the form\'s three groups — the parent company (a link to its page) and the other account information, the billing and shipping addresses, and the notes. The company\'s phone number is a link on the properties card too. Every CRM record page — contact, company, deal and lead — is headed the same way.\nUnder the fixed properties the card lists every custom field defined on the Companies tab of the Fields section, and Edit carries a control for each, so a company\'s own properties are saved in the same form as its name and domain.'
6964
+ },
6965
+ {
6966
+ path: '/content-and-data/crm/companies',
6967
+ title: 'Companies',
6968
+ heading: 'Contact roles',
6969
+ anchor: '#contact-roles',
6970
+ text: 'The Contact roles card says who at the company plays which part, the way Salesforce\'s Account Contact Roles do. Add contact picks a person and their role, and one person is the Primary. Make primary moves it, and a role can be changed in place.\nThe roles come from the same list as a deal\'s, kept under CRM → Fields. They are separate from the roles on a deal: someone\'s part in the company is a fact about the account, and their part in one deal can differ. Renaming a role renames it here too, and merging or deleting a contact moves or removes their row.'
6950
6971
  },
6951
6972
  {
6952
6973
  path: '/content-and-data/crm/companies',
@@ -7016,7 +7037,7 @@ export const DOCS_SECTION_INDEX = [
7016
7037
  title: 'The contact record',
7017
7038
  heading: 'Adding a contact by hand',
7018
7039
  anchor: '#adding-a-contact-by-hand',
7019
- text: 'Open CRM → Contacts and choose New contact. A drawer opens over the list — the list itself stays exactly where it was.\n| Field | Notes |\n| Email | Required. It is the one thing every site shares about a person and what makes two captures one record. |\n| Salutation | Optional. One of your organization\'s salutations — Mr., Ms., Mrs., Dr. and Prof. to start with; add your own under CRM → Fields → Contacts. |\n| First name, Last name | Optional. While either is filled in, the Name is made of them and cannot be typed separately. |\n| Name | Optional. Your own name for the person when you keep it as one field; the record also keeps the name they gave on a form. |\n| Phone, Mobile phone | Entered with the country code, like +1 512 555 0107. Stored in E.164 so the same number typed two ways is one number. |\n| Do not call | Tick it when the person asked not to be phoned. It is a warning, not a block — see Do not call. |\n| Job title, Department | Free text. |\n| Company | A picker over the companies your site may see. Type to search by name or domain; a name nobody has filed yet gets a Create row that makes the company and selects it. Once the email is typed, a company whose domain matches it is suggested beneath the field — offered, never applied. Leave it empty for no company. |\n| Lifecycle stage | Where the person sits in your funnel; see Lifecycle stages. |\n| Owner | The team member responsible for the relationship, picked from your workspace roster. |\n| Tags | Comma-separated. Tags are lower-cased and deduplicated, so VIP and vip are one tag. |\n| Mailing address | Street, city, state or region, postal code and a two-letter country code. |\n| Opted in to marketing email | Tick it only if the person actually agreed. Adding a contact is never itself consent, and the checkbox says so'
7040
+ text: 'Open CRM → Contacts and choose New contact. A drawer opens over the list — the list itself stays exactly where it was.\n| Field | Notes |\n| Source site | At the organization level. Optional: the site the person came from, if any. Every site sees the contact either way, unless your workspace keeps each site\'s records apart, where this reads Site and is required. |\n| Email | Optional. A contact needs a name, an email or a phone number, and any one will do. When you have an address, it is what makes two captures one record. |\n| Salutation | Optional. One of your organization\'s salutations — Mr., Ms., Mrs., Dr. and Prof. to start with; add your own under CRM → Fields → Contacts. |\n| First name, Last name | Optional. While either is filled in, the Name is made of them and cannot be typed separately. |\n| Name | Optional. Your own name for the person when you keep it as one field; the record also keeps the name they gave on a form. |\n| Phone, Mobile phone | Entered with the country code, like +1 512 555 0107. Stored in E.164 so the same number typed two ways is one number. |\n| Do not call | Tick it when the person asked not to be phoned. It is a warning, not a block — see Do not call. |\n| Job title, Department | Free text. |\n| Company | A picker over the companies your site may see. Type to search by name or domain; a name nobody has filed yet gets a Create row that makes the company and selects it. Once the email is typed, a company whose domain matches it is suggested beneath the field — offered, never applied. Leave it empty for no company. |\n| Lifecycle stage | Where the person sits in your funnel; see Lifecycle stages. |\n| Owner | The team member responsible for the relationship, picked from your workspace roster. |\n| Tags | Comma-separated. Tags are lower-cased and dedupl'
7020
7041
  },
7021
7042
  {
7022
7043
  path: '/content-and-data/crm/contact-record',
@@ -7499,7 +7520,7 @@ export const DOCS_SECTION_INDEX = [
7499
7520
  title: 'CRM',
7500
7521
  heading: 'What\'s in the CRM area',
7501
7522
  anchor: '#whats-in-the-crm-area',
7502
- text: '| Section | Address | What lives there |\n| Contacts | /crm/contacts | Every person your site may see, as a list with Owner and Stage columns, filters and search; a person\'s own page is /crm/contacts/{id}. import and export, bulk actions, saved views and the timeline live here too. |\n| Leads | /crm/leads | People a site has captured but not yet qualified — a status, an owner and notes on each, and a conversion into a contact, a company and a deal. CSV import and export too. |\n| Companies | /crm/companies | The organizations your contacts belong to, keyed by domain — a captured contact is linked to the company at their email domain on its own; a company\'s page is /crm/companies/{id}. import and export and bulk actions too. |\n| Deals | /crm/deals | The sales pipeline — open deals by stage, with an amount, an owner and an expected close, as a board or a table with export and bulk actions; a deal\'s page is /crm/deals/{id}. |\n| Tasks | /crm/tasks | Calls, emails, meetings and to-dos by due date, each linked to the contact, company or deal it is for, with export and bulk actions. |\n| Reports | /crm/reports | New contacts over time, sources and the lifecycle funnel, conversion by source, the lead funnel, the open pipeline and its forecast, won and lost, activity by teammate, and the task load — every table exportable as CSV. |\n| Fields | /crm/fields | The custom fields on a contact — text, number, date, choice, checkbox, link or currency — which a form field can save into. |\n| Settings | /crm/settings | What the CRM does on its own for every site in the workspace — whether a company is created from a captured contact\'s work email domain — and the email templates your team sends from a record. |\nThree things cut across the sections rather than having one of their own. Saved view'
7523
+ text: '| Section | Address | What lives there |\n| Contacts | /crm/contacts | Every person your site may see, as a list with Owner and Stage columns, filters and search; a person\'s own page is /crm/contacts/{id}. import and export, bulk actions, saved views and the timeline live here too. |\n| Leads | /crm/leads | People a site has captured but not yet qualified — a status, an owner and notes on each, and a conversion into a contact, a company and a deal. CSV import and export too. |\n| Companies | /crm/companies | The organizations your contacts belong to, keyed by domain — a captured contact is linked to the company at their email domain on its own; a company\'s page is /crm/companies/{id}. import and export and bulk actions too. |\n| Deals / Opportunities | /crm/deals | The sales pipeline — open deals by stage, with an amount, an owner and an expected close, as a board or a table with export and bulk actions; a deal\'s page is /crm/deals/{id}. |\n| Tasks | /crm/tasks | Calls, emails, meetings and to-dos by due date, each linked to the contact, company or deal it is for, with export and bulk actions. |\n| Reports | /crm/reports | New contacts over time, sources and the lifecycle funnel, conversion by source, the lead funnel, the open pipeline and its forecast, won and lost, activity by teammate, and the task load — every table exportable as CSV. |\n| Fields | /crm/fields | The custom fields on a contact — text, number, date, choice, checkbox, link or currency — which a form field can save into. |\n| Settings | /crm/settings | What the CRM does on its own for every site in the workspace — whether a company is created from a captured contact\'s work email domain — and the email templates your team sends from a record. |\nThree things cut across the sections rather than having one of their'
7503
7524
  },
7504
7525
  {
7505
7526
  path: '/content-and-data/crm/overview',
@@ -7555,7 +7576,7 @@ export const DOCS_SECTION_INDEX = [
7555
7576
  title: 'CRM',
7556
7577
  heading: 'At the organization level',
7557
7578
  anchor: '#at-the-organization-level',
7558
- text: 'The CRM tab under Organization opens the same hub over every site in the organization at once: the same eight sections, the same record pages, the same bulk actions, import, saved views, reports and settings, at …/{organization}/crm/ . A record captured on any of your sites is listed there, and opening it edits the same record the site\'s own hub edits.\nWhat differs from a site\'s hub:\n- Every create names a site. A contact, company, deal or logged activity is always captured by a site — that is what decides which of your sites may see it and whose marketing consent a contact\'s checkbox records — so New contact, New company, New deal, Log activity and Import each begin with a required Site picker. The pick is remembered for the session, and an organization with exactly one site never sees the field. The REST API asks the same question as consentSiteId. A task is the one exception: New task offers This organization (no site) beside the sites, for work the organization itself owes — see Organization tasks.\n- The cross-site facts. The contacts list gains a Known by column — the sites that have captured each person — and a contact\'s page gains a Known by card listing those sites, each with the person\'s marketing consent for that site (opted in, opted out, or no record — never a bare "consented") and a link to open the person in that site\'s hub.\n- Reports total the organization, not one site — the Lead funnel included, which reads every site\'s leads, at most 200 per site, and says so when a site held more.\n- Leads are listed from every site with a Site column, since a lead belongs to the site that met the person; the per-site note about which forms file a lead stays on each site\'s own hub.\n- Every action runs here too. A deal moves on the organization\'s board, two records merg'
7579
+ text: 'The CRM tab under Organization opens the same hub over every site in the organization at once: the same eight sections, the same record pages, the same bulk actions, import, saved views, reports and settings, at …/{organization}/crm/ . A record captured on any of your sites is listed there, and opening it edits the same record the site\'s own hub edits.\nWhat differs from a site\'s hub:\n- A create can name the site it came from. New contact, Import, New company, New deal and Log activity begin with an optional Source site. Leave it on None for a record that came from no site; every site sees the record either way, because the CRM\'s records belong to the whole workspace. In a workspace that keeps each site\'s records apart, the site decides who may see the record, so the field is required and reads Site. On New contact, a marketing opt-in is recorded for the site you name, or for every site when you name none. The pick is remembered for the session, and an organization with exactly one site never sees the field. The REST API takes the same answer as consentSiteId, which may be left out unless the workspace keeps its sites apart. A task also offers This organization (no site), for work the organization itself owes — see Organization tasks.\n- The cross-site facts. The contacts list gains a Known by column — the sites that have captured each person — and a contact\'s page gains a Known by card listing those sites, each with the person\'s marketing consent for that site (opted in, opted out, or no record — never a bare "consented") and a link to open the person in that site\'s hub.\n- Reports total the organization, not one site — the Lead funnel included, which reads every site\'s leads, at most 200 per site, and says so when a site held more.\n- Leads are listed from every site with'
7559
7580
  },
7560
7581
  {
7561
7582
  path: '/content-and-data/crm/overview',
@@ -7884,7 +7905,7 @@ export const DOCS_SECTION_INDEX = [
7884
7905
  title: 'Share records across sites',
7885
7906
  heading: '',
7886
7907
  anchor: '',
7887
- text: 'Share records across sites\nEach site in your workspace sees the people it captured. A site in a consent group also sees the records of the group\'s other sites. Every other record is hidden from it, which is what keeps one agency client\'s CRM apart from another\'s.\nTo start every new record on All sites instead, a workspace owner or admin can change Default sharing for new records in the CRM\'s Settings. It covers new contacts, companies, deals and tasks, and changes nothing that already exists. It is separate from the defaults for new datasets and media files, which are set on the organization Data and Media pages.\nWhen you run several brands and want one brand\'s team to work records another brand captured, a workspace owner or admin can share them. You can share a lead, a contact, a company or a deal:\n- By hand: one record from its page, or a selection from the Leads or Contacts list.\n- By a sharing rule: every record the rule matches, including the ones you already have and every one captured or changed later.\nYou can share with chosen sites or with All sites. All sites includes sites you add to the workspace later.'
7908
+ text: 'Share records across sites\nA record in your CRM belongs to the whole workspace: every site sees the contacts, companies, deals and tasks, whichever site they came in on. The site a record came from is kept as its source, so you can still tell which brand met the person.\nAn agency that keeps each client\'s records apart can change that. A workspace owner or admin sets Default sharing for new records in the CRM\'s Settings to Only the site they came in on. Each site then sees the people it captured, a site in a consent group also sees the records of the group\'s other sites, and every other record is hidden from it, so one client\'s collaborator never sees another client\'s people. The setting covers new contacts, companies, deals and tasks, and changes nothing that already exists. It is separate from the defaults for new datasets and media files, which are set on the organization Data and Media pages.\nThe rest of this page is for a workspace that keeps its sites apart.\nWhen you run several brands and want one brand\'s team to work records another brand captured, a workspace owner or admin can share them. You can share a lead, a contact, a company or a deal:\n- By hand: one record from its page, or a selection from the Leads or Contacts list.\n- By a sharing rule: every record the rule matches, including the ones you already have and every one captured or changed later.\nYou can share with chosen sites or with All sites. All sites includes sites you add to the workspace later.'
7888
7909
  },
7889
7910
  {
7890
7911
  path: '/content-and-data/crm/sharing',
@@ -10523,7 +10544,14 @@ export const DOCS_SECTION_INDEX = [
10523
10544
  title: 'Create a site',
10524
10545
  heading: 'Create your first site',
10525
10546
  anchor: '#create-your-first-site',
10526
- text: '1. Sign in to the console.\n2. Choose Create site on the All Sites page, or in the site switcher in the app bar (top-left). With no workspace yet, Create site on the empty console sets your workspace up first, then opens the same window in it.\n3. Give it a name. Aglyn suggests a subdomain from it and checks that it is free as you type, so the site has a real address from the first moment — you can attach a custom domain later.\nWhen you can use Aglyn AI, Create site opens Start your site, which asks for the name and address and how you want to start: Start from the starter site, or Start with AI, which plans your pages from a few questions — see Start a new site with AI. Nothing is created until you choose, and nothing is chosen for you.\nStart from the starter site asks you to Choose a style first: 21 cards, each with a picture of an example home page in that style — Business & services, Home services & trades, Restaurant & café, Photography and more. No card is selected until you click one, and Create site stays unavailable until you do. Choosing Create site then creates the site with the starter described below, in the style you chose — its built-in theme, brand color and fonts — and publishes it at once. The console says so: Your site is live, with the site\'s address, View your site and Edit your pages. Back returns to the first step, and closing the window creates nothing.\nChoose your starter is rolling out, and your workspace may not have it yet. Where it is on, Start from a starter site (or, without Aglyn AI, Create site itself) opens Choose your starter in place of the style cards: Aglyn\'s styles come first, then starters from the marketplace. A card with a price says so, and you buy it before the site is made. Nothing is chosen for you, Create site waits until you'
10547
+ text: '1. Sign in to the console.\n2. Choose Create site on the All Sites page, or in the site switcher in the app bar (top-left). With no workspace yet, Create site on the empty console sets your workspace up first, then opens the same window in it.\n3. Give it a name. Aglyn suggests a subdomain from it and checks that it is free as you type, so the site has a real address from the first moment — you can attach a custom domain later.\nUnder the name, you can add your logo and favicon now, or leave them for later.\nWhen you can use Aglyn AI, Create site opens Start your site, which asks for the name and address and how you want to start: Start from the starter site, or Start with AI, which plans your pages from a few questions — see Start a new site with AI. Nothing is created until you choose, and nothing is chosen for you.\nStart from the starter site asks you to Choose a style first: 21 cards, each with a picture of an example home page in that style — Business & services, Home services & trades, Restaurant & café, Photography and more. No card is selected until you click one, and Create site stays unavailable until you do. Choosing Create site then creates the site with the starter described below, in the style you chose — its built-in theme, brand color and fonts — and publishes it at once. The console says so: Your site is live, with the site\'s address, View your site and Edit your pages. Back returns to the first step, and closing the window creates nothing.\nChoose your starter is rolling out, and your workspace may not have it yet. Where it is on, Start from a starter site (or, without Aglyn AI, Create site itself) opens Choose your starter in place of the style cards: Aglyn\'s styles come first, then starters from the marketplace. A card with a price says so, and you buy it'
10548
+ },
10549
+ {
10550
+ path: '/getting-started/create-a-site',
10551
+ title: 'Create a site',
10552
+ heading: 'Add your logo and favicon',
10553
+ anchor: '#logo-and-favicon',
10554
+ text: 'Create site has three optional fields under the name. None of them is needed to create the site, and you can add or change all three later in Setup.\n| Field | What it does |\n| Logo | Shown in the header and the footer in place of your site\'s name. |\n| Logo for dark backgrounds | Shown in place of the logo to visitors in dark mode. Without one, they see the logo. |\n| Favicon | The small icon in the browser tab. Leave this blank to use your logo. |\nChoose a PNG, JPEG, WebP or SVG file, up to 15 MB; a favicon can also be an ICO file. For a logo, a square image at least 512 px wide, with the logo filling about 80% of it and a little space around it, looks right everywhere it is shown. Each field shows a preview, and Remove takes the file away again.\nThe files go into your new site\'s media library when the site is created, before an AI start begins, so the AI uses your logo too. If one can\'t be uploaded, your site is still created, and Aglyn tells you which file didn\'t make it. Add it under Setup: the logos are in Basic details → Site logo, and the favicon is in SEO → Favicon.\nThe header and footer that show your logo are the starter\'s. To change how the logo sits in them, open the layout under Layouts: each logo is an ordinary Image element.'
10527
10555
  },
10528
10556
  {
10529
10557
  path: '/getting-started/create-a-site',
@@ -10537,7 +10565,7 @@ export const DOCS_SECTION_INDEX = [
10537
10565
  title: 'Create a site',
10538
10566
  heading: 'Your site\'s details',
10539
10567
  anchor: '#site-details',
10540
- text: 'A site\'s Setup page opens on its details: what the site is called, where it is served from, and how it presents itself. The cards below are the ones to fill in first.\nBasic details {#basic-details}\nThe Basic details card names your site, sets its Aglyn address and picks the time zone its dates are read in — fill in a display name and a subdomain, then press Update.\n- Display name — what the site is called in the console. See below.\n- Subdomain — the site\'s address on Aglyn. See below.\n- Time zone — the day a published post is dated on this site. Leave it unset and the site follows your workspace\'s time zone; clear it with the ✕ to go back to that.\nDisplay name {#display-name}\nThe Display name is what the site is called inside the console — the site switcher, breadcrumbs, the Sites list and notifications — up to 30 characters. Visitors never see it: the title in their browser tab is your site\'s SEO Title, set under Setup → SEO.\nSubdomain {#subdomain}\nThe Subdomain is your site\'s free address, up to 15 characters, and it works from the moment the site exists. On aglyn.com it is the name in name.aglyn.app. It keeps working after you connect your own domain. Changing it changes that address, so links to the old one stop working.\nSite logo {#site-logo}\nThe Site logo card sets your brand mark: pick a Light mode logo from your media library — an SVG, or a PNG at least 400px wide — and add a Dark mode one if yours is hard to see on a dark background. Your live site shows it on the loading overlay between pages, and on error pages; without a logo it shows the site name instead, and dark-mode visitors see the light logo when no dark one is set.\nEmails this site sends {#site-emails}\nSetup → Emails lists the emails your site sends its own customers, grouped by the feature that send'
10568
+ text: 'A site\'s Setup page opens on its details: what the site is called, where it is served from, and how it presents itself. The cards below are the ones to fill in first.\nBasic details {#basic-details}\nThe Basic details card names your site, sets its Aglyn address and picks the time zone its dates are read in — fill in a display name and a subdomain, then press Update.\n- Display name — what the site is called in the console. See below.\n- Subdomain — the site\'s address on Aglyn. See below.\n- Time zone — the day a published post is dated on this site. Leave it unset and the site follows your workspace\'s time zone; clear it with the ✕ to go back to that.\nDisplay name {#display-name}\nThe Display name is what the site is called inside the console — the site switcher, breadcrumbs, the Sites list and notifications — up to 30 characters. Visitors never see it: the title in their browser tab is your site\'s SEO Title, set under Setup → SEO.\nSubdomain {#subdomain}\nThe Subdomain is your site\'s free address, up to 15 characters, and it works from the moment the site exists. On aglyn.com it is the name in name.aglyn.app. It keeps working after you connect your own domain. Changing it changes that address, so links to the old one stop working.\nSite logo {#site-logo}\nThe Site logo card sets your brand mark: pick a Light mode logo from your media library — square, at least 512 px, the logo filling about 80% with a little space around it, as an SVG or a PNG — and add a Dark mode one if yours is hard to see on a dark background. Your live site shows it on the loading overlay between pages, and on error pages, and a site created since November 2026 shows it in its header and footer too; without a logo it shows the site name instead, and dark-mode visitors see the light logo when no dark one is'
10541
10569
  },
10542
10570
  {
10543
10571
  path: '/getting-started/create-a-site',