# easy-invoice/2.3.5/templates/admin/free-vs-pro-page.php

Easy Invoice – Invoice Generator, PDF Quotes &amp; Payments, version 2.3.5. 215 lines.

- Page: https://pluginprobe.com/plugins/easy-invoice/2.3.5/code/templates/admin/free-vs-pro-page.php
- Raw: https://pluginprobe.com/plugins/easy-invoice/2.3.5/raw/templates/admin/free-vs-pro-page.php
- Modified: 2026-05-21T08:29:24+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/easy-invoice/2.3.5/code/templates/admin/free-vs-pro-page.php#L10-L20`.

```php
<?php
/**
 * Free vs Pro Comparison Page.
 *
 * Data-driven layout: every feature row lives in $ei_fvp_features and the
 * table renders by iterating. Adding / removing / regrouping a feature is
 * one array edit — not a hundred lines of duplicated HTML.
 *
 * Plan model (aligned with LicensePlanResolver):
 *   FREE          — Easy Invoice plugin only.
 *   PERSONAL      — Easy Invoice Pro plugin installed; no license required.
 *                   Every Personal-tier addon in AddonRegistry.
 *   PROFESSIONAL  — Personal + Professional-tier addons (requires license).
 *   AGENCY        — Personal + Professional + Agency-tier addons.
 *
 * @package EasyInvoice
 * @since   2.0.0
 */

if (!defined('ABSPATH')) {
    exit;
}

/**
 * Feature rows. Each entry:
 *   title       — feature label
 *   desc        — one-line description
 *   plans       — array of plan slugs that include this feature
 *                 (free, personal, professional, agency)
 *   highlight   — true → renders with a subtle accent background
 */
$ei_fvp_features = [
    // ── Section: Core features (free with the Free plugin) ──────────────
    ['title' => __('Unlimited Invoices & Quotes',     'easy-invoice'), 'desc' => __('Create as many invoices and quotes as you need — no row caps.',                       'easy-invoice'), 'plans' => ['free','personal','professional','agency']],
    ['title' => __('PDF Generation',                  'easy-invoice'), 'desc' => __('Generate clean, professional PDF invoices and quotes out of the box.',                'easy-invoice'), 'plans' => ['free','personal','professional','agency']],
    ['title' => __('Client Management',               'easy-invoice'), 'desc' => __('Store and manage every client with addresses, contact info, and history.',            'easy-invoice'), 'plans' => ['free','personal','professional','agency']],
    ['title' => __('Tax & Discount Options',          'easy-invoice'), 'desc' => __('Add basic taxes, discounts, and fees to any invoice or quote.',                       'easy-invoice'), 'plans' => ['free','personal','professional','agency']],
    ['title' => __('Email Notifications',             'easy-invoice'), 'desc' => __('Automatically send invoices and quotes to clients via email.',                        'easy-invoice'), 'plans' => ['free','personal','professional','agency']],
    ['title' => __('PayPal Gateway',                  'easy-invoice'), 'desc' => __('Accept online payments via the built-in PayPal gateway.',                             'easy-invoice'), 'plans' => ['free','personal','professional','agency']],
    ['title' => __('Email Support',                   'easy-invoice'), 'desc' => __('Standard email support for product questions and bug reports.',                       'easy-invoice'), 'plans' => ['free','personal','professional','agency']],

    // ── Section: Personal tier (free with Pro plugin, no license required) ──
    ['title' => __('Multiple Payment Gateways',       'easy-invoice'), 'desc' => __('Stripe, Square, Mollie, Authorize.net, Paystack, Moneris — plus PayPal.',             'easy-invoice'), 'plans' => ['personal','professional','agency'], 'highlight' => true],
    ['title' => __('Recurring Invoices & Subscriptions', 'easy-invoice'), 'desc' => __('Auto-bill on autopilot: weekly, monthly, or any custom schedule.',                  'easy-invoice'), 'plans' => ['personal','professional','agency'], 'highlight' => true],
    ['title' => __('Partial Payments & Deposits',     'easy-invoice'), 'desc' => __('Require deposits and let clients pay the balance in installments.',                  'easy-invoice'), 'plans' => ['personal','professional','agency'], 'highlight' => true],
    ['title' => __('Client Portal',                   'easy-invoice'), 'desc' => __('Branded self-service area where clients view invoices and download PDFs.',           'easy-invoice'), 'plans' => ['personal','professional','agency'], 'highlight' => true],
    ['title' => __('PDF Toolkit',                     'easy-invoice'), 'desc' => __('Custom headers, footers, watermarks (PAID / DRAFT / OVERDUE), and styling.',           'easy-invoice'), 'plans' => ['personal','professional','agency'], 'highlight' => true],
    ['title' => __('Bulk Email & Export',             'easy-invoice'), 'desc' => __('Bulk-email invoices and export selected rows to CSV / Excel / PDF.',                  'easy-invoice'), 'plans' => ['personal','professional','agency'], 'highlight' => true],
    ['title' => __('Item Library',                    'easy-invoice'), 'desc' => __('Reusable catalog of services and products with one-click insert.',                    'easy-invoice'), 'plans' => ['personal','professional','agency'], 'highlight' => true],
    ['title' => __('Custom Invoice & Quote Templates','easy-invoice'), 'desc' => __('Drag-and-drop builder for pixel-perfect branded layouts.',                              'easy-invoice'), 'plans' => ['personal','professional','agency'], 'highlight' => true],
    ['title' => __('Additional Tax Lines',            'easy-invoice'), 'desc' => __('Multiple named tax lines per invoice — VAT + duty, GST + PST, federal + state.',      'easy-invoice'), 'plans' => ['personal','professional','agency'], 'highlight' => true],
    ['title' => __('Email Enhancements',              'easy-invoice'), 'desc' => __('Branded HTML emails with CC / BCC, attached PDFs, and Reply-To.',                     'easy-invoice'), 'plans' => ['personal','professional','agency'], 'highlight' => true],
    ['title' => __('Privacy & GDPR Tools',            'easy-invoice'), 'desc' => __('Personal-data export and erasure for GDPR / CCPA compliance.',                        'easy-invoice'), 'plans' => ['personal','professional','agency'], 'highlight' => true],
    ['title' => __('Reports & Analytics',             'easy-invoice'), 'desc' => __('Visual dashboard for revenue, outstanding balances, and client performance.',         'easy-invoice'), 'plans' => ['personal','professional','agency'], 'highlight' => true],

    // ── Section: Professional tier ─────────────────────────────────────
    ['title' => __('Time Tracking & Project Billing', 'easy-invoice'), 'desc' => __('Built-in start/stop timer, hourly rates, one-click conversion to invoice lines.',     'easy-invoice'), 'plans' => ['professional','agency']],
    ['title' => __('Smart Reminders & Late Fees',     'easy-invoice'), 'desc' => __('Multi-step automated payment chase with auto-applied late fees.',                     'easy-invoice'), 'plans' => ['professional','agency']],
    ['title' => __('Priority Support',                'easy-invoice'), 'desc' => __('Faster response times and direct line to the product team.',                          'easy-invoice'), 'plans' => ['professional','agency']],

    // ── Section: Agency tier ───────────────────────────────────────────
    ['title' => __('White-Label & Brand Override',    'easy-invoice'), 'desc' => __('Rebrand Easy Invoice end-to-end: plugin name, menu, PDFs, emails.',                   'easy-invoice'), 'plans' => ['agency'], 'highlight' => true],
    ['title' => __('Team Members & Audit Log',        'easy-invoice'), 'desc' => __('Scoped roles for staff plus a searchable audit log of every action.',                'easy-invoice'), 'plans' => ['agency'], 'highlight' => true],
    ['title' => __('Webhooks & Zapier Bridge',        'easy-invoice'), 'desc' => __('Stream invoice events to any URL — Zapier, Make, n8n, your CRM, Slack.',              'easy-invoice'), 'plans' => ['agency'], 'highlight' => true],
];

/**
 * Plan column metadata. Keeps the table header / CTA rows / checkout
 * links in one place so they stay aligned with the data above.
 */
$ei_fvp_plans = [
    'free' => [
        'label'    => __('Free',         'easy-invoice'),
        'tagline'  => __('For getting started',          'easy-invoice'),
        'cta_text' => __('Already installed',            'easy-invoice'),
        'cta_url'  => '',
        'accent'   => 'text-gray-900',
    ],
    'personal' => [
        'label'    => __('Personal',     'easy-invoice'),
        'tagline'  => __('Free with Pro plugin',         'easy-invoice'),
        'cta_text' => __('Get Personal',                 'easy-invoice'),
        'cta_url'  => 'https://store.mantrabrain.com/checkout/?edd_action=add_to_cart&download_id=37777&edd_options[price_id]=1',
        'accent'   => 'text-teal-600',
    ],
    'professional' => [
        'label'    => __('Professional', 'easy-invoice'),
        'tagline'  => __('For growing businesses',       'easy-invoice'),
        'cta_text' => __('Get Professional',             'easy-invoice'),
        'cta_url'  => 'https://store.mantrabrain.com/checkout/?edd_action=add_to_cart&download_id=37777&edd_options[price_id]=2',
        'accent'   => 'text-indigo-600',
    ],
    'agency' => [
        'label'    => __('Agency',       'easy-invoice'),
        'tagline'  => __('For agencies & resellers',     'easy-invoice'),
        'cta_text' => __('Get Agency',                   'easy-invoice'),
        'cta_url'  => 'https://store.mantrabrain.com/checkout/?edd_action=add_to_cart&download_id=37777&edd_options[price_id]=3',
        'accent'   => 'text-purple-600',
    ],
];

/** Inline-renders a check (✓) or cross (✗) cell for a feature/plan pair. */
$ei_fvp_render_cell = function (array $feature, string $plan_key): void {
    $included = in_array($plan_key, $feature['plans'], true);
    if ($included): ?>
        <svg class="w-6 h-6 text-green-500 mx-auto" fill="none" stroke="currentColor" viewBox="0 0 24 24">
            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path>
        </svg>
    <?php else: ?>
        <svg class="w-6 h-6 text-gray-300 mx-auto" fill="none" stroke="currentColor" viewBox="0 0 24 24">
            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
        </svg>
    <?php endif;
};
?>

<section id="free-vs-pro" class="py-20 bg-gradient-to-br from-indigo-50 via-white to-purple-50">
  <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">

    <div class="text-center mb-16">
      <h2 class="text-3xl md:text-4xl lg:text-5xl font-bold text-gray-900 mb-6">
        <?php esc_html_e('Free vs Pro: ', 'easy-invoice'); ?>
        <span class="text-transparent bg-clip-text bg-gradient-to-r from-indigo-600 to-purple-600">
          <?php esc_html_e('Choose What Fits Your Business', 'easy-invoice'); ?>
        </span>
      </h2>
      <p class="text-xl text-gray-600 max-w-3xl mx-auto leading-relaxed">
        <?php esc_html_e('Personal-tier addons unlock automatically when you install Easy Invoice Pro — no license key needed. A license adds the Professional and Agency tiers.', 'easy-invoice'); ?>
      </p>
    </div>

    <div class="max-w-7xl mx-auto overflow-x-auto">
      <table class="w-full bg-white rounded-lg shadow-lg">

        <thead>
          <tr class="border-b">
            <th class="text-left p-6 text-lg font-semibold text-gray-900">
              <?php esc_html_e('Feature', 'easy-invoice'); ?>
            </th>
            <?php foreach ($ei_fvp_plans as $plan_key => $plan): ?>
              <th class="text-center p-6 text-lg font-semibold <?php echo esc_attr($plan['accent']); ?>">
                <div class="flex flex-col items-center">
                  <span class="text-lg font-bold"><?php echo esc_html($plan['label']); ?></span>
                  <span class="text-xs font-normal text-gray-500 mt-1">
                    <?php echo esc_html($plan['tagline']); ?>
                  </span>
                </div>
              </th>
            <?php endforeach; ?>
          </tr>

          <tr class="border-b bg-gray-50">
            <td class="p-6">
              <div class="font-bold text-lg text-gray-900"><?php esc_html_e('Quick Start', 'easy-invoice'); ?></div>
              <div class="text-sm text-gray-600 mt-1"><?php esc_html_e('Choose your plan now', 'easy-invoice'); ?></div>
            </td>
            <?php foreach ($ei_fvp_plans as $plan): ?>
              <td class="p-6 text-center">
                <?php if (empty($plan['cta_url'])): ?>
                  <span class="text-gray-500 text-sm"><?php echo esc_html($plan['cta_text']); ?></span>
                <?php else: ?>
                  <a href="<?php echo esc_url($plan['cta_url']); ?>"
                     target="_blank" rel="noopener"
                     class="inline-block bg-gradient-to-r from-indigo-600 to-purple-600 hover:from-indigo-700 hover:to-purple-700 text-white hover:text-white font-bold py-3 px-6 rounded-xl transition-all duration-300 transform hover:scale-105 shadow-lg">
                    <?php echo esc_html($plan['cta_text']); ?>
                  </a>
                <?php endif; ?>
              </td>
            <?php endforeach; ?>
          </tr>
        </thead>

        <tbody class="divide-y divide-gray-200">
          <?php foreach ($ei_fvp_features as $feature):
              $row_class = !empty($feature['highlight']) ? 'bg-indigo-50/40' : '';
          ?>
            <tr class="<?php echo esc_attr($row_class); ?>">
              <td class="p-6">
                <div class="font-medium text-gray-900"><?php echo esc_html($feature['title']); ?></div>
                <div class="text-sm text-gray-500 mt-1"><?php echo esc_html($feature['desc']); ?></div>
              </td>
              <?php foreach (array_keys($ei_fvp_plans) as $plan_key): ?>
                <td class="p-6 text-center">
                  <?php $ei_fvp_render_cell($feature, $plan_key); ?>
                </td>
              <?php endforeach; ?>
            </tr>
          <?php endforeach; ?>

          <tr class="border-t-2 border-gray-200 bg-gray-50">
            <td class="p-6">
              <div class="font-bold text-lg text-gray-900"><?php esc_html_e('Ready to Get Started?', 'easy-invoice'); ?></div>
              <div class="text-sm text-gray-600 mt-1"><?php esc_html_e('Pick a plan and start invoicing today.', 'easy-invoice'); ?></div>
            </td>
            <?php foreach ($ei_fvp_plans as $plan): ?>
              <td class="p-6 text-center">
                <?php if (empty($plan['cta_url'])): ?>
                  <span class="text-gray-500 text-sm"><?php echo esc_html($plan['cta_text']); ?></span>
                <?php else: ?>
                  <a href="<?php echo esc_url($plan['cta_url']); ?>"
                     target="_blank" rel="noopener"
                     class="inline-block bg-gradient-to-r from-indigo-600 to-purple-600 hover:from-indigo-700 hover:to-purple-700 text-white hover:text-white font-bold py-3 px-6 rounded-xl transition-all duration-300 transform hover:scale-105 shadow-lg">
                    <?php echo esc_html($plan['cta_text']); ?>
                  </a>
                <?php endif; ?>
              </td>
            <?php endforeach; ?>
          </tr>
        </tbody>
      </table>
    </div>

  </div>
</section>

```
