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

# Browse and Manage Your Peptide Therapy Product Menu

> The Fit4Life OS Menu screen shows your full peptide catalog across Injectable, Nasal, Oral, and Topical categories, the same catalog the SMS bot prices from, plus per-product cost entry for margin reporting.

The Menu screen (`/live/menu`) shows your clinic's peptide therapy catalog, **37 products** across four categories, and lets you enter per-product **cost** for margin reporting. It is the same catalog the SMS bot prices from.

## Product Categories

<CardGroup cols={2}>
  <Card title="Injectable" icon="syringe">
    **14 products.** Subcutaneous/intramuscular formulations, including dose-tiered options like Retatrutide.
  </Card>

  <Card title="Nasal" icon="nose">
    **5 products.** Intranasal peptide sprays.
  </Card>

  <Card title="Oral" icon="pills">
    **15 products.** Capsule, tablet, and sublingual preparations.
  </Card>

  <Card title="Topical" icon="hand-dots">
    **3 products.** Cream and gel formulations.
  </Card>
</CardGroup>

## Where the catalog lives

<Warning>
  Product **names, categories, and retail prices are defined in code** (`src/lib/mock-data/products.ts`), not in an editable database table. Adding a product, removing one, or changing a **retail price** is a code change + deploy, it cannot be done from the Menu screen. This is also why a price change is **not** instant for the bot: the bot reads the same static catalog, so it picks up new pricing only after a deploy.
</Warning>

The one thing you **can** edit on this screen is the per-product **cost (COGS)**, which feeds the P\&L on the [Finances](/docs/features/finances) screen.

## Per-product cost (COGS)

<Steps>
  <Step title="Find the product">
    Use the search bar or scroll to its category.
  </Step>

  <Step title="Enter its cost">
    Type the wholesale cost into the product's cost field. Costs are stored in the `product_costs` table and are **nullable**: margin views stay empty (never fabricated) until you enter a cost.
  </Step>

  <Step title="See it in Finances">
    Net profit on the P\&L is `revenue − cost`, computed from the costs you enter here.
  </Step>
</Steps>

## Retatrutide dose-based pricing

Retatrutide (and other dose-based items like MK-677) is priced by **dose**, not a single flat price. The dose-table price is the whole charge; a Reta order's `# shots` field is informational (it tracks mg purchased) and is **not** a price multiplier. Existing clients' dose prices are grandfathered from the tracker.

<Note>
  The SMS bot will **not** start a brand-new dose-based order on its own, those route to a human. It can, however, reorder a dose-based item a customer has bought before, because the price is already on file.
</Note>

## How the menu powers the SMS bot

The bot does not keep its own product list, it prices from the same catalog via its `browse_menu` and `search_menu` tools.

<CardGroup cols={2}>
  <Card title="Category browsing" icon="list">
    A broad ask ("what do you offer?") returns the four categories with counts; the bot then lists a chosen category completely. It never recites the menu from memory.
  </Card>

  <Card title="Specific lookups" icon="magnifying-glass">
    A named product runs `search_menu`, which returns matches plus a `totalMatches`/`truncated` signal so the bot never falsely claims it listed everything.
  </Card>
</CardGroup>

<Tip>
  Pricing and totals are always tool-derived; the bot refuses to total an order containing any unpriced line. If you change a retail price in `products.ts` and deploy, the bot quotes the new price on its next reply.
</Tip>
