Skip to main content
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

Injectable

14 products. Subcutaneous/intramuscular formulations, including dose-tiered options like Retatrutide.

Nasal

5 products. Intranasal peptide sprays.

Oral

15 products. Capsule, tablet, and sublingual preparations.

Topical

3 products. Cream and gel formulations.

Where the catalog lives

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.
The one thing you can edit on this screen is the per-product cost (COGS), which feeds the P&L on the Finances screen.

Per-product cost (COGS)

1

Find the product

Use the search bar or scroll to its category.
2

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.
3

See it in Finances

Net profit on the P&L is revenue − cost, computed from the costs you enter here.

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.
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.

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.

Category browsing

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.

Specific lookups

A named product runs search_menu, which returns matches plus a totalMatches/truncated signal so the bot never falsely claims it listed everything.
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.