
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>
        <title><![CDATA[ The Cloudflare Blog ]]></title>
        <description><![CDATA[ Get the latest news on how products at Cloudflare are built, technologies used, and join the teams helping to build a better Internet. ]]></description>
        <link>https://blog.cloudflare.com</link>
        <atom:link href="https://blog.cloudflare.com/" rel="self" type="application/rss+xml"/>
        <language>en-us</language>
        <image>
            <url>https://blog.cloudflare.com/favicon.png</url>
            <title>The Cloudflare Blog</title>
            <link>https://blog.cloudflare.com</link>
        </image>
        <lastBuildDate>Sat, 04 Apr 2026 16:17:48 GMT</lastBuildDate>
        <item>
            <title><![CDATA[Cloudflare Apps Platform Update: November Edition]]></title>
            <link>https://blog.cloudflare.com/cloudflare-apps-platform-update-november-edition/</link>
            <pubDate>Tue, 28 Nov 2017 18:00:00 GMT</pubDate>
            <description><![CDATA[ Since our last newsletter, dozens of developers like you have reached out with ideas for new kinds of apps that weren’t yet possible.  ]]></description>
            <content:encoded><![CDATA[ <p>Since our last newsletter, dozens of developers like you have reached out with ideas for new kinds of apps that weren’t yet possible. These are some of my favorite conversations because they help us find out which features should be prioritized. With your guidance, we’ve spent this month meticulously converting our supply of Halloween candy into those ideas. Let’s dive in and see what’s new!</p>
    <div>
      <h3>? Paid App Product Enhancements</h3>
      <a href="#paid-app-product-enhancements">
        
      </a>
    </div>
    <p>We’ve made it easier to upsell premium features with product specific options. Customers can try out exclusive features before making a purchase, on any site, even without Cloudflare account! Here’s an example of Lead Box using <a href="https://www.cloudflare.com/apps/developer/docs/install-json/options#limiting-radio-options-to-a-set-of-products">product specific radio buttons</a>:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2RJXwYv56e20NI57m2ZR5d/ce05000817f1d7ebc1e688d77d6ecc99/Screen-Shot-2017-11-22-at-5.31.19-AM.png" />
            
            </figure><p>Previewing premium features in <a href="https://www.cloudflare.com/apps/lead-box/install">Lead Box</a></p><p>In this example, a customer can choose to see the newsletter option after choosing the "Pro" plan. Developers can now update the <a href="https://www.cloudflare.com/apps/developer/docs/install-json/preview">Live Preview</a> in response to this choice. We’ve added new <code>"_product"</code> keyword for this event. Here’s a snippet on how Lead Box handles a customer <a href="https://github.com/cloudflare-apps/lead-box/blob/68a914ab58e526aa62572e2e16b9cb631f4cdfff/install.json#L14-L29">changing products</a> without refreshing the page:</p>
            <pre><code>{
  "preview": {
    "handlers": [
      {
        "options": ["_default"],
        "execute": "INSTALL_SCOPE.setOptions(INSTALL_OPTIONS)"
      },
      {
        "options": ["_product"],
        "execute": "INSTALL_SCOPE.setProduct(INSTALL_PRODUCT)"
      }
    ]
  }
}</code></pre>
            
            <pre><code>let options = INSTALL_OPTIONS
let product = INSTALL_PRODUCT

function renderApp () {/*...*/}

window.INSTALL_SCOPE = {
  setOptions (nextOptions) {
    options = nextOptions
    renderApp()
  },
  setProduct (nextProduct) {
    product = nextProduct
    renderApp()
  }
}</code></pre>
            
    <div>
      <h3>? Comments &amp; Ratings</h3>
      <a href="#comments-ratings">
        
      </a>
    </div>
    <p>Our previous newsletter included two of our most requested features: customer feedback, and install metrics. Together these features have helped developers reach out to their customers and track down issues. Customers can now share their feedback publically with comments and ratings:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4RcAjLum5hUPeNquIAxxyt/c5ea9a22dd11eb02647f4959af02d4ab/previous-comments-1.png" />
            
            </figure><p>Revealing older comments.</p><p>Comments for previous releases are initially hidden to emphasize the most recent feedback. As customers send in new feedback, previous ratings will have less of an impact on your app’s sentiment. Apps that score well with customers will gradually increase your visibility in the public listing as well!</p>
    <div>
      <h3>? Mananging DNS via Apps</h3>
      <a href="#mananging-dns-via-apps">
        
      </a>
    </div>
    <p>We’ve saved the best for last! App developers can now manage a customer’s DNS records. The simplest way to define a DNS record is directly in your app’s <code>install.json</code> file. This for example, would allow a customer to create a CNAME to send traffic to your domain, and insert a <code>A</code> record on their root domain:</p>
            <pre><code>{
  "resources": [/*...*/],
  "hooks": [/*...*/],
  "options": {
    "properties": {
      "subdomain": {
        "type": "string"
      }
    }
  },
  "dns": [
    {
      "type": "CNAME",
      "name": "{{subdomain}}",
      "content": "shops.myservice.com"
    },
    {
      "type": "A",
      "content": "1.2.3.4",
      "ttl": 60,
      "proxied": true
    }
  ]
}</code></pre>
            <p>The customer can then confirm your changes after before completing their installation.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5ZzXNIl4h8JiMvf8Bxqoqo/56ceadab6ec4fa446b4673cec76d08b2/DNS.png" />
            
            </figure><p>Requesting permission to access a customer’s email address and DNS entries.</p><p>DNS records make it possible to add new records to a customer’s account for your email services, blogging platforms, customer management systems, <a href="https://www.cloudflare.com/apps/developer/docs/dns">and much, much more</a>!</p>
    <div>
      <h4>⚙ Other Platform Improvements</h4>
      <a href="#other-platform-improvements">
        
      </a>
    </div>
    <p>We’ve made hundreds of changes since our last newsletter, some more visible than others. Here’s a quick recap of some our favorites:</p><ul><li><p>New Cloudflare customers are onboarded with apps after registration</p></li><li><p>Updated docs on <a href="https://www.cloudflare.com/apps/developer/docs/webhooks#item-add-event">“item add” event</a></p></li><li><p>Developers can now optionally link to their public GitHub repository</p></li><li><p>A new input type: Numbers <a href="https://www.cloudflare.com/apps/developer/docs/install-json/options#number-with-unit">with units</a>!</p></li></ul>
    <div>
      <h2>Thank you ?</h2>
      <a href="#thank-you">
        
      </a>
    </div>
    <p>In the spirit of Thanksgiving, we raise a gravy boat to everyone who made this winter a little warmer. To the all the Cloudflarians and developers who sent in feedback, we say <b>thank you!</b></p><p>Reach out at <a href="https://twitter.com/CloudflareApps">@CloudflareApps</a> and let us know what you’d like to see next!!!</p><p>Until next time! ⛄️️</p><p>— Teffen</p><p>Powerful tools built by world-class developers, delivered by Cloudflare, easily added to your website.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2IAzPTMTwhimAtCSIAY7SJ/2379d80b1dedcc9afcfe0ab00dbdb0b5/gcp-logo-2.png" />
            
            </figure><p>Up to $100k in Cloud Credits</p><p>Cloudflare Apps makes it easy to get what you build installed, but building a great app also requires great infrastructure. We’ve partnered with Google to offer app developers like you up to $100,000 in free Google Cloud credits to support the apps you build.</p><p><a href="https://www.cloudflare.com/apps/developer/offers/google">Check it out ›</a></p><p>.content-box { margin: 1em auto; max-width: 100%; box-sizing: border-box; } .content-box img { padding: .5em; border: 1px solid #ddd; border-radius: 3px; max-height: 100%; box-sizing: border-box; } .content-box[data-image="1"] img { background-color: #f3f3f3; padding: 0; } .content-box[data-image="2"] img { background-color: #fff; padding: 0; } .content-box[data-image="3"] img { background-color: #eee; padding: 0; } @media (min-width: 768px) { .content-box[data-image="1"] img { height: 314px; } .content-box[data-image="2"] img { height: 449px; } .content-box[data-image="3"] img { height: 428px; } } .content-footer { display: flex; align-items: center; justify-content: center; flex-flow: column; padding: 1em .5em; background: #272727; color: #f1f1f1; line-height: 1.533; position: absolute; left: 0; right: 0; } .content-footer .email-pitch { text-align: center; } .content-footer #mc-embedded-subscribe-form { display: flex; align-items: center; } .content-footer #mce-responses { margin-left: .5em; } .content-footer #mce-EMAIL { flex: 0 1 auto !important; width: 245px; margin: 0; } .content-footer #mce-EMAIL, .content-footer #mc-embedded-subscribe { height: 2.4em; font-size: 1.2em; line-height: 1; } .content-footer #mc-embedded-subscribe { padding: .55em 1em; font-weight: 500; } .content-footer #mc-embedded-subscribe-form, .content-footer #mc-embedded-subscribe-form &gt; * { flex: 0 0 auto; } .content-footer .email-container { display: flex; } .content-footer .playbook-container { display: flex; align-items: center; } .content-footer .content-accent { flex: 0 0 auto; } .content-footer .content-accent img { height: 145px; margin-right: 2em; } .content-footer .content-headline { font-size: 2.1em; font-weight: bold; } .content-footer .content-description { font-size: .9em; max-width: 600px; margin-bottom: 1em; } @media (max-width: 768px) { .content-footer .email-container { flex: 1 1 auto; width: 100%; } .content-footer .playbook-container { flex-flow: column; } } /* Floating Sidebar */ body.floating-sidebar .primary-content, body.floating-sidebar .post-content { width: 100% !important; } body.floating-sidebar aside.sidebar { float: right !important; margin-bottom: 0.5em; } .post-content, .post-header { max-width: 36em; } body.floating-sidebar .post-content, body.floating-sidebar .post-header { max-width: none; } body.floating-sidebar .footer-nav { width: 100% !important; } /* Social */ .social { display: flex; align-items: center; } /*.fb_iframe_widget { padding-top: 3px; padding-right: 1px; }*/ .social &gt; * + * { margin-right: 0 !important; margin-left: 7px !important; } .social &gt; .IN-widget { margin-bottom: -2px !important; margin-left: 9px !important; } /* Hide period after author */ .post-header .meta a { border-right: 5px solid white; margin-right: -5px; position: relative; } /* Post */ body { background-color: white; } .post-header, .post-content p, .post-content h1, .post-content h2, .post-content h3, .post-content h4, .post-content h5, .post-content pre, .post-content ul, .post-content figcaption { display: block; margin-left: auto; margin-right: auto; width: 75%; } .post-content pre { width: 55%; font-size: .7em; margin-bottom: 1.9em; } .post-content figcaption { text-align: center; font-style: italic; opacity: .8; margin-top: 0.2em; margin-bottom: 1.9em; font-size: .9em; } pre, code { font-size: inherit; line-height: inherit; } section.primary-content { font-size: 16px; line-height: 1.6; color: black; } blockquote { padding-bottom: 1.5em; padding-top: 1em; font-style: italic; font-size: 1.2rem; } blockquote.pull-quote-centered { font-size: 1.2em; text-align: center; max-width: 100%; margin-left: auto; margin-right: auto; } blockquote blockquote { margin-left: 1em; padding-left: 1em; border-left: 5px solid rgba(0, 0, 0, 0.2); padding-bottom: 0.5em; padding-top: 0.5em; margin-bottom: 0.5em; margin-top: 0.5em; } p.attribution { color: #666; font-size: 0.8em; padding-bottom: 1em; } a code.year { text-decoration: underline; } .closing-cards #mc_embed_signup .mc-field-group { margin: 0.75em 0; } .closing-cards #mc_embed_signup input { font-size: 1.5em; height: auto; } .closing-cards #mc_embed_signup input[type="email"] { border: 1px solid #bcbcbc; border-radius: 2px; margin-bottom: 0; } .closing-cards #mc_embed_signup input[type="submit"] { background: #f38020; color: #fff; padding: .8em 1em .8em 1em; white-space: nowrap; line-height: 1.2; text-align: center; border-radius: 2px; border: 0; display: inline-block; text-rendering: optimizeLegibility; -webkit-tap-highlight-color: transparent; -webkit-font-smoothing: subpixel-antialiased; user-select: none; -webkit-appearance: none; appearance: none; letter-spacing: .04em; text-indent: .04em; cursor: pointer; } .closing-cards #mc_embed_signup div.mce_inline_error { background-color: transparent; color: #C33; padding: 0; display: inline-block; font-size: 0.9em; } .closing-cards #mc_embed_signup p:not(:empty) { line-height: 1.5; margin-bottom: 2em; } .closing-cards #mc_embed_signup input[type="email"] { font-size: 20px !important; width: 100% !important; padding: .6em 1em !important; } .closing-cards #mc_embed_signup .mc-field-group { margin: 0 !important; } .closing-cards #mc_embed_signup input[type="submit"] { font-size: 20px !important; margin-top: .5em !important; padding: .6em 1em !important; } .closing-cards #mc_embed_signup div.mce_inline_error { padding: 0; margin: 0; color: #F38020 !important; } aside.section.learn-more { display: none; } .closing-cards { background: #eee; width: 100%; list-style-type: none; margin-left: 0; } .closing-card { width: calc(50% - 10px) !important; font-size: 20px; padding: 1.5em; display: inline-block; box-sizing: border-box; vertical-align: top; } #mc_embed_signup { max-width: 400px; margin: 1em auto; } @media (min-width: 768px) { #mc_embed_signup { margin-left: 1em; } } @media (max-width: 788px){ .closing-card { width: 100% !important; } .closing-card + .closing-card { border-top: 10px solid white; } }</p><p>(function () {
'use strict'</p><p>document.body.style.visibility = 'hidden'</p><p>function fakeReady (fn) {
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', fn)
} else {
fn()
}
}</p><p>window.$ = window.jQuery = function fakejQuery () {
return {
ready: fakeReady,
fitVids: function () {
// if (window.$.fn.fitVids) {
//   window.$.fn.fitVids.apply(window.$.fn, arguments)
// }
}
}
}</p><p>window.$.fn = window.$.fn || {}</p><p>function restyleBlog () {
'use strict'</p>
            <pre><code>if (window.innerWidth &gt;= 800) {
  var sidebar = document.querySelector('aside.sidebar')
  var header = document.querySelector('header.post-header')
  var post = document.querySelector('article.post')

  try {
    post.insertBefore(sidebar, header)
    document.body.className += ' floating-sidebar'
  } catch (e) { console.log('Style Error', e)}
}

try {
  document.querySelector('body &gt; .wrapper .sidebar').style.display = 'none'
} catch (e) { console.log('Style Error', e)}

try {
  var tagFooter = document.querySelector('.post-content + footer')
  tagFooter.appendChild(document.querySelector('.post-header .social'))
} catch (e) { console.log('Style Error', e)}

function resizeFooter () {
  post.style.paddingBottom = footer.clientHeight + 'px'
}

try {
  var signup = document.querySelector('#mc\_embed\_signup')
  signup.querySelector('#mce-EMAIL').placeholder = 'email@example.com'
  signup.querySelector('#mc-embedded-subscribe').textContent = 'Get Updates'
  signup.querySelector('#mc-embedded-subscribe').className += ' btn-warning'

  var post = document.querySelector('.post-content')
  var footer = post.querySelector('.content-footer')
  footer.querySelector('.email-container').appendChild(signup)

  window.addEventListener('resize', resizeFooter)
  resizeFooter()
} catch (e) { console.log('Style Error', e)}

document.body.style.visibility = ''</code></pre>
            <p>}</p><p>fakeReady(restyleBlog)
})()</p> ]]></content:encoded>
            <category><![CDATA[Cloudflare Apps]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Speed & Reliability]]></category>
            <category><![CDATA[Developers]]></category>
            <guid isPermaLink="false">3jBuK4LEDOzQTBpI07oKKA</guid>
            <dc:creator>Teffen Ellis</dc:creator>
        </item>
        <item>
            <title><![CDATA[Cloudflare Apps Platform Update: September Edition]]></title>
            <link>https://blog.cloudflare.com/cloudflare-apps-platform-update-september-edition/</link>
            <pubDate>Thu, 28 Sep 2017 19:13:27 GMT</pubDate>
            <description><![CDATA[ Since launch, we’ve received hundreds of feature requests from developers and users alike. Feedback has been the source of some our most popular features.  ]]></description>
            <content:encoded><![CDATA[ <p><i>This is the September edition of our blog series showcasing the latest platform improvements in developer analytics, user feedback, release notes, and more!</i></p><p>Since launch, we’ve received hundreds of feature requests from developers and users alike. Feedback has been the source of some our most popular features. This month’s post is celebration of the innovation achieved when great ideas are shared.</p><p>Let’s dive in!</p>
    <div>
      <h3>? Developer Analytics</h3>
      <a href="#developer-analytics">
        
      </a>
    </div>
    <p>Continuing with the theme of feedback, App developers can now track their apps’ popularity and growth:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1EBEwxFnbdjq0OFmII1Bse/69e652a0e0ff65f230e43a4162fd5661/installs.png" />
            
            </figure><p>App usage by month.</p><p>The usage charts help identify which changes have a positive impact on your app.</p><p>If you’ve created a paid app you can also track its financial performance:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/NQJYkkkbjKc1zFhPTfLV3/881ff17a8d8b974804bae5392f63e439/revenue-2.png" />
            
            </figure><p>App revenue &amp; churn.</p>
    <div>
      <h2>? User feedback</h2>
      <a href="#user-feedback">
        
      </a>
    </div>
    <p>Charts and graphs are great for tracking trends, but what do your users actually think of your app? Wonder no longer; users can now leave comments when adding and removing apps from their site. Each comment includes sentiment tags and an optional message from the user.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3gH8mWi14uosszB0TroFVY/9d865fbc357f50209e4ac390e6c925bf/comments-1.png" />
            
            </figure><p>Comments left by users before and after installing an app.</p>
    <div>
      <h3>? Page Selectors</h3>
      <a href="#page-selectors">
        
      </a>
    </div>
    <p>Cloudflare users have always been able to select which routes their apps are active, though this was too coarse for apps with arrays of options. We've introduced <a href="https://www.cloudflare.com/apps/developer/docs/install-json/options#page-selector">Page Selectors</a> to limit entries to specific pages:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/QcHi0LsN1aadDJpg8l4D8/f9d4ec268e06e4804e6594019db5d2a1/Screen-Shot-2017-09-13-at-11.27.09-PM.png" />
            
            </figure><p>Limiting YouTube videos to specific routes on a site.</p><p>Page selectors are great for apps that create multiple elements such as arrays in <a href="https://www.cloudflare.com/apps/youtube/install">YouTube’s</a> videos, or <a href="https://www.cloudflare.com/apps/cssgram/install">CSSGram’s</a> image filters. Developers can also use them to target existing elements on specific pages. Apps like <a href="https://www.cloudflare.com/apps/shepherd">Shepherd</a> can use Page Selectors to insert user guides on specific pages too!</p>
    <div>
      <h3>? Improved updates</h3>
      <a href="#improved-updates">
        
      </a>
    </div>
    <p>We've included some updates — on App updates! Developers can now add release notes in their submissions:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6P1Bl4zwudIign92RC4C0h/c728601d8644893ef951aaeed91e34cb/release-notes-1.png" />
            
            </figure><p>Communicating your recent changes to users.</p><p>Your release notes will appear alongside other pending updates in the user’s Cloudflare Dashboard:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4BxDQpfFs44kzKb9uIoH1S/6ed3a948b3bbaa000741a7b62553f80b/Screen-Shot-2017-09-13-at-2.02.25-AM.png" />
            
            </figure><p>Users are notified of pending updates when visiting Cloudflare.</p>
    <div>
      <h4>?? Developers. Developers. Developers. Developers...</h4>
      <a href="#developers-developers-developers-developers">
        
      </a>
    </div>
    <p>I want to give a huge shout-out to the developers who have sent us their feedback and suggestions. Thank you again for joining us on this amazing adventure. Reach out at <a href="https://twitter.com/CloudflareApps">@CloudflareApps</a> and let us know what you’d like to see next!!!</p><p>Until next time! ?</p><p>— Teffen</p><p>Powerful tools built by world-class developers, delivered by Cloudflare, easily added to your website.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4x098wOjfPxuM6qdbir23g/5e7da2529301aae597da9e6c93a882d7/playbook.png" />
            
            </figure><p>Just for you</p><p>The new App Developer Playbook features a step-by-step marketing guide showing you how to make money selling your Cloudflare Apps. It was written using all of the knowledge and experience we’ve gained releasing Apps to Cloudflare users.</p><p><a href="https://www.cloudflare.com/apps/assets/Cloudflare%20Apps%20Developer%20Playbook.pdf">Check it out ›</a></p><p>.content-box { margin: 1em auto; max-width: 100%; box-sizing: border-box; } .content-box img { padding: .5em; border: 1px solid #ddd; border-radius: 3px; max-height: 100%; box-sizing: border-box; } .content-box[data-image="1"] img { background-color: #fff; } .content-box[data-image="2"] img { background-color: #fff; } .content-box[data-image="3"] img { background-color: #eee; } .content-box[data-image="4"] img { background-color: #f3f3f3; } .content-box[data-image="5"] img { background-color: #f3f3f3; } .content-box[data-image="6"] img { background-color: #ebebeb; } @media (min-width: 768px) { .content-box[data-image="1"] img { height: 270px; } .content-box[data-image="2"] img { height: 270px; } .content-box[data-image="3"] img { height: 250px; } .content-box[data-image="4"] img { height: 460px; } .content-box[data-image="5"] img { height: 280px; } .content-box[data-image="6"] img { height: 250px; } } .content-footer { display: flex; align-items: center; justify-content: center; flex-flow: column; padding: 1em .5em; background: #272727; color: #f1f1f1; line-height: 1.533; position: absolute; left: 0; right: 0; } .content-footer .email-pitch { text-align: center; } .content-footer #mc-embedded-subscribe-form { display: flex; align-items: center; } .content-footer #mce-responses { margin-left: .5em; } .content-footer #mce-EMAIL { flex: 0 1 auto !important; width: 245px; margin: 0; } .content-footer #mce-EMAIL, .content-footer #mc-embedded-subscribe { height: 2.4em; font-size: 1.2em; line-height: 1; } .content-footer #mc-embedded-subscribe { padding: .55em 1em; font-weight: 500; } .content-footer #mc-embedded-subscribe-form, .content-footer #mc-embedded-subscribe-form &gt; * { flex: 0 0 auto; } .content-footer .email-container { display: flex; } .content-footer .playbook-container { display: flex; align-items: center; } .content-footer .content-accent { flex: 0 0 auto; } .content-footer .content-accent img { height: 260px; margin-right: 2em; } .content-footer .content-headline { font-size: 2.1em; font-weight: bold; } .content-footer .content-description { font-size: .9em; max-width: 600px; margin-bottom: 1em; } @media (max-width: 768px) { .content-footer .email-container { flex: 1 1 auto; width: 100%; } .content-footer .playbook-container { flex-flow: column; } } /* Floating Sidebar */ body.floating-sidebar .primary-content, body.floating-sidebar .post-content { width: 100% !important; } body.floating-sidebar aside.sidebar { float: right !important; margin-bottom: 0.5em; } .post-content, .post-header { max-width: 36em; } body.floating-sidebar .post-content, body.floating-sidebar .post-header { max-width: none; } body.floating-sidebar .footer-nav { width: 100% !important; } /* Social */ .social { display: flex; align-items: center; } /*.fb_iframe_widget { padding-top: 3px; padding-right: 1px; }*/ .social &gt; * + * { margin-right: 0 !important; margin-left: 7px !important; } .social &gt; .IN-widget { margin-bottom: -2px !important; margin-left: 9px !important; } /* Hide period after author */ .post-header .meta a { border-right: 5px solid white; margin-right: -5px; position: relative; } /* Post */ body { background-color: white; } .post-header, .post-content p, .post-content h1, .post-content h2, .post-content h3, .post-content h4, .post-content h5, .post-content figcaption { display: block; margin-left: auto; margin-right: auto; width: 75%; } .post-content figcaption { text-align: center; font-style: italic; opacity: .8; margin-top: 0.2em; margin-bottom: 1.9em; font-size: .9em; } pre, code { font-size: inherit; line-height: inherit; } section.primary-content { font-size: 16px; line-height: 1.6; color: black; } blockquote { padding-bottom: 1.5em; padding-top: 1em; font-style: italic; font-size: 1.2rem; } blockquote.pull-quote-centered { font-size: 1.2em; text-align: center; max-width: 100%; margin-left: auto; margin-right: auto; } blockquote blockquote { margin-left: 1em; padding-left: 1em; border-left: 5px solid rgba(0, 0, 0, 0.2); padding-bottom: 0.5em; padding-top: 0.5em; margin-bottom: 0.5em; margin-top: 0.5em; } p.attribution { color: #666; font-size: 0.8em; padding-bottom: 1em; } a code.year { text-decoration: underline; } .closing-cards #mc_embed_signup .mc-field-group { margin: 0.75em 0; } .closing-cards #mc_embed_signup input { font-size: 1.5em; height: auto; } .closing-cards #mc_embed_signup input[type="email"] { border: 1px solid #bcbcbc; border-radius: 2px; margin-bottom: 0; } .closing-cards #mc_embed_signup input[type="submit"] { background: #f38020; color: #fff; padding: .8em 1em .8em 1em; white-space: nowrap; line-height: 1.2; text-align: center; border-radius: 2px; border: 0; display: inline-block; text-rendering: optimizeLegibility; -webkit-tap-highlight-color: transparent; -webkit-font-smoothing: subpixel-antialiased; user-select: none; -webkit-appearance: none; appearance: none; letter-spacing: .04em; text-indent: .04em; cursor: pointer; } .closing-cards #mc_embed_signup div.mce_inline_error { background-color: transparent; color: #C33; padding: 0; display: inline-block; font-size: 0.9em; } .closing-cards #mc_embed_signup p:not(:empty) { line-height: 1.5; margin-bottom: 2em; } .closing-cards #mc_embed_signup input[type="email"] { font-size: 20px !important; width: 100% !important; padding: .6em 1em !important; } .closing-cards #mc_embed_signup .mc-field-group { margin: 0 !important; } .closing-cards #mc_embed_signup input[type="submit"] { font-size: 20px !important; margin-top: .5em !important; padding: .6em 1em !important; } .closing-cards #mc_embed_signup div.mce_inline_error { padding: 0; margin: 0; color: #F38020 !important; } aside.section.learn-more { display: none; } .closing-cards { background: #eee; width: 100%; list-style-type: none; margin-left: 0; } .closing-card { width: calc(50% - 10px) !important; font-size: 20px; padding: 1.5em; display: inline-block; box-sizing: border-box; vertical-align: top; } #mc_embed_signup { max-width: 400px; margin: 1em auto; } @media (min-width: 768px) { #mc_embed_signup { margin-left: 1em; } } @media (max-width: 788px){ .closing-card { width: 100% !important; } .closing-card + .closing-card { border-top: 10px solid white; } }</p><p>(function () {
'use strict'</p><p>document.body.style.visibility = 'hidden'</p><p>function fakeReady (fn) {
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', fn)
} else {
fn()
}
}</p><p>window.$ = window.jQuery = function fakejQuery () {
return {
ready: fakeReady,
fitVids: function () {
// if (window.$.fn.fitVids) {
//   window.$.fn.fitVids.apply(window.$.fn, arguments)
// }
}
}
}</p><p>window.$.fn = window.$.fn || {}</p><p>function restyleBlog () {
'use strict'</p>
            <pre><code>if (window.innerWidth &gt;= 800) {
  var sidebar = document.querySelector('aside.sidebar')
  var header = document.querySelector('header.post-header')
  var post = document.querySelector('article.post')

  try {
    post.insertBefore(sidebar, header)
    document.body.className += ' floating-sidebar'
  } catch (e) { console.log('Style Error', e)}
}

try {
  document.querySelector('body &gt; .wrapper .sidebar').style.display = 'none'
} catch (e) { console.log('Style Error', e)}

try {
  var tagFooter = document.querySelector('.post-content + footer')
  tagFooter.appendChild(document.querySelector('.post-header .social'))
} catch (e) { console.log('Style Error', e)}

function resizeFooter () {
  post.style.paddingBottom = footer.clientHeight + 'px'
}

try {
  var signup = document.querySelector('#mc\_embed\_signup')
  signup.querySelector('#mce-EMAIL').placeholder = 'email@example.com'
  signup.querySelector('#mc-embedded-subscribe').textContent = 'Get Updates'
  signup.querySelector('#mc-embedded-subscribe').className += ' btn-warning'

  var post = document.querySelector('.post-content')
  var footer = post.querySelector('.content-footer')
  footer.querySelector('.email-container').appendChild(signup)

  window.addEventListener('resize', resizeFooter)
  resizeFooter()
} catch (e) { console.log('Style Error', e)}

document.body.style.visibility = ''</code></pre>
            <p>}</p><p>fakeReady(restyleBlog)
})()</p> ]]></content:encoded>
            <category><![CDATA[Cloudflare Apps]]></category>
            <category><![CDATA[Analytics]]></category>
            <category><![CDATA[Developers]]></category>
            <guid isPermaLink="false">7sJsTUPDnftbVIikXTiMSA</guid>
            <dc:creator>Teffen Ellis</dc:creator>
        </item>
    </channel>
</rss>