Feature and roadmap update JDE
17 June 2026
Topics
Product areas and roadmap discussion
First feature topic
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
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.
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
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
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
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
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
Discussion
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.