Changeset 3411500
- Timestamp:
- 12/04/2025 10:59:00 PM (4 months ago)
- Location:
- bandwidth-saver
- Files:
-
- 5 deleted
- 11 edited
-
assets/screenshot-1.png (modified) (previous)
-
assets/screenshot-2.png (modified) (previous)
-
assets/screenshot-3.png (modified) (previous)
-
assets/screenshot-4.png (modified) (previous)
-
assets/screenshot-5.png (modified) (previous)
-
trunk/admin/css/imgpro-cdn-admin.css (modified) (6 diffs)
-
trunk/admin/js/imgpro-cdn-admin.js (modified) (1 diff)
-
trunk/assets/screenshot-1.png (deleted)
-
trunk/assets/screenshot-2.png (deleted)
-
trunk/assets/screenshot-3.png (deleted)
-
trunk/assets/screenshot-4.png (deleted)
-
trunk/assets/screenshot-5.png (deleted)
-
trunk/imgpro-cdn.php (modified) (4 diffs)
-
trunk/includes/class-imgpro-cdn-admin.php (modified) (14 diffs)
-
trunk/includes/class-imgpro-cdn-onboarding.php (modified) (8 diffs)
-
trunk/readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
bandwidth-saver/trunk/admin/css/imgpro-cdn-admin.css
r3410060 r3411500 767 767 } 768 768 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 769 798 /* Actions */ 770 799 .imgpro-onboarding-actions { … … 996 1025 border-radius: var(--imgpro-radius-lg); 997 1026 box-shadow: var(--imgpro-card-shadow); 998 margin-bottom: var(--imgpro-space-6);999 1027 transition: all var(--imgpro-transition-base) var(--imgpro-ease-out); 1000 1028 } … … 1866 1894 .imgpro-feature-list { 1867 1895 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); 1869 1899 padding: var(--imgpro-space-5); 1870 background: var(--imgpro-bg );1900 background: var(--imgpro-bg-subtle); 1871 1901 border-radius: var(--imgpro-radius-lg); 1872 1902 text-align: left; … … 1880 1910 font-size: var(--imgpro-text-sm); 1881 1911 color: var(--imgpro-text); 1912 line-height: var(--imgpro-leading-normal); 1882 1913 } 1883 1914 … … 1888 1919 .imgpro-feature-list li svg { 1889 1920 flex-shrink: 0; 1890 margin-top: 2px; 1921 width: 20px; 1922 height: 20px; 1923 margin-top: 1px; 1891 1924 color: var(--imgpro-success-600); 1892 1925 } … … 1910 1943 } 1911 1944 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 1912 1965 .imgpro-cta-note { 1913 1966 margin: var(--imgpro-space-4) 0 0; 1914 1967 font-size: var(--imgpro-text-sm); 1915 1968 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; 1916 1982 } 1917 1983 -
bandwidth-saver/trunk/admin/js/imgpro-cdn-admin.js
r3410342 r3411500 1189 1189 } 1190 1190 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 } 1193 1198 } else { 1194 1199 $inputWrapper.show(); -
bandwidth-saver/trunk/imgpro-cdn.php
r3410342 r3411500 3 3 * Plugin Name: Bandwidth Saver: Image CDN 4 4 * 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. 25 * Description: Instant image CDN. 100 GB/month free, no DNS changes, no external accounts. 6 * Version: 0.2.3 7 7 * Author: ImgPro 8 8 * Author URI: https://img.pro … … 26 26 ?> 27 27 <div class="notice notice-error"> 28 <p><?php esc_html_e(' Image CDNrequires 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> 29 29 </div> 30 30 <?php … … 38 38 ?> 39 39 <div class="notice notice-error"> 40 <p><?php esc_html_e(' Image CDNrequires 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> 41 41 </div> 42 42 <?php … … 47 47 // Define plugin constants 48 48 if (!defined('IMGPRO_CDN_VERSION')) { 49 define('IMGPRO_CDN_VERSION', '0.2. 2');49 define('IMGPRO_CDN_VERSION', '0.2.3'); 50 50 } 51 51 if (!defined('IMGPRO_CDN_PLUGIN_DIR')) { -
bandwidth-saver/trunk/includes/class-imgpro-cdn-admin.php
r3410342 r3411500 122 122 // Check page and payment status (no nonce needed - this is a redirect from Stripe) 123 123 // Capability check below ensures only authorized users can trigger account sync 124 // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Stripe redirect, no nonce available 124 125 $page = isset( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : ''; 125 126 if ( 'imgpro-cdn-settings' !== $page ) { … … 127 128 } 128 129 130 // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Stripe redirect, no nonce available 129 131 $payment_status = isset( $_GET['payment'] ) ? sanitize_text_field( wp_unslash( $_GET['payment'] ) ) : ''; 130 132 if ( 'success' !== $payment_status ) { … … 386 388 'i18n' => [ 387 389 'activeLabel' => __('CDN Active', 'bandwidth-saver'), 388 'inactiveLabel' => __('CDN Inactive', 'bandwidth-saver'),390 'inactiveLabel' => __('CDN Off', 'bandwidth-saver'), 389 391 'activeMessage' => sprintf( 390 392 /* translators: 1: opening span tag, 2: closing span tag, 3: opening span tag, 4: closing span tag */ 391 __('%1$s Images 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'), 392 394 '<span class="imgpro-cdn-nowrap imgpro-cdn-hide-mobile">', 393 395 '</span>', … … 395 397 '</span>' 396 398 ), 397 'disabledMessage' => __(' Enable to serve images from the global edge network', 'bandwidth-saver'),399 'disabledMessage' => __('Turn on to speed up your images', 'bandwidth-saver'), 398 400 // Button states 399 401 'creatingCheckout' => __('Creating checkout...', 'bandwidth-saver'), … … 423 425 'accountRecovered' => __('Account recovered!', 'bandwidth-saver'), 424 426 // 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'), 428 430 'checkoutCancelled' => __('Checkout cancelled. You can try again anytime.', 'bandwidth-saver'), 429 431 // 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'), 434 436 // Custom domain 435 437 'addingDomain' => __('Adding domain...', 'bandwidth-saver'), … … 443 445 'cdnDomainRemoved' => __('CDN domain removed.', 'bandwidth-saver'), 444 446 // 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'), 447 449 // Plan selector 448 450 'select' => __('Select', 'bandwidth-saver'), … … 725 727 <div> 726 728 <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> 728 730 </div> 729 731 </div> … … 773 775 <h2 id="imgpro-toggle-heading"> 774 776 <?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'); ?> 777 779 </h2> 778 780 <p id="imgpro-toggle-description"> 779 781 <?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'); ?> 782 784 </p> 783 785 </div> … … 1016 1018 $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>'; 1017 1019 $title = __( 'Your subscription has ended', 'bandwidth-saver' ); 1018 $message = __( 'Your Prosubscription 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' ); 1019 1021 $button_text = __( 'Resubscribe', 'bandwidth-saver' ); 1020 1022 $button_id = 'imgpro-resubscribe'; … … 1140 1142 <div class="imgpro-cta-card"> 1141 1143 <div class="imgpro-cta-content"> 1142 <h2><?php esc_html_e('S kip 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> 1144 1146 1145 1147 <ul class="imgpro-feature-list"> 1146 1148 <li> 1147 1149 <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> 1149 1151 </li> 1150 1152 <li> 1151 1153 <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> 1153 1155 </li> 1154 1156 <li> 1155 1157 <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> 1157 1159 </li> 1158 1160 <li> 1159 1161 <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> 1161 1163 </li> 1162 1164 </ul> 1163 1165 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 1164 1177 <div class="imgpro-cta-actions"> 1165 1178 <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'); ?> 1167 1180 <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> 1168 1181 </button> … … 1176 1189 1177 1190 <p class="imgpro-cta-note"> 1178 <?php esc_html_e('Start with 10 GB free. Upgrade anytime for more storage andbandwidth.', 'bandwidth-saver'); ?>1191 <?php esc_html_e('Start with 100 GB/month free. Upgrade anytime for more bandwidth.', 'bandwidth-saver'); ?> 1179 1192 </p> 1180 1193 … … 1218 1231 <?php $this->render_toggle_card($settings, ImgPro_CDN_Settings::MODE_CLOUD); ?> 1219 1232 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 ?> 1221 1241 <?php $this->render_account_card($settings, $email); ?> 1222 1242 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 ?> 1227 1247 <?php $this->render_source_urls_section($settings); ?> 1228 1229 <?php // 5. Custom Domain Section ?>1230 <?php $this->render_custom_domain_section($settings); ?>1231 1248 1232 1249 <?php // Custom Domain Pending Notice (if DNS needs attention) ?> … … 1313 1330 <div class="imgpro-account-card__main"> 1314 1331 <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> 1317 1334 </div> 1318 1335 <button type="button" class="imgpro-btn imgpro-btn-primary imgpro-open-plan-selector"> … … 1324 1341 <span><?php echo esc_html($email); ?></span> 1325 1342 <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> 1327 1344 </div> 1328 1345 </div> -
bandwidth-saver/trunk/includes/class-imgpro-cdn-onboarding.php
r3410060 r3411500 145 145 ?> 146 146 <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> 148 148 149 149 <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'); ?> 151 151 </p> 152 152 … … 154 154 <li> 155 155 <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> 157 157 </li> 158 158 <li> 159 159 <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> 161 161 </li> 162 162 <li> 163 163 <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> 165 165 </li> 166 166 </ul> 167 167 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 168 179 <div class="imgpro-onboarding-actions"> 169 180 <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'); ?> 171 182 <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> 172 183 </button> … … 174 185 175 186 <p class="imgpro-onboarding-hint"> 176 <?php esc_html_e('Need more ?', 'bandwidth-saver'); ?>187 <?php esc_html_e('Need more bandwidth?', 'bandwidth-saver'); ?> 177 188 <button type="button" class="imgpro-btn-link imgpro-open-plan-selector"><?php esc_html_e('See paid plans', 'bandwidth-saver'); ?></button> 178 189 </p> … … 195 206 196 207 <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'); ?> 199 209 </p> 200 210 … … 270 280 ?> 271 281 <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> 273 283 274 284 <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'); ?> 276 286 </p> 277 287 … … 283 293 <div class="imgpro-activate-text"> 284 294 <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> 286 296 </div> 287 297 </div> … … 294 304 295 305 <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> 297 307 <ul> 298 308 <li> 299 309 <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'); ?> 301 311 </li> 302 312 <li> 303 313 <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'); ?> 305 315 </li> 306 316 <li> 307 317 <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'); ?> 309 319 </li> 310 320 <li> 311 321 <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'); ?> 313 327 </li> 314 328 </ul> … … 338 352 339 353 <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'); ?> 341 355 </p> 342 356 -
bandwidth-saver/trunk/readme.txt
r3410342 r3411500 1 1 === Bandwidth Saver: Image CDN === 2 2 Contributors: imgpro 3 Tags: cdn, images, cloudflare, performance, speed3 Tags: images, performance, speed, cdn, cache 4 4 Requires at least: 6.2 5 5 Tested up to: 6.9 6 6 Requires PHP: 7.4 7 Stable tag: 0.2. 27 Stable tag: 0.2.3 8 8 License: GPLv2 or later 9 9 License URI: http://www.gnu.org/licenses/gpl-2.0.html 10 10 11 Deliver WordPress images from a global edge network — no DNS changes, no Cloudflare account, no configuration. Activate and go.11 Make your images load faster for visitors anywhere in the world. One-click setup, nothing to configure. 12 12 13 13 == Description == 14 14 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 17 When 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 19 Bandwidth 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. 20 32 21 33 = How It Works = 22 34 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. 35 Behind 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 37 1. You activate the plugin and enter your email 38 2. The plugin automatically rewrites image URLs on your pages 39 3. Visitors load images from the nearest edge server 40 4. Your original images stay exactly where they are 41 42 That'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. 47 53 48 54 = Who This Is For = 49 55 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 63 61 64 62 = Who This Is NOT For = 65 63 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 75 All 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) 92 78 93 79 == Installation == 94 80 95 = Managed Setup (Under 1 Minute) = 81 **60-second setup. No technical knowledge required.** 96 82 97 83 1. Install and activate the plugin 98 84 2. 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) 85 3. Enter your email 86 4. Toggle the CDN on 87 88 Done. Your images are now loading faster. 113 89 114 90 == Frequently Asked Questions == 115 91 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 94 No. 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 98 Yes. 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 102 After 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 106 Yes. 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 110 Your 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 114 No. 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 118 Yes. 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 122 JPG, PNG, GIF, WebP, AVIF, and SVG. 123 124 = What happens if the CDN goes down? = 125 126 Your 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 130 No. 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 134 Yes. All paid plans support custom domains (cdn.yoursite.com) with automatic SSL. 174 135 175 136 == Screenshots == 176 137 177 1. Get started in under a minute178 2. Your images are now loading from the edge179 3. Upgrade when you need more180 4. Use your own domain (paid plans)181 5. Or self-host on your Cloudflare account138 1. Speed up your images in 60 seconds 139 2. Track your bandwidth and performance 140 3. Generous free tier, simple upgrades 141 4. Multi-site support and custom domains 142 5. Self-host option for full control 182 143 183 144 == Privacy == 184 145 185 = What the plugin collects=146 = What Data Is Collected? = 186 147 187 148 The plugin does not add cookies, tracking pixels, or analytics to your site. 188 149 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 156 Images are cached and served through a global edge network. 157 158 = Self-Hosted Mode = 159 160 No data is sent to us. Images are cached in your own Cloudflare account. 206 161 207 162 == External Services == 208 163 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 164 This 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) 220 176 221 177 Self-hosted users connect only to their own Cloudflare account. 222 178 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 service236 * Non-payment or payment fraud237 * Activity that degrades service for other users238 239 You are responsible for the images served through your account.240 241 179 == Changelog == 242 180 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 243 187 = 0.2.2 = 244 * Improved: Faster settings page — analytics data now loads in a single request245 * Improved: Source URLs and usage stats are pre-loaded , eliminating extra API calls188 * Improved: Settings page loads faster with batched API requests 189 * Improved: Source URLs and usage stats are pre-loaded 246 190 * Improved: Better WordPress coding standards compliance 247 191 * Fixed: Cleaner transient cleanup on uninstall 248 192 249 193 = 0.2.1 = 250 * New: Usage analytics dashboard with bandwidth charts and insights251 * New: Source URLs management — add multiple origin domains (tier-based limits)252 * New: Projected bandwidth usage to help plan your tier253 * Improved: CDN now works with infinite scroll and "load more" for logged-out visitors194 * 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" 254 198 * Improved: Faster settings page with smarter caching 255 * Improved: Cleaner UI with refreshed stats cards and insights panel256 199 * Fixed: Double-click prevention on all buttons 257 * Fixed: Custom domain feature now available on Lite plans too200 * Fixed: Custom domain feature now available on Lite plans 258 201 259 202 = 0.2.0 = 260 * New: Updated pricing model — bandwidth is now theprimary metric261 * New: All paid plans nowinclude custom domain support203 * New: Updated pricing with bandwidth as primary metric 204 * New: All paid plans include custom domain support 262 205 * 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 272 209 273 210 = 0.1.9 = 274 * Fixed: CDN now activates reliably after payment or accountrecovery211 * Fixed: CDN activates reliably after payment or recovery 275 212 * Fixed: CDN properly disables when subscription becomes inactive 276 * Improved: Better error messages when requests time out277 213 278 214 = 0.1.8 = 279 * Improved: Updated messaging to focus on global edge network280 215 * Fixed: Payment success now correctly enables CDN toggle 281 * Fixed: Debug mode checkbox vertical alignment282 216 283 217 = 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 288 220 289 221 = 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 293 224 294 225 = 0.1.5 = 295 * Improved: Simplified se lf-hosted setup to single CDN domain226 * Improved: Simplified setup 296 227 * 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 315 229 316 230 = 0.1.0 = 317 231 * 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 329 233 330 234 = 0.0.1 = … … 333 237 == Upgrade Notice == 334 238 239 = 0.2.3 = 240 Clearer messaging and improved onboarding experience. Recommended for all users. 241 335 242 = 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. 243 Performance improvements: Settings page now loads faster. Recommended for all users. 340 244 341 245 = 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. 246 New pricing with more generous limits. Free tier now includes 100 GB/month. Security improvements. Recommended for all users. 358 247 359 248 == Support == 360 249 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.