In Progress
Add applied coupon to subscriptions list export
π Problem Statement As an operations or reporting user, I can see the applied coupon code in the subscriptions UI list, but the same information is missing from the subscriptions export, which results in incomplete reporting and manual reconciliation work. π‘ User Story As an operations or finance user, I want the applied coupon code to be included in the subscriptions export, so that I can analyze discounts, promotions, and subscription data accurately without relying on the UI manually. π― Definition of Done (DoD) A feature is done when: βοΈ Given a subscription has an applied coupon or discount code, when the subscriptions export is generated, then the export includes the applied coupon code value in a dedicated column. βοΈ Given a subscription does not have an applied coupon code, when the export is generated, then the coupon code column remains empty/null for that record. βοΈ Given the coupon code is visible in the subscriptions UI list, when exporting the same dataset, then the export data matches the UI data for coupon-related fields. new column added to end of export βοΈ This change will impact: UI / Export Service / Reporting Specifically: Subscriptions export generation logic Export CSV/XLSX column mappings Subscription data serializer/API used for exports βοΈ The export will include: A new column such as applied_coupon_code Coupon value exactly as stored/displayed in the subscriptions UI

Rana Haleem 2 days ago
In Progress
Add applied coupon to subscriptions list export
π Problem Statement As an operations or reporting user, I can see the applied coupon code in the subscriptions UI list, but the same information is missing from the subscriptions export, which results in incomplete reporting and manual reconciliation work. π‘ User Story As an operations or finance user, I want the applied coupon code to be included in the subscriptions export, so that I can analyze discounts, promotions, and subscription data accurately without relying on the UI manually. π― Definition of Done (DoD) A feature is done when: βοΈ Given a subscription has an applied coupon or discount code, when the subscriptions export is generated, then the export includes the applied coupon code value in a dedicated column. βοΈ Given a subscription does not have an applied coupon code, when the export is generated, then the coupon code column remains empty/null for that record. βοΈ Given the coupon code is visible in the subscriptions UI list, when exporting the same dataset, then the export data matches the UI data for coupon-related fields. new column added to end of export βοΈ This change will impact: UI / Export Service / Reporting Specifically: Subscriptions export generation logic Export CSV/XLSX column mappings Subscription data serializer/API used for exports βοΈ The export will include: A new column such as applied_coupon_code Coupon value exactly as stored/displayed in the subscriptions UI

Rana Haleem 2 days ago
Per-Campaign Mandrill Template Selection
Description: Currently, all Pelcro campaigns (promotional, renewal, cancellation) share a single Mandrill template (campaign_triggered). Publishers who want to run multiple campaigns with distinct email designs β e.g. a monthly renewal reminder and a seasonal promotional offer β must manually edit the template in Mandrill's UI each time they switch campaigns. This creates operational overhead and is error-prone. Requested Behaviour: Allow each campaign to specify its own Mandrill template. When a campaign runs, the email send uses that campaign's assigned template rather than the global campaign_triggered fallback. Use Cases: A recurring monthly renewal campaign uses a "renew your subscription" template automatically, every month, without manual intervention Ad-hoc promotional campaigns (Back to School, end-of-year offers, etc.) are configured once with their own template and target segment, then triggered on a scheduled date β no Mandrill UI changes required Multiple campaigns can coexist and run independently with different messaging and designs Expected Value: Publishers can fully configure a campaign once and let it run on schedule. Removes the need to touch Mandrill's interface between campaign runs, enabling true campaign automation. Scope Notes (for engineering): Add a mandrill_template field to the Campaign model Pass the campaign's template through the Campaign\Triggered event to the Mandrill listener, overriding the global campaign_triggered lookup Validate the template exists and is published in the account's Mandrill instance on save (same validation pattern already used for transactional templates) UI to select from available templates (fetched from Mandrill API) when creating or editing a campaign

mboulos 3 days ago
Per-Campaign Mandrill Template Selection
Description: Currently, all Pelcro campaigns (promotional, renewal, cancellation) share a single Mandrill template (campaign_triggered). Publishers who want to run multiple campaigns with distinct email designs β e.g. a monthly renewal reminder and a seasonal promotional offer β must manually edit the template in Mandrill's UI each time they switch campaigns. This creates operational overhead and is error-prone. Requested Behaviour: Allow each campaign to specify its own Mandrill template. When a campaign runs, the email send uses that campaign's assigned template rather than the global campaign_triggered fallback. Use Cases: A recurring monthly renewal campaign uses a "renew your subscription" template automatically, every month, without manual intervention Ad-hoc promotional campaigns (Back to School, end-of-year offers, etc.) are configured once with their own template and target segment, then triggered on a scheduled date β no Mandrill UI changes required Multiple campaigns can coexist and run independently with different messaging and designs Expected Value: Publishers can fully configure a campaign once and let it run on schedule. Removes the need to touch Mandrill's interface between campaign runs, enabling true campaign automation. Scope Notes (for engineering): Add a mandrill_template field to the Campaign model Pass the campaign's template through the Campaign\Triggered event to the Mandrill listener, overriding the global campaign_triggered lookup Validate the template exists and is published in the account's Mandrill instance on save (same validation pattern already used for transactional templates) UI to select from available templates (fetched from Mandrill API) when creating or editing a campaign

mboulos 3 days ago
Planned
Introduce billing name to refunds export
π Problem Statement Refunds export dont have the customer billing name which is essential for refunds reporting. π‘ User Story As an admin, I want the customer name from billing address object to be added to the refunds export. π― Definition of Done (DoD) A feature is done when: β The customer name from the billing address object is added to the refunds export. The name from the customer object AND the name from the billing address should be in the export β The exported customer name matches the name stored in the billing address object. β The new field is included consistently in generated refund export files. β Refund records without billing address name data display a blank/null value without breaking the export.

Rana Haleem 3 days ago
Planned
Introduce billing name to refunds export
π Problem Statement Refunds export dont have the customer billing name which is essential for refunds reporting. π‘ User Story As an admin, I want the customer name from billing address object to be added to the refunds export. π― Definition of Done (DoD) A feature is done when: β The customer name from the billing address object is added to the refunds export. The name from the customer object AND the name from the billing address should be in the export β The exported customer name matches the name stored in the billing address object. β The new field is included consistently in generated refund export files. β Refund records without billing address name data display a blank/null value without breaking the export.

Rana Haleem 3 days ago
In Planning
Feature Request: Google One Tap Login
π Problem Statement We would like Pelcro to support Google One Tap login, a simplified authentication method that allows users to sign in or register with a single click, reducing friction compared to traditional login flows. π‘ User Story As a Pelcro admin, I want to enable Google One Tap login, so that users can authenticate more quickly and improve conversion rates. π― Definition of Done (DoD) βοΈ Google One Tap login is available as a supported authentication method in Pelcro βοΈ It can be enabled/disabled from admin settings βοΈ It works consistently with existing Google Social Login user accounts βοΈ Documentation is available for setup and usage

Daniele 3 days ago
In Planning
Feature Request: Google One Tap Login
π Problem Statement We would like Pelcro to support Google One Tap login, a simplified authentication method that allows users to sign in or register with a single click, reducing friction compared to traditional login flows. π‘ User Story As a Pelcro admin, I want to enable Google One Tap login, so that users can authenticate more quickly and improve conversion rates. π― Definition of Done (DoD) βοΈ Google One Tap login is available as a supported authentication method in Pelcro βοΈ It can be enabled/disabled from admin settings βοΈ It works consistently with existing Google Social Login user accounts βοΈ Documentation is available for setup and usage

Daniele 3 days ago
In Planning
Implement JWT Token Refresh Mechanism
Problem Statement When a user's auth token expires, and they relaunch the app, there is no way to silently restore their session. The current refresh endpoint only accepts a non-expired JWT, so once a token has expired, the app hits a dead end. Without a proper token recovery mechanism, users are forced to manually sign in again β creating unnecessary friction and drop-off at relaunch. Since the auth token is used in every request and is frequently exposed, extending the auth tokenβs TTL is not a secure resolution for this issue. User Story As a returning app user whose auth token has expired since their last session, I want the app to silently restore my session on launch without prompting me to sign in again, so that I can resume using the app immediately with my subscription state loaded, even if it has been last used long ago. Definition of Done A user object contains both a short-lived access token that cannot be refreshed and a long-lived refresh token. The refresh endpoint accepts a non-expired refresh JWT and returns a new short-lived access token along with a new refresh token. The authentication endpoint accepts a non-expired auth JWT and returns the requested information/performs the requested function. A refresh_ttl window is defined and enforced β tokens outside this window cannot be refreshed and require re-authentication. If the auth token is close to expiring, the app uses the stored refresh token to call the refresh endpoint on launch; if successful, the new refresh and auth tokens are stored and the session resumes silently. If the refresh fails (token outside refresh_ttl or invalid), the app falls back gracefully to the sign-in screen. Subscription state is successfully queried using the new auth token after a silent refresh. Changes are documented in the API reference.

Rana Haleem 4 days ago
In Planning
Implement JWT Token Refresh Mechanism
Problem Statement When a user's auth token expires, and they relaunch the app, there is no way to silently restore their session. The current refresh endpoint only accepts a non-expired JWT, so once a token has expired, the app hits a dead end. Without a proper token recovery mechanism, users are forced to manually sign in again β creating unnecessary friction and drop-off at relaunch. Since the auth token is used in every request and is frequently exposed, extending the auth tokenβs TTL is not a secure resolution for this issue. User Story As a returning app user whose auth token has expired since their last session, I want the app to silently restore my session on launch without prompting me to sign in again, so that I can resume using the app immediately with my subscription state loaded, even if it has been last used long ago. Definition of Done A user object contains both a short-lived access token that cannot be refreshed and a long-lived refresh token. The refresh endpoint accepts a non-expired refresh JWT and returns a new short-lived access token along with a new refresh token. The authentication endpoint accepts a non-expired auth JWT and returns the requested information/performs the requested function. A refresh_ttl window is defined and enforced β tokens outside this window cannot be refreshed and require re-authentication. If the auth token is close to expiring, the app uses the stored refresh token to call the refresh endpoint on launch; if successful, the new refresh and auth tokens are stored and the session resumes silently. If the refresh fails (token outside refresh_ttl or invalid), the app falls back gracefully to the sign-in screen. Subscription state is successfully queried using the new auth token after a silent refresh. Changes are documented in the API reference.

Rana Haleem 4 days ago
Planned
Add Gift Message Field to List Exports
π Problem Statement The gift message field is currently available in the fulfillment export but is missing from the list export. Since the list export is the primary export used for shipment creation, the absence of the gift message field prevents the team from accessing important gifting information during the fulfillment workflow. π‘ User Story As an operations user generating shipment list exports, I want the gift message field to be included in the list export so that gifting information is available during shipment preparation and processing. π― Definition of Done (DoD) A feature is done when: β The gift message field is added to the list export. β Gift messages are populated correctly. β Empty or non-gift orders do not cause export issues and display a blank/null value where applicable. β The gift message column is included consistently in generated CSV/export files.

Rana Haleem 5 days ago
Planned
Add Gift Message Field to List Exports
π Problem Statement The gift message field is currently available in the fulfillment export but is missing from the list export. Since the list export is the primary export used for shipment creation, the absence of the gift message field prevents the team from accessing important gifting information during the fulfillment workflow. π‘ User Story As an operations user generating shipment list exports, I want the gift message field to be included in the list export so that gifting information is available during shipment preparation and processing. π― Definition of Done (DoD) A feature is done when: β The gift message field is added to the list export. β Gift messages are populated correctly. β Empty or non-gift orders do not cause export issues and display a blank/null value where applicable. β The gift message column is included consistently in generated CSV/export files.

Rana Haleem 5 days ago
Planned
Update and re-organize settings page
π Problem Statement The current Settings page structure is not organized in a clear or intuitive way and uses the old UI, making it difficult for users to navigate and discover configuration options efficiently. Settings are not grouped based on the customer journey or operational workflows, which creates confusion during onboarding and ongoing platform management. π‘ User Story As a Pelcro admin user, I want the Settings page to be reorganized into clear functional groups, so that I can more easily find and configure settings based on my workflow and stage of setup. π― Definition of Done (DoD) A feature is done when: The settings page is moved to preline. β The Settings page is reorganized into grouped cards/sections based on customer workflows and onboarding order. β The new structure includes the following sections: Card 1 β Site Setup Core configuration required to launch a working Pelcro site. Integration Settings Design Identity Card 2 β Monetization Configuration related to payments and revenue flows. Billing Taxes Invoicing Shipping Rules Plan ACH Configuration Card 3 β Team & Developers Configuration for collaboration and technical integrations. Collaborators API Keys Applications Notifications Card 4 β Operations Operational and support-related configurations. Account Information Email Center Cancellation Reasons Logs Card 5 β Security Security and risk management settings. Authentication Fraud Prevention β The updated structure improves discoverability and navigation clarity. β Existing permissions and access controls remain unchanged. β No existing settings functionality is removed or broken. β Navigation and breadcrumbs continue to function correctly after restructuring.

Rana Haleem 10 days ago
Planned
Update and re-organize settings page
π Problem Statement The current Settings page structure is not organized in a clear or intuitive way and uses the old UI, making it difficult for users to navigate and discover configuration options efficiently. Settings are not grouped based on the customer journey or operational workflows, which creates confusion during onboarding and ongoing platform management. π‘ User Story As a Pelcro admin user, I want the Settings page to be reorganized into clear functional groups, so that I can more easily find and configure settings based on my workflow and stage of setup. π― Definition of Done (DoD) A feature is done when: The settings page is moved to preline. β The Settings page is reorganized into grouped cards/sections based on customer workflows and onboarding order. β The new structure includes the following sections: Card 1 β Site Setup Core configuration required to launch a working Pelcro site. Integration Settings Design Identity Card 2 β Monetization Configuration related to payments and revenue flows. Billing Taxes Invoicing Shipping Rules Plan ACH Configuration Card 3 β Team & Developers Configuration for collaboration and technical integrations. Collaborators API Keys Applications Notifications Card 4 β Operations Operational and support-related configurations. Account Information Email Center Cancellation Reasons Logs Card 5 β Security Security and risk management settings. Authentication Fraud Prevention β The updated structure improves discoverability and navigation clarity. β Existing permissions and access controls remain unchanged. β No existing settings functionality is removed or broken. β Navigation and breadcrumbs continue to function correctly after restructuring.

Rana Haleem 10 days ago
In Progress
Add Search and Alphabetical Sorting to Coupon Dropdown in Automations
π Problem Statement In the Automations β Workflows section, the coupon selection dropdown used while creating a new campaign does not support alphabetical sorting or search/filter functionality. When a customer has a large number of coupons (100+), it becomes difficult and time-consuming to locate the desired coupon, resulting in a poor user experience and slower workflow configuration. π‘ User Story As a user creating an automation campaign, I want the coupon dropdown to be sorted alphabetically and include a search/filter option so that I can quickly find and select the correct coupon, even when there are many available options. π‘ DoD Coupons dropdown should be sorted alphabetically Add search ability to coupons dropdown

Rana Haleem 10 days ago
In Progress
Add Search and Alphabetical Sorting to Coupon Dropdown in Automations
π Problem Statement In the Automations β Workflows section, the coupon selection dropdown used while creating a new campaign does not support alphabetical sorting or search/filter functionality. When a customer has a large number of coupons (100+), it becomes difficult and time-consuming to locate the desired coupon, resulting in a poor user experience and slower workflow configuration. π‘ User Story As a user creating an automation campaign, I want the coupon dropdown to be sorted alphabetically and include a search/filter option so that I can quickly find and select the correct coupon, even when there are many available options. π‘ DoD Coupons dropdown should be sorted alphabetically Add search ability to coupons dropdown

Rana Haleem 10 days ago
Planned
Introduce MRR in the dashboard view
π Problem Statement Pelcro currently does not display a Monthly Recurring Revenue (MRR) metric in the Overview dashboard. Subscription businesses need quick visibility into their recurring revenue performance without relying on external tools or detailed reports. π‘ User Story As a business operator using Pelcro, I want to see Monthly Recurring Revenue (MRR) in the Overview dashboard, so that I can quickly understand the health and growth of my recurring subscription business. π― Definition of Done (DoD) A feature is done when: β An MRR summary card is added to the Overview dashboard. β The card displays the current normalized monthly recurring revenue. β Billing intervals are normalized into monthly values: Monthly plans β full monthly amount Quarterly plans β amount Γ· 3 Annual plans β amount Γ· 12 Daily plans β daily amount Γ 30 β Only recurring subscription revenue is included in MRR calculations. β One-time charges, taxes, and non-recurring purchases are excluded. β Discounts applied to subscriptions are reflected in the MRR value. β Invalid subscription states are excluded from MRR calculations, including: Canceled Expired Incomplete Unpaid subscriptions outside the grace period β Currency formatting follows the merchantβs reporting currency settings. β Empty states are handled correctly and display: β$0 MRRβ β A tooltip/help text explains the MRR definition. Suggested tooltip: βMonthly Recurring Revenue (MRR) represents the normalized monthly value of active recurring subscriptions.β

Rana Haleem 10 days ago
Planned
Introduce MRR in the dashboard view
π Problem Statement Pelcro currently does not display a Monthly Recurring Revenue (MRR) metric in the Overview dashboard. Subscription businesses need quick visibility into their recurring revenue performance without relying on external tools or detailed reports. π‘ User Story As a business operator using Pelcro, I want to see Monthly Recurring Revenue (MRR) in the Overview dashboard, so that I can quickly understand the health and growth of my recurring subscription business. π― Definition of Done (DoD) A feature is done when: β An MRR summary card is added to the Overview dashboard. β The card displays the current normalized monthly recurring revenue. β Billing intervals are normalized into monthly values: Monthly plans β full monthly amount Quarterly plans β amount Γ· 3 Annual plans β amount Γ· 12 Daily plans β daily amount Γ 30 β Only recurring subscription revenue is included in MRR calculations. β One-time charges, taxes, and non-recurring purchases are excluded. β Discounts applied to subscriptions are reflected in the MRR value. β Invalid subscription states are excluded from MRR calculations, including: Canceled Expired Incomplete Unpaid subscriptions outside the grace period β Currency formatting follows the merchantβs reporting currency settings. β Empty states are handled correctly and display: β$0 MRRβ β A tooltip/help text explains the MRR definition. Suggested tooltip: βMonthly Recurring Revenue (MRR) represents the normalized monthly value of active recurring subscriptions.β

Rana Haleem 10 days ago
Planned
Customer Service Concierge
π Problem Statement As a logged-in subscriber, I have no conversational surface to manage my account, which forces me into multi-step UI flows or human CX for routine tasks (view invoices, change address, update payment, switch plan, cancel). π‘ User Story As a subscriber, I want to open an in-page chat panel on the publisher site and ask the AI agent to read or modify my account, so that I can complete routine tasks without leaving the page or contacting support. As a publisher, I want to embed this concierge as a ReactJS Element on any page, so that I can deploy AI-driven self-serve CX with the same integration model as existing Pelcro Elements. As an end user, I want destructive or financial actions to require explicit confirmation in-chat, so that the agent cannot cancel, charge, or change my plan without my approval. π― Definition of Done (DoD) β Given a subscriber is authenticated on the publisher site via the Pelcro JS-SDK, when the concierge Element is mounted, then a docked chat panel renders and the session inherits the subscriber's existing Pelcro auth token without a second login. β Given the chat session is active, when the user sends a message, then the agent connects to the Pelcro MCP server (FR-01) using the subscriber-scoped bearer token and routes API calls through MCP tools only β no direct REST calls from the front-end. β Given an MCP tool is invoked, when the response arrives, then the panel renders structured cards for known entities (invoices, subscriptions, plans, addresses, payment methods) with per-row actions (PDF, change, cancel) and shows the underlying tool name and endpoint for transparency. β Given the user requests a write action (address update, payment method change, plan switch, cancellation, refund request), when the agent prepares the call, then the panel surfaces a confirmation step with the exact change diff and blocks execution until the user confirms in-chat. β Given any agent response, when it renders, then a persistent footer disclaimer states "AI may be inaccurate. Verify critical actions before confirming." β Given a chat session, when the user reloads the page or returns later, then the conversation history persists per-subscriber and is retrievable via a history control in the panel header. β Given a publisher wants to embed the concierge, when they add the Element to their page, then they can configure panel position (docked right, floating bubble), branding (logo, accent color), allowed tool scope (read-only vs. read-write), and welcome prompt via standard Element props. β This change will impact UI and SDK, specifically a new ReactJS Element ("Subscription Concierge") in pelcro-elements and a session/token handoff helper in pelcro-js-sdk.

Rana Haleem 10 days ago
Planned
Customer Service Concierge
π Problem Statement As a logged-in subscriber, I have no conversational surface to manage my account, which forces me into multi-step UI flows or human CX for routine tasks (view invoices, change address, update payment, switch plan, cancel). π‘ User Story As a subscriber, I want to open an in-page chat panel on the publisher site and ask the AI agent to read or modify my account, so that I can complete routine tasks without leaving the page or contacting support. As a publisher, I want to embed this concierge as a ReactJS Element on any page, so that I can deploy AI-driven self-serve CX with the same integration model as existing Pelcro Elements. As an end user, I want destructive or financial actions to require explicit confirmation in-chat, so that the agent cannot cancel, charge, or change my plan without my approval. π― Definition of Done (DoD) β Given a subscriber is authenticated on the publisher site via the Pelcro JS-SDK, when the concierge Element is mounted, then a docked chat panel renders and the session inherits the subscriber's existing Pelcro auth token without a second login. β Given the chat session is active, when the user sends a message, then the agent connects to the Pelcro MCP server (FR-01) using the subscriber-scoped bearer token and routes API calls through MCP tools only β no direct REST calls from the front-end. β Given an MCP tool is invoked, when the response arrives, then the panel renders structured cards for known entities (invoices, subscriptions, plans, addresses, payment methods) with per-row actions (PDF, change, cancel) and shows the underlying tool name and endpoint for transparency. β Given the user requests a write action (address update, payment method change, plan switch, cancellation, refund request), when the agent prepares the call, then the panel surfaces a confirmation step with the exact change diff and blocks execution until the user confirms in-chat. β Given any agent response, when it renders, then a persistent footer disclaimer states "AI may be inaccurate. Verify critical actions before confirming." β Given a chat session, when the user reloads the page or returns later, then the conversation history persists per-subscriber and is retrievable via a history control in the panel header. β Given a publisher wants to embed the concierge, when they add the Element to their page, then they can configure panel position (docked right, floating bubble), branding (logo, accent color), allowed tool scope (read-only vs. read-write), and welcome prompt via standard Element props. β This change will impact UI and SDK, specifically a new ReactJS Element ("Subscription Concierge") in pelcro-elements and a session/token handoff helper in pelcro-js-sdk.

Rana Haleem 10 days ago
Planned
Open API MCP
π Problem Statement As an AI agent or AI-powered application, I cannot consume Pelcro's public Open API as MCP tools, which blocks Pelcro from being used in any AI-native CX, ops, or self-serve experience. π‘ User Story As a developer, I want a remote MCP server at a public Pelcro URL that exposes every public OPEN API endpoint as an MCP tool, so that I can connect Pelcro to Claude.ai (or any MCP-compatible client) without writing a custom MCP client. As a subscriber, I want a built-in chat experience in the default Pelcro front-end UI that talks to this MCP server, so that I can do anything I would normally do on the dashboard β manage subscriptions, update addresses etc β by simply asking for it in natural language. π― Definition of Done (DoD) β Open API documentation on README aligns with code as the source of truth, and aligns with Core API documentation. β Open API specs is up-to-date, and aligns with Core API's OpenAPI specs (eg: same thorough example payload, example return responses, same OpenAPI spec version used, etc.) β Every endpoint in Pelcro's public OpenAPI spec (docs.pelcro.com/reference) is exposed as an MCP tool, auto-generated from the spec. β The MCP server is reachable at a public URL (e.g. (new dedicated public hostname, or via https://mcp.pelcro.com/{something}) over HTTP/SSE

Rana Haleem 10 days ago
Planned
Open API MCP
π Problem Statement As an AI agent or AI-powered application, I cannot consume Pelcro's public Open API as MCP tools, which blocks Pelcro from being used in any AI-native CX, ops, or self-serve experience. π‘ User Story As a developer, I want a remote MCP server at a public Pelcro URL that exposes every public OPEN API endpoint as an MCP tool, so that I can connect Pelcro to Claude.ai (or any MCP-compatible client) without writing a custom MCP client. As a subscriber, I want a built-in chat experience in the default Pelcro front-end UI that talks to this MCP server, so that I can do anything I would normally do on the dashboard β manage subscriptions, update addresses etc β by simply asking for it in natural language. π― Definition of Done (DoD) β Open API documentation on README aligns with code as the source of truth, and aligns with Core API documentation. β Open API specs is up-to-date, and aligns with Core API's OpenAPI specs (eg: same thorough example payload, example return responses, same OpenAPI spec version used, etc.) β Every endpoint in Pelcro's public OpenAPI spec (docs.pelcro.com/reference) is exposed as an MCP tool, auto-generated from the spec. β The MCP server is reachable at a public URL (e.g. (new dedicated public hostname, or via https://mcp.pelcro.com/{something}) over HTTP/SSE

Rana Haleem 10 days ago
Planned
Add ticket description + shipping address to tickets export
π Problem Statement The current ticket export does not include the ticket description or the customer shipping address, limiting the ability of support and operations teams to review complete ticket context directly from the exported file. π‘ User Story As a support or operations user, I want ticket descriptions and customer shipping addresses included in the tickets export so that I can review full ticket details and customer information without needing to open each ticket individually. π― Definition of Done (DoD) A feature is done when: Ticket exports include a Ticket Description column. Ticket exports include a Customer Shipping Address column. Shipping address is populated using the customerβs default/associated shipping address. Export format remains unchanged aside from the additional columns. Existing exports continue to function correctly. Add them to end file.

Rana Haleem 10 days ago
Planned
Add ticket description + shipping address to tickets export
π Problem Statement The current ticket export does not include the ticket description or the customer shipping address, limiting the ability of support and operations teams to review complete ticket context directly from the exported file. π‘ User Story As a support or operations user, I want ticket descriptions and customer shipping addresses included in the tickets export so that I can review full ticket details and customer information without needing to open each ticket individually. π― Definition of Done (DoD) A feature is done when: Ticket exports include a Ticket Description column. Ticket exports include a Customer Shipping Address column. Shipping address is populated using the customerβs default/associated shipping address. Export format remains unchanged aside from the additional columns. Existing exports continue to function correctly. Add them to end file.

Rana Haleem 10 days ago
Retroactive subscription renewals
Our membership subscription sales team requests the ability to renew a subscription after it has expired with the start date of the renewal back-dated to the expire date of the original subscription. This would be useful in cases where a renewal contract is being actively negotiated and we do not know the final price of the renewal until a month or two after the subscription has expired. While we are negotiating, we will typically extend the end date of the subscription for free so the client does not lose access. IMPORTANT: When a renewal start-date is back-dated, any recognized revenue associated with prior months should be reported in the current month, and not retroactively added to moths that have already been close.

Mike Gilbert 10 days ago
Retroactive subscription renewals
Our membership subscription sales team requests the ability to renew a subscription after it has expired with the start date of the renewal back-dated to the expire date of the original subscription. This would be useful in cases where a renewal contract is being actively negotiated and we do not know the final price of the renewal until a month or two after the subscription has expired. While we are negotiating, we will typically extend the end date of the subscription for free so the client does not lose access. IMPORTANT: When a renewal start-date is back-dated, any recognized revenue associated with prior months should be reported in the current month, and not retroactively added to moths that have already been close.

Mike Gilbert 10 days ago
Planned
Persist Product & Plan in URL Flows
π Problem Statement Currently, when using URL triggers with a preselected product and plan, the selected product/plan is not consistently displayed throughout the subscription flow. This issue occurs in flows that skip directly to registration, address, login, or payment steps using URL parameters such as: ?view=plan-select&product_id=X&plan_id=Y ?view=plan-select&product_id=X&plan_id=Y&is_gift=true As a result, users may lose visibility of the selected product/plan during checkout. π‘ User Story As a user accessing a subscription flow through a URL trigger with a predefined product and plan, I want the selected product and plan information to remain visible throughout the entire flow, so that I always know what I am subscribing to before completing checkout. π― Definition of Done (DoD) A feature is done when: β Given a URL trigger containing product_id and plan_id, when the user enters the subscription flow, then the selected product and plan are preserved and displayed across all steps. β The selected product/plan is shown in: Login modal Create account modal Address modal Payment modal β Gift flows using is_gift=true also preserve and display the selected product/plan information. β The current βpreselected productβ component is enhanced to also display the selected plan name when plan_id exists in the URL. Any flows using product/plan URL triggers should be covered β Product and plan information remains consistent even when the flow skips directly to later checkout steps.

Rana Haleem 10 days ago
Planned
Persist Product & Plan in URL Flows
π Problem Statement Currently, when using URL triggers with a preselected product and plan, the selected product/plan is not consistently displayed throughout the subscription flow. This issue occurs in flows that skip directly to registration, address, login, or payment steps using URL parameters such as: ?view=plan-select&product_id=X&plan_id=Y ?view=plan-select&product_id=X&plan_id=Y&is_gift=true As a result, users may lose visibility of the selected product/plan during checkout. π‘ User Story As a user accessing a subscription flow through a URL trigger with a predefined product and plan, I want the selected product and plan information to remain visible throughout the entire flow, so that I always know what I am subscribing to before completing checkout. π― Definition of Done (DoD) A feature is done when: β Given a URL trigger containing product_id and plan_id, when the user enters the subscription flow, then the selected product and plan are preserved and displayed across all steps. β The selected product/plan is shown in: Login modal Create account modal Address modal Payment modal β Gift flows using is_gift=true also preserve and display the selected product/plan information. β The current βpreselected productβ component is enhanced to also display the selected plan name when plan_id exists in the URL. Any flows using product/plan URL triggers should be covered β Product and plan information remains consistent even when the flow skips directly to later checkout steps.

Rana Haleem 10 days ago
Done
Per-Collaborator AI Agent Permission
π Problem Statement As a Pelcro account owner, I have no way to control whether the AI Agent is enabled on my account or which of my collaborators can use it, which prevents me from managing data access and consumption at both the account and per-user level. π‘ User Stories Account-level enablement and consent. As an account owner, I want to enable the AI Agent for my account through a one-time consent prompt, so the feature is unavailable to anyone on my team until I explicitly turn it on. Per-collaborator toggle. As an account owner, once the AI Agent is enabled for my account, I want to enable or disable it for each individual collaborator from Settings > Account Collaborators, so I control who on my team can use the agent. Permissions toggle idea > preline-pro-templates/dashboard/account-notifications.html Visible but gated entry point. As a collaborator without AI Agent permission, I want to still see the AI Agent in the UI but be told to contact my account owner when I try to chat, so the path to enablement is obvious. π― Definition of Done (DoD) Upgrade the collaborator form to preline. Only the account owner can enable the AI Agent at the account level; collaborators have no access to this control. On the account owner's first AI Agent access, a consent prompt appears: "Do you want Pelcro's AI Agent to access your data?" β the agent stays disabled for the entire account until accepted. Once enabled at the account level, AI Agent access is controlled per collaborator and defaults to enabled for the account owner and disabled for all other collaborators. The account owner can toggle AI Agent access per collaborator from Settings > Account Collaborators. This toggle is visible for all but cannot be edited except by owner. A collaborator without permission still sees the AI Agent panel, but any message they send returns: "Please ask your account owner to enable this feature for you." when a collaborator already has an open AI Agent session and their access gets revoked mid-session, this message should be returned in this scenario as well. A collaborator with permission uses the agent normally. Owners who refuse to give consent initially should be able to re-enable it later. Toggling a collaborator's access takes effect on their next interaction without requiring re-login.

Rana Haleem 12 days ago
Done
Per-Collaborator AI Agent Permission
π Problem Statement As a Pelcro account owner, I have no way to control whether the AI Agent is enabled on my account or which of my collaborators can use it, which prevents me from managing data access and consumption at both the account and per-user level. π‘ User Stories Account-level enablement and consent. As an account owner, I want to enable the AI Agent for my account through a one-time consent prompt, so the feature is unavailable to anyone on my team until I explicitly turn it on. Per-collaborator toggle. As an account owner, once the AI Agent is enabled for my account, I want to enable or disable it for each individual collaborator from Settings > Account Collaborators, so I control who on my team can use the agent. Permissions toggle idea > preline-pro-templates/dashboard/account-notifications.html Visible but gated entry point. As a collaborator without AI Agent permission, I want to still see the AI Agent in the UI but be told to contact my account owner when I try to chat, so the path to enablement is obvious. π― Definition of Done (DoD) Upgrade the collaborator form to preline. Only the account owner can enable the AI Agent at the account level; collaborators have no access to this control. On the account owner's first AI Agent access, a consent prompt appears: "Do you want Pelcro's AI Agent to access your data?" β the agent stays disabled for the entire account until accepted. Once enabled at the account level, AI Agent access is controlled per collaborator and defaults to enabled for the account owner and disabled for all other collaborators. The account owner can toggle AI Agent access per collaborator from Settings > Account Collaborators. This toggle is visible for all but cannot be edited except by owner. A collaborator without permission still sees the AI Agent panel, but any message they send returns: "Please ask your account owner to enable this feature for you." when a collaborator already has an open AI Agent session and their access gets revoked mid-session, this message should be returned in this scenario as well. A collaborator with permission uses the agent normally. Owners who refuse to give consent initially should be able to re-enable it later. Toggling a collaborator's access takes effect on their next interaction without requiring re-login.

Rana Haleem 12 days ago
In Planning
Introduce Google Sign In Button on the Platform
π Problem Statement As a Pelcro platform user, I must create and remember a separate password to sign in, which adds friction at login and increases account abandonment and password-reset support volume. π‘ User Story As a Pelcro platform user, I want to sign in with my Google account, so that I can access the platform without managing a separate Pelcro password. π― Definition of Done (DoD) β Given a user on the Pelcro login screen, when they click "Sign in with Google" and complete the Google OAuth 2.0 consent flow, then they are authenticated into Pelcro and a session is issued. β Given a Google sign-in for an email that matches an existing Pelcro account, when authentication succeeds, then the Google identity is linked to that account and the user is signed in without creating a duplicate. β Given a Google sign-in for an email with no existing Pelcro account, when authentication succeeds, then a new Pelcro user is provisioned using the verified Google email, first name, and last name. β This change will impact UI, API, and SDK, specifically the login Element in ReactJS Elements, a new /auth/google (or equivalent) endpoint on the Laravel backend, and a corresponding method in the JS-SDK. β This solution will include the following limitations: Google as the only IdP in this scope; no account unlinking UI; no admin-side login via Google; no SSO/SAML; no migration of existing password-only users to Google-only.

Rana Haleem 19 days ago
In Planning
Introduce Google Sign In Button on the Platform
π Problem Statement As a Pelcro platform user, I must create and remember a separate password to sign in, which adds friction at login and increases account abandonment and password-reset support volume. π‘ User Story As a Pelcro platform user, I want to sign in with my Google account, so that I can access the platform without managing a separate Pelcro password. π― Definition of Done (DoD) β Given a user on the Pelcro login screen, when they click "Sign in with Google" and complete the Google OAuth 2.0 consent flow, then they are authenticated into Pelcro and a session is issued. β Given a Google sign-in for an email that matches an existing Pelcro account, when authentication succeeds, then the Google identity is linked to that account and the user is signed in without creating a duplicate. β Given a Google sign-in for an email with no existing Pelcro account, when authentication succeeds, then a new Pelcro user is provisioned using the verified Google email, first name, and last name. β This change will impact UI, API, and SDK, specifically the login Element in ReactJS Elements, a new /auth/google (or equivalent) endpoint on the Laravel backend, and a corresponding method in the JS-SDK. β This solution will include the following limitations: Google as the only IdP in this scope; no account unlinking UI; no admin-side login via Google; no SSO/SAML; no migration of existing password-only users to Google-only.

Rana Haleem 19 days ago
In Progress
Support language translations in Payment link page + invoice PDFs
π Problem Statement As an Italian- or German-speaking user, I experience invoice PDFs, payment link labels, and related error messages in the wrong language, which results in confusion during billing and payment workflows. π‘ User Story As an Italian- or German-speaking user, I want invoice PDF labels, payment link labels, and billing-related error messages to respect the selected site language, so that I can understand payment details and complete billing actions confidently. π― Definition of Done A feature is done when: βοΈ Given the site language is set to Italian, when an invoice PDF or payment link is generated, then all invoice labels, payment link labels, and relevant error messages are displayed in Italian. βοΈ Given the site language is set to German, when an invoice PDF or payment link is generated, then all invoice labels, payment link labels, and relevant error messages are displayed in German. βοΈ This change will impact UI / PDF generation / Billing / Payment Links, specifically: Invoice PDF label translations Receipt PDF Payment link label translations Billing and payment validation/error messages Localization files or translation resources Any shared billing components used by invoices or payment links

Rana Haleem 19 days ago
In Progress
Support language translations in Payment link page + invoice PDFs
π Problem Statement As an Italian- or German-speaking user, I experience invoice PDFs, payment link labels, and related error messages in the wrong language, which results in confusion during billing and payment workflows. π‘ User Story As an Italian- or German-speaking user, I want invoice PDF labels, payment link labels, and billing-related error messages to respect the selected site language, so that I can understand payment details and complete billing actions confidently. π― Definition of Done A feature is done when: βοΈ Given the site language is set to Italian, when an invoice PDF or payment link is generated, then all invoice labels, payment link labels, and relevant error messages are displayed in Italian. βοΈ Given the site language is set to German, when an invoice PDF or payment link is generated, then all invoice labels, payment link labels, and relevant error messages are displayed in German. βοΈ This change will impact UI / PDF generation / Billing / Payment Links, specifically: Invoice PDF label translations Receipt PDF Payment link label translations Billing and payment validation/error messages Localization files or translation resources Any shared billing components used by invoices or payment links

Rana Haleem 19 days ago
Done
Support User-Level Auth Token Expiration
π Problem Statement As a platform administrator, I experience a fixed, non-configurable authentication token TTL enforced at the JS-SDK level, which results in an inability to align session lifetimes with site-specific security and user experience policies β forcing either premature re-authentication or longer-than-desired session windows that cannot be tuned per environment or audience. π‘ User Story As a platform administrator, I want to configure the authentication token TTL from the platform settings, so that the JS-SDK consumes that configuration and enforces the desired session lifetime without requiring code changes or redeployments. π― Definition of Done (DoD) β Given an account owner configures a custom session duration in the platform settings, when a user signs in, then their session remains active for exactly the configured duration. β Given the account owner updates the session duration setting, when users sign in afterward, then the new duration is automatically applied without requiring frontend code changes or deployments. β Given the session duration setting UI is displayed, when configuring the value, then: The admin can enter a numeric value. The admin can select a duration unit (e.g., days or months). The minimum accepted value must be a positive number. Upper-bound limitations are validated based on platform-defined security constraints. β This change will impact: Admin Platform β a new setting allowing configuration of authentication/session duration. Authentication System β token/session issuance based on configured TTL. Frontend JS-SDK β consumption and enforcement of the configured token lifetime. Website User Experience β sessions automatically respect the configured duration. Documentation β updated implementation and configuration guidance.

Rana Haleem 20 days ago
Done
Support User-Level Auth Token Expiration
π Problem Statement As a platform administrator, I experience a fixed, non-configurable authentication token TTL enforced at the JS-SDK level, which results in an inability to align session lifetimes with site-specific security and user experience policies β forcing either premature re-authentication or longer-than-desired session windows that cannot be tuned per environment or audience. π‘ User Story As a platform administrator, I want to configure the authentication token TTL from the platform settings, so that the JS-SDK consumes that configuration and enforces the desired session lifetime without requiring code changes or redeployments. π― Definition of Done (DoD) β Given an account owner configures a custom session duration in the platform settings, when a user signs in, then their session remains active for exactly the configured duration. β Given the account owner updates the session duration setting, when users sign in afterward, then the new duration is automatically applied without requiring frontend code changes or deployments. β Given the session duration setting UI is displayed, when configuring the value, then: The admin can enter a numeric value. The admin can select a duration unit (e.g., days or months). The minimum accepted value must be a positive number. Upper-bound limitations are validated based on platform-defined security constraints. β This change will impact: Admin Platform β a new setting allowing configuration of authentication/session duration. Authentication System β token/session issuance based on configured TTL. Frontend JS-SDK β consumption and enforcement of the configured token lifetime. Website User Experience β sessions automatically respect the configured duration. Documentation β updated implementation and configuration guidance.

Rana Haleem 20 days ago
In Planning
Export Collaborator API Keys with Usage & Expiry Metadata
π Problem Statement As an account owner, I currently do not have a centralized way to export collaborator API key information, which makes it difficult to audit access, monitor usage, track expirations, and maintain security compliance across the account. π‘ User Story As an account owner, I want to export all collaborator API keys along with metadata such as last usage date and expiry date, so that I can review access activity, manage integrations, and perform security audits efficiently. π― Definition of Done (DoD) A feature is done when: βοΈ Given an account owner accesses the collaborators or API keys management area, when they trigger an export action, then a downloadable export file is generated containing all collaborator API key details. βοΈ Given collaborator API keys exist, when the export is generated, then the export includes: Collaborator/User name Email address API key status (active/revoked/expired) Created date Expiry date Last usage timestamp Associated permissions/scopes/roles βοΈ Given an API key has never been used, when exported, then the βlast usageβ field displays as empty/null or βNever Usedβ.

Rana Haleem 20 days ago
In Planning
Export Collaborator API Keys with Usage & Expiry Metadata
π Problem Statement As an account owner, I currently do not have a centralized way to export collaborator API key information, which makes it difficult to audit access, monitor usage, track expirations, and maintain security compliance across the account. π‘ User Story As an account owner, I want to export all collaborator API keys along with metadata such as last usage date and expiry date, so that I can review access activity, manage integrations, and perform security audits efficiently. π― Definition of Done (DoD) A feature is done when: βοΈ Given an account owner accesses the collaborators or API keys management area, when they trigger an export action, then a downloadable export file is generated containing all collaborator API key details. βοΈ Given collaborator API keys exist, when the export is generated, then the export includes: Collaborator/User name Email address API key status (active/revoked/expired) Created date Expiry date Last usage timestamp Associated permissions/scopes/roles βοΈ Given an API key has never been used, when exported, then the βlast usageβ field displays as empty/null or βNever Usedβ.

Rana Haleem 20 days ago
In Planning
Subscription Export Should Respect Selected Table Columns
Problem Statement Currently, subscription exports include all available columns regardless of the columns selected or displayed in the subscriptions table view. This creates unnecessary noise in exported files and makes it harder for users to export only the data relevant to their workflow. User Story As a platform user, I want subscription exports to include only the columns I selected in the subscriptions table, So that I can export cleaner, more relevant datasets without unnecessary fields. Definition of Done (DoD) Subscription exports only include columns currently selected/displayed in the table view. Hidden/unselected columns are excluded from the export. Column ordering in the export matches the table ordering where applicable. Existing filters and search criteria continue to apply correctly to exports. Export functionality remains supported for CSV and other existing export formats.

Rana Haleem 25 days ago
In Planning
Subscription Export Should Respect Selected Table Columns
Problem Statement Currently, subscription exports include all available columns regardless of the columns selected or displayed in the subscriptions table view. This creates unnecessary noise in exported files and makes it harder for users to export only the data relevant to their workflow. User Story As a platform user, I want subscription exports to include only the columns I selected in the subscriptions table, So that I can export cleaner, more relevant datasets without unnecessary fields. Definition of Done (DoD) Subscription exports only include columns currently selected/displayed in the table view. Hidden/unselected columns are excluded from the export. Column ordering in the export matches the table ordering where applicable. Existing filters and search criteria continue to apply correctly to exports. Export functionality remains supported for CSV and other existing export formats.

Rana Haleem 25 days ago