> ## Documentation Index
> Fetch the complete documentation index at: https://help.clinikehr.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Store page

> Brand and publish your public storefront, set its address and checkout options, and see what each plan tier unlocks.

export const StillStuck = ({topic}) => <div className="ck-callout ck-callout--note" role="note">
    <p className="ck-callout__body">
      <strong>Still stuck{topic ? ` with ${topic}` : ''}?</strong>{' '}
      Check <a href="/platform/help/troubleshooting">Troubleshooting</a> first —
      it covers the failures we see most often. If that does not resolve it,{' '}
      <a href="/platform/help/contact-support">contact support</a> and include
      your workspace name and the time the problem happened, so we can find the
      matching entry in your audit log.
    </p>
  </div>;

export const TaskHeader = ({before, time, after}) => <div className="ck-task">
    {before ? <div className="ck-task__cell">
        <div className="ck-task__title">Before you start</div>
        <p className="ck-task__body">{before}</p>
      </div> : null}

    {time ? <div className="ck-task__cell">
        <div className="ck-task__title">Takes about</div>
        <p className="ck-task__body">{time}</p>
      </div> : null}

    {after ? <div className="ck-task__cell">
        <div className="ck-task__title">When you're done</div>
        <p className="ck-task__body">{after}</p>
      </div> : null}
  </div>;

export const Path = ({steps = []}) => <span className="ck-path">
    {steps.map((s, i) => <span key={i} className="ck-path__step">
        {i > 0 ? <span className="ck-path__sep" aria-hidden="true">
            ›
          </span> : null}
        {s}
      </span>)}
  </span>;

export const Availability = ({editions = ['all'], plans, roles, note}) => {
  const list = editions.includes('all') ? ['clinic', 'pharmacy', 'lims'] : editions;
  return <div className="ck-avail" role="note" aria-label="Feature availability">
      <span className="ck-avail__label">Available in</span>

      {list.map(e => <span key={e} className={`ck-pill ck-pill--${e}`}>
          {EDITION_LABELS[e] || e}
        </span>)}

      {plans ? <span className="ck-avail__label">Plan</span> : null}
      {plans ? <span className="ck-pill ck-pill--plan">{plans}</span> : null}

      {roles ? <span className="ck-avail__label">Who</span> : null}
      {roles ? <span className="ck-pill ck-pill--role">{roles}</span> : null}

      {note ? <span className="ck-avail__note">{note}</span> : null}
    </div>;
};

<Availability editions={['clinic']} plans="Starter and above" roles="Owner or manager" note="Embedding, digital products and abandoned-cart recovery need Team" />

This tab is the shop window: the address your storefront lives at, how it looks, what shoppers can do at checkout, and — on Team — the snippet that drops it into your own website. The products themselves are managed in the Store module.

<Path steps={['Sidebar', 'Settings', 'Billing', 'Store Page']} />

<TaskHeader before="A connected payout account and at least one active product" time="15 minutes" after="A live storefront at your own address, ready to share or embed" />

## What your plan includes

| Plan          | Storefront | Active products | Also                                                                                    |
| ------------- | ---------- | --------------- | --------------------------------------------------------------------------------------- |
| **Free**      | None       | —               | No storefront at all                                                                    |
| **Starter**   | Yes        | 100             | —                                                                                       |
| **Essential** | Yes        | 1,000           | —                                                                                       |
| **Team**      | Yes        | Unlimited       | Digital products, an embeddable storefront, abandoned-cart recovery and a custom domain |

Two upsells you will meet by name: "Digital products are available on the Team plan. Upgrade to sell downloads." and "Embedding your storefront is a Team feature. Upgrade to add it to your website."

## What this tab controls

| Control                                          | What it does                                                                                                           | Default            |
| ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------- | ------------------ |
| **Live** / **Off**                               | The publish switch                                                                                                     | Off                |
| **Store address**                                | Your slug, after `/store/`. "Lowercase letters, numbers, and hyphens (3–40 chars)", checked live as you type           | Your practice name |
| **Copy link** / **Open**                         | Copies the public address, or opens it                                                                                 | —                  |
| Custom domain                                    | Serve the shop on your own domain. **Team** only                                                                       | Off                |
| **Announcement bar (optional)**                  | A coloured strip across the top — "Free shipping over \$75"                                                            | Blank              |
| **Headline**, **Subheadline**                    | The hero at the top of the shop                                                                                        | Defaults           |
| **Hero image**                                   | "Optional banner shown above your products"                                                                            | None               |
| **Intro (optional)**, **Footer note (optional)** | A sentence about the shop, and the small print                                                                         | Blank              |
| **Success title**, **Success message**           | What a shopper reads after paying                                                                                      | Defaults           |
| **Accent color**, **Theme**, **Store logo**      | Branding. Theme is **Light**, **Dark** or **Match visitor's device**; the logo "Defaults to your clinic logo"          | Brand blue, Light  |
| **Layout**                                       | **Grid** or **List**                                                                                                   | Grid               |
| **Products per row**                             | **2**, **3** or **4**                                                                                                  | 3                  |
| **Featured collection**                          | Pins one collection. **None** allowed                                                                                  | None               |
| **Featured products**                            | "Pinned to the top of your storefront, in the order you pick them"                                                     | None               |
| **Show collections filter**                      | Lets shoppers filter by collection                                                                                     | On                 |
| **Let shoppers add an order note**               | "Adds an optional note field at checkout (e.g. delivery instructions)"                                                 | Off                |
| **Offer shipping**                               | "Charge shipping on physical orders"                                                                                   | Off                |
| **Offer in-store pickup**                        | Collection at the practice                                                                                             | Off                |
| **Abandoned-cart recovery**                      | "Email shoppers who start checkout but don't pay, with a link to complete their order." **Team** only                  | Off                |
| **Charge tax by default**                        | "New products start with tax enabled", with **Rate (%)**, **Label** ("VAT / Sales Tax") and **Prices include tax**     | Off                |
| **Shipping policy**, **Returns policy**          | Optional text shown to shoppers                                                                                        | Blank              |
| **Live preview**                                 | Renders unsaved edits, **desktop** or **mobile**                                                                       | Desktop            |
| **Add to your website**                          | Embed snippet — **Floating button** or **Inline on the page**, plus a raw `<iframe>` under **Advanced**. **Team** only | —                  |
| **Save changes**                                 | Enabled once something has changed and the address is valid                                                            | —                  |

## Set it up

<Steps>
  <Step title="Connect a payout account">
    A shop that cannot take money is not a shop. Finish [Online payments](/practice/settings/online-payments) first.
  </Step>

  <Step title="Publish some products">
    Add and activate products in the Store module. This tab tells you when there are none — "Publish products in the Store module to feature them here."
  </Step>

  <Step title="Set your address">
    Type your **Store address**. The indicator underneath checks the format, reserved words, and uniqueness across every workspace, and **Save changes** stays disabled until it is usable.
  </Step>

  <Step title="Write the shop front">
    Fill in **Headline** and **Subheadline**, add an **Announcement bar** if you have something to say, and upload a **Hero image**. Set the **Success title** and **Success message** a shopper sees after paying.
  </Step>

  <Step title="Choose the layout">
    Pick a **Layout** and **Products per row**, then pin your best sellers under **Featured products** — they appear in the order you select them.
  </Step>

  <Step title="Set checkout options and tax">
    Decide on **Offer shipping** and **Offer in-store pickup** — turning both off leaves shoppers no way to receive their order. **Charge tax by default**, with a **Rate (%)** and a **Label**, applies to new products only; each product can still override it.
  </Step>

  <Step title="Save, then go Live">
    Select **Save changes**, review the preview, then switch to **Live** and save again.
  </Step>
</Steps>

## What changes once you save

**Going Live publishes the shop at your address.** It is public: anyone with the link can browse, add to a basket and pay. Orders land in the Store module and money settles to your connected payout account.

**Stock and cost still come from Inventory.** A store product is a shop-front listing for an inventory item — the quantity available and the cost price come from that item and are not editable on the storefront. Sell out in the shop and the stock is drawn from the same pool your practice uses. If a product's availability looks wrong, the fix is in Inventory, not here.

**The tax default only touches new products.** Turning it on does not re-tax anything already listed; each existing product keeps its own setting.

**Changing the address changes the link** you have already shared, and the old one stops working. It is checked for uniqueness across every workspace, so a common name may already be taken.

**Saving is not publishing.** You can edit and preview freely while the switch is **Off**; the amber line — "Save your changes so the live store reflects them" — appears when your live shop is behind your editor.

<Warning>
  If your paid plan lapses or you downgrade to **Free**, the storefront drops entirely — the public address stops serving and the shop is no longer for sale. Product data is not deleted, but anyone holding your link sees nothing until a paid plan is restored.
</Warning>

## Check it worked

Select **Open** and shop your own store: your headline, colours and featured products should be there, and a product page should show the right price. Place a small test order to confirm checkout completes, the **Success message** you wrote appears, and the order shows up in the [Store](/practice/money/store) module with stock drawn down.

## Common issues

<AccordionGroup>
  <Accordion title="The tab is blurred behind an upgrade panel">
    Your practice is on **Free**, which has no storefront. Storefronts start at **Starter** — see [Change your plan](/platform/plans/change-plan).
  </Accordion>

  <Accordion title="I only get a line saying I do not have permission">
    "Only clinic owners and managers can configure the store." An accountant can open Settings but not this tab's controls.
  </Accordion>

  <Accordion title="My store is live but shows no products">
    Only **active** products appear. Publish them in the Store module first — the preview here says the same thing when it finds none.
  </Accordion>

  <Accordion title="I cannot add another product, or cannot list a downloadable one">
    Both are plan limits. Active listings cap at 100 on Starter and 1,000 on Essential — deactivate something you no longer sell, or move up a tier for unlimited. Downloads are separate: "Digital products are available on the Team plan. Upgrade to sell downloads." Physical products are unaffected.
  </Accordion>

  <Accordion title="Abandoned-cart recovery is greyed out with a Team badge">
    It is a Team feature. Everything else on the **Display & checkout** card works on your current plan.
  </Accordion>

  <Accordion title="Save changes will not enable">
    Either nothing has changed, or the **Store address** is not usable. Read the indicator under the box — a bad format, a reserved word, or an address another workspace holds all block saving.
  </Accordion>
</AccordionGroup>

<StillStuck />
