skills/sales-evershop/SKILL.md
EverShop platform help — open-source (GPL-3.0) Node.js/TypeScript/React/GraphQL eCommerce platform on PostgreSQL for developers and makers: products, variants, categories, carts, orders, customers, promotions, and checkout in one self-hosted project (storefront + admin + API together, not headless-only). Use when installing EverShop with create-evershop-app, building a REST or GraphQL integration, authenticating with JWT (admin /api/user/tokens, customer /api/customer/tokens, 15-minute token expiry, Bearer header), creating/updating products via REST while reading via GraphQL, wiring an order event to a CRM or warehouse since there are no native webhooks, fixing a failed npm build or Node-version error, fixing the server going unresponsive, or comparing EverShop to Medusa/Saleor/Vendure/Bagisto/Shopify. Do NOT use for cross-cart checkout-conversion strategy (use /sales-checkout) or picking a Merchant of Record for global tax (use /sales-merchant-of-record).
npx skillsauth add sales-skills/sales sales-evershopInstall 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.
If references/learnings.md exists, read it first for accumulated platform knowledge.
Figure out what the user actually needs before diving in:
/api/products, /api/carts/..., /api/orders), GraphQL (reads), the event/subscriber system (instead of webhooks), the admin panel UI, or a custom extension/theme?POST /api/user/tokens), customer JWT (POST /api/customer/tokens), or a token-refresh issue (the 15-minute default expiry)?Skip-ahead rule: if the prompt already says what they need, go straight to Step 2.
If the question is really a cross-platform strategy, hand off with the exact command:
| If the user wants… | Route to |
|---|---|
| Checkout conversion / order bumps / cart-abandonment tactics across carts | /sales-checkout {question} |
| Whether to use a Merchant of Record for global VAT/sales tax | /sales-merchant-of-record {question} |
| Post-purchase / abandoned-cart email sequences | /sales-email-marketing {question} |
| Comparing EverShop against another commerce backend | /sales-checkout {question} (platform selection) |
Otherwise it's an EverShop-specific question — answer it here.
Read references/platform-guide.md for the full reference — modules and what's REST-write vs GraphQL-read vs event-only, pricing/infra posture, data model with JSON shapes, and quick-start recipes. For raw auth/endpoint/event detail, read references/evershop-api-reference.md.
Answer using only the relevant section — don't dump the whole guide.
POST /api/products, PATCH /api/products/{uuid}, /api/orders, /api/carts/...); reading data (list products, fetch an order) is GraphQL — there's no broad REST list/get surface. Address mutations by the resource uuid, not the integer id.POST /api/user/tokens → {accessToken, refreshToken}, send Authorization: Bearer <token>. For long-running jobs, store the refresh token and call POST /api/user/token/refresh on 401, or raise JWT_ADMIN_TOKEN_EXPIRY. Endpoints are private by default (no access property = auth required).subscribers/order_placed/handler.ts, default-exported async fn) in an extension that fetch()es out — subscribers run async in-process, so you own retries/idempotency. Polling orders via GraphQL is the fallback when you can't deploy code.If you discover a gotcha or fix not in references/learnings.md, append it there with today's date.
Best-effort from research (2026-06) — re-verify Node/Postgres versions, token-expiry defaults, the event list, and that managed cloud is still unreleased against live docs.
order_placed/product_created/inventory_updated/etc. with a code subscriber in an extension that makes the outbound call itself. Don't expect a Shopify-style webhooks page.GET /api/products get surprised — the REST surface is for writes; querying is GraphQL (URQL on the frontend)./api/user/token/refresh) or bump JWT_ADMIN_TOKEN_EXPIRY, or every call starts 401-ing mid-run.npm run build failures (e.g. missing @babel/core, a TailwindLoader "use process(css).then(cb)" async-plugin error) are usually an unsupported Node version or a dirty install — use Node 20+ LTS and reinstall.url_key/sku must be a clean slug. Product-create "must match pattern" errors come from spaces/uppercase/invalid characters — use lowercase hyphenated slugs.docker compose up, seed demo data (npm run seed) and create an admin (npm run user:create -- ...) or admin login won't work./sales-checkout — Checkout-conversion strategy across carts (order bumps, upsells, cart-abandonment recovery) and platform selection./sales-medusa — Another open-source, self-hostable Node/TypeScript commerce engine (MIT) — but headless-only; compare if you want the engine separate from the storefront./sales-saleor — Open-source GraphQL-first headless commerce (Python/Django) with native outbound webhooks — compare against EverShop's no-webhook, in-process event model./sales-bagisto — Open-source Laravel/PHP commerce framework — the PHP-stack alternative to EverShop's Node stack./sales-shopify — The leading hosted commerce backend; compare against EverShop's self-hosted/open-source model./sales-merchant-of-record — Whether to use a MoR (Paddle, Lemon Squeezy) for global tax instead of self-managing (EverShop is not a MoR)./sales-do — Not sure which skill to use? The router matches any sales objective to the right skill. Install: npx skills add sales-skills/sales --skill sales-do -a claude-codeUser: "I'm writing a nightly script to push my product catalog into EverShop. Which API do I use and how do I handle auth?"
Approach: Use the REST API for writes. Get an admin token from POST /api/user/tokens ({email,password} → {accessToken, refreshToken}) and send Authorization: Bearer <token>. For each SKU, POST /api/products (new) or PATCH /api/products/{uuid} (update) — persist the returned uuid keyed by your SKU so updates address the right record, and keep url_key/sku as clean lowercase slugs to avoid "must match pattern" errors. Because the admin access token expires in 15 minutes, store the refresh token and call POST /api/user/token/refresh on a 401, or raise JWT_ADMIN_TOKEN_EXPIRY for the job. To read back the catalog (verify/export), query GraphQL, not REST.
User: "Where do I add a webhook URL in EverShop so my CRM gets pinged on each new order?"
Approach: Explain EverShop has no outbound-webhook settings page — it has an in-process event system. Create an extension with subscribers/order_placed/notifyCRM.ts exporting a default async function that receives the order data and fetch()es your CRM endpoint; enable the extension, rebuild, restart. Subscribers run async in-process, so the call won't block checkout, but you own retries/idempotency/logging — for reliability, enqueue to Redis/BullMQ and process there. If you can't deploy code into the store, fall back to polling orders via GraphQL on a schedule, tracking the last-seen order_id.
User: "I'm a solo founder. Should I use EverShop, Medusa, or Bagisto for a small self-hosted store?"
Approach: All are free/no-per-sale-fee and self-hosted. EverShop ships storefront + admin + API in one Node/TypeScript project — fastest to stand up and run if you just want a working store and are fine on Node + Postgres; its trade-offs are thinner docs for multi-currency/large-scale B2B and no deep customization framework. Medusa (Node/TS, MIT) is a headless engine — more flexible (Workflows SDK, modules) but you build/deploy the storefront separately. Bagisto (Laravel/PHP) fits a PHP team and adds marketplace/POS/B2B extensions. Match to the user's stack and how much they want bundled vs composable; for cross-platform checkout-conversion or MoR-tax decisions, route to /sales-checkout or /sales-merchant-of-record. Re-verify current versions/pricing before committing.
npm run build fails (missing @babel/core / TailwindLoader async-plugin error)"Almost always an unsupported Node version or a dirty install. EverShop needs Node 20.x+ and NPM 9+. Check node --version, switch to a Node 20 LTS (e.g. via nvm), delete node_modules + lockfile, reinstall, then npm run build. The "Use process(css).then(cb) to work with async plugins" TailwindLoader error is the classic symptom of the wrong Node/toolchain.
Run EverShop under a process manager (pm2/systemd) with auto-restart so a hung process recovers, and watch memory — small boxes (2 GB) can starve, especially with larger catalogs (8 GB+ RAM recommended at 10k+ products). Reproduce with npm run start:debug to capture the error, ensure a single instance owns port 3000, and make sure PostgreSQL is reachable and on SSD.
Two common causes. (1) Validation: url_key and sku must be clean slugs — lowercase, hyphenated, no spaces or special characters; fix the value and retry. (2) Auth expiry: the admin access token expires in 15 minutes by default, so a long batch starts returning 401 — store the refreshToken from POST /api/user/tokens, call POST /api/user/token/refresh on 401 and retry once, or raise JWT_ADMIN_TOKEN_EXPIRY for server-to-server jobs. Remember endpoints are private by default, so a missing/expired Bearer token always 401s.
tools
Wizlogo (wizlogo.com) platform help — a budget online logo maker (template/style-variation, marketed as "AI") plus a hub of FREE branding tools (business-name, blog-name and slogan generators, business-card maker, invoice generator, color converter, domain search). The pricing traps: the FREE logo is PERSONAL-USE-ONLY; the two cheap paid tiers are RASTER PNG/JPG only — Single (~€39.99 one-time) and Unlimited (~€3.99 per WEEK, recurring) — and VECTOR (SVG/PDF/EPS) is gated to the ~€299.99 Enterprise tier, which also bundles human designer edits and a social kit. Transparent PNG is on all paid plans. Use when making a Wizlogo logo, understanding free-vs-paid or personal-vs-commercial use, which tier unlocks vector/SVG for print, the weekly-subscription billing trap, its free name/slogan generators, or whether it has an API (UI-only — no public API, webhooks, Zapier or MCP). Do NOT use to just generate the business name (use /sales-namelix) or to compare/validate branding tools (use /sales-idea-validation).
tools
VistaPrint platform help (vistaprint.com, a Cimpress company) — the small-business design + print + digital-marketing platform: a free AI Logomaker (4 generations, 60 more after free sign-up) exporting SVG/PNG/PDF at 4000x4000 with no watermark, a free Brand Kit, business cards/flyers/signage/apparel/promo print, and a website builder. THE RIGHTS TRAP: VistaPrint states NO intellectual-property rights transfer on an AI-generated logo — you get usage rights but CANNOT register it for trademark or copyright; only its human designer service transfers full IP. Use when making a VistaPrint logo, asking if you own or can trademark it, running out of AI logo credits, printed colors not matching the screen, bleed/DPI/font file-prep rejections, or asking whether VistaPrint has an API (the consumer site does not — automation runs through the parent Cimpress Open partner-fulfilment API). Do NOT use for Vista Social scheduling (use /sales-vistasocial) or comparing logo tools market-wide (use /sales-idea-validation).
tools
Turbologo (turbologo.com) platform help — a budget AI/DIY logo maker: enter a business name + industry, pick icons and colors, and it proposes logo concepts you refine in an in-browser editor, then pay a one-time fee to download (designing is free, previews are watermarked, downloading is the paywall). Vector SVG/PDF is gated to the mid tier and up; the top tier adds a brand kit (business cards, letterheads, email signatures, social assets). Use when generating a logo in Turbologo, choosing which download tier to buy, vector SVG vs raster PNG, removing the free watermark, the time-limited edit-after-purchase window, pay-to-download pricing questions, whether an AI logo is yours to trademark, or whether Turbologo has an API to bulk-generate logos (it is UI-only — no public API, webhooks, Zapier, or MCP). Do NOT use to generate the business name (use /sales-namelix), compare or validate branding tools across the market (use /sales-idea-validation), or build wider marketing creative (use /sales-canva).
tools
Online Logo Maker (onlinelogomaker.com) platform help — a long-standing free/freemium DIY logo maker: build the mark yourself from icons, shapes, text, and fonts — MANUAL/template-based, NOT enter-a-name-get-AI-concepts. The free pack downloads a LOW-RES 300px PNG with a background; vector SVG, transparent PNG, and 2000px high-res are gated to a one-time lifetime Premium pack (not a subscription). The free tier's commercial-use rights are disputed by reviewers — clean ownership effectively needs Premium, and a shared-icon mark can be non-distinctive. Use for building/editing a logo here, free download vs Premium, vector SVG or transparent PNG, one-time pricing, commercial-use/trademark terms, near-namesake confusion (NOT LogoMaker.com / LogoMakr / Logomakerr.ai), or whether it has an API (UI-only — no API, webhooks, Zapier, MCP). Do NOT use to generate the business name (use /sales-namelix), compare branding tools across the market (use /sales-idea-validation), or build wider creative (use /sales-canva).