Product Describer
AI product-copy microservice for e-commerce catalogs, marketplaces and PDP pages. describe turns a product's attributes ({ name, brand, category, material, color, features, audience, ... }) into a...
product-describer
AI product-copy microservice for e-commerce catalogs, marketplaces and PDP pages. Feed it a product's attributes and it returns listing-ready copy: a marketing paragraph, benefit bullets, a spec table, an SEO title, a meta description, per-variant copy and inferred care instructions.
Every tool has a deterministic heuristic-template core that runs fully offline. The generative tools (describe, bullets, variantsCopy) also wire an optional LLM path that enriches when a model is reachable and silently falls back — those results carry { mode: 'heuristic' | 'llm' }.
Tools
| Tool | Input | What it does |
|---|---|---|
describe | attributes | Turns attributes into a persuasive marketing paragraph (tone + length controlled). |
bullets | features | Converts raw features into benefit-led selling bullets (feature → so-you-can benefit). |
specsTable | attributes | Renders attributes into a spec table: rows + markdown + html. |
seoTitle | attributes | Builds an SEO-optimized, length-capped product title. |
metaDescription | attributes | Writes a click-worthy meta description under 160 chars (configurable). |
variantsCopy | variants (+ attributes) | Produces per-variant copy for size/color/option combos. |
careInstructions | attributes | Infers wash/care/maintenance guidance from material + category. |
Usage
import pack from './index.js';
await pack.adapters.describe({
attributes: { name: 'Trailblazer Backpack', brand: 'Summit', category: 'daypack',
material: 'ripstop nylon', color: 'forest green', features: ['waterproof', 'lightweight', 'adjustable straps'] },
options: { tone: 'bold', length: 'medium' },
});
pack.adapters.bullets({ features: ['waterproof zippers', 'padded laptop sleeve', 'lightweight frame'] });
pack.adapters.careInstructions({ attributes: { material: 'wool', category: 'apparel' } });
Each tool takes ONE args object (maps 1:1 to an HTTP POST body). Invalid input throws TypeError.
Options
options: tone (bold/friendly/professional/playful/luxury), length (short/medium/long), maxLength (title/meta cap), format (markdown/html/rows for specsTable), keywords, narrate (force-try the LLM path).
DRY boundaries
- This GENERATES product-listing copy from attributes.
- It is NOT the general conversion-copywriter (
copywriter), the meta/HTML auditor (seo), or the
keyword tool (keyword-cluster).
- Self-contained: no cross-pack imports except
../_shared/llm.js.