Skip to content

Markdown version · llms.txt

On this page

This list is generated from the product, so it cannot drift from the code. For a plain-language guide to each switch, see Turn features on and off.

Machine-readable twin: catalog.json. Feature keys are the names in site/config/features.config.ts. Ask your agent to turn a key on or off. You cannot flip these in admin today.

  • shipped — in use on live sites
  • current — also in use (memberships and session packs)

Leads, the blog, the link-in-bio page, follow-up messages, and texting are not switches. See leads, public website, and messages.

Always on

These have no defineFeatures switch. They are the platform.

KeyNameOwner docWhat it is
customersCustomerscustomersOne record for everyone the business serves. Locations, tags, custom fields. A won lead becomes a customer. “Member” means a customer with an open membership, not a separate kind of person.
staffStaffadminPeople with a staff row can sign in to admin (owner or staff). Sessions assign to staff. Owners invite staff and refund payments.
leadsLeadsleadsThe enquiry pipeline. Not a feature switch today: lead forms always create leads, and admin always has the board. Turning leads off so forms only email the owner is still planned.
schedulingSchedulingschedulingRecurrence, staff assignees, availability, closures and conflict checks. Group sessions use this engine. There is no appointments or jobs feature in this commit.
messageQueueMessage queuemessagesFeatures emit events (quote.sent, invoice.due, membership.started, …). The site’s automations and lead sequences say what to send. /api/cron/nurture sends what is due.
siteConfigSite configvocabularyBusiness details, vocabulary, forms, CRM follow-ups and feature switches live in site/config. An owner Settings page in admin is still planned.
adminAdminadminThe signed-in staff area at /admin.
publicSitePublic websitepublic-siteStatic public pages, blog posts, the link-in-bio page, and public forms. No feature switch: every site has them. Optional bits (phone, address, schedule) render nothing when missing.

Switches

Every key below is declared in FEATURE_DEFAULTS and is off unless the site turns it on.

KeyNameMaturityOwner docNeedsAdminPublic
customerPortalCustomer portalshippedcustomer-portal—Customers (invite)/portal; /portal/account; /sign-in
groupSessionsGroup sessionsshippedgroup-sessions—/admin/schedule/schedule
groupSessionBookingGroup session bookingshippedgroup-sessionsgroupSessions, customerPortal/admin/schedule (add a customer to a session)/portal/sessions
membershipsMembershipscurrentmembershipspayments, customerPortal/admin/catalog (plans); /admin/memberships/portal/memberships; /portal/memberships/manage
sessionPacksSession packscurrentsession-packspayments, customerPortal/admin/catalog (packs); /admin/customers (balance)/portal/session-packs
filesFilesshippedfiles—/admin/files/files/{slug}
paymentsPaymentsshippedpayments—/admin/payments/pay/{token}
invoicesInvoicesshippedinvoices—/admin/invoices/i/{token}; /i/{token}/pdf
quotesQuotesshippedquotes—/admin/quotes; /admin/catalog/q/{token}; /q/{token}/pdf

Collections

Table names in Postgres (public). Memberships use membership_plans and memberships, not a table named subscriptions.

CollectionSummaryUsed by
customersThe person or organisation every feature hangs off: name, emails, phones, locations, tags, and site-defined custom fields. A lead becomes a customer when it is won.memberships, sessionPacks, customerPortal, quotes, invoices, payments, groupSessions, groupSessionBooking
staffPeople assigned to sessions. Staff availability and time off feed the scheduling engine. A staff row is also what lets someone sign in to admin.groupSessions
membership_plansAdmin catalog of recurring offers (name, amount in cents, month or year). Checkout uses these plans; the browser is not trusted to supply Stripe product or price IDs.memberships
membershipsLocal subscription and access state for one customer’s plan. Status names match Stripe. One open membership per customer. Not a table named subscriptions.memberships
session_packsAdmin catalog of one-time session-credit packs (name, amount in cents, credit count, optional expiry in days). Checkout uses these packs; the browser is not trusted to supply Stripe product or price IDs.sessionPacks
session_pack_purchasesA customer’s one-time pack Checkout (or simulated purchase). Credits are granted once on paid Checkout.sessionPacks
session_pack_lotsA grant of session credits with remaining balance and optional expiry. Available balance is unexpired remaining.sessionPacks
session_pack_creditsLedger of grants and uses (purchase, admin grant, booking use, deduct, reverse, refund).sessionPacks
catalog_itemsProducts and services used as quote and invoice line items. Owners edit them on admin → Catalog, next to membership plans and session packs.quotes, invoices
quotesPriced offers with optional line items, tax, deposit, approval signature, and PDF.quotes, customerPortal, payments
invoicesAmounts in integer cents, one currency per site, document numbers such as INV-1001. Stored statuses: draft, awaiting_payment, paid, bad_debt, void. past_due is computed.invoices, payments, customerPortal
paymentsOne-time payment records. Stripe events are logged idempotently in stripe_events. Memberships reuse this foundation rather than a second ledger.payments, invoices, quotes, memberships, sessionPacks
scheduled_messagesQueued email and SMS pointed at a lead, customer, quote, invoice, membership or session pack, with consent and quiet-hour safeguards.invoices, quotes, memberships, sessionPacks
site_filesUploaded files served at /files/{slug}. Access is public or signed-in customers (and staff).files
public_linksHashed tokens for /q/{token}, /i/{token} and /pay/{token}. The server checks the token before reading the record.quotes, invoices, payments
leadsEnquiry pipeline from public forms. Stages and programs are the site’s CRM config.—
schedule_occurrencesDated instances of the scheduling engine (group sessions today). Capacity, cancel state, staff assignees.groupSessions, groupSessionBooking
group_session_bookingsA customer booked on a group-session occurrence.groupSessionBooking
tax_ratesNamed tax rates in basis points. One default. Copied onto quotes and invoices.quotes, invoices

Routes in this commit

Admin

  • /admin
  • /admin/account
  • /admin/catalog
  • /admin/customers
  • /admin/customers/:customerId
  • /admin/files
  • /admin/invoices
  • /admin/invoices/:invoiceId
  • /admin/invoices/:invoiceId/pdf
  • /admin/leads
  • /admin/leads/:id
  • /admin/memberships
  • /admin/payments
  • /admin/quotes
  • /admin/quotes/:quoteId
  • /admin/quotes/:quoteId/pdf
  • /admin/schedule
  • /admin/schedule/:sessionId
  • /admin/schedule/weekly
  • /admin/staff

Customer portal

  • /portal
  • /portal/account
  • /portal/invoices/:invoiceId
  • /portal/memberships
  • /portal/memberships/manage
  • /portal/request
  • /portal/session-packs
  • /portal/sessions
  • /files/:slug
  • /i/:token
  • /i/:token/pdf
  • /pay/:token
  • /q/:token
  • /q/:token/pdf

Sign-in

  • /auth/confirm
  • /forgot-password
  • /sign-in
  • /update-password

Public site and forms

  • /
  • /.well-known/xylo.json
  • /about
  • /blog
  • /blog/:slug
  • /blog/page/:page
  • /cancel-plan
  • /forms/:form
  • /get-started
  • /links
  • /privacy-policy
  • /request-visit
  • /schedule
  • /services
  • /services/:slug
  • /terms-of-service

Canonical: https://www.xylosoftware.com/cms/docs/features