Feature and roadmap update JDE

17 June 2026

Topics

Product areas and roadmap discussion

01 New Customer Portal
02 Progressive Discounts
03 Custom Loyalty Workflows
04 Agentic Middleware
05 Agent and MCP
06 Roadmap
First feature topic
New Customer Portal Progressive Discounts Custom Loyalty Workflows Agentic Middleware Agent and MCP Roadmap

Self-service

New Customer Portal

A clearer portal foundation for customer-led subscription management.

  • Improved UX and UI: easier updates for next renewal, quantities, and adding or removing products.
  • Redesigned product catalog: a clearer catalog view for browsing and managing subscription products.
  • Brandable and programmable: maintained in a proper OTAP flow for controlled rollout.
  • Agentic Coding Skill and MCP: a path to configure, extend, and support portal behavior with AI-assisted workflows.
  • External content ready: easily pull in images and content from an external API or headless CMS.

Portal examples

Three sample customer portal screens

Same slider pattern as the Customer Portal v2 docs, adapted for the presentation.

Catalog experience

Redesigned catalog view

Desktop screenshot of the redesigned Oot product catalog view
Animated mobile walkthrough of selecting products in the redesigned catalog

Templates as code

Maintained in Git, deployed via MCP or API

Customer Portal files can follow the same review flow as application code: branch, edit, save, preview, and publish after approval.

Git branch Save draft Preview link Publish version
customer-portal/
        templates/
          dashboard.liquid
          subscription_profile.liquid
          catalog.liquid
          other.liquid
          shared_head.liquid
        snippets/
          renewal-summary.liquid
          product-card.liquid
        assets/
          portal.css
        README.md
Action MCP / API call Use
Read get_customer_portal_template_body Pull the current template into a Git branch.
Update update_customer_portal_template Save the changed Liquid body as a draft version.
Preview get_customer_portal_preview_link Review the latest template package before publishing.
Publish publish_customer_portal_template Promote an approved template version after confirmation.
Pricing logic
New Customer Portal Progressive Discounts Custom Loyalty Workflows Agentic Middleware Agent and MCP Roadmap
Order 1 0% Extra discount
Order 2 2% Extra discount
Order 3 4% Extra discount
Order 4 Free coffee Milestone reward

Benefits

Progressive Discounts

  • Reward loyalty and re-orders over time: make repeat behavior visible and commercially meaningful.
  • Getting to order 4 is typically the magic number: use the milestone to anchor a clear loyalty reward.
  • Show what you'll get on your next order: make upcoming discounts and rewards visible in emails and the Customer Portal.
Programmable layer
New Customer Portal Progressive Discounts Custom Loyalty Workflows Agentic Middleware Agent and MCP Roadmap

Loyalty logic

Custom Loyalty Workflows

More flexible loyalty behavior without turning every campaign into custom product work.

  • Goal: increase 4th order retention.
  • Express your loyalty program in a simple script: add products, give free rewards, and add discounts on subscription lifecycle events.
  • No need to build external workflows or API integrations: keep loyalty logic close to the subscription lifecycle.

Use case samples

Loyalty logic from simple to advanced

Simple loyalty use cases

  • Apply a promotion after a confirmed order milestone.
  • Add a free sample or loyalty present to the next order only.
  • Move the next billing date for a specific lifecycle scenario.
  • Swap a starter product for a recurring refill product after signup.

Advanced loyalty use cases

  • Run a configurable product sequence across order 1, 2, 3, and beyond.
  • Repeat a revolving refill cycle after the onboarding phase.
  • Add or remove products based on current subscription contents.
  • Use workflow parameters so teams can configure rewards without editing code.

Sample script

Add a gift on a milestone order

Script Execution runs after an order is confirmed, so this prepares the next order. The reward ships once and is then removed from the subscription automatically.

const params = input.params_normalized
      const productId = params.product_to_add
      const addOnOrder = Number.parseInt(params.add_on_order || "", 10)
      const orderToPrepare = input.confirmed_orders_count + 1

      if (orderToPrepare === addOnOrder) {
        return [{
          function: "add_gift_to_subscription",
          arguments: {
            product_id: productId,
            quantity: params.quantity || "1",
            reason: `Add free reward to order ${addOnOrder}.`
          }
        }]
      }

      return [{
        function: "no_action",
        arguments: {
          reason: `No reward due for order ${orderToPrepare}.`
        }
      }]
Execution layer
New Customer Portal Progressive Discounts Custom Loyalty Workflows Agentic Middleware Agent and MCP Roadmap

Automation layer

Agentic Middleware

Firmhouse-deployed middleware flows that connect workflows to external systems just in time.

  • Goal: lower internal costs and increase retention with operational excellence.
  • Decrease cost and speed up time-to-market: rely less on external middleware tooling.
  • Pre-order and billing hooks: check something and modify the order just-in-time. Useful for out-of-stock and product replacement scenarios.
  • Write and deploy your own middleware: use our Agent Skill and MCP.
  • Connect your own CRM or data intelligence platform: drive decisions with external customer and business data.

Sample use case

Stock-aware order replacement

Just before an order is generated, a Firmhouse-deployed flow checks stock, reads the subscription preference, and only replaces the product when the customer has opted in.

  • Check stock just-in-time: call the external inventory API before the order is created.
  • Respect customer preference: read subscription metadata before changing the order.
  • Prevent failed orders: replace out-of-stock products with a preferred alternative when allowed.
const STOCK_API = "https://inventory.customer-example.test/api"
      const CUSTOMER_API = "https://profile.customer-example.test/api"

      async function postJson(url, body, token) {
        const response = await fetch(url, {
          method: "POST",
          headers: {
            "Content-Type": "application/json",
            Authorization: `Bearer ${token}`
          },
          body: JSON.stringify(body)
        })

        if (!response.ok) throw new Error(`API failed: ${response.status}`)
        return response.json()
      }

      const { access_token: token } = await postJson(
        `${STOCK_API}/session`,
        {
          client_id: input.params_normalized.stock_client_id,
          client_secret: input.params_normalized.stock_client_secret
        }
      )

      const order = input.trigger.payload
      const line = order.order_lines[0]

      const stock = await postJson(
        `${STOCK_API}/availability`,
        {
          warehouse_code: "subscription-main",
          sales_channel: "recurring",
          items: [{ sku: line.product_sku, quantity: line.quantity }]
        },
        token
      )

      if (stock.available) {
        return [{ function: "confirm_order", arguments: { order_id: order.order_id } }]
      }

      const profile = await postJson(
        `${CUSTOMER_API}/subscription-preferences`,
        {
          subscription_reference: order.subscription_reference,
          requested_sku: line.product_sku
        },
        token
      )

      if (!profile.allow_product_replacement) {
        return [{
          function: "skip_order",
          arguments: {
            order_id: order.order_id,
            reason: "Customer does not allow replacement products."
          }
        }]
      }

      return [{
        function: "replace_order_line",
        arguments: {
          order_id: order.order_id,
          ordered_product_id: line.ordered_product_id,
          replacement_sku: profile.preferred_replacement_sku,
          reason: "Original product is out of stock."
        }
      }]
Operational assistant
New Customer Portal Progressive Discounts Custom Loyalty Workflows Agentic Middleware Agent and MCP Roadmap

Agent and MCP

AI-assisted operations

Agent and MCP

  • Privacy-first and compliant by design: by default does not expose personal information to models or MCPs.
  • Answer faster: retrieve project, support, and configuration context in one guided flow.
  • Diagnose issues: turn repeated operational questions into structured investigation steps.
  • Act safely: MCP provides a controlled interface for approved tools and workflows.
  • Build toward automation: start with assistance, then move selected tasks toward audited execution.

Use case samples

Where Agent and MCP can help

Current use cases

  • Subscription lookups for customer support
  • Data analysis and batch operations
  • Stock and revenue forecasting
  • Gather performance KPIs like churn, LTV, revenue, retention
  • Customize and add messages to Customer Portal

Upcoming

  • Multi-player chats between operations colleagues
  • Send custom emails and notifications to customers
  • Automatically discover patterns and push data to external systems

Portal experience

Agent and MCP inside the Firmhouse Portal

Sidebar mode
Firmhouse Portal with Agent and MCP shown in sidebar mode
Fullscreen mode
Firmhouse Portal with Agent and MCP shown in fullscreen mode
Discussion
New Customer Portal Progressive Discounts Custom Loyalty Workflows Agentic Middleware Agent and MCP Roadmap

Roadmap

  • Partial invoice refunds via Portal and API Refund individual invoice lines or amounts directly from the Portal and through the API.
  • Voucher code entry in Customer Portal Let customers apply approved voucher codes directly when managing their subscription.
  • Ship emergency order Let customers choose products from the catalog, ship a one-off order immediately, and pay for it.
  • Customizable winbacks in cancellation flow Tune offers and messaging to recover customers before cancellation is completed.
  • Build your own Dashboard with our AI agent Let teams compose operational views and KPIs from their own questions.
  • Cohort dimensions tracking Track acquisition, product, plan, and campaign dimensions so retention and LTV can be compared across meaningful cohorts.
  • Product and subscription cohort and LTV performance via MCP Ask the agent for cohort, retention, LTV, and product performance views without waiting on custom reports.
  • Agentic Payment Recovery Bills and reaches out to each individual customer at the right time for the highest chance of renewal success.
  • Journey Retention Agent Uses Firmhouse data and external data to automatically generate the best retention communication.