Standardize Field Naming Across Export Files
🔍Problem Statement Export files currently use inconsistent field names for the same data across different areas of the platform. For example, the subscription ID is labeled "ID" in Subscriptions exports, the customer ID is labeled "ID" in Customers exports, and "user_ID" in other exports. This inconsistency creates unnecessary complexity for customers building integrations and automations with tools such as Zapier and other external systems. 💡User Story As a Pelcro administrator integrating exported data with external systems, I want consistent field names across all exports so that I can build and maintain reliable automations without needing export-specific field mappings. 🎯Definition of Done ✔ Standardize field names for identical data across all export types (e.g., customer ID, subscription ID, invoice ID). ✔ Ensure existing and newly introduced exports follow the same naming convention. ✔ Update the export documentation to reflect the standardized field names.

Nada Shoukry 1 day ago
Standardize Field Naming Across Export Files
🔍Problem Statement Export files currently use inconsistent field names for the same data across different areas of the platform. For example, the subscription ID is labeled "ID" in Subscriptions exports, the customer ID is labeled "ID" in Customers exports, and "user_ID" in other exports. This inconsistency creates unnecessary complexity for customers building integrations and automations with tools such as Zapier and other external systems. 💡User Story As a Pelcro administrator integrating exported data with external systems, I want consistent field names across all exports so that I can build and maintain reliable automations without needing export-specific field mappings. 🎯Definition of Done ✔ Standardize field names for identical data across all export types (e.g., customer ID, subscription ID, invoice ID). ✔ Ensure existing and newly introduced exports follow the same naming convention. ✔ Update the export documentation to reflect the standardized field names.

Nada Shoukry 1 day ago
Add Modal Close Tracking Support
Problem Statement Currently, there is no reliable way to track when users close a Pelcro modal, making it difficult to measure user interactions and modal abandonment. User Story As an integrator, I want a reliable way to detect when a Pelcro modal is closed so that I can accurately track user behavior and trigger custom analytics. Definition of Done (DoD) Add a unique ID to the modal close button to support client-side tracking. Emit a pelcroModalClosed SDK event whenever a Pelcro modal is closed. Ensure the event is fired regardless of whether the modal is closed via the close button, Escape key, or clicking outside the modal (where applicable). Document the new ID and SDK event for developers. Verify the event is emitted consistently across all Pelcro modals.

Rana Haleem 3 days ago
Add Modal Close Tracking Support
Problem Statement Currently, there is no reliable way to track when users close a Pelcro modal, making it difficult to measure user interactions and modal abandonment. User Story As an integrator, I want a reliable way to detect when a Pelcro modal is closed so that I can accurately track user behavior and trigger custom analytics. Definition of Done (DoD) Add a unique ID to the modal close button to support client-side tracking. Emit a pelcroModalClosed SDK event whenever a Pelcro modal is closed. Ensure the event is fired regardless of whether the modal is closed via the close button, Escape key, or clicking outside the modal (where applicable). Document the new ID and SDK event for developers. Verify the event is emitted consistently across all Pelcro modals.

Rana Haleem 3 days ago
Allow Existing Pending Users to Be Set to Active During Corporate License Reinstatement
Problem: Corporate support team noticed that when you edit a user record in Pelcro, it tells you if their account is Pending or Active and it gives you the option of editing a Pending account to Active. Does that mean if we do this they don't have to activate their account and they will have full premium access? That would be very helpful fix when it comes to re-onboarding members who had a prior expired license after they reinstate their license. The changing a user from Pending to Active is only available when adding a new user a membership list, so this won't really solve our problem. We want those users to create a password with the activation email. Ideally we need to be able to change an existing pending user to active when reinstating an expired license after the company signs up again, Right now we have to tell users to log out and in again that had prior active usage to regain access. I guess if they were pending they would still need to activate their account one way or another to gain access. It would be nice if we can make them active again for existing users that were on the prior license that renewed after expiration date. This is a known issue that has yet to be resolved I believe.

Nikisha Bolloju 3 days ago
Allow Existing Pending Users to Be Set to Active During Corporate License Reinstatement
Problem: Corporate support team noticed that when you edit a user record in Pelcro, it tells you if their account is Pending or Active and it gives you the option of editing a Pending account to Active. Does that mean if we do this they don't have to activate their account and they will have full premium access? That would be very helpful fix when it comes to re-onboarding members who had a prior expired license after they reinstate their license. The changing a user from Pending to Active is only available when adding a new user a membership list, so this won't really solve our problem. We want those users to create a password with the activation email. Ideally we need to be able to change an existing pending user to active when reinstating an expired license after the company signs up again, Right now we have to tell users to log out and in again that had prior active usage to regain access. I guess if they were pending they would still need to activate their account one way or another to gain access. It would be nice if we can make them active again for existing users that were on the prior license that renewed after expiration date. This is a known issue that has yet to be resolved I believe.

Nikisha Bolloju 3 days ago
Customer Deletion Audit Trail
🔍 Problem Statement As a publisher, we need greater visibility into customer deletion events. When a customer record is deleted, we currently have no way to determine who performed the deletion, when it occurred, or why it happened, making it difficult to audit changes and investigate issues. 💡 User Story As a publisher, I want customer deletion events to be logged and accessible so that I can identify who deleted a customer record, when it was deleted, and any available context, allowing me to effectively audit changes and investigate inquiries. 🎯Definition of Done ✔ Customer deletion events are recorded in the audit log whenever a customer record is deleted. ✔ Each audit log entry includes, at a minimum, the deleted customer, the user or system that performed the deletion, the timestamp, and the deletion method (manual/API). If a deletion reason is available, it is also captured. ✔Authorized users can view and search customer deletion events through the platform's audit logs (or another designated location), with retention aligned to the platform's audit log policy.

Nada Shoukry 3 days ago
High Priority
Customer Deletion Audit Trail
🔍 Problem Statement As a publisher, we need greater visibility into customer deletion events. When a customer record is deleted, we currently have no way to determine who performed the deletion, when it occurred, or why it happened, making it difficult to audit changes and investigate issues. 💡 User Story As a publisher, I want customer deletion events to be logged and accessible so that I can identify who deleted a customer record, when it was deleted, and any available context, allowing me to effectively audit changes and investigate inquiries. 🎯Definition of Done ✔ Customer deletion events are recorded in the audit log whenever a customer record is deleted. ✔ Each audit log entry includes, at a minimum, the deleted customer, the user or system that performed the deletion, the timestamp, and the deletion method (manual/API). If a deletion reason is available, it is also captured. ✔Authorized users can view and search customer deletion events through the platform's audit logs (or another designated location), with retention aligned to the platform's audit log policy.

Nada Shoukry 3 days ago
High Priority
In Planning
Configure Price Quote (CPQ)
🔍 Problem Statement As a media ad sales rep, I manually assemble advertising quotes across disconnected tools, which causes slow turnaround, pricing errors, and lost deals. 💡 User Story As an ad sales rep, I want to describe a deal in natural language and have the AI assemble a structured quote, so that I can generate accurate quotes in minutes instead of hours. As an ad sales rep, I want to export the finalized quote as a PDF and email it to the prospect, so that I can close without leaving the tool. 🎯 Definition of Done (DoD) ✔ Given a chat session in the quote UI, when the rep describes ad products, quantities, and terms, then the AI populates a structured quote draft via the Quoting API and renders editable line items. ✔ Given a populated quote draft, when the rep confirms it, then the system generates a PDF and sends it to the prospect's email through the Quoting API. ✔ Given the AI lacks a required field (rate card, term, customer), when generating the quote, then it prompts the rep for the missing input before finalizing.

Michael Ghattas 3 days ago
In Planning
Configure Price Quote (CPQ)
🔍 Problem Statement As a media ad sales rep, I manually assemble advertising quotes across disconnected tools, which causes slow turnaround, pricing errors, and lost deals. 💡 User Story As an ad sales rep, I want to describe a deal in natural language and have the AI assemble a structured quote, so that I can generate accurate quotes in minutes instead of hours. As an ad sales rep, I want to export the finalized quote as a PDF and email it to the prospect, so that I can close without leaving the tool. 🎯 Definition of Done (DoD) ✔ Given a chat session in the quote UI, when the rep describes ad products, quantities, and terms, then the AI populates a structured quote draft via the Quoting API and renders editable line items. ✔ Given a populated quote draft, when the rep confirms it, then the system generates a PDF and sends it to the prospect's email through the Quoting API. ✔ Given the AI lacks a required field (rate card, term, customer), when generating the quote, then it prompts the rep for the missing input before finalizing.

Michael Ghattas 3 days ago
Planned
AI Agent - Integrate with Customer Activity
Problem Statement Currently, the AI Agent is not integrated with the Customer Activity view, making it harder for users to quickly understand customer behavior, recent actions, or potential issues without manually reviewing activity logs. User Story As a Pelcro user, I want the AI Agent to be integrated with Customer Activity so that I can quickly ask questions, summarize customer behavior, and understand key events without manually analyzing the full activity history. Definition of Done (DoD) Allow users to ask questions about the selected customer's activity and history. Enable the AI to summarize recent customer activity and highlight key events. Allow the AI to answer contextual questions based on the customer's activity (e.g., subscription changes, payments, renewals, cancellations, login activity, etc.). Display AI responses within the Customer Activity experience without requiring users to navigate away. Ensure the AI only has access to the selected customer's data and respects existing user permissions. Maintain a consistent UI/UX with the rest of the Pelcro AI experience.

Rana Haleem 3 days ago
Planned
AI Agent - Integrate with Customer Activity
Problem Statement Currently, the AI Agent is not integrated with the Customer Activity view, making it harder for users to quickly understand customer behavior, recent actions, or potential issues without manually reviewing activity logs. User Story As a Pelcro user, I want the AI Agent to be integrated with Customer Activity so that I can quickly ask questions, summarize customer behavior, and understand key events without manually analyzing the full activity history. Definition of Done (DoD) Allow users to ask questions about the selected customer's activity and history. Enable the AI to summarize recent customer activity and highlight key events. Allow the AI to answer contextual questions based on the customer's activity (e.g., subscription changes, payments, renewals, cancellations, login activity, etc.). Display AI responses within the Customer Activity experience without requiring users to navigate away. Ensure the AI only has access to the selected customer's data and respects existing user permissions. Maintain a consistent UI/UX with the rest of the Pelcro AI experience.

Rana Haleem 3 days ago
Planned
Support SEPA payment method
Problem Statement Currently, Pelcro does not support SEPA Direct Debit for the EU for the UK as payment methods. This prevents businesses from accepting bank account payments in these regions, limiting payment flexibility and reducing the ability to serve customers who prefer or require direct debit over card payments. User Story As a business, I want to be able to support SEPA in the EU and BACS in the UK so that I can accept bank accounts as a source of payment method Definition of Done Pelcro supports SEPA Direct Debit as a payment method. Admins can enable or disable SEPA from payment settings. Customers can add a SEPA bank account as a payment method during checkout. Customers can use SEPA for subscription and invoice payments. SEPA payment method details are securely stored and displayed on the customer profile. Payment statuses are handled correctly, including pending, succeeded, failed, and refunded.

Rana Haleem 3 days ago
Planned
Support SEPA payment method
Problem Statement Currently, Pelcro does not support SEPA Direct Debit for the EU for the UK as payment methods. This prevents businesses from accepting bank account payments in these regions, limiting payment flexibility and reducing the ability to serve customers who prefer or require direct debit over card payments. User Story As a business, I want to be able to support SEPA in the EU and BACS in the UK so that I can accept bank accounts as a source of payment method Definition of Done Pelcro supports SEPA Direct Debit as a payment method. Admins can enable or disable SEPA from payment settings. Customers can add a SEPA bank account as a payment method during checkout. Customers can use SEPA for subscription and invoice payments. SEPA payment method details are securely stored and displayed on the customer profile. Payment statuses are handled correctly, including pending, succeeded, failed, and refunded.

Rana Haleem 3 days ago
Planned
Support additional payment methods for e-commerce orders (Invoice, PayPal, Google Pay, Apple Pay)
🔍 Problem Statement E-commerce SKU orders only support credit card and BACS, limiting checkout options for buyers who prefer other payment methods. 💡 User Story As a client admin, I want to offer invoice-based payment for e-commerce orders, so that buyers can pay via credit card or offline payment against an invoice. As a client admin, I want to accept PayPal, Google Pay, and Apple Pay for e-commerce orders, so that buyers have more checkout options. As a buyer on the default checkout UI, I want to select from these payment methods, so that I can pay however I prefer. 🎯 Definition of Done (DoD) ✔ Given e-commerce checkout, when a customer selects "Send Invoice," then an invoice is generated and payable via credit card or offline payment. ✔ Given e-commerce checkout, when a customer selects PayPal, Google Pay, or Apple Pay, then the order completes and is paid through that method. ✔ This change will impact UI and API, specifically the e-commerce checkout endpoint(s) and the default checkout UI's payment method selector. ✔ This solution will include the following limitations: requires each payment gateway (PayPal, Google Pay, Apple Pay) to be configured and enabled at the platform level.

Rana Haleem 3 days ago
Planned
Support additional payment methods for e-commerce orders (Invoice, PayPal, Google Pay, Apple Pay)
🔍 Problem Statement E-commerce SKU orders only support credit card and BACS, limiting checkout options for buyers who prefer other payment methods. 💡 User Story As a client admin, I want to offer invoice-based payment for e-commerce orders, so that buyers can pay via credit card or offline payment against an invoice. As a client admin, I want to accept PayPal, Google Pay, and Apple Pay for e-commerce orders, so that buyers have more checkout options. As a buyer on the default checkout UI, I want to select from these payment methods, so that I can pay however I prefer. 🎯 Definition of Done (DoD) ✔ Given e-commerce checkout, when a customer selects "Send Invoice," then an invoice is generated and payable via credit card or offline payment. ✔ Given e-commerce checkout, when a customer selects PayPal, Google Pay, or Apple Pay, then the order completes and is paid through that method. ✔ This change will impact UI and API, specifically the e-commerce checkout endpoint(s) and the default checkout UI's payment method selector. ✔ This solution will include the following limitations: requires each payment gateway (PayPal, Google Pay, Apple Pay) to be configured and enabled at the platform level.

Rana Haleem 3 days ago
Planned
Native ticketing with two-way email, internal notes, and SLA in Pelcro
🔍 Problem Statement As a client support team, I manage subscriber tickets in Pelcro but cannot send or receive customer emails, forcing me to run a separate Zendesk instance and pay for duplicate tooling. 💡 User Story As a client support agent, I want to send and receive customer emails directly from a Pelcro ticket, so that all subscriber support happens in Pelcro without Zendesk. As a client admin, I want to configure the sender identity (publisher brand or support team) per tenant, so that outbound email matches our customer-facing brand. As a support agent, I want to write internal notes on a ticket that are not sent to the subscriber, so that I can record context and collaborate without exposing it to the customer. As a support lead, I want SLA status shown on the ticket list view, so that I can see at a glance which tickets are at risk or breached. 🎯 Definition of Done (DoD) ✔ Given each tenant is provisioned a unique Pelcro inbound address (e.g. tenant-slug@in.pelcro.com) and the client forwards their support address to it, when a subscriber email is forwarded in, then SendGrid Inbound Parse POSTs the parsed message to a Pelcro webhook that creates or appends a ticket, routing to the correct tenant by the to-address. ✔ Given an inbound email is a reply to an existing thread, when it is received, then the ticket is matched by tokenized reply address (reply+ @in.pelcro.com) and In-Reply-To/References headers rather than opening a new ticket. ✔ Given an agent replies from a ticket, when they send, then an outbound email is delivered via SendGrid from the tenant's configured sender identity and logged on the ticket thread. ✔ Given an agent adds an internal note, when it is saved, then it is stored as a distinct resource type (not an email message), appears on the thread visually distinct from emails, and is never sent to the subscriber. ✔ Given an SLA policy is configured, when a ticket is open, then the ticket list view shows its SLA status (On Track / At Risk / Breached) based on time since last customer reply against the policy target.

Rana Haleem 3 days ago
Planned
Native ticketing with two-way email, internal notes, and SLA in Pelcro
🔍 Problem Statement As a client support team, I manage subscriber tickets in Pelcro but cannot send or receive customer emails, forcing me to run a separate Zendesk instance and pay for duplicate tooling. 💡 User Story As a client support agent, I want to send and receive customer emails directly from a Pelcro ticket, so that all subscriber support happens in Pelcro without Zendesk. As a client admin, I want to configure the sender identity (publisher brand or support team) per tenant, so that outbound email matches our customer-facing brand. As a support agent, I want to write internal notes on a ticket that are not sent to the subscriber, so that I can record context and collaborate without exposing it to the customer. As a support lead, I want SLA status shown on the ticket list view, so that I can see at a glance which tickets are at risk or breached. 🎯 Definition of Done (DoD) ✔ Given each tenant is provisioned a unique Pelcro inbound address (e.g. tenant-slug@in.pelcro.com) and the client forwards their support address to it, when a subscriber email is forwarded in, then SendGrid Inbound Parse POSTs the parsed message to a Pelcro webhook that creates or appends a ticket, routing to the correct tenant by the to-address. ✔ Given an inbound email is a reply to an existing thread, when it is received, then the ticket is matched by tokenized reply address (reply+ @in.pelcro.com) and In-Reply-To/References headers rather than opening a new ticket. ✔ Given an agent replies from a ticket, when they send, then an outbound email is delivered via SendGrid from the tenant's configured sender identity and logged on the ticket thread. ✔ Given an agent adds an internal note, when it is saved, then it is stored as a distinct resource type (not an email message), appears on the thread visually distinct from emails, and is never sent to the subscriber. ✔ Given an SLA policy is configured, when a ticket is open, then the ticket list view shows its SLA status (On Track / At Risk / Breached) based on time since last customer reply against the policy target.

Rana Haleem 3 days ago
Planned
Funnel Benchmarking Data Pipeline
🔍 Problem Statement As a Pelcro platform engineer, there is no cross-client aggregation of funnel event data, which makes percentile benchmarking impossible. 💡 User Story As a Pelcro platform engineer, I want a backend pipeline that aggregates anonymized funnel conversion rates per step across all sites, so that benchmark percentiles can be computed and served per client. 🎯 Definition of Done (DoD) ✔ Given sites emit standard events (paywall_displayed, registered, subscription_created, renewal_attempted, etc.), when the pipeline runs, then per-step conversion rates are computed per site and stored in an aggregate benchmark table. ✔ Given the benchmark table is populated, when queried, then it returns p25, p50, p75, p90 percentile values per funnel step, excluding any site below minimum event volume threshold. ✔ Given a site_id, when GET /analytics/funnel-benchmark is called, then it returns that site's conversion rate per step alongside benchmark percentiles for the same step. ✔ This change will impact API / Data, specifically a new GET /analytics/funnel-benchmark endpoint and a scheduled Laravel job for aggregation.

Rana Haleem 3 days ago
Planned
Funnel Benchmarking Data Pipeline
🔍 Problem Statement As a Pelcro platform engineer, there is no cross-client aggregation of funnel event data, which makes percentile benchmarking impossible. 💡 User Story As a Pelcro platform engineer, I want a backend pipeline that aggregates anonymized funnel conversion rates per step across all sites, so that benchmark percentiles can be computed and served per client. 🎯 Definition of Done (DoD) ✔ Given sites emit standard events (paywall_displayed, registered, subscription_created, renewal_attempted, etc.), when the pipeline runs, then per-step conversion rates are computed per site and stored in an aggregate benchmark table. ✔ Given the benchmark table is populated, when queried, then it returns p25, p50, p75, p90 percentile values per funnel step, excluding any site below minimum event volume threshold. ✔ Given a site_id, when GET /analytics/funnel-benchmark is called, then it returns that site's conversion rate per step alongside benchmark percentiles for the same step. ✔ This change will impact API / Data, specifically a new GET /analytics/funnel-benchmark endpoint and a scheduled Laravel job for aggregation.

Rana Haleem 3 days ago
Planned
Introduce AI agent on Dashboard
🔍 Problem Statement Currently, the AI Agent is only accessible through a floating chat icon in the bottom-right corner of the platform. As a result, many users overlook it or perceive it as a support widget rather than a core product capability, leading to low adoption and limited engagement. 💡 User Story As a Pelcro user, I want the AI Agent to be surfaced contextually throughout the platform so that I can easily discover its capabilities and use it to complete tasks, gain insights, and navigate the platform more efficiently. 🎯 Definition of Done (DoD) Explore and implement one or more of the following options: 1 — Ask Pelcro AI Bar — recommended industry standards (Most SAAS does it) Prominent search-style AI bar in the toolbar row (near date range) on Overview. Placeholder frames it as analytics search; scope reflects the active date range. 2 — Smart KPI Cards — lowest-risk quick ship Each KPI card gains a one-tap "Ask" affordance and an auto-caption (delta vs prior period). Tapping "Ask" opens chat with a metric-specific question ("why did this move?").

Rana Haleem 3 days ago
Planned
Introduce AI agent on Dashboard
🔍 Problem Statement Currently, the AI Agent is only accessible through a floating chat icon in the bottom-right corner of the platform. As a result, many users overlook it or perceive it as a support widget rather than a core product capability, leading to low adoption and limited engagement. 💡 User Story As a Pelcro user, I want the AI Agent to be surfaced contextually throughout the platform so that I can easily discover its capabilities and use it to complete tasks, gain insights, and navigate the platform more efficiently. 🎯 Definition of Done (DoD) Explore and implement one or more of the following options: 1 — Ask Pelcro AI Bar — recommended industry standards (Most SAAS does it) Prominent search-style AI bar in the toolbar row (near date range) on Overview. Placeholder frames it as analytics search; scope reflects the active date range. 2 — Smart KPI Cards — lowest-risk quick ship Each KPI card gains a one-tap "Ask" affordance and an auto-caption (delta vs prior period). Tapping "Ask" opens chat with a metric-specific question ("why did this move?").

Rana Haleem 3 days ago
Planned
Trigger automations with In app notifications
🔍 Problem Statement We need an in-app notification channel for event-based workflows that works across ALL Pelcro UIs — Default UI, React Elements, and fully custom UIs built directly on the JS SDK. Building rendering logic per UI layer would leave custom-UI publishers without coverage. The JS SDK is the common denominator across all Pelcro frontends. 💡 User Story As a marketer, I want to send an in-app notification (banner, toast, or inline card) to customers matching an event-based segment, so I can engage users in the moment — regardless of which Pelcro UI surface they are on. As a developer integrating Pelcro, I want a simple way to either auto-render notifications OR listen to an event and render them myself, so I am not forced to migrate UI surfaces just to use this feature. 🎯 Definition of Done (DoD) ──────────────────────────────── ARCHITECTURE — JS SDK MODULE ──────────────────────────────── ✔ New Pelcro.notifications module in the JS SDK, following the same conventions as Pelcro.user, Pelcro.subscription, etc. ✔ On user authentication, the SDK calls GET /notifications/active and fetches the list of pending in-app notifications for that customer. ✔ For each pending notification, the SDK dispatches a notification.received event consumable by publisher code. ✔ The SDK exposes a simple API for retrieval, dismissal, and click tracking: • Pelcro.notifications.list() • Pelcro.notifications.refresh() • Pelcro.notifications.dismiss(id) • Pelcro.notifications.markAsClicked(id) • Pelcro.notifications.on('received' | 'dismissed' | 'clicked', callback) ──────────────────────────────── TWO INTEGRATION PATHS ──────────────────────────────── Path 1 — Default UI/React elements: ✔ Pelcro.notifications.enable({ position, theme, maxVisible, autoDismissAfter }) opt-in renders notifications automatically with brand-aware styling (site logo + color palette). Default UI and React Elements use this built-in renderer under the hood — zero integration effort for those publishers. Path 2 — Custom UIs ✔ Custom-UI publishers subscribe to Pelcro.notifications.on('received', callback) and render notifications however they want. ✔ A ~20-line sample HTML/JS snippet is published in the developer docs showing how to subscribe and render. ──────────────────────────────── Platform UI ──────────────────────────────── Add a simple rich text editor for notification content in the automation form. Fields: • Title (required) — plain text, single line, no formatting • Body (required) — rich text editor: bold, italic, links, ordered/unordered lists. No images, no embeds, no custom HTML. • CTA label (optional) — plain text, single line • CTA URL (optional) — validated as URL • Dismissible (toggle, default: true) • Expiry (default: 30 days, configurable per workflow) ✔ Notifications are delivered on the customer's next page load after they enter the segment ✔ Notifications are user-scoped — only authenticated customers receive them. Anonymous visitors do not. ✔ Notifications NOT loaded by the customer within the expiry window are marked expired and not redelivered.

Rana Haleem 9 days ago
Planned
Trigger automations with In app notifications
🔍 Problem Statement We need an in-app notification channel for event-based workflows that works across ALL Pelcro UIs — Default UI, React Elements, and fully custom UIs built directly on the JS SDK. Building rendering logic per UI layer would leave custom-UI publishers without coverage. The JS SDK is the common denominator across all Pelcro frontends. 💡 User Story As a marketer, I want to send an in-app notification (banner, toast, or inline card) to customers matching an event-based segment, so I can engage users in the moment — regardless of which Pelcro UI surface they are on. As a developer integrating Pelcro, I want a simple way to either auto-render notifications OR listen to an event and render them myself, so I am not forced to migrate UI surfaces just to use this feature. 🎯 Definition of Done (DoD) ──────────────────────────────── ARCHITECTURE — JS SDK MODULE ──────────────────────────────── ✔ New Pelcro.notifications module in the JS SDK, following the same conventions as Pelcro.user, Pelcro.subscription, etc. ✔ On user authentication, the SDK calls GET /notifications/active and fetches the list of pending in-app notifications for that customer. ✔ For each pending notification, the SDK dispatches a notification.received event consumable by publisher code. ✔ The SDK exposes a simple API for retrieval, dismissal, and click tracking: • Pelcro.notifications.list() • Pelcro.notifications.refresh() • Pelcro.notifications.dismiss(id) • Pelcro.notifications.markAsClicked(id) • Pelcro.notifications.on('received' | 'dismissed' | 'clicked', callback) ──────────────────────────────── TWO INTEGRATION PATHS ──────────────────────────────── Path 1 — Default UI/React elements: ✔ Pelcro.notifications.enable({ position, theme, maxVisible, autoDismissAfter }) opt-in renders notifications automatically with brand-aware styling (site logo + color palette). Default UI and React Elements use this built-in renderer under the hood — zero integration effort for those publishers. Path 2 — Custom UIs ✔ Custom-UI publishers subscribe to Pelcro.notifications.on('received', callback) and render notifications however they want. ✔ A ~20-line sample HTML/JS snippet is published in the developer docs showing how to subscribe and render. ──────────────────────────────── Platform UI ──────────────────────────────── Add a simple rich text editor for notification content in the automation form. Fields: • Title (required) — plain text, single line, no formatting • Body (required) — rich text editor: bold, italic, links, ordered/unordered lists. No images, no embeds, no custom HTML. • CTA label (optional) — plain text, single line • CTA URL (optional) — validated as URL • Dismissible (toggle, default: true) • Expiry (default: 30 days, configurable per workflow) ✔ Notifications are delivered on the customer's next page load after they enter the segment ✔ Notifications are user-scoped — only authenticated customers receive them. Anonymous visitors do not. ✔ Notifications NOT loaded by the customer within the expiry window are marked expired and not redelivered.

Rana Haleem 9 days ago
In Planning
Add Gift Redemption Status to default UI
🔍 Problem Statement The current dashboard UI does not clearly show whether a subscriber who sent a gift has had that gift redeemed by the recipient. This makes it difficult for teams to track gift subscription status, support customer inquiries, and understand whether gifted subscriptions are still pending or successfully claimed. 💡 User Story As a dashboard user, I want to see the redemption status of a gift sent by a subscriber, so that I can easily know whether the gift has been redeemed or is still pending. 🎯 Definition of Done (DoD) A feature is done when: ✔ The dashboard UI displays gift information for subscribers who have sent a gift. ✔ The gift status is clearly shown as Redeemed or Not Redeemed/Pending. ✔ The status reflects the actual redemption state of the gift recipient. ✔ The gift status is visible in the default subscriber dashboard view or an easily accessible subscriber details section. ✔ Support/admin users can identify the gift sender and confirm whether the recipient has redeemed the gift. ✔ The feature is tested with both redeemed and unredeemed gift scenarios. ✔ Existing subscriber dashboard functionality remains unaffected.

Rana Haleem 9 days ago
In Planning
Add Gift Redemption Status to default UI
🔍 Problem Statement The current dashboard UI does not clearly show whether a subscriber who sent a gift has had that gift redeemed by the recipient. This makes it difficult for teams to track gift subscription status, support customer inquiries, and understand whether gifted subscriptions are still pending or successfully claimed. 💡 User Story As a dashboard user, I want to see the redemption status of a gift sent by a subscriber, so that I can easily know whether the gift has been redeemed or is still pending. 🎯 Definition of Done (DoD) A feature is done when: ✔ The dashboard UI displays gift information for subscribers who have sent a gift. ✔ The gift status is clearly shown as Redeemed or Not Redeemed/Pending. ✔ The status reflects the actual redemption state of the gift recipient. ✔ The gift status is visible in the default subscriber dashboard view or an easily accessible subscriber details section. ✔ Support/admin users can identify the gift sender and confirm whether the recipient has redeemed the gift. ✔ The feature is tested with both redeemed and unredeemed gift scenarios. ✔ Existing subscriber dashboard functionality remains unaffected.

Rana Haleem 9 days ago
In Progress
Support quantity in subscription checkout flow (Default UI)
🔍 Problem Statement Pelcro's cart functionality only supports one-time ecommerce product purchases. Subscription products cannot be added to a cart, which means customers cannot bundle subscriptions with other items in a single checkout — limiting cross-sell and upsell opportunities. 💡 User Story As a subscriber, I want to add subscription products to my cart alongside one-time purchases, so that I can complete a single checkout for everything I want to buy. As a principal, I want to order a large and exact number of subscriptions at one time, so that I can buy magazines for entire classrooms. 🎯 Definition of Done (DoD) A feature is done when: ✔️ Given a cart with both subscription and one-time products, when the customer completes checkout, then all items are processed correctly — one-time charges are invoiced immediately and subscriptions are created with their respective billing cycles. Have quantity in the checkout flow for one product/plan. plan price x quantity with same address

Rana Haleem 9 days ago
In Progress
Support quantity in subscription checkout flow (Default UI)
🔍 Problem Statement Pelcro's cart functionality only supports one-time ecommerce product purchases. Subscription products cannot be added to a cart, which means customers cannot bundle subscriptions with other items in a single checkout — limiting cross-sell and upsell opportunities. 💡 User Story As a subscriber, I want to add subscription products to my cart alongside one-time purchases, so that I can complete a single checkout for everything I want to buy. As a principal, I want to order a large and exact number of subscriptions at one time, so that I can buy magazines for entire classrooms. 🎯 Definition of Done (DoD) A feature is done when: ✔️ Given a cart with both subscription and one-time products, when the customer completes checkout, then all items are processed correctly — one-time charges are invoiced immediately and subscriptions are created with their respective billing cycles. Have quantity in the checkout flow for one product/plan. plan price x quantity with same address

Rana Haleem 9 days ago
In Progress
Customer Activity Metrics + Acquisition Funnel
🔍 Problem Statement As an analytics user, I open the Customers Activity page to only a raw event feed, forcing CSV exports and external joins to understand conversion. 💡 User Story As an analytics user, I want an overview band with summary metrics and an acquisition funnel on the Customers Activity page, so that I can read conversion at a glance without exporting. As a marketing user, I want each card and funnel step to filter the event list on click, so that I can drill into the customers behind any number. 🎯 Definition of Done (DoD) ✔ Given the Customers Activity page loads, then an overview band shows four cards — Paywall Views, Overall Conversion, Checkout Abandonment, Renewal Rate — scoped to the active date range. [clarify: Renewal Rate denominator — events-only (Renewed ÷ Renewed + Renewal Failed) vs billing "due" count] ✔ Given the page's existing date filter, when the user changes it, then all cards, the funnel, and the page list recalculate to that range, with no separate date control added. ✔ Given the overview band, when rendered, then an Acquisition Funnel shows steps Paywall Displayed → Plan Viewed → Checkout Started → Registered → Subscription Created, each with a count and step-to-step conversion rate. ✔ Given the overview, when rendered, then a Top Converting Pages list ranks page paths by attributed Subscription Created count, showing the top 10 with conversions per path. ✔ Given any card, funnel step, or page row, when the user clicks it, then the activity list filters to the matching events. export should work fine with the filters

Rana Haleem 9 days ago
In Progress
Customer Activity Metrics + Acquisition Funnel
🔍 Problem Statement As an analytics user, I open the Customers Activity page to only a raw event feed, forcing CSV exports and external joins to understand conversion. 💡 User Story As an analytics user, I want an overview band with summary metrics and an acquisition funnel on the Customers Activity page, so that I can read conversion at a glance without exporting. As a marketing user, I want each card and funnel step to filter the event list on click, so that I can drill into the customers behind any number. 🎯 Definition of Done (DoD) ✔ Given the Customers Activity page loads, then an overview band shows four cards — Paywall Views, Overall Conversion, Checkout Abandonment, Renewal Rate — scoped to the active date range. [clarify: Renewal Rate denominator — events-only (Renewed ÷ Renewed + Renewal Failed) vs billing "due" count] ✔ Given the page's existing date filter, when the user changes it, then all cards, the funnel, and the page list recalculate to that range, with no separate date control added. ✔ Given the overview band, when rendered, then an Acquisition Funnel shows steps Paywall Displayed → Plan Viewed → Checkout Started → Registered → Subscription Created, each with a count and step-to-step conversion rate. ✔ Given the overview, when rendered, then a Top Converting Pages list ranks page paths by attributed Subscription Created count, showing the top 10 with conversions per path. ✔ Given any card, funnel step, or page row, when the user clicks it, then the activity list filters to the matching events. export should work fine with the filters

Rana Haleem 9 days ago
In Progress
Enhance platform login durations
Login view is the most viewed page on the platform, it seems like we are requiring the business users to login every day - likely a simple improvement to reduce the amount of times users need to login into the platform. Reduces a lot of clicks and password types to the daily platform users. Problem Statement Currently, The "Remember Me" functionality only persists sessions for 7 days, which is shorter than the common industry standard for B2B SaaS platforms typically 30 days. Additionally, many B2B SaaS products enable the "Remember Me" option by default to reduce login friction while still allowing users to opt out. Pelcro also logs users out after 120 minutes of inactivity, and browser sessions end when the browser is closed if the "Remember Me" option is not selected. User Story As a Pelcro user, I want my login session to persist for a reasonable period of time so that I can access the platform without being required to log in repeatedly during normal usage. Definition of Done (DoD) Option A – Extend Remember Me Duration to 30 days (Industry standards) Increase the Remember Me session duration from 7 days to 30 days. Existing authentication and security controls continue to function as expected. Option B – Enable Remember Me by Default The "Remember Me" checkbox is pre-selected on the login screen. Users can still opt out by unchecking the option before logging in. The default behavior aligns with common B2B SaaS practices, where persistent login is enabled by default to reduce friction. Option C – Extend Admin Dashboard Idle Timeout Increase the admin dashboard session idle timeout from 120 minutes to 480 minutes (8 hours). Users remain logged in throughout a typical workday without interruption due to inactivity.

Rana Haleem 9 days ago
In Progress
Enhance platform login durations
Login view is the most viewed page on the platform, it seems like we are requiring the business users to login every day - likely a simple improvement to reduce the amount of times users need to login into the platform. Reduces a lot of clicks and password types to the daily platform users. Problem Statement Currently, The "Remember Me" functionality only persists sessions for 7 days, which is shorter than the common industry standard for B2B SaaS platforms typically 30 days. Additionally, many B2B SaaS products enable the "Remember Me" option by default to reduce login friction while still allowing users to opt out. Pelcro also logs users out after 120 minutes of inactivity, and browser sessions end when the browser is closed if the "Remember Me" option is not selected. User Story As a Pelcro user, I want my login session to persist for a reasonable period of time so that I can access the platform without being required to log in repeatedly during normal usage. Definition of Done (DoD) Option A – Extend Remember Me Duration to 30 days (Industry standards) Increase the Remember Me session duration from 7 days to 30 days. Existing authentication and security controls continue to function as expected. Option B – Enable Remember Me by Default The "Remember Me" checkbox is pre-selected on the login screen. Users can still opt out by unchecking the option before logging in. The default behavior aligns with common B2B SaaS practices, where persistent login is enabled by default to reduce friction. Option C – Extend Admin Dashboard Idle Timeout Increase the admin dashboard session idle timeout from 120 minutes to 480 minutes (8 hours). Users remain logged in throughout a typical workday without interruption due to inactivity.

Rana Haleem 9 days ago
Allow for changes/modifications to the billing address for invoices
Hello, in a recent response from Nada S, she noted “At the moment, once a billing address has been applied to an invoice, it cannot be modified. If the billing address is updated on the customer record, the new address will only be reflected on future invoices. Any invoices that were already generated will retain the billing address that was on file at the time they were created.”. We regularly get customers that send us purchase orders with different billing information that MUST get updated for invoicing. We would appreciate you considering changing the invoicing so that when billing information is changed, the invoice also is changed.

Mark Beyer 17 days ago
Allow for changes/modifications to the billing address for invoices
Hello, in a recent response from Nada S, she noted “At the moment, once a billing address has been applied to an invoice, it cannot be modified. If the billing address is updated on the customer record, the new address will only be reflected on future invoices. Any invoices that were already generated will retain the billing address that was on file at the time they were created.”. We regularly get customers that send us purchase orders with different billing information that MUST get updated for invoicing. We would appreciate you considering changing the invoicing so that when billing information is changed, the invoice also is changed.

Mark Beyer 17 days ago
Done
Reorganize Reports
Problem Statement Users have difficulty finding and accessing reports because reports are spread across multiple sections (Health Reports, Accounting Reports, and Old Reports). This creates a fragmented experience, makes report discovery harder, and limits visibility into report usage and performance. User Story As a user, I want to access all reports from a single reports page so that I can easily find, navigate, and use reports without having to search across multiple locations. Definition of Done (DoD) A single Reports page contains all existing reports. Health Reports, Accounting Reports, and Old Reports are consolidated into the new view. Reports are grouped by category. Each report has a unique URL for analytics and tracking purposes. Report usage can be tracked accurately in Mixpanel.

Rana Haleem 17 days ago
Done
Reorganize Reports
Problem Statement Users have difficulty finding and accessing reports because reports are spread across multiple sections (Health Reports, Accounting Reports, and Old Reports). This creates a fragmented experience, makes report discovery harder, and limits visibility into report usage and performance. User Story As a user, I want to access all reports from a single reports page so that I can easily find, navigate, and use reports without having to search across multiple locations. Definition of Done (DoD) A single Reports page contains all existing reports. Health Reports, Accounting Reports, and Old Reports are consolidated into the new view. Reports are grouped by category. Each report has a unique URL for analytics and tracking purposes. Report usage can be tracked accurately in Mixpanel.

Rana Haleem 17 days ago
In Progress
Add Current Phase Campaign Key to Subscriptions Export
🔍 Problem Statement As a Pelcro admin exporting subscription data, the current campaign_key column reflects the key set at subscription creation, not the campaign key of the current active phase, which results in inaccurate campaign attribution for multi-phase or renewed subscriptions. 💡 User Story As a Pelcro admin, I want the subscriptions export to include a current_phase_campaign_key column, so that I can accurately attribute each subscription to the campaign that drove its current active phase. 🎯 Definition of Done (DoD) ✔ Given a subscription with multiple phases, each linked to a different campaign key, when the subscriptions export is generated, then a new current_phase_campaign_key column reflects the campaign key of the currently active phase — distinct from the original campaign_key column. ✔ Given a subscription with no campaign key on the current phase, when the subscriptions export is generated, then the current_phase_campaign_key column is empty (not null-errored). ✔ This change will impact API and Data, specifically the subscriptions export endpoint and CSV generation logic. ✔ This solution will include the following limitations: current_phase_campaign_key is read-only in the export and does not replace the existing campaign_key column; phase history is out of scope.

Rana Haleem 17 days ago
In Progress
Add Current Phase Campaign Key to Subscriptions Export
🔍 Problem Statement As a Pelcro admin exporting subscription data, the current campaign_key column reflects the key set at subscription creation, not the campaign key of the current active phase, which results in inaccurate campaign attribution for multi-phase or renewed subscriptions. 💡 User Story As a Pelcro admin, I want the subscriptions export to include a current_phase_campaign_key column, so that I can accurately attribute each subscription to the campaign that drove its current active phase. 🎯 Definition of Done (DoD) ✔ Given a subscription with multiple phases, each linked to a different campaign key, when the subscriptions export is generated, then a new current_phase_campaign_key column reflects the campaign key of the currently active phase — distinct from the original campaign_key column. ✔ Given a subscription with no campaign key on the current phase, when the subscriptions export is generated, then the current_phase_campaign_key column is empty (not null-errored). ✔ This change will impact API and Data, specifically the subscriptions export endpoint and CSV generation logic. ✔ This solution will include the following limitations: current_phase_campaign_key is read-only in the export and does not replace the existing campaign_key column; phase history is out of scope.

Rana Haleem 17 days ago
In Progress
Introducing AI Voice Agent
🔍 Problem Statement Subscribers have no way to get instant account support outside of business hours or without waiting for a human agent, leading to unresolved issues, churn risk, and increased support load on client teams. 💡 User Story As an account owner, I want a dedicated AI-powered phone support line for my subscribers, so that they can get instant help with their account, subscription, and billing without needing to reach a live agent. 🎯 Definition of Done (DoD) Phone number setup ✔ Given the Voice AI Agent feature is enabled on a client account, when the setup is complete, then the client receives a dedicated phone number their subscribers can call — no Twilio account or telephony knowledge required from the client. Subscriber identification ✔ Given a subscriber calls in, when the call connects, then the AI automatically looks up the caller by their phone number and loads their account — if the number is not found, the AI prompts for an email address or transfers to a live agent. Identity verification ✔ Given a subscriber is identified, when they request account information or an action, then the AI sends a one-time code to the phone or email on file and verifies the caller before proceeding. Account information ✔ Given a verified subscriber, when they ask about their account, then the AI can answer questions about: Subscription status and plan details Renewal date and billing cycle Outstanding invoices and payment history Payment method on file Self-service actions ✔ Given a verified subscriber, when they request an action, then the AI can: Cancel a subscription Pay an outstanding invoice using the card on file Escalation ✔ Given the AI cannot identify, verify, or resolve a subscriber's request, when the fallback is triggered, then the subscriber is transferred to a live agent or directed to the self-service portal.

Rana Haleem 17 days ago
In Progress
Introducing AI Voice Agent
🔍 Problem Statement Subscribers have no way to get instant account support outside of business hours or without waiting for a human agent, leading to unresolved issues, churn risk, and increased support load on client teams. 💡 User Story As an account owner, I want a dedicated AI-powered phone support line for my subscribers, so that they can get instant help with their account, subscription, and billing without needing to reach a live agent. 🎯 Definition of Done (DoD) Phone number setup ✔ Given the Voice AI Agent feature is enabled on a client account, when the setup is complete, then the client receives a dedicated phone number their subscribers can call — no Twilio account or telephony knowledge required from the client. Subscriber identification ✔ Given a subscriber calls in, when the call connects, then the AI automatically looks up the caller by their phone number and loads their account — if the number is not found, the AI prompts for an email address or transfers to a live agent. Identity verification ✔ Given a subscriber is identified, when they request account information or an action, then the AI sends a one-time code to the phone or email on file and verifies the caller before proceeding. Account information ✔ Given a verified subscriber, when they ask about their account, then the AI can answer questions about: Subscription status and plan details Renewal date and billing cycle Outstanding invoices and payment history Payment method on file Self-service actions ✔ Given a verified subscriber, when they request an action, then the AI can: Cancel a subscription Pay an outstanding invoice using the card on file Escalation ✔ Given the AI cannot identify, verify, or resolve a subscriber's request, when the fallback is triggered, then the subscriber is transferred to a live agent or directed to the self-service portal.

Rana Haleem 17 days ago