From salesforce-commerce
Builds headless B2C storefronts for Salesforce Commerce using PWA Kit: React SSR framework (not Next.js), Commerce SDK hooks, Chakra UI components, and Managed Runtime deployment.
npx claudepluginhub orcaqubits/agentic-commerce-skills-plugins --plugin salesforce-commerceThis skill is limited to using the following tools:
**Fetch live docs:**
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Guides MCP server integration in Claude Code plugins via .mcp.json or plugin.json configs for stdio, SSE, HTTP types, enabling external services as tools.
Fetch live docs:
https://developer.salesforce.com/docs/commerce/pwa-kit-managed-runtime/overview for PWA Kit documentationsite:github.com SalesforceCommerceCloud pwa-kit for source, examples, and starter templatessite:developer.salesforce.com pwa-kit commerce-sdk for Commerce SDK integrationsite:developer.salesforce.com pwa-kit managed-runtime deployment for deployment docsWhy: PWA Kit versions, Commerce SDK hooks, and Managed Runtime deployment procedures change across releases. Always verify the version in use (v2 vs v3+) before generating code.
PWA Kit is Salesforce's React-based framework for headless B2C Commerce:
| Aspect | Detail |
|---|---|
| Framework | React with custom SSR (NOT Remix, NOT Next.js) |
| Hosting | Managed Runtime (Salesforce CDN/edge) or self-hosted Node.js |
| API Layer | Commerce SDK -- typed access to SCAPI (Shopper APIs) |
| Authentication | SLAS (Shopper Login and API Access Service) |
| UI Library | Chakra UI (accessible, themeable components) |
| Extensibility | Override templates/components without forking |
pwa-kit-storefront/
├── app/
│ ├── pages/ # Route-based page components
│ ├── components/ # Shared React components
│ ├── hooks/ # Commerce SDK React hooks
│ └── routes.jsx # Centralized route definitions
├── config/default.js # Site config (API credentials, locales)
└── ssr.js # SSR server entry point
| Concept | Description |
|---|---|
| Data Fetching (v2) | getProps static method on page components -- runs server-side on initial load |
| Data Fetching (v3+) | withReactQuery and React Query hooks replace getProps |
| Routing | Centralized in app/routes.jsx (NOT file-based like Next.js); React Router syntax |
| SSR | Custom server-side rendering via ssr.js; hydration on client |
| Commerce SDK Hooks | useProduct, useCategories, useBasket, useCustomer, useSearchParams |
| Chakra UI | Box, Flex, Grid, Stack for layout; responsive array syntax fontSize={['sm', 'md']} |
| SLAS Auth | Guest tokens (automatic), registered login (OAuth), token refresh (transparent via SDK) |
routes.jsx.getServerSideProps.getProps; v3+ uses React Query. Check package.json before coding..env in production.The Commerce SDK is configured in config/default.js with Commerce API credentials (clientId, organizationId, shortCode, siteId). These values come from environment variables in production. The SDK handles SLAS authentication, token refresh, and SCAPI proxy routing transparently.
| Hook | Purpose | Returns |
|---|---|---|
useProduct(id) | Fetch product by ID | Product object with variants, images, prices |
useCategories(id) | Fetch category tree | Category with subcategories |
useBasket() | Cart management | Basket object with line items, totals |
useCustomer() | Customer profile | Customer data, authentication state |
useSearchParams() | Search and filtering | Search results with facets, pagination |
Fetch live docs for current hook signatures -- return types and parameters evolve across SDK versions.
Routes are defined explicitly in app/routes.jsx using React Router syntax. Page components in app/pages/ are NOT auto-discovered. Each route maps a URL pattern to a component with optional data fetching.
// Pattern: route definition skeleton
// Fetch live docs for current route config API
const routes = [
{ path: '/', component: Home, exact: true },
{ path: '/product/:productId', component: ProductDetail },
]
| Phase | Description |
|---|---|
| Server render | ssr.js processes the request; getProps (v2) or React Query (v3+) fetches data |
| HTML delivery | Fully rendered HTML sent to browser with embedded state |
| Client hydration | React hydrates the server-rendered HTML and attaches event handlers |
| Client navigation | Subsequent navigation is client-side via React Router |
| Target | Method |
|---|---|
| Managed Runtime | npm run push -- -m "message" via CLI; global CDN, auto-SSL, environment management |
| Self-hosted | Any Node.js host (AWS, Heroku, Vercel); manual SCAPI proxy configuration needed |
Managed Runtime environments: development, staging, production. Each environment has independent configuration in Runtime Admin.
Override templates and components without forking the base:
Chakra UI is the default component library. Customize via extendTheme():
fontSize={['sm', 'md', 'lg']} maps to breakpoints.# Pattern: create new PWA Kit project
# Fetch live docs for current CLI options
npx @salesforce/pwa-kit-create-app
// Pattern: page component skeleton
// Fetch live docs for current data fetching API
const MyPage = ({ data }) => <Box>{data.name}</Box>
export default MyPage
config/default.js environment-aware; never hardcode API credentials.getProps or React Query) -- never useEffect for initial data.Fetch the PWA Kit docs, Commerce SDK reference, and Managed Runtime deployment guide for exact component APIs, SDK method signatures, and configuration options before implementing.