dist/codex/salesforce-commerce/skills/sf-catalog/SKILL.md
Manage Salesforce Commerce catalogs — B2C (Business Manager catalogs, categories, products, pricing books, promotions, search indexes) and B2B (Product2, Pricebook2, PricebookEntry, volume discounts, entitlements). Use when working with product data across either platform.
npx skillsauth add orcaqubits/agentic-commerce-claude-plugins sf-catalogInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Fetch live docs before implementing catalog features.
Master Catalog (shared across sites)
-> Site Catalog (site-specific subset)
-> Categories (hierarchical tree)
-> Products (assigned to categories)
Catalog Hierarchy:
Product Type Taxonomy:
| Product Type | Description | |---|---| | Standard Product | Simple product without variations | | Master Product | Parent defining shared attributes | | Variation Group | Optional grouping layer between master and variations | | Variation Product | Specific SKU with unique variation attributes (color, size) | | Product Set | Curated collection (e.g., "Complete the Look") | | Product Bundle | Package of products sold together at bundle price |
Attribute System:
Pricebook Hierarchy:
| Concept | Detail | |---|---| | Price Book | Container for prices; supports multiple currencies | | List Price | Base price (MSRP) | | Sale Price | Promotional price, time-bound | | Customer Group Pricing | Segment-specific prices | | Price Book Inheritance | Child books inherit from parent; override selectively | | Price Tiers | Quantity-based pricing rules |
Promotions Engine:
Search and Refinements:
Import/Export:
ProductCatalog (B2B container)
-> ProductCategory (categories)
-> Product2 (standard Salesforce object)
-> PricebookEntry (price per pricebook)
-> Buyer Group Entitlements
B2C vs B2B Catalog Comparison:
| Aspect | B2C (SFCC) | B2B (Lightning) | |---|---|---| | Product object | SFCC Product (proprietary) | Product2 (standard sObject) | | Category object | SFCC Category | ProductCategory (B2B-specific) | | Price container | Price Book (SFCC) | Pricebook2 (standard sObject) | | Price entry | Price per book + currency | PricebookEntry (junction object) | | Visibility control | Site catalog assignment | Buyer Group Entitlements | | Variant model | Master -> Variation Products | Product2 child records + custom fields | | Search | Proprietary SFCC index | Commerce Search (Einstein-powered) | | Import | XML via Business Manager | Batch Apex, Platform Events, Data Loader |
Entitlements and Visibility (B2B):
Volume Pricing (B2B):
// Pattern: B2C product retrieval
// Fetch live docs for SCAPI Shopper Products API
// GET /products/{id} -> product attributes, pricing, variants
// Pattern: B2B product query with entitlements
// Fetch live docs for Product2, BuyerGroup, and Entitlement objects
// Query Product2 WHERE entitled for buyer group
Fetch the SCAPI Shopper Products reference and Salesforce Product2 object docs for exact field names and schemas before implementing.
development
Build with Spree's headless Next.js storefront — the official `spree/storefront` repo (Next.js 16 App Router with Server Actions and Turbopack, React 19 Server Components, Tailwind CSS 4, TypeScript 5, `@spree/sdk`, Sentry), server-only auth (httpOnly JWT cookies + publishable key), MeiliSearch faceted catalog, one-page checkout with Apple/Google Pay/Klarna/Affirm/SEPA, multi-region market routing, GA4 + JSON-LD SEO, and Vercel/Docker deployment. Use when forking or customizing the storefront, or evaluating headless adoption.
tools
Build Spree extensions as Rails engines — gem scaffolding, `bin/rails g spree:extension`, mounting routes/migrations/assets, the modern `prepend` decorator pattern (`*_decorator.rb` with `self.prepended(base)`), generators (`spree:model_decorator`, `spree:controller_decorator`), the four customization surfaces in preference order (Events > Webhooks > Dependencies > Decorators), Spree::Dependencies for swapping service objects, gem release/versioning, and the deprecated Deface engine. Use when building a reusable Spree extension or adding non-trivial customization to an app.
development
Build with Spree's event bus and Webhooks 2.0 — `Spree::Events` publication, `Spree::Subscriber` DSL with `subscribes_to` and `on`, wildcard matching, lifecycle events (`{model}.created/.updated/.deleted` via `publishes_lifecycle_events`), the canonical event catalog (order.*, payment.*, shipment.*, product.*), Webhooks 2.0 endpoints, HMAC-SHA256 signing (`X-Spree-Webhook-Signature`), exponential-backoff retries, and Sidekiq job orchestration. Use when wiring event-driven business logic, building webhook consumers, or replacing ActiveSupport callback chains.
tools
Cross-cutting Spree development patterns — the customization preference hierarchy (Events > Webhooks > Dependencies > Decorators), `Spree::Dependencies` service-object swapping, the `_decorator.rb` + `prepend` + `self.prepended` idiom, idempotent subscribers and webhook receivers, multi-store scoping discipline, prefixed IDs, calculator polymorphism (shipping/promotion/tax share the base), service-object composition with `dry-monads` or simple results, why to avoid `class_eval` reopening and Deface, and Spree-on-Rails idioms (Hotwire/Turbo Stimulus, ActiveStorage, Action Cable, Sidekiq). Use when designing the architecture of a Spree extension or solving cross-cutting concerns.