AstroBaaS

Catalogue & product data

Product Data Hub (PIM)

Paid pluginsize XLplanned, not built

Indicative price, not an offer: EUR 500-5000/year or EUR 2000-10000 one-off

Generated from docs/plan/paid/product-data-hub/PLAN.md in the AstroBaaS repository. Nothing described below is implemented — it is the written plan for it.

A Product Information Management (PIM) system that centralizes product data, enables custom enrichment workflows, and syndicates data to storefronts and external channels. Merchants maintain a single source of truth for product descriptions, attributes, relationships, and translations, with approval chains and channel-specific rules.

The problem

A merchant sells on their own storefront, a marketplace, and B2B partners via API. Product data lives in spreadsheets, accounting systems, image folders, and the CMS. Prices are out of sync, descriptions differ by channel, new SKUs take hours to coordinate, and mistakes propagate everywhere. They need a single system where data is entered once, validated, approved, and pushed to all channels automatically.

What it does

  • Central product registry with full CRUD, versioning, and audit trail for all changes
  • Custom attribute schema definition (text, numbers, rich text, enums, multi-select) with validation rules
  • Bulk import/export in CSV, JSON, and XML formats with error reporting and rollback on failure
  • Product enrichment workflows: multi-stage approval chains (review, approval, publish states)
  • Channel-specific syndication rules (attribute mappings, transformations, conditional logic)
  • Product relationships: variants (size/color/SKU linked to parent), bundles, and cross-sell links
  • Multi-language product data (name, description, SEO) with per-locale completeness tracking
  • Data quality scoring: completeness percentage, validation errors, missing required fields per product
  • SEO metadata management (meta title, description, Open Graph, structured data templates)
  • Audit trail viewing: who changed what, when, and the ability to see historical versions
  • REST API endpoints for programmatic product management (CRUD, bulk operations, queries)
  • Webhook triggers on product create/update/publish for downstream systems and storefronts
  • Admin UI: product editor with dynamic custom fields, bulk importer, approval queue, syndication rule builder, data quality dashboard

What it deliberately does NOT do

Each boundary carries its reason. A boundary without a reason gets crossed by the next person who reads this.

  • AI-powered description generation — requires external ML service; content creation is merchant’s domain, not data management.
  • Marketplace listing automation (eBay, Amazon, Shopify)— each marketplace has different APIs, auth, and policies; better as separate integrations.
  • Real-time inventory sync across channels — inventory is a fulfillment/order concern, not product data; managed by order/stock system.
  • Image processing, resizing, or CDN integration — images are assets, not product data; handle via dedicated image service or third-party CDN.
  • Machine translation or professional translation services — language data is in scope (storage), but translation workflow is out of scope.
  • Price elasticity analysis or dynamic pricing strategies — analytics and pricing are strategy layers above data management.
  • Dynamic variant generation from attributes — that is product creation logic (business rules), not data hub; merchant defines variants explicitly.
  • Marketplace order ingestion or sync — that is fulfillment/order management, not product data.

Data model

Migration required. New tables: products_extended (versioned product entity with created/updated/published timestamps), product_attributes (schema definition for custom fields), product_attribute_values (per-product custom field data), product_enrichment_workflows (approval chain definitions per product), product_enrichment_tasks (pending approvals in workflow), syndication_rules (channel-specific mappings and transformations), product_relationships (variants, bundles, cross-sells with relationship types), product_data_quality_scores (completeness/validation metrics per language/product), product_audit_log (versioning: who changed what when). All storage drivers must support versioning via timestamps and soft-deletes.

API

  • POST /api/admin/pim/products — create product with custom attributes; returns versioned product
  • GET /api/admin/pim/products/:id — fetch product with all versions, audit trail, current enrichment workflow state
  • PUT /api/admin/pim/products/:id — update product attributes; triggers workflow if configured
  • DELETE /api/admin/pim/products/:id — soft-delete (archived state); remains queryable
  • POST /api/admin/pim/products/bulk-import — CSV/JSON upload for 1000+ SKUs; returns job ID and status
  • GET /api/admin/pim/products/bulk-import/:jobId — poll import progress and errors
  • GET /api/admin/pim/products/export — export products (optionally per-channel) as CSV/JSON with syndication rules applied
  • POST /api/admin/pim/attributes — define custom attribute schema (field name, type, required, enum values)
  • GET /api/admin/pim/attributes — list all custom attribute definitions
  • DELETE /api/admin/pim/attributes/:id — remove attribute (soft-delete to preserve history)
  • POST /api/admin/pim/workflows — define enrichment workflow (stages, approvers, publish conditions)
  • GET /api/admin/pim/workflows/:id/tasks — list pending approval tasks for a workflow
  • PUT /api/admin/pim/workflows/:id/tasks/:taskId — approve/reject task with comment; auto-advance to next stage
  • POST /api/admin/pim/syndication-rules — define channel rule (if attribute matches X, map to channel field Y, transform with function Z)
  • GET /api/admin/pim/syndication-rules — list all syndication rules
  • PUT /api/admin/pim/syndication-rules/:id — update rule
  • GET /api/admin/pim/quality — data quality dashboard (% complete, top missing fields, validation errors)
  • GET /api/admin/pim/products/:id/versions — fetch all versions of a product for comparison/rollback
  • POST /api/public/products — headless storefront product query (respects syndication rules for requested channel); returns public-readable product data

Every route added here must also appear in src/pages/openapi.json.ts — a test fails the build if it does not.

Admin

Admin interface with five views: (1) Product editor with dynamic custom fields based on schema, rich text support for descriptions, language tabs, and quick-access data quality warnings. (2) Bulk importer: drag-drop or paste CSV, preview mappings, validate before import, see error report with row numbers and fix hints. (3) Approval queue: pending tasks for each workflow stage, diff of what changed, inline approval/rejection with comment, auto-advance on approval. (4) Syndication rule builder: visual rule editor (if X equals Y, then Z) with per-channel toggles and preview of what data each rule sends to each channel. (5) Data quality dashboard: heatmap of completeness by language and product, count of required-field violations, validation errors, and drill-down to affected products.

The seam — why this is paid

CORE owns: base product table (ID, SKU, type), pricing and currency (as integer minor units), product relationships to orders/inventory, role-based access control for staff. PAID owns: versioning and audit trail infrastructure, custom attribute schema and storage, enrichment workflow engine and task queue, syndication rules and transformations, bulk import/export tooling, data quality scoring, multi-language data layer. Core storefront sees only the published product state; PIM orchestrates the complexity of managing multiple representations and approval chains before publication.

Paid specialist infrastructure. Requires data modeling expertise, multi-channel syndication rules, and analytics support.

Dependencies

  • Core product system (basic products CRUD and identity must exist)
  • Audit log system (for versioning and historical tracking)
  • Role-based access control (for approval workflows and field visibility)
  • Webhook system (to trigger syndication and notify external systems of product changes)
  • Settings system (to define channels, currency, syndication settings)
  • Email system (optional: notify approvers of pending tasks)
  • Plugin API (to allow third-party syndication extensions)

Acceptance checks

Each of these must be able to fail. Before claiming this is done, break the code deliberately and watch each one go red.

  • A product with 10 custom attributes (text, enum, rich text, number) can be created and retrieved with all attributes and values intact
  • A bulk CSV import of 5000 products completes within 30 seconds and stores all products with correct attribute mappings
  • A bulk import with 10 malformed rows aborts before committing, reports which rows failed, and rolls back entirely
  • A data quality report shows that 73% of products are ‘complete’ (all required attributes filled), and drill-down lists the products missing required fields
  • A syndication rule that maps ‘internal_category’ to ‘marketplace_category’ with value transformation (rename ‘Apparel’ to ‘Clothing’) applies correctly on export
  • An enrichment workflow requiring 2 approvals blocks product publication until both approvers have signed off
  • A published product cannot be modified without creating a new draft that re-enters the workflow
  • An audit trail shows all edits to a product (who, what field, old value, new value, timestamp) with reversibility (can view previous versions)
  • Multi-language product data: a product with English and German descriptions can be published to the storefront in either language without data loss
  • Exporting products for a specific channel applies all syndication rules correctly and only includes products marked for that channel
  • A product without a required custom attribute cannot be moved to ‘approved’ state (workflow blocks it)
  • Bulk import with duplicate SKUs within the same batch rejects the batch and reports the duplicate rows

Risks

Schema migration on live installs (versioning tables and audit trails add significant database overhead). Performance degrades without proper indexes on product lookups and workflow queries. Orphaned data if syndication rules are deleted while products reference them (need foreign-key constraints or cleanup job). Approval workflow deadlocks if circular chains are misconfigured (need validation on rule creation). Bulk import failures on extremely large files (100k+ products) without streaming/chunking. Breaking change if syndicating to existing storefronts (need gradual rollout with preview mode before live). Data consistency issues if multiple concurrent editors modify the same product (optimistic locking needed). Audit log table growth (millions of rows over time) requires archival strategy.

Commercial context

Suggested priceEUR 500-5000/year or EUR 2000-10000 one-off
Rival anchorAlpia PIM, Agility Multichannel

The anchor is what the nearest equivalent charges on Shopify or Magento today. It is context for a pricing decision, not the decision.


Generated from the commerce plan. See docs/COMMERCE-PLAN.md for the full catalogue and ../../AI-GUIDE.md for how to work on this repository.