// description = product HTML body input (not SEO meta_description). Template key
// stays "description" so stored tenant prompts keep working (renaming would be BREAKING).
{Name:"description",Label:"Product description",Description:"Current product description (HTML body). Not SEO meta_description.",Keys:[]string{KeyProductEnhance,KeySEOMeta}},
{Name:"attrs",Label:"Attributes",Description:"Compact JSON of product attributes",Keys:[]string{KeyProductEnhance}},
{Name:"gtin",Label:"GTIN",Description:"Product GTIN / barcode when present",Keys:[]string{KeyProductEnhance}},
{Name:"brand",Label:"Brand name",Description:"Company or product brand label",Keys:[]string{KeySEOMeta,KeyCampaignEmail}},
{Name:"brand_voice",Label:"Brand voice",Description:"Brand kit tone / dos / don'ts block",Keys:[]string{KeyProductEnhance,KeySEOMeta,KeyCampaignEmail}},
{Name:"language",Label:"Content language",Description:"Company content language (English display name)",Keys:[]string{KeyProductEnhance,KeySEOMeta,KeyCampaignEmail}},
{Name:"campaign_prompt",Label:"Campaign brief",Description:"Per-campaign user brief or template default",Keys:[]string{KeyCampaignEmail}},
{Name:"products",Label:"Product list",Description:"Plain-text product snippets for the campaign",Keys:[]string{KeyCampaignEmail}},
{Name:"template_key",Label:"Template key",Description:"Campaign template id (christmas, custom, …)",Keys:[]string{KeyCampaignEmail}},
}
// DefaultTemplate is the built-in prompt when the company has no custom row or disabled it.
// (unique_id) is RoleCategorize / ProductCategorize* — not this overlay. Used by
// local A1/Demo prompt repair and seed-a1 overlays.
constCategoryEnhanceUserTemplate=`Your reply is parsed as JSON {"name":"string","description":"string","meta_title":"string","meta_description":"string","attrs":{}} only (system schema). Write all string fields in {{language}} (do not hardcode a language).
Role: description. Build JSON "description": product body HTML only (not SEO meta). When a Description formula follows, emit ONE HTML string covering each section in order (tags matching type: h1/h2/h3/h4, p, ul); otherwise prefer 1-3 factual paragraphs as ONE string with limited HTML (<h2><p><ul><li>) — do NOT emit a competing full HTML document or wrap the whole reply in <name>/<metaDescription> tags.
Description: {{description}}
--- End Description ---
--- Meta ---
Role: meta. Build JSON "meta_title" and "meta_description" as plain SEO text (never HTML). meta_title: 50-60 chars; meta_description: 120-155 chars; follow any SEO meta formula that follows; never copy the full description HTML into meta_description.
--- End Meta ---
--- Attributes ---
Role: attributes. Build JSON "attrs" as an object of attribute_key → value strings. Prefer Allowed attribute keys / Title formula attr slots that follow; remap near-miss labels onto those keys; fill missing keys only from Name/Description/Category/Attrs evidence; never invent specs; omit unknown keys; never invent dimensions.
Label:"Product title, description, SEO meta & attributes",
Description:"Used when processing products (AI enhance step). Produces title, HTML description, meta_*, and attrs. Categorize (taxonomy pick when category is empty) is a separate pipeline step before this.",
- description: product body HTML only — follow any Description formula in the user message (structured HTML sections); otherwise 1-3 factual paragraphs; never copy name as description; never put SEO meta here
- meta_title: plain SEO title 50-60 chars (follow any SEO meta formula)
- meta_description: plain SEO snippet 120-155 chars (follow any SEO meta formula); never HTML
- attrs: object of attribute_key → value; only Allowed attribute keys / formula attr slots from the user message; remap near-miss labels; fill gaps from evidence only; omit unknowns; do not invent specs
- When Description is empty or the same as Name, write description from Category and Attrs only (do not invent specs); still obey a Description formula when present
- Write name, description, meta_title, and meta_description in {{language}}
{"name":"Acme Widget Pro","description":"<p>Durable widget for everyday use. Clear specs, ready to ship.</p>","meta_title":"Acme Widget Pro | Durable Daily Use","meta_description":"Shop Acme Widget Pro for reliable everyday performance. Clear specs and fast delivery.","attrs":{"brand":"Acme","product_model":"Widget Pro"}}
- Write meta_title and meta_description in {{language}}
Example:
{"meta_title":"Acme Widget Pro | Durable Daily Use","meta_description":"Shop Acme Widget Pro for reliable everyday performance. Clear specs and fast delivery."}