Skip to content

New: AI agent integration via Model Context Protocol (MCP).Learn more

Domain services

Evolve’s backend is split into domain services, each focused on a specific area of the commerce experience. These services integrate with SAAS backends (commerce engines, CMS platforms, search engines, payment providers) and expose a unified GraphQL API through GraphQL Federation.

graph TD;
    subgraph "Pre-purchase"
        catalog["Catalog"]
        cms["CMS"]
    end

    subgraph "Purchase"
        checkout["Checkout"]
        payment["Payment"]
    end

    subgraph "Account"
        account["Account"]
        bu["Business units"]
    end

    subgraph "Post-purchase"
        order["Orders"]
        quotes["Quotes"]
    end

    gateway["GraphQL Gateway"]
    gateway --> catalog
    gateway --> cms
    gateway --> checkout
    gateway --> payment
    gateway --> account
    gateway --> bu
    gateway --> order
    gateway --> quotes

Owns the product catalog: product search, product detail, categories, and product listing configuration. Integrates with the commerce backend for product data and optionally with a dedicated search engine (Algolia) for search and faceting.

Integrates the content management system into the platform. Owns content pages, catalog page content, site layout (header, footer, navigation), and reusable content snippets. Evolve supports both Contentful and Storyblok as CMS backends, with interchangeable implementations behind the same GraphQL schema.

Manages the shopping cart and the checkout process. Handles line item operations (add, update, remove), discount codes, shipping and payment method selection, address validation, and order creation. Orchestrates payment flows by delegating to the appropriate payment service.

Covers customer identity and account management: registration, login, password management, address book, and session handling. Also owns B2B-specific account features like business unit management, associate invitations, roles, and shopping lists. Issues and manages authentication tokens used by all other services.

Handles post-purchase order management: order history, order detail, and order status. Operates in both B2C (scoped to the customer) and B2B (scoped to the business unit) contexts.

Manages the B2B quote workflow: creating quote requests from carts, tracking quote status, and converting accepted quotes into orders. See B2B & B2C architecture for the full quote flow.

Payment processing is split into separate services per payment provider. Each payment service handles payment creation, webhook processing, and transaction management for its provider:

Service Provider
payment-commercetools-stripe Stripe
payment-commercetools-adyen Adyen
payment-commercetools-mollie Mollie
payment-commercetools-buckaroo Buckaroo
payment-commercetools-paynl PayNL
payment-commercetools-invoice Invoice (pay on account)

Payment services expose REST endpoints (for webhooks and payment creation) rather than GraphQL, since payment providers communicate through callbacks and redirects. See Payment architecture for the full flow and REST endpoints & webhooks for the webhook contract.

Sends transactional emails (order confirmations, password resets, account invitations) using React-based email templates. Integrates with any SMTP-compatible email service. See Email & notifications for the full architecture.

The gateway is not a domain service itself but the entry point for all clients. It is a Rust-based Hive Router that composes the subgraphs from all domain services into a single supergraph using Federation v2. It handles query planning, request routing, and response merging.

Beyond the core domain services, Evolve includes supporting services for infrastructure concerns:

  • Event router: routes events between services (e.g., order created events triggering email notifications)
  • PIM integration: synchronizes product data from external PIM systems (e.g., Bluestone PIM) into the commerce backend
  • Product feed: generates product feeds for external channels (Google Shopping, marketplaces)
  • Monitoring: service health monitoring and alerting

The domain-driven service structure maps naturally to team organization. Services group along the customer journey, allowing teams to be structured around business areas:

Area Services
Pre-purchase Catalog, CMS
Purchase Checkout, Payment
Account Account (including B2B)
Post-purchase Orders, Quotes

Small teams can own the entire platform. Larger organizations can assign services to dedicated squads, using tools like GitHub’s CODEOWNERS to enforce ownership boundaries. Because services communicate only through GraphQL Federation, teams can work independently without blocking each other.