Have something to say?

Tell us how we could make the product more useful to you. We URGE you to use the Pelcro Discovery GPT to help structure your thoughts and recommend a feature request that will be quickly digested by our team!

Add Feature to Adjust Subscription Start/End Date(for autorenew)

🔍 Problem Statement Subscribers sometimes need their subscription start date adjusted after purchase due to technical issues, delayed gift subscription timing, or customer service accommodations. For example, we recently had a BibleStudyTools.com PLUS subscriber who was unable to properly access her ad-free PLUS account for over a month while actively paying for the subscription. After troubleshooting, we were able to resolve the access issue by having her log out, log back in, and clear her browser cache. However, because she lost access to the paid benefits for an extended period, she requested that her subscription be restarted or extended to make up for the lost time. Currently, we do not have a simple way within Pelcro to adjust a subscription’s start date or extend the end date. This also comes up when users purchase their own subscription along with a gift subscription for a spouse or family member, but the gift subscription starts at a later date. In those cases, users may want their own subscription adjusted so both subscriptions line up correctly. Without this functionality, our support team has limited ability to resolve valid customer concerns directly within the Pelcro backend. 💡 User Story As a customer support/admin user in Pelcro, I want the ability to pause a subscriber’s active subscription or adjust the subscription start and end dates, so that I can fairly compensate customers for lost access, align subscription timing with gift subscriptions, and better manage customer service accommodations without needing manual workarounds. 🎯 Definition of Done (DoD) A feature is done when we can: ✔ Adjust a subscription’s start date when needed. ✔ Extend a subscription’s end date to make up for lost access or support-related issues. ✔ Apply these changes to both monthly and annual subscription plans. ✔ Clearly display the updated subscription timeline in the customer’s account. ✔ Ensure billing is handled correctly when a subscription is moved or extended. ✔ Add an internal note or reason field so admins can document why the subscription was paused or adjusted. ✔ Ensure the subscriber does not lose access when an admin is only extending the subscription end date. ✔ Provide confirmation to the admin before changes are saved, so accidental subscription changes can be avoided.

Gabrielle Sellitti 3 days ago

Planned

Configurable charge-upon-renewal look-ahead

🔍 Problem Statement As a client admin, charge-upon-renewal only charges one renewal phase ahead, so paid phases added behind an intermittent free phase go uncharged and revenue is deferred. 💡 User Story As a client admin, I want to set how many renewal phases ahead charge-upon-renewal charges from the platform admin dashboard, so that paid phases sitting behind free or stacked phases are collected when they're added. 🎯 Definition of Done (DoD) ✔ Given charge-upon-renewal is enabled and the look-ahead is set to N phases in the admin dashboard, when a subscription has N or fewer phases before a paid phase, then that paid phase is charged on the spot. ✔ Given the admin dashboard setting, when an admin saves the look-ahead value, then it persists per site and defaults to 1 for existing accounts. ✔ This change will impact UI and API, specifically the charge-upon-renewal settings screen in the admin dashboard and its backing configuration endpoint. ✔ This solution will include the following limitations: applies only when charge-upon-renewal is enabled; does not retroactively charge phases on existing subscriptions; look-ahead is a per-site setting, not per-plan or per-subscription. [clarify: confirm per-site scope]

Rana Haleem 4 days ago

Planned

Add Coupon Code/Name to Subscription by Coupon Export

🔍 Problem Statement The current Subscriptions by Coupon report export identifies transactions associated with coupon usage but does not include the specific Coupon Code or Coupon Name applied to each transaction. As a result, customers cannot easily determine which coupon campaign generated a particular sale, making coupon performance analysis, campaign attribution, and reporting more difficult. 💡 User Story As a marketing or subscription manager, I want the Subscriptions by Coupon report export to include the Coupon Code and/or Coupon Name used for each transaction, so that I can accurately track sales performance, measure coupon campaign effectiveness, and perform detailed reporting on coupon usage. 🎯 Definition of Done (DoD) A feature is done when: ✔ Given a transaction associated with a coupon, when the Subscriptions by Coupon report is exported, then the export includes the specific Coupon Code and/or Coupon Name used for that transaction. ✔ A new column for Coupon Code and/or Coupon Name is added to the export file. ✔ The exported coupon information matches the coupon applied at the time of the transaction. ✔ Transactions without a coupon display a blank or appropriate null value in the coupon field(s).

Rana Haleem 4 days ago

Add collaborator Information in subscriptions Report

🔍 Problem Statement We need a way to identify whether subscriptions were created or cancelled by a collaborator or by the subscriber within our reporting tools. Currently, this information is only available in the Activity Logs, which are not exportable. This makes it difficult to audit collaborator actions, track operational activity, and generate reports without manually reviewing individual log entries. 💡 User Story As an account owner, I want subscription reports to indicate whether a subscription was created or cancelled by a collaborator or by the subscriber, So that I can easily track and report on collaborator activity, perform audits, and analyze subscription management actions without relying on non-exportable Activity Logs. 🎯 Definition of Done (DoD) A feature is done when: ✔️A field identifies whether a subscription was created by a Collaborator or Subscriber. ✔️A field identifies whether a subscription was cancelled by a Collaborator or Subscriber. ✔️The field(s) are available in relevant reports and report exports.

Nada Shoukry 4 days ago

Done

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 8 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 9 days ago

In Progress

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 9 days ago

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 10 days ago

In Progress

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 11 days ago

In Progress

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 15 days ago

Done

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 15 days ago

In Progress

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 15 days ago

In Progress

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 15 days ago

In Progress

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 15 days ago

In Progress

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 15 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 15 days ago

In Progress

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 16 days ago

Available

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 18 days ago