Plugin Directory

Changeset 3411500


Ignore:
Timestamp:
12/04/2025 10:59:00 PM (4 months ago)
Author:
imgpro
Message:

Update to version 0.2.3

Location:
bandwidth-saver
Files:
5 deleted
11 edited

Legend:

Unmodified
Added
Removed
  • bandwidth-saver/trunk/admin/css/imgpro-cdn-admin.css

    r3410060 r3411500  
    767767}
    768768
     769/* Pills */
     770.imgpro-onboarding-pills {
     771    display: flex;
     772    justify-content: center;
     773    gap: var(--imgpro-space-2);
     774    margin: 0 0 var(--imgpro-space-6);
     775}
     776
     777.imgpro-onboarding-pill {
     778    display: inline-flex;
     779    align-items: center;
     780    gap: var(--imgpro-space-1);
     781    padding: var(--imgpro-space-1) var(--imgpro-space-3);
     782    font-size: var(--imgpro-text-xs);
     783    font-weight: 600;
     784    color: var(--imgpro-text-secondary);
     785    background: var(--imgpro-gray-100);
     786    border-radius: 9999px;
     787}
     788
     789.imgpro-onboarding-step-1 {
     790    text-align: center;
     791}
     792
     793.imgpro-onboarding-step-1 .imgpro-onboarding-benefits {
     794    text-align: left;
     795    margin-bottom: var(--imgpro-space-4);
     796}
     797
    769798/* Actions */
    770799.imgpro-onboarding-actions {
     
    9961025    border-radius: var(--imgpro-radius-lg);
    9971026    box-shadow: var(--imgpro-card-shadow);
    998     margin-bottom: var(--imgpro-space-6);
    9991027    transition: all var(--imgpro-transition-base) var(--imgpro-ease-out);
    10001028}
     
    18661894.imgpro-feature-list {
    18671895    list-style: none;
    1868     margin: 0 0 var(--imgpro-space-8);
     1896    width: 100%;
     1897    max-width: 600px;
     1898    margin: 0 auto var(--imgpro-space-6);
    18691899    padding: var(--imgpro-space-5);
    1870     background: var(--imgpro-bg);
     1900    background: var(--imgpro-bg-subtle);
    18711901    border-radius: var(--imgpro-radius-lg);
    18721902    text-align: left;
     
    18801910    font-size: var(--imgpro-text-sm);
    18811911    color: var(--imgpro-text);
     1912    line-height: var(--imgpro-leading-normal);
    18821913}
    18831914
     
    18881919.imgpro-feature-list li svg {
    18891920    flex-shrink: 0;
    1890     margin-top: 2px;
     1921    width: 20px;
     1922    height: 20px;
     1923    margin-top: 1px;
    18911924    color: var(--imgpro-success-600);
    18921925}
     
    19101943}
    19111944
     1945/* CTA Pills */
     1946.imgpro-cta-pills {
     1947    display: flex;
     1948    justify-content: center;
     1949    gap: var(--imgpro-space-2);
     1950    margin-bottom: var(--imgpro-space-6);
     1951}
     1952
     1953.imgpro-cta-pill {
     1954    display: inline-flex;
     1955    align-items: center;
     1956    gap: var(--imgpro-space-1);
     1957    padding: var(--imgpro-space-1) var(--imgpro-space-3);
     1958    font-size: var(--imgpro-text-xs);
     1959    font-weight: 600;
     1960    color: var(--imgpro-text-secondary);
     1961    background: var(--imgpro-gray-100);
     1962    border-radius: 9999px;
     1963}
     1964
    19121965.imgpro-cta-note {
    19131966    margin: var(--imgpro-space-4) 0 0;
    19141967    font-size: var(--imgpro-text-sm);
    19151968    color: var(--imgpro-text-muted);
     1969}
     1970
     1971.imgpro-safety-note {
     1972    margin: 0;
     1973    padding: var(--imgpro-space-3) var(--imgpro-space-4);
     1974    font-size: var(--imgpro-text-xs);
     1975    color: var(--imgpro-text-secondary);
     1976    background: transparent;
     1977    border: 1px solid rgba(0, 0, 0, 0.06);
     1978    border-top-color: rgba(0, 0, 0, 0.08);
     1979    border-bottom-color: rgba(255, 255, 255, 0.8);
     1980    border-radius: var(--imgpro-radius);
     1981    text-align: center;
    19161982}
    19171983
  • bandwidth-saver/trunk/admin/js/imgpro-cdn-admin.js

    r3410342 r3411500  
    11891189            }
    11901190
    1191             $upgradeLink.attr('data-action', action).find('strong').text(linkText);
    1192             $upgradeLink.show();
     1191            // Only show upgrade link if we have a valid action
     1192            if (action) {
     1193                $upgradeLink.attr('data-action', action).find('strong').text(linkText);
     1194                $upgradeLink.show();
     1195            } else {
     1196                $upgradeLink.hide();
     1197            }
    11931198        } else {
    11941199            $inputWrapper.show();
  • bandwidth-saver/trunk/imgpro-cdn.php

    r3410342 r3411500  
    33 * Plugin Name: Bandwidth Saver: Image CDN
    44 * Plugin URI: https://github.com/img-pro/bandwidth-saver
    5  * Description: Faster images without touching DNS. Rewrites image URLs to load through Cloudflare. No configuration needed.
    6  * Version: 0.2.2
     5 * Description: Instant image CDN. 100 GB/month free, no DNS changes, no external accounts.
     6 * Version: 0.2.3
    77 * Author: ImgPro
    88 * Author URI: https://img.pro
     
    2626        ?>
    2727        <div class="notice notice-error">
    28             <p><?php esc_html_e('Image CDN requires WordPress 6.2 or higher. Please update WordPress to use this plugin.', 'bandwidth-saver'); ?></p>
     28            <p><?php esc_html_e('Bandwidth Saver requires WordPress 6.2 or higher. Please update WordPress to use this plugin.', 'bandwidth-saver'); ?></p>
    2929        </div>
    3030        <?php
     
    3838        ?>
    3939        <div class="notice notice-error">
    40             <p><?php esc_html_e('Image CDN requires PHP 7.4 or higher. Contact your hosting provider to upgrade.', 'bandwidth-saver'); ?></p>
     40            <p><?php esc_html_e('Bandwidth Saver requires PHP 7.4 or higher. Contact your hosting provider to upgrade.', 'bandwidth-saver'); ?></p>
    4141        </div>
    4242        <?php
     
    4747// Define plugin constants
    4848if (!defined('IMGPRO_CDN_VERSION')) {
    49     define('IMGPRO_CDN_VERSION', '0.2.2');
     49    define('IMGPRO_CDN_VERSION', '0.2.3');
    5050}
    5151if (!defined('IMGPRO_CDN_PLUGIN_DIR')) {
  • bandwidth-saver/trunk/includes/class-imgpro-cdn-admin.php

    r3410342 r3411500  
    122122        // Check page and payment status (no nonce needed - this is a redirect from Stripe)
    123123        // Capability check below ensures only authorized users can trigger account sync
     124        // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Stripe redirect, no nonce available
    124125        $page = isset( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : '';
    125126        if ( 'imgpro-cdn-settings' !== $page ) {
     
    127128        }
    128129
     130        // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Stripe redirect, no nonce available
    129131        $payment_status = isset( $_GET['payment'] ) ? sanitize_text_field( wp_unslash( $_GET['payment'] ) ) : '';
    130132        if ( 'success' !== $payment_status ) {
     
    386388                'i18n' => [
    387389                    'activeLabel' => __('CDN Active', 'bandwidth-saver'),
    388                     'inactiveLabel' => __('CDN Inactive', 'bandwidth-saver'),
     390                    'inactiveLabel' => __('CDN Off', 'bandwidth-saver'),
    389391                    'activeMessage' => sprintf(
    390392                        /* translators: 1: opening span tag, 2: closing span tag, 3: opening span tag, 4: closing span tag */
    391                         __('%1$sImages are loading from the global network.%2$s %3$sYour server handles less traffic.%4$s', 'bandwidth-saver'),
     393                        __('%1$sYour images are loading faster.%2$s %3$sVisitors get a better experience.%4$s', 'bandwidth-saver'),
    392394                        '<span class="imgpro-cdn-nowrap imgpro-cdn-hide-mobile">',
    393395                        '</span>',
     
    395397                        '</span>'
    396398                    ),
    397                     'disabledMessage' => __('Enable to serve images from the global edge network', 'bandwidth-saver'),
     399                    'disabledMessage' => __('Turn on to speed up your images', 'bandwidth-saver'),
    398400                    // Button states
    399401                    'creatingCheckout' => __('Creating checkout...', 'bandwidth-saver'),
     
    423425                    'accountRecovered' => __('Account recovered!', 'bandwidth-saver'),
    424426                    // Success messages
    425                     'subscriptionActivated' => __('Subscription activated. Your images now load from the global edge network.', 'bandwidth-saver'),
    426                     'subscriptionUpgraded' => __('Subscription upgraded successfully!', 'bandwidth-saver'),
    427                     'accountCreated' => __('Account created! Let\'s activate your CDN.', 'bandwidth-saver'),
     427                    'subscriptionActivated' => __('You\'re all set! Your images will now load faster for visitors worldwide.', 'bandwidth-saver'),
     428                    'subscriptionUpgraded' => __('Subscription upgraded. New limits are now active.', 'bandwidth-saver'),
     429                    'accountCreated' => __('Account created! Toggle on to start speeding up your images.', 'bandwidth-saver'),
    428430                    'checkoutCancelled' => __('Checkout cancelled. You can try again anytime.', 'bandwidth-saver'),
    429431                    // Toggle UI text
    430                     'cdnActiveHeading' => __('Image CDN is Active', 'bandwidth-saver'),
    431                     'cdnInactiveHeading' => __('Image CDN is Inactive', 'bandwidth-saver'),
    432                     'cdnActiveDesc' => __('Images are being delivered from the global edge network.', 'bandwidth-saver'),
    433                     'cdnInactiveDesc' => __('Enable to serve images from the global edge network.', 'bandwidth-saver'),
     432                    'cdnActiveHeading' => __('Your images are loading faster', 'bandwidth-saver'),
     433                    'cdnInactiveHeading' => __('Image CDN is Off', 'bandwidth-saver'),
     434                    'cdnActiveDesc' => __('Visitors worldwide are getting faster page loads.', 'bandwidth-saver'),
     435                    'cdnInactiveDesc' => __('Turn on to speed up your images.', 'bandwidth-saver'),
    434436                    // Custom domain
    435437                    'addingDomain' => __('Adding domain...', 'bandwidth-saver'),
     
    443445                    'cdnDomainRemoved' => __('CDN domain removed.', 'bandwidth-saver'),
    444446                    // Upgrade prompts
    445                     'upgradeTitle' => __('Need more capacity?', 'bandwidth-saver'),
    446                     'upgradeSubtitle' => __('Upgrade to Pro for 120 GB storage + 2 TB bandwidth', 'bandwidth-saver'),
     447                    'upgradeTitle' => __('Need more bandwidth?', 'bandwidth-saver'),
     448                    'upgradeSubtitle' => __('Upgrade for more bandwidth and custom domain support.', 'bandwidth-saver'),
    447449                    // Plan selector
    448450                    'select' => __('Select', 'bandwidth-saver'),
     
    725727                <div>
    726728                    <h1><?php esc_html_e('Bandwidth Saver', 'bandwidth-saver'); ?></h1>
    727                     <p class="imgpro-tagline"><?php esc_html_e('Image CDN for WordPress', 'bandwidth-saver'); ?></p>
     729                    <p class="imgpro-tagline"><?php esc_html_e('Faster images for visitors worldwide', 'bandwidth-saver'); ?></p>
    728730                </div>
    729731            </div>
     
    773775                            <h2 id="imgpro-toggle-heading">
    774776                                <?php echo $is_enabled
    775                                     ? esc_html__('Image CDN is Active', 'bandwidth-saver')
    776                                     : esc_html__('Image CDN is Inactive', 'bandwidth-saver'); ?>
     777                                    ? esc_html__('Your images are loading faster', 'bandwidth-saver')
     778                                    : esc_html__('Image CDN is Off', 'bandwidth-saver'); ?>
    777779                            </h2>
    778780                            <p id="imgpro-toggle-description">
    779781                                <?php echo $is_enabled
    780                                     ? esc_html__('Images are being delivered from the global edge network.', 'bandwidth-saver')
    781                                     : esc_html__('Enable to serve images from the global edge network.', 'bandwidth-saver'); ?>
     782                                    ? esc_html__('Visitors worldwide are getting faster page loads.', 'bandwidth-saver')
     783                                    : esc_html__('Turn on to speed up your images.', 'bandwidth-saver'); ?>
    782784                            </p>
    783785                        </div>
     
    10161018            $icon        = '<svg width="24" height="24" viewBox="0 0 24 24" fill="none"><circle cx="12" cy="12" r="10" stroke="currentColor" stroke-width="2"/><path d="M15 9l-6 6M9 9l6 6" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>';
    10171019            $title       = __( 'Your subscription has ended', 'bandwidth-saver' );
    1018             $message     = __( 'Your Pro subscription has been cancelled. CDN functionality is disabled until you resubscribe.', 'bandwidth-saver' );
     1020            $message     = __( 'Your subscription has been cancelled. CDN functionality is disabled until you resubscribe.', 'bandwidth-saver' );
    10191021            $button_text = __( 'Resubscribe', 'bandwidth-saver' );
    10201022            $button_id   = 'imgpro-resubscribe';
     
    11401142        <div class="imgpro-cta-card">
    11411143            <div class="imgpro-cta-content">
    1142                 <h2><?php esc_html_e('Skip the Setup. We Handle Everything.', 'bandwidth-saver'); ?></h2>
    1143                 <p><?php esc_html_e('Images load from a global edge network with zero configuration. Takes less than a minute.', 'bandwidth-saver'); ?></p>
     1144                <h2><?php esc_html_e('Speed up your images', 'bandwidth-saver'); ?></h2>
     1145                <p><?php esc_html_e('Slow images hurt your SEO and drive visitors away. Speed them up in 60 seconds.', 'bandwidth-saver'); ?></p>
    11441146
    11451147                <ul class="imgpro-feature-list">
    11461148                    <li>
    11471149                        <svg width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M16.667 5L7.5 14.167 3.333 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
    1148                         <span><strong><?php esc_html_e('10 GB storage', 'bandwidth-saver'); ?></strong>, <?php esc_html_e('free forever', 'bandwidth-saver'); ?></span>
     1150                        <span><strong><?php esc_html_e('Better SEO', 'bandwidth-saver'); ?></strong> — <?php esc_html_e('speed improves your ranking', 'bandwidth-saver'); ?></span>
    11491151                    </li>
    11501152                    <li>
    11511153                        <svg width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M16.667 5L7.5 14.167 3.333 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
    1152                         <span><strong><?php esc_html_e('50 GB/mo bandwidth', 'bandwidth-saver'); ?></strong>, <?php esc_html_e('soft limit', 'bandwidth-saver'); ?></span>
     1154                        <span><strong><?php esc_html_e('Faster pages', 'bandwidth-saver'); ?></strong> — <?php esc_html_e('images load from global servers', 'bandwidth-saver'); ?></span>
    11531155                    </li>
    11541156                    <li>
    11551157                        <svg width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M16.667 5L7.5 14.167 3.333 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
    1156                         <span><?php esc_html_e('300+ edge locations worldwide', 'bandwidth-saver'); ?></span>
     1158                        <span><strong><?php esc_html_e('100GB/month free', 'bandwidth-saver'); ?></strong> — <?php esc_html_e('forever, no credit card required', 'bandwidth-saver'); ?></span>
    11571159                    </li>
    11581160                    <li>
    11591161                        <svg width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M16.667 5L7.5 14.167 3.333 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
    1160                         <span><?php esc_html_e('Automatic fallback if CDN is ever down', 'bandwidth-saver'); ?></span>
     1162                        <span><strong><?php esc_html_e('Nothing to break', 'bandwidth-saver'); ?></strong> — <?php esc_html_e('your images stay safely on your server', 'bandwidth-saver'); ?></span>
    11611163                    </li>
    11621164                </ul>
    11631165
     1166                <div class="imgpro-cta-pills">
     1167                    <span class="imgpro-cta-pill">
     1168                        <svg width="14" height="14" viewBox="0 0 20 20" fill="none"><path d="M16.667 5L7.5 14.167 3.333 10" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/></svg>
     1169                        <?php esc_html_e('No DNS changes', 'bandwidth-saver'); ?>
     1170                    </span>
     1171                    <span class="imgpro-cta-pill">
     1172                        <svg width="14" height="14" viewBox="0 0 20 20" fill="none"><path d="M16.667 5L7.5 14.167 3.333 10" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/></svg>
     1173                        <?php esc_html_e('No external accounts', 'bandwidth-saver'); ?>
     1174                    </span>
     1175                </div>
     1176
    11641177                <div class="imgpro-cta-actions">
    11651178                    <button type="button" class="imgpro-btn imgpro-btn-primary imgpro-btn-lg" id="imgpro-free-signup">
    1166                         <?php esc_html_e('Start Free', 'bandwidth-saver'); ?>
     1179                        <?php esc_html_e('Get Started', 'bandwidth-saver'); ?>
    11671180                        <svg width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M4.167 10h11.666M10 4.167L15.833 10 10 15.833" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
    11681181                    </button>
     
    11761189
    11771190                <p class="imgpro-cta-note">
    1178                     <?php esc_html_e('Start with 10 GB free. Upgrade anytime for more storage and bandwidth.', 'bandwidth-saver'); ?>
     1191                    <?php esc_html_e('Start with 100 GB/month free. Upgrade anytime for more bandwidth.', 'bandwidth-saver'); ?>
    11791192                </p>
    11801193
     
    12181231            <?php $this->render_toggle_card($settings, ImgPro_CDN_Settings::MODE_CLOUD); ?>
    12191232
    1220             <?php // 2. Account Card ?>
     1233            <p class="imgpro-safety-note">
     1234                <?php esc_html_e('Your original images stay on your server. Turning the CDN off or deactivating the plugin will not break your site — image URLs simply return to normal.', 'bandwidth-saver'); ?>
     1235            </p>
     1236
     1237            <?php // 2. Stats Grid ?>
     1238            <?php $this->render_stats_grid($settings); ?>
     1239
     1240            <?php // 3. Account Card ?>
    12211241            <?php $this->render_account_card($settings, $email); ?>
    12221242
    1223             <?php // 3. Stats Grid ?>
    1224             <?php $this->render_stats_grid($settings); ?>
    1225 
    1226             <?php // 4. Source URLs Section ?>
     1243            <?php // 4. Custom Domain Section ?>
     1244            <?php $this->render_custom_domain_section($settings); ?>
     1245
     1246            <?php // 5. Source URLs Section ?>
    12271247            <?php $this->render_source_urls_section($settings); ?>
    1228 
    1229             <?php // 5. Custom Domain Section ?>
    1230             <?php $this->render_custom_domain_section($settings); ?>
    12311248
    12321249            <?php // Custom Domain Pending Notice (if DNS needs attention) ?>
     
    13131330                <div class="imgpro-account-card__main">
    13141331                    <div class="imgpro-account-card__content">
    1315                         <strong class="imgpro-account-card__headline"><?php esc_html_e('Need more capacity?', 'bandwidth-saver'); ?></strong>
    1316                         <span class="imgpro-account-card__description"><?php esc_html_e('Upgrade for more bandwidth and features like custom domains.', 'bandwidth-saver'); ?></span>
     1332                        <strong class="imgpro-account-card__headline"><?php esc_html_e('Need more bandwidth?', 'bandwidth-saver'); ?></strong>
     1333                        <span class="imgpro-account-card__description"><?php esc_html_e('Upgrade for higher limits and custom domain support.', 'bandwidth-saver'); ?></span>
    13171334                    </div>
    13181335                    <button type="button" class="imgpro-btn imgpro-btn-primary imgpro-open-plan-selector">
     
    13241341                    <span><?php echo esc_html($email); ?></span>
    13251342                    <span class="imgpro-separator">·</span>
    1326                     <span><?php esc_html_e('Free Plan', 'bandwidth-saver'); ?></span>
     1343                    <span><?php esc_html_e('Free Plan — 100 GB/month included', 'bandwidth-saver'); ?></span>
    13271344                </div>
    13281345            </div>
  • bandwidth-saver/trunk/includes/class-imgpro-cdn-onboarding.php

    r3410060 r3411500  
    145145        ?>
    146146        <div class="imgpro-onboarding-content imgpro-onboarding-step-1">
    147             <h1><?php esc_html_e('Speed up your images instantly', 'bandwidth-saver'); ?></h1>
     147            <h1><?php esc_html_e('Speed up your images', 'bandwidth-saver'); ?></h1>
    148148
    149149            <p class="imgpro-onboarding-description">
    150                 <?php esc_html_e('Your WordPress images, delivered from the nearest edge server to each visitor. No DNS changes, no configuration.', 'bandwidth-saver'); ?>
     150                <?php esc_html_e('Slow images hurt your SEO and drive visitors away.', 'bandwidth-saver'); ?><br><?php esc_html_e('Speed them up in 60 seconds.', 'bandwidth-saver'); ?>
    151151            </p>
    152152
     
    154154                <li>
    155155                    <svg width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M16.667 5L7.5 14.167 3.333 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
    156                     <span><strong><?php esc_html_e('Free forever', 'bandwidth-saver'); ?></strong> — <?php esc_html_e('100 GB/month, no credit card', 'bandwidth-saver'); ?></span>
     156                    <span><strong><?php esc_html_e('Better SEO', 'bandwidth-saver'); ?></strong> — <?php esc_html_e('speed improves your ranking', 'bandwidth-saver'); ?></span>
    157157                </li>
    158158                <li>
    159159                    <svg width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M16.667 5L7.5 14.167 3.333 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
    160                     <span><strong><?php esc_html_e('Faster for everyone', 'bandwidth-saver'); ?></strong> — <?php esc_html_e('300+ global edge locations', 'bandwidth-saver'); ?></span>
     160                    <span><strong><?php esc_html_e('Faster pages', 'bandwidth-saver'); ?></strong> — <?php esc_html_e('images load from global servers', 'bandwidth-saver'); ?></span>
    161161                </li>
    162162                <li>
    163163                    <svg width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M16.667 5L7.5 14.167 3.333 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
    164                     <span><strong><?php esc_html_e('Safe to try', 'bandwidth-saver'); ?></strong> — <?php esc_html_e('deactivate and your site returns to normal', 'bandwidth-saver'); ?></span>
     164                    <span><strong><?php esc_html_e('100GB/month free', 'bandwidth-saver'); ?></strong> — <?php esc_html_e('forever, no credit card required', 'bandwidth-saver'); ?></span>
    165165                </li>
    166166            </ul>
    167167
     168            <div class="imgpro-onboarding-pills">
     169                <span class="imgpro-onboarding-pill">
     170                    <svg width="14" height="14" viewBox="0 0 20 20" fill="none"><path d="M16.667 5L7.5 14.167 3.333 10" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/></svg>
     171                    <?php esc_html_e('No DNS changes', 'bandwidth-saver'); ?>
     172                </span>
     173                <span class="imgpro-onboarding-pill">
     174                    <svg width="14" height="14" viewBox="0 0 20 20" fill="none"><path d="M16.667 5L7.5 14.167 3.333 10" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/></svg>
     175                    <?php esc_html_e('No external accounts', 'bandwidth-saver'); ?>
     176                </span>
     177            </div>
     178
    168179            <div class="imgpro-onboarding-actions">
    169180                <button type="button" class="imgpro-btn imgpro-btn-primary imgpro-btn-lg" id="imgpro-onboarding-start">
    170                     <?php esc_html_e('Get Started Free', 'bandwidth-saver'); ?>
     181                    <?php esc_html_e('Get Started', 'bandwidth-saver'); ?>
    171182                    <svg width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M4.167 10h11.666M10 4.167L15.833 10 10 15.833" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
    172183                </button>
     
    174185
    175186            <p class="imgpro-onboarding-hint">
    176                 <?php esc_html_e('Need more?', 'bandwidth-saver'); ?>
     187                <?php esc_html_e('Need more bandwidth?', 'bandwidth-saver'); ?>
    177188                <button type="button" class="imgpro-btn-link imgpro-open-plan-selector"><?php esc_html_e('See paid plans', 'bandwidth-saver'); ?></button>
    178189            </p>
     
    195206
    196207            <p class="imgpro-onboarding-description">
    197                 <?php esc_html_e('We just need your email to set up your CDN.', 'bandwidth-saver'); ?><br>
    198                 <?php esc_html_e('No credit card required.', 'bandwidth-saver'); ?>
     208                <?php esc_html_e('Enter your email to set up your CDN. No credit card required.', 'bandwidth-saver'); ?>
    199209            </p>
    200210
     
    270280        ?>
    271281        <div class="imgpro-onboarding-content imgpro-onboarding-step-3">
    272             <h1><?php esc_html_e('Ready to activate', 'bandwidth-saver'); ?></h1>
     282            <h1><?php esc_html_e('Ready to go', 'bandwidth-saver'); ?></h1>
    273283
    274284            <p class="imgpro-onboarding-description">
    275                 <?php esc_html_e('Flip the switch to start serving images from Cloudflare.', 'bandwidth-saver'); ?>
     285                <?php esc_html_e('Toggle on to start serving images from the CDN.', 'bandwidth-saver'); ?>
    276286            </p>
    277287
     
    283293                    <div class="imgpro-activate-text">
    284294                        <strong><?php esc_html_e('Image CDN', 'bandwidth-saver'); ?></strong>
    285                         <span><?php esc_html_e('Serve images from Cloudflare\'s global network', 'bandwidth-saver'); ?></span>
     295                        <span><?php esc_html_e('Serve images from edge servers worldwide', 'bandwidth-saver'); ?></span>
    286296                    </div>
    287297                </div>
     
    294304
    295305            <div class="imgpro-activate-details">
    296                 <h3><?php esc_html_e('What happens when you activate:', 'bandwidth-saver'); ?></h3>
     306                <h3><?php esc_html_e('What happens next:', 'bandwidth-saver'); ?></h3>
    297307                <ul>
    298308                    <li>
    299309                        <svg width="16" height="16" viewBox="0 0 16 16" fill="none"><circle cx="8" cy="8" r="3" fill="currentColor"/></svg>
    300                         <?php esc_html_e('Image URLs are rewritten on your frontend', 'bandwidth-saver'); ?>
     310                        <?php esc_html_e('Image URLs on your public pages point to the CDN', 'bandwidth-saver'); ?>
    301311                    </li>
    302312                    <li>
    303313                        <svg width="16" height="16" viewBox="0 0 16 16" fill="none"><circle cx="8" cy="8" r="3" fill="currentColor"/></svg>
    304                         <?php esc_html_e('First visitor request caches each image', 'bandwidth-saver'); ?>
     314                        <?php esc_html_e('Each image is cached on first request', 'bandwidth-saver'); ?>
    305315                    </li>
    306316                    <li>
    307317                        <svg width="16" height="16" viewBox="0 0 16 16" fill="none"><circle cx="8" cy="8" r="3" fill="currentColor"/></svg>
    308                         <?php esc_html_e('Subsequent requests load from nearest edge', 'bandwidth-saver'); ?>
     318                        <?php esc_html_e('Future requests load from the nearest edge server', 'bandwidth-saver'); ?>
    309319                    </li>
    310320                    <li>
    311321                        <svg width="16" height="16" viewBox="0 0 16 16" fill="none"><circle cx="8" cy="8" r="3" fill="currentColor"/></svg>
    312                         <?php esc_html_e('Your original images stay on your server', 'bandwidth-saver'); ?>
     322                        <?php esc_html_e('Your original files stay safe on your server', 'bandwidth-saver'); ?>
     323                    </li>
     324                    <li>
     325                        <svg width="16" height="16" viewBox="0 0 16 16" fill="none"><circle cx="8" cy="8" r="3" fill="currentColor"/></svg>
     326                        <?php esc_html_e('If anything goes wrong, images load directly from your site', 'bandwidth-saver'); ?>
    313327                    </li>
    314328                </ul>
     
    338352
    339353            <p class="imgpro-onboarding-description">
    340                 <?php esc_html_e('Your images are now being delivered from Cloudflare\'s edge network. Visit your site to start caching.', 'bandwidth-saver'); ?>
     354                <?php esc_html_e('Your images are now being served from edge locations around the world. Visit your site to start caching.', 'bandwidth-saver'); ?>
    341355            </p>
    342356
  • bandwidth-saver/trunk/readme.txt

    r3410342 r3411500  
    11=== Bandwidth Saver: Image CDN ===
    22Contributors: imgpro
    3 Tags: cdn, images, cloudflare, performance, speed
     3Tags: images, performance, speed, cdn, cache
    44Requires at least: 6.2
    55Tested up to: 6.9
    66Requires PHP: 7.4
    7 Stable tag: 0.2.2
     7Stable tag: 0.2.3
    88License: GPLv2 or later
    99License URI: http://www.gnu.org/licenses/gpl-2.0.html
    1010
    11 Deliver WordPress images from a global edge network — no DNS changes, no Cloudflare account, no configuration. Activate and go.
     11Make your images load faster for visitors anywhere in the world. One-click setup, nothing to configure.
    1212
    1313== Description ==
    1414
    15 Images slow down WordPress sites. Setting up a CDN usually means DNS changes, caching rules, or a Cloudflare account — steps most site owners skip.
    16 
    17 **Bandwidth Saver** delivers your existing WordPress images through a global edge network with zero configuration. Activate the plugin and images start loading from the nearest edge location automatically.
    18 
    19 **Safe to try on any site.** No files are moved or deleted. Deactivate and your site returns to normal instantly. If the CDN ever has an issue, your original images load automatically.
     15**Images are usually the slowest part of any WordPress site.**
     16
     17When your pages take too long to load, visitors leave. Search engines notice. Your PageSpeed score drops. And you lose traffic you worked hard to get.
     18
     19Bandwidth Saver fixes this by serving your images from servers close to your visitors — automatically. A visitor in Tokyo loads images from Asia. A visitor in London loads from Europe. Everyone gets faster pages.
     20
     21**The best part?** You don't need to understand how it works. Just activate the plugin, enter your email, and toggle it on. Your images start loading faster immediately.
     22
     23= What You Get =
     24
     25**Faster pages.** Images load from the nearest server instead of traveling across the world from your host.
     26
     27**Better SEO.** Google uses page speed as a ranking factor. Faster images mean better Core Web Vitals scores.
     28
     29**Happier visitors.** People don't wait for slow sites. Faster loading means lower bounce rates.
     30
     31**Peace of mind.** Your original images stay untouched on your server. If anything ever goes wrong, your site automatically falls back to loading images directly. Nothing breaks.
    2032
    2133= How It Works =
    2234
    23 1. You upload images to WordPress normally
    24 2. The plugin rewrites image URLs on your frontend pages
    25 3. When a visitor requests an image, the CDN fetches and caches it
    26 4. Future requests serve the cached copy from the nearest edge
    27 
    28 Your Media Library URLs stay unchanged. WordPress remains the system of record.
    29 
    30 = What This Plugin Does =
    31 
    32 * Rewrites image URLs on frontend pages only
    33 * Delivers cached images from Cloudflare's global edge network
    34 * Falls back to original images automatically if CDN is unavailable
    35 * Works with lazy loading, srcset, and responsive images
    36 * Compatible with virtually all themes, page builders, and image optimization plugins
    37 
    38 = What This Plugin Does NOT Do =
    39 
    40 * Does not move, delete, or modify your original images
    41 * Does not optimize or compress images
    42 * Does not cache HTML, CSS, JavaScript, videos, or PDFs
    43 * Does not require DNS changes
    44 * Does not modify your database
    45 
    46 This is a delivery optimization, not an image optimization plugin. It works alongside ShortPixel, Imagify, Smush, or any other optimizer.
     35Behind the scenes, Bandwidth Saver uses a global CDN (Content Delivery Network) with 300+ edge locations. But you don't need to know what that means or how to set it up.
     36
     371. You activate the plugin and enter your email
     382. The plugin automatically rewrites image URLs on your pages
     393. Visitors load images from the nearest edge server
     404. Your original images stay exactly where they are
     41
     42That's it. No DNS changes. No external accounts to manage. No settings to configure.
     43
     44= Why People Choose This Over Other Speed Plugins =
     45
     46**It actually works in 60 seconds.** Most CDN solutions require DNS changes, external account setup, and technical configuration. This one doesn't.
     47
     48**Nothing to learn.** No optimization levels, no quality settings, no rules to write. It works out of the box.
     49
     50**Nothing to break.** Your images stay on your server. The plugin only changes URLs on your public pages. Deactivate it and everything returns to normal instantly.
     51
     52**Generous free tier.** 100 GB of bandwidth per month — enough for most sites. No credit card required.
    4753
    4854= Who This Is For =
    4955
    50 **Great for:**
    51 
    52 * Blogs, magazines, and content-heavy sites
    53 * WooCommerce stores with many product images
    54 * Recipe, travel, photography, and portfolio sites
    55 * Sites with global audiences
    56 * High-traffic sites needing reliable delivery
    57 
    58 **Ideal if you:**
    59 
    60 * Cannot or prefer not to change DNS to Cloudflare
    61 * Want CDN speed without technical configuration
    62 * Want faster images without touching hosting settings
     56* Bloggers and content creators with image-heavy posts
     57* WooCommerce stores with product photos
     58* Recipe, travel, and photography sites
     59* Portfolio and agency sites
     60* Anyone tired of complicated speed optimization
    6361
    6462= Who This Is NOT For =
    6563
    66 * Sites already using Cloudflare DNS with optimized caching
    67 * Sites needing full media offloading to external storage
    68 * Sites needing full-page CDN caching (HTML, CSS, JS)
    69 
    70 = Two Ways to Use =
    71 
    72 **Managed (Recommended)**
    73 
    74 One-click activation. We operate the global edge infrastructure. No Cloudflare account required.
    75 
    76 * Free: 100 GB bandwidth/month — free forever
    77 * Lite ($4.99/mo): 250 GB bandwidth/month, custom domain
    78 * Pro ($14.99/mo): 2 TB bandwidth/month, custom domain
    79 * Business ($49/mo): 10 TB bandwidth/month, custom domain, priority support
    80 
    81 Bandwidth resets monthly.
    82 
    83 All paid plans support custom domains (cdn.yoursite.com) with automatic SSL.
    84 
    85 **Self-Hosted (Free)**
    86 
    87 For technical users who want full control. Deploy our open-source Cloudflare Worker on your own account and pay Cloudflare directly (often $0/month on their free tier).
    88 
    89 Requires: Cloudflare account, Worker deployment, custom domain.
    90 
    91 The Worker is fully open source: [github.com/img-pro/bandwidth-saver-worker](https://github.com/img-pro/bandwidth-saver-worker)
     64* Sites already using a full-page CDN with image optimization built in
     65* Sites that need image compression (use ShortPixel, Imagify, or Smush for that — they work great alongside this plugin)
     66* Sites that need HTML/CSS/JS caching (this is image-only)
     67
     68= Pricing =
     69
     70**Free** — 100 GB/month, free forever, no credit card
     71**Lite** ($4.99/mo) — 250 GB/month + custom CDN domain
     72**Pro** ($14.99/mo) — 2 TB/month + custom CDN domain
     73**Business** ($49/mo) — 10 TB/month + custom CDN domain + priority support
     74
     75All paid plans include custom domains (cdn.yoursite.com) with automatic SSL.
     76
     77**Self-Hosted Option** — For developers who want full control, you can deploy the open-source worker on your own Cloudflare account. [Setup guide on GitHub](https://github.com/img-pro/bandwidth-saver-worker)
    9278
    9379== Installation ==
    9480
    95 = Managed Setup (Under 1 Minute) =
     81**60-second setup. No technical knowledge required.**
    9682
    97831. Install and activate the plugin
    98842. Go to **Settings → Bandwidth Saver**
    99 3. Enter your email to create a free account
    100 4. Enable the CDN toggle
    101 5. Done — images now load from the global edge
    102 
    103 No DNS changes. No Cloudflare account. No configuration.
    104 
    105 = Self-Hosted Setup (About 15 Minutes) =
    106 
    107 1. Create a free Cloudflare account
    108 2. Deploy the Worker from GitHub
    109 3. Add a custom domain to your Worker (e.g., cdn.yoursite.com)
    110 4. Enter your CDN domain in **Settings → Bandwidth Saver → Self-Host**
    111 
    112 Full guide: [github.com/img-pro/bandwidth-saver-worker#setup](https://github.com/img-pro/bandwidth-saver-worker#setup)
     853. Enter your email
     864. Toggle the CDN on
     87
     88Done. Your images are now loading faster.
    11389
    11490== Frequently Asked Questions ==
    11591
    116 = How long does setup take? =
    117 
    118 Managed: Under a minute.
    119 Self-Hosted: About 15 minutes if familiar with Cloudflare.
    120 
    121 = How much does it cost? =
    122 
    123 Managed: Free tier available (100 GB bandwidth/month). Paid plans start at $4.99/month.
    124 Self-Hosted: Free. You pay Cloudflare directly (often $0 on their free tier).
    125 
    126 = Will this break my site? =
    127 
    128 No. Your original images stay on your server untouched. The plugin only rewrites URLs on your frontend. Disable it and your site returns to normal instantly.
    129 
    130 = Do I need a Cloudflare account? =
    131 
    132 Managed: No.
    133 Self-Hosted: Yes.
    134 
    135 = Do I need to change my DNS? =
    136 
    137 No. This is one of the main benefits — you get CDN speed without DNS changes.
    138 
    139 = Can I use my own domain for image URLs? =
    140 
    141 Yes. All paid plans (Lite, Pro, Business) support custom domains (e.g., cdn.yoursite.com) with automatic SSL provisioning.
    142 
    143 = Does this change my Media Library URLs? =
    144 
    145 No. Your Media Library URLs stay exactly the same. Only frontend output is rewritten.
    146 
    147 = Does it work with WebP and AVIF? =
    148 
    149 Yes. The plugin supports JPG, PNG, GIF, WebP, AVIF, and SVG formats.
    150 
    151 = Does it work with lazy loading and srcset? =
    152 
    153 Yes. Fully compatible.
    154 
    155 = Are first requests slower? =
    156 
    157 The first request for each image is served from your origin while the CDN caches it. After that, delivery is very fast from the nearest edge.
    158 
    159 = What happens if the CDN is down? =
    160 
    161 Your site automatically falls back to serving original images from your server. Visitors won't notice any difference.
    162 
    163 = What happens if I deactivate the plugin? =
    164 
    165 Everything returns to normal immediately. Your images load from your server as before. Cached copies in the CDN are cleaned up automatically over time.
    166 
    167 = Is this an offloading plugin? =
    168 
    169 No. Your images stay on your WordPress server. This optimizes delivery, not storage.
    170 
    171 = Can this handle large sites? =
    172 
    173 Yes. The infrastructure is built on Cloudflare's global network. Business plan supports 10 TB bandwidth/month. Self-hosted mode supports unlimited growth.
     92= Will this slow down my site or break anything? =
     93
     94No. It does the opposite — it makes your images load faster. Your original images stay on your server completely untouched. The plugin only changes URLs on your public pages. If you ever want to stop using it, just deactivate and your site works exactly as before.
     95
     96= I'm not technical. Can I still use this? =
     97
     98Yes. That's exactly who this is for. You don't need to understand CDNs, DNS, or servers. Just activate, enter your email, and toggle it on.
     99
     100= How do I know it's working? =
     101
     102After enabling, visit your site and inspect any image. The URL will start with your CDN domain instead of your regular site URL. You can also check your PageSpeed score before and after.
     103
     104= Is there really a free plan? =
     105
     106Yes. 100 GB of bandwidth per month, free forever. No credit card required. No trial period. Most small to medium sites never need to upgrade.
     107
     108= What if I go over my bandwidth limit? =
     109
     110Your images will temporarily load directly from your server (the normal way) until your bandwidth resets next month. Nothing breaks — your site just loads images the way it did before you installed the plugin.
     111
     112= Does this replace image optimization plugins? =
     113
     114No. This is a *delivery* tool, not an optimization tool. It makes your images load faster by serving them from nearby servers. For making images *smaller*, use a compression plugin like ShortPixel, Imagify, or Smush. They work great together.
     115
     116= Does it work with my theme/page builder/plugin? =
     117
     118Yes. It works with any theme, any page builder (Elementor, Divi, Beaver Builder, etc.), and any plugin. It also works with lazy loading, responsive images, and WooCommerce.
     119
     120= What image formats are supported? =
     121
     122JPG, PNG, GIF, WebP, AVIF, and SVG.
     123
     124= What happens if the CDN goes down? =
     125
     126Your site automatically serves images directly from your server. Visitors won't notice anything — your images just load the normal way until the CDN is back.
     127
     128= Do I need to change my DNS or create accounts elsewhere? =
     129
     130No. Everything happens from your WordPress admin. No DNS changes, no external dashboards, no separate logins.
     131
     132= Can I use my own domain for CDN URLs? =
     133
     134Yes. All paid plans support custom domains (cdn.yoursite.com) with automatic SSL.
    174135
    175136== Screenshots ==
    176137
    177 1. Get started in under a minute
    178 2. Your images are now loading from the edge
    179 3. Upgrade when you need more
    180 4. Use your own domain (paid plans)
    181 5. Or self-host on your Cloudflare account
     1381. Speed up your images in 60 seconds
     1392. Track your bandwidth and performance
     1403. Generous free tier, simple upgrades
     1414. Multi-site support and custom domains
     1425. Self-host option for full control
    182143
    183144== Privacy ==
    184145
    185 = What the plugin collects =
     146= What Data Is Collected? =
    186147
    187148The plugin does not add cookies, tracking pixels, or analytics to your site.
    188149
    189 = Managed mode =
    190 
    191 When using Managed mode, the following data is sent to the ImgPro Cloud API:
    192 
    193 * Your site URL (to configure CDN routing)
    194 * Admin email (for account creation and service communications)
    195 * Custom domain settings (if configured)
    196 
    197 Images are cached and served through Cloudflare infrastructure operated by ImgPro.
    198 
    199 = Self-hosted mode =
    200 
    201 No data is sent to ImgPro. Images are cached in your own Cloudflare account.
    202 
    203 = Cloudflare logging =
    204 
    205 Cloudflare logs standard CDN metadata (IP addresses, timestamps, request headers). This is normal for any CDN service. See Cloudflare's privacy policy for details.
     150= Managed Mode =
     151
     152* Your site URL is used to configure CDN routing
     153* Your email address is used for account creation
     154* Custom domain settings are sent if configured
     155
     156Images are cached and served through a global edge network.
     157
     158= Self-Hosted Mode =
     159
     160No data is sent to us. Images are cached in your own Cloudflare account.
    206161
    207162== External Services ==
    208163
    209 This plugin connects to external services to deliver images:
    210 
    211 **Cloudflare R2 and Workers**
    212 Purpose: Image caching and global edge delivery
    213 Terms: https://www.cloudflare.com/terms/
    214 Privacy: https://www.cloudflare.com/privacypolicy/
    215 
    216 **ImgPro Cloud API** (Managed mode only)
    217 Purpose: Account management, subscription handling, usage tracking, custom domain provisioning
    218 Data sent: Site URL, admin email, custom domain (if configured)
    219 Data stored: Subscription status, API key, usage metrics, custom domain settings
     164This plugin connects to external services:
     165
     166**Cloudflare (R2 Storage and Workers)**
     167
     168* Purpose: Image caching and global edge delivery
     169* [Terms of Service](https://www.cloudflare.com/terms/)
     170* [Privacy Policy](https://www.cloudflare.com/privacypolicy/)
     171
     172**Bandwidth Saver API** (Managed mode only)
     173
     174* Purpose: Account management, usage tracking
     175* Data sent: Site URL, email, custom domain (if configured)
    220176
    221177Self-hosted users connect only to their own Cloudflare account.
    222178
    223 == Fair Use Policy ==
    224 
    225 Managed mode includes bandwidth limits per plan tier. Bandwidth resets monthly.
    226 
    227 If bandwidth usage consistently exceeds plan limits, we will contact you to discuss options. The Self-Hosted option is recommended for sites needing unlimited growth.
    228 
    229 == Terms of Service ==
    230 
    231 We reserve the right to refuse, suspend, or terminate service at our discretion. Circumstances that may result in service action include:
    232 
    233 * Illegal content (including copyright infringement)
    234 * Abusive usage patterns (infrastructure attacks, proxy abuse)
    235 * Violation of Cloudflare's terms of service
    236 * Non-payment or payment fraud
    237 * Activity that degrades service for other users
    238 
    239 You are responsible for the images served through your account.
    240 
    241179== Changelog ==
    242180
     181= 0.2.3 =
     182* Improved: Clearer messaging focused on speed and SEO benefits
     183* Improved: Simplified onboarding copy
     184* Improved: Updated screenshot captions
     185* Fixed: PHPCS warnings for Stripe redirect handler
     186
    243187= 0.2.2 =
    244 * Improved: Faster settings page — analytics data now loads in a single request
    245 * Improved: Source URLs and usage stats are pre-loaded, eliminating extra API calls
     188* Improved: Settings page loads faster with batched API requests
     189* Improved: Source URLs and usage stats are pre-loaded
    246190* Improved: Better WordPress coding standards compliance
    247191* Fixed: Cleaner transient cleanup on uninstall
    248192
    249193= 0.2.1 =
    250 * New: Usage analytics dashboard with bandwidth charts and insights
    251 * New: Source URLs management — add multiple origin domains (tier-based limits)
    252 * New: Projected bandwidth usage to help plan your tier
    253 * Improved: CDN now works with infinite scroll and "load more" for logged-out visitors
     194* New: Usage analytics dashboard with bandwidth charts
     195* New: Source URLs management for multiple origin domains
     196* New: Projected bandwidth usage
     197* Improved: CDN works with infinite scroll and "load more"
    254198* Improved: Faster settings page with smarter caching
    255 * Improved: Cleaner UI with refreshed stats cards and insights panel
    256199* Fixed: Double-click prevention on all buttons
    257 * Fixed: Custom domain feature now available on Lite plans too
     200* Fixed: Custom domain feature now available on Lite plans
    258201
    259202= 0.2.0 =
    260 * New: Updated pricing model — bandwidth is now the primary metric
    261 * New: All paid plans now include custom domain support
     203* New: Updated pricing with bandwidth as primary metric
     204* New: All paid plans include custom domain support
    262205* New: Free tier upgraded to 100 GB bandwidth/month
    263 * Security: API keys are now encrypted at rest in the database
    264 * Security: Added rate limiting to prevent brute-force attacks on admin actions
    265 * Security: Stricter validation of CDN domains (blocks IPs, localhost, reserved domains)
    266 * Security: Protection against IDN homograph attacks on custom domains
    267 * Security: HTTPS enforcement for all API communications
    268 * Security: Granular permission system with dedicated capability
    269 * Improved: Usage stats now update in real-time after plan changes
    270 * Improved: Simplified pricing display — bandwidth is the only limit shown
    271 * Fixed: Plan limits now display correctly immediately after upgrade
     206* Security: API keys encrypted at rest
     207* Security: Rate limiting on admin actions
     208* Security: Stricter validation of CDN domains
    272209
    273210= 0.1.9 =
    274 * Fixed: CDN now activates reliably after payment or account recovery
     211* Fixed: CDN activates reliably after payment or recovery
    275212* Fixed: CDN properly disables when subscription becomes inactive
    276 * Improved: Better error messages when requests time out
    277213
    278214= 0.1.8 =
    279 * Improved: Updated messaging to focus on global edge network
    280215* Fixed: Payment success now correctly enables CDN toggle
    281 * Fixed: Debug mode checkbox vertical alignment
    282216
    283217= 0.1.7 =
    284 * Improved: Redesigned CDN toggle card with accent color active state
    285 * Improved: Better visual feedback for SSL certificate issuance status
    286 * Fixed: Direct upgrade now properly saves new tier limits
    287 * Fixed: Removing self-hosted CDN domain now properly disables CDN
     218* Improved: Redesigned CDN toggle with better visual feedback
     219* Fixed: Direct upgrade properly saves new tier limits
    288220
    289221= 0.1.6 =
    290 * New: Custom domain support for Managed mode (e.g., cdn.yoursite.com)
    291 * Fixed: Fallback now uses the actual failed URL (currentSrc) instead of src attribute
    292 * Fixed: Proper fallback for srcset images when CDN fails
     222* New: Custom domain support (cdn.yoursite.com)
     223* Fixed: Fallback uses correct URL for srcset images
    293224
    294225= 0.1.5 =
    295 * Improved: Simplified self-hosted setup to single CDN domain
     226* Improved: Simplified setup
    296227* Improved: Faster image fallback with inline error handling
    297 * Improved: Images no longer flash on load
    298 * Fixed: Better compatibility with strict CSP policies
    299 
    300 = 0.1.4 =
    301 * Improved: Updated copy and documentation for clarity
    302 * Improved: Better audience targeting and positioning
    303 
    304 = 0.1.3 =
    305 * Improved: Clearer error messages for payment and subscription issues
    306 * Improved: Faster page processing — pages without images skip CDN processing
    307 * Improved: New imgpro_cdn_api_base_url filter for staging environments
    308 * Improved: Better handling of edge cases in checkout flow
    309 
    310 = 0.1.2 =
    311 * Fixed: Plugin no longer disables itself when saving settings
    312 * Fixed: Improved reliability for dynamically loaded images
    313 * Improved: Cloud mode now auto-configures without manual URL entry
    314 * Security: Enhanced protection and CSP compatibility
     228* Fixed: Images no longer flash on load
    315229
    316230= 0.1.0 =
    317231* New: Managed option for one-click setup
    318 * New: Completely redesigned admin interface
    319 * New: Full accessibility support (ARIA labels, keyboard navigation)
    320 * Improved: Mobile-responsive settings page
    321 * Improved: Performance optimization for image-heavy pages
    322 
    323 = 0.0.8 =
    324 * Fixed: Critical JavaScript issue preventing images from displaying
    325 
    326 = 0.0.6 =
    327 * Fixed: Jetpack compatibility (connections, backups, Block Editor)
    328 * Fixed: REST API timing issues
     232* New: Redesigned admin interface
    329233
    330234= 0.0.1 =
     
    333237== Upgrade Notice ==
    334238
     239= 0.2.3 =
     240Clearer messaging and improved onboarding experience. Recommended for all users.
     241
    335242= 0.2.2 =
    336 Performance release: Settings page loads faster with batched API requests. Improved WordPress coding standards compliance.
    337 
    338 = 0.2.1 =
    339 New analytics dashboard shows bandwidth usage over time. Manage multiple source domains. CDN now works with infinite scroll for visitors. Custom domains available on all paid plans including Lite.
     243Performance improvements: Settings page now loads faster. Recommended for all users.
    340244
    341245= 0.2.0 =
    342 New pricing model with more generous limits. Free tier now includes 100 GB bandwidth/month. All paid plans include custom domain. Security hardening with encrypted API keys and rate limiting. Recommended for all users.
    343 
    344 = 0.1.9 =
    345 Critical fix for CDN activation. Prevents CDN from silently failing to enable after payment or recovery.
    346 
    347 = 0.1.8 =
    348 Fixed payment flow to automatically enable CDN. Recommended for all users.
    349 
    350 = 0.1.7 =
    351 Improved toggle UI and fixed tier upgrade sync. Recommended for all users.
    352 
    353 = 0.1.6 =
    354 Adds custom domain support for Managed mode. Recommended for all users.
    355 
    356 = 0.1.5 =
    357 Simplified architecture and fixed image flashing. Self-hosted users now only need one CDN domain.
     246New pricing with more generous limits. Free tier now includes 100 GB/month. Security improvements. Recommended for all users.
    358247
    359248== Support ==
    360249
    361 * Documentation: [github.com/img-pro/bandwidth-saver](https://github.com/img-pro/bandwidth-saver)
    362 * Support Forum: [wordpress.org/support/plugin/bandwidth-saver](https://wordpress.org/support/plugin/bandwidth-saver/)
    363 * Worker Setup Guide: [github.com/img-pro/bandwidth-saver-worker](https://github.com/img-pro/bandwidth-saver-worker)
    364 * Report Issues: [github.com/img-pro/bandwidth-saver/issues](https://github.com/img-pro/bandwidth-saver/issues)
     250* [Support Forum](https://wordpress.org/support/plugin/bandwidth-saver/)
     251* [Self-Host Guide](https://github.com/img-pro/bandwidth-saver-worker)
Note: See TracChangeset for help on using the changeset viewer.