All notable changes to dashcommerce will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
(nothing yet)
dashcommerce-merge-seed --with-demo-catalog— optional CLI flag appends six demo products (one per product type: simple, variable, grouped, external, subscription, downloadable) plus curatedproduct_category/product_tagterms. Merging is keyed by productid, so existing entries with matching ids are preserved and the flag is safe to re-run.- Programmatic demo catalog exports —
DEMO_PRODUCTS,DEMO_PRODUCT_CATEGORY_TERMS,DEMO_PRODUCT_TAG_TERMS(and matchingDemoProductEntry/DemoTaxonomyTermtypes) re-exported from@dashcommerce/corefor cherry-picking from custom seed scripts. mergeDashCommerceSeed(seed, { withDemoCatalog })— same behaviour as the CLI flag for programmatic callers.@dashcommerce/starternow imports the demo catalog from@dashcommerce/coreso the starter and the CLI flag stay in sync (single source of truth).
- Admin Settings page crash on fresh installs — guard
saved._secretswith an optional chain. Previously renderedCannot read properties of undefined (reading 'stripeSecretKey')before the plugin lifecycle had populated secret placeholders. - Admin Reports page crash when no paid orders exist — guard
data.seriesreads withArray.isArrayand optional-chain nestedcurrencieslookups. Empty reporting responses now render the "No paid orders in this range" empty state instead of throwingdata.series is not iterable.
- Mark Node built-ins (
node:*) as explicit externals in the tsdown config so the Node-only CLI entry (src/cli/merge-seed.ts) no longer triggers UNRESOLVED_IMPORT warnings. Sandbox-safety forsandbox-entry.tsremains enforced byplatform: "neutral"plus code review.
dashcommerce-merge-seedCLI (@dashcommerce/corebin): mergesdefineProductsCollection()+defineProductTaxonomies()into the hostseed.jsonwith deduplication by collectionslugand taxonomyname. Resolves the seed path likeemdash seed(.emdash/seed.jsonif present, elsepackage.json→emdash.seed). Programmatic API:mergeDashCommerceSeed()exported from the package root.- Recommended bootstrap:
dashcommerce-merge-seed && emdash seed(afteremdash initon a fresh database).
First npm release of @dashcommerce/core under semantic versioning 0.1.0. The plugin descriptor version (DASHCOMMERCE_VERSION) matches the package.
- Commerce engine (MIT): products (all major types), multi-currency, cart + coupons + shipping + tax (flat / table / Stripe Tax), Stripe hosted and embedded checkout, orders + refunds, customers, inventory soft-locks, reviews, digital downloads, Stripe Subscriptions + dunning, Stripe Connect + vendor lifecycle, abandoned-cart recovery, transactional email (HTML + plain text), admin reports.
- Native plugin: React admin (12 pages, 5 widgets), Portable Text blocks, field widgets; runtime remains sandbox-safe (
@dashcommerce/core/sandbox). - Starter:
@dashcommerce/starter@0.1.0— reference Astro storefront (packages/starter).
0.x: treat minors as potentially breaking until 1.0.0; pin^0.1.0carefully in production.- Marketing / docs: https://dashcommerce.dev — live demo: https://demo.dashcommerce.dev
Phases 1–5 of the v1.0 plan:
- Phase 1 — Scaffold: bun workspace,
@dashcommerce/corepackage with.,./sandbox,./admin,./astroexports,tsdownbuild, CI workflow, MIT license, root README. - Phase 2 — Foundations:
Moneytype (ISO 4217, integer minor units, zero- and three-decimal awareness, currency-safe arithmetic); full entity type surface (Product, Variant, Cart, Order, Refund, Customer, Coupon, ShippingZone/Method/Class, TaxRate, Subscription, Review, Vendor, DownloadGrant, InventoryLedgerEntry, StockLock);defineProductsCollection()helper for hosts; 19 plugin storage collections declared with indexes + unique indexes. - Phase 3 — Products: content
beforeSavevalidation for commerce fields, product type predicates (purchasability, shipping), variant CRUD against plugin storage, price resolver (variant override, currency-scoped). - Phase 4 — Cart: KV-backed cart store (session cookie), pure currency-aware totals pipeline, coupon validator + discount resolver for all 5 discount types, shipping rate calculator for flat/free/pickup/weight-based methods, tax table engine with compound support, public cart routes.
- Phase 5 — Stripe primitives: sandbox-safe Stripe client (
ctx.http.fetch, urlencoded bodies,Idempotency-Key, ConnectStripe-Accountheader), PaymentIntent create/retrieve, webhook signature verification viacrypto.subtle(HMAC-SHA256, constant-time compare, tolerance window).
Resume kit:
RESUME.mdwith full status + invariants..claude/skills/dashcommerce-continuation/with SKILL.md and per-phase reference files covering phases 6–19.
Phases 6–19 of the approved plan shipped in-tree before the 0.1.0 tag: checkout, orders, refunds, subscriptions, downloads, reviews, Connect, abandoned cart, admin UI, storefront islands, Portable Text, transactional emails, reports, install hook, tests, starter.