<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>BitBalloon Blog</title>
  <subtitle>Blogging about static sites, continuous deployment, hosting and performance</subtitle>
  <id>https://www.bitballoon.com/blog</id>
  <link href="https://www.bitballoon.com/blog"/>
  <link href="https://www.bitballoon.com/blog.xml" rel="self"/>
  <updated>2015-11-03T00:00:00Z</updated>
  <author>
    <name>Mathias Biilmann</name>
  </author>
  <entry>
    <title>Netlify, a pro-version of BitBalloon.</title>
    <link rel="alternate" href="/blog/2015/11/03/netlify-a-pro-version-of-bitballoon.html"/>
    <id>/blog/2015/11/03/netlify-a-pro-version-of-bitballoon.html</id>
    <published>2015-11-03T00:00:00Z</published>
    <updated>2015-11-03T00:00:00Z</updated>
    <author>
      <name>Christian Bach</name>
    </author>
    <summary type="html">&lt;p&gt;&lt;img alt="BitBalloon to netlify" src="/images/posts/bitballoon-to-netlify.png"&gt;&lt;/p&gt;

&lt;p&gt;A while back we introduced our new product for pro developers, &lt;a href="https://www.netlify.com/"&gt;netlify&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It’s a complete suite of hosting services for modern static websites, and even includes an opensource CMS.&lt;/p&gt;

&lt;p&gt;Based on the same lightning fast CDN structure as BitBalloon, netlify...&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;&lt;img alt="BitBalloon to netlify" src="/images/posts/bitballoon-to-netlify.png" /&gt;&lt;/p&gt;

&lt;p&gt;A while back we introduced our new product for pro developers, &lt;a href="https://www.netlify.com/"&gt;netlify&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It’s a complete suite of hosting services for modern static websites, and even includes an opensource CMS.&lt;/p&gt;

&lt;p&gt;Based on the same lightning fast CDN structure as BitBalloon, netlify comes with more than 40 distinct features, such as continous deployment, integration into GitHub, BitBucket, GitLabs and private Git repos, and so much more.&lt;/p&gt;

&lt;p&gt;Netlify is more than twice as fast as any other hosting service on the market that specialises in hosting static sites and apps. That means better performance and higher conversion for your online business.&lt;/p&gt;

&lt;p&gt;However BitBalloon isn’t going anywhere. It’s a stripped down version of netlify, where we focus on simple drag’n’drop deploying of static sites. BitBalloons goal is to be the easiest way to get a site online, while still getting blazingly fast hosting speeds.&lt;/p&gt;

&lt;p&gt;But if you want to keep up with static news, or have more features, the platform that we are developing on, and where we publish content from is netlify. So do come and join us :)&lt;/p&gt;

&lt;p&gt;Take care out there , and remember there are plenty of ways to &lt;a href="[https://www.netlify.com/contact](https://www.netlify.com/contact"&gt;get in touch&lt;/a&gt;) if you have any questions or comments.&lt;/p&gt;

&lt;p&gt;~Matt &amp;amp; Chris, founders of BitBalloon &amp;amp; Netlify&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Five Reasons you want HTTPS for your Static site</title>
    <link rel="alternate" href="/blog/2014/10/03/five-reasons-you-want-https-for-your-static-site.html"/>
    <id>/blog/2014/10/03/five-reasons-you-want-https-for-your-static-site.html</id>
    <published>2014-10-03T00:00:00Z</published>
    <updated>2014-10-03T00:00:00Z</updated>
    <author>
      <name>Mathias Biilmann Christensen</name>
    </author>
    <summary type="html">&lt;p&gt;&lt;img alt="SafeSource" src="/images/posts/lock.jpg" /&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Does HTTPS really make any sense for a static web site?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We&amp;rsquo;ve heard this a couple of times when talking about BitBalloon&amp;rsquo;s HTTPS support.&lt;/p&gt;

&lt;p&gt;It might seem like a static site is already plenty secure: there&amp;rsquo;s no moving parts, no risk of SQL injection, no openings for XSS attacks, no cookies to hijack, no personalized data sent over the wire, etc, etc, etc&amp;hellip;&lt;/p&gt;

&lt;p&gt;So why spend extra and take even the smallest performance hit just to add HTTPS to a static site?&lt;/p&gt;

&lt;p&gt;Here&amp;rsquo;s 5 good reasons you should switch to HTTPS for your static site today:&lt;/p&gt;

</summary>
    <content type="html">&lt;p&gt;&lt;img alt="SafeSource" src="/images/posts/lock.jpg" /&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Does HTTPS really make any sense for a static web site?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We&amp;rsquo;ve heard this a couple of times when talking about BitBalloon&amp;rsquo;s HTTPS support.&lt;/p&gt;

&lt;p&gt;It might seem like a static site is already plenty secure: there&amp;rsquo;s no moving parts, no risk of SQL injection, no openings for XSS attacks, no cookies to hijack, no personalized data sent over the wire, etc, etc, etc&amp;hellip;&lt;/p&gt;

&lt;p&gt;So why spend extra and take even the smallest performance hit just to add HTTPS to a static site?&lt;/p&gt;

&lt;p&gt;Here&amp;rsquo;s 5 good reasons you should switch to HTTPS for your static site today:&lt;/p&gt;



&lt;h2&gt;1. Improve your SEO&lt;/h2&gt;

&lt;p&gt;If you care about how well your site positions in Google searches, then adding HTTPS can give you a small boost. Google recently announced that they would &lt;a href="http://googlewebmastercentral.blogspot.com/2014/08/https-as-ranking-signal.html"&gt;start ranking sites with HTTPS support&lt;/a&gt; higher than sites that only works under HTTP.&lt;/p&gt;

&lt;h2&gt;2. Better Analytics&lt;/h2&gt;

&lt;p&gt;If you&amp;rsquo;re not using HTTPS for your site, you&amp;rsquo;re missing out on really important Analytics data.&lt;/p&gt;

&lt;p&gt;We all wan&amp;rsquo;t to know where our visitors comes from. Being able to dive into our traffic sources is one of the major selling points of Google Analytics or any of their alternatives.&lt;/p&gt;

&lt;p&gt;Browsers, however, won&amp;rsquo;t send the important &amp;ldquo;Referer&amp;rdquo; header when a user follows a link from a HTTPS site to a plain HTTP site. As more and more sites starts forcing HTTPS this becomes a larger and larger problem for site owners without HTTPS enabled.&lt;/p&gt;

&lt;p&gt;If a you got an inbound link from &lt;a href="https://news.ycombinator.com"&gt;HackerNews&lt;/a&gt; and your site is not HTTPS, you won&amp;rsquo;t see see Hacker News as a traffic source at all in your Analytics, since Hacker News forced HTTPS. Wan&amp;rsquo;t to know the bounce rate from the Hacker News audience? Tough luck unless you run HTTPS.&lt;/p&gt;

&lt;p&gt;Same goes for any other traffic source enforcing HTTPS and there are more of those every day.&lt;/p&gt;

&lt;h2&gt;3. Protect your content&lt;/h2&gt;

&lt;p&gt;Last month Comcast received a lot of flak when people found out they were &lt;a href="http://arstechnica.com/tech-policy/2014/09/why-comcasts-javascript-ad-injections-threaten-security-net-neutrality/"&gt;injecting adware into people&amp;rsquo;s browsers&lt;/a&gt; when using their Xfinity public Wi-Fi hotspots.&lt;/p&gt;

&lt;p&gt;They&amp;rsquo;re not the first, and they won&amp;rsquo;t be the last, to tamper with traffic over public networks. As a website owner, having other companies inject ads into your site is a disaster. Ads on a company site makes you seem cheap and can seriously hurt the first impression you make on your users.&lt;/p&gt;

&lt;p&gt;HTTPS means all the traffic between your site and your users is sent over an encrypted connection, and no-one can tamper with the source code of your site. So by enabling HTTPS you&amp;rsquo;re getting a guarantee that what your users see is really what you intended.&lt;/p&gt;

&lt;h2&gt;4. Protect your users&lt;/h2&gt;

&lt;p&gt;HTTPS doesn&amp;rsquo;t just protect users from lousy ISPs injecting ads, it also protects from more malicious man-in-the middle attacks. That inconspicuous little Facebook Like button could suddenly be opening up a phishing form to steal your users Facebook credentials. When your site is served unencrypted there&amp;rsquo;s nothing stopping a malicious attacker from using it as a convenient way to hijack your users.&lt;/p&gt;

&lt;h2&gt;5. Take advantage of bleeding edge technologies&lt;/h2&gt;

&lt;p&gt;During the last years browsers have gone from being simple document viewers, and grown into a full operating system of their own that can run complex web apps, access users location, file system, web cams, microphones and store data locally.&lt;/p&gt;

&lt;p&gt;With great power comes great responsibility, and one of the key security systems that all the web infrastructure relies on is the same-origin policy.&lt;/p&gt;

&lt;p&gt;When a user gives a site access to his location or his webcam, she does it based on the domain of the site asking for permission. As browsers gets more powerful, this means the trust bestowed on individual domains becomes much more valuable.&lt;/p&gt;

&lt;p&gt;Because of this browser vendors are starting to consider only granting these permissions to domains served with HTTPS. It&amp;rsquo;s really part of the same reason as #4. How can you trust a domain, if there&amp;rsquo;s no way to guarantee that what you&amp;rsquo;re getting from that domain is really what the owner of the domain intended?&lt;/p&gt;

&lt;p&gt;The new, incredibly interesting, Service Workers spec explicitly limits support to HTTPS origins and there&amp;rsquo;s talks about moving in that direction for some existing browser features like geolocation.&lt;/p&gt;

&lt;p&gt;So if you want to take full advantage of the power of modern browsers, you might have to enable HTTPS for your sites.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Fine Grained HTTP Header Control &amp; Basic Auth</title>
    <link rel="alternate" href="/blog/2014/09/29/fine-grained-header-control.html"/>
    <id>/blog/2014/09/29/fine-grained-header-control.html</id>
    <published>2014-09-29T00:00:00Z</published>
    <updated>2014-09-29T00:00:00Z</updated>
    <author>
      <name>Mathias Biilmann Christensen</name>
    </author>
    <summary type="html">&lt;p&gt;&lt;img alt="Basic Auth" src="/images/posts/policeman.svg" /&gt;&lt;/p&gt;

&lt;p&gt;Today we&amp;rsquo;re launching a new feature that lets you add fine grained access control through basic auth, and gives you control over all the HTTP headers for URLs within your site.&lt;/p&gt;

</summary>
    <content type="html">&lt;p&gt;&lt;img alt="Basic Auth" src="/images/posts/policeman.svg" /&gt;&lt;/p&gt;

&lt;p&gt;Today we&amp;rsquo;re launching a new feature that lets you add fine grained access control through basic auth, and gives you control over all the HTTP headers for URLs within your site.&lt;/p&gt;



&lt;p&gt;Our new &lt;code&gt;_headers&lt;/code&gt; file lets you control HTTP headers for specific paths within your site, as well as letting you configure HTTP basic auth.&lt;/p&gt;

&lt;p&gt;The format is very simple:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;## A path:
/templates/*
  # Headers for that path:
  Cache-Control: max-age: 3000
  Expires: 3000
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Paths can contain &lt;code&gt;*&lt;/code&gt; or &lt;code&gt;:placeholders&lt;/code&gt;. A &lt;code&gt;:placeholder&lt;/code&gt; matches anything except &lt;code&gt;/&lt;/code&gt; while a &lt;code&gt;*&lt;/code&gt; matches anything.&lt;/p&gt;

&lt;p&gt;Here&amp;rsquo;s an example of settings the &lt;code&gt;X-Frame-Options&lt;/code&gt; and &lt;code&gt;X-XSS-Protection&lt;/code&gt; headers for all pages on your site:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;/*
  X-Frame-Options: DENY
  X-XSS-Protection: 1; mode=block
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Basic auth&lt;/h2&gt;

&lt;p&gt;The headers file can also be used to set basic auth headers. It&amp;rsquo;s a simple way to limit access to particular parts of your site.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;/something/*
  Basic-Auth: someuser:somepassword anotheruser:anotherpassword
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This will trigger the built-in basic browser authentication for any URL under &lt;code&gt;/something&lt;/code&gt;. There&amp;rsquo;s two users defined here, one with the username &amp;ldquo;someuser&amp;rdquo; and password &amp;ldquo;somepassword&amp;rdquo;, the other with &amp;ldquo;anotheruser&amp;rdquo; and &amp;ldquo;anotherpassword&amp;rdquo;.&lt;/p&gt;

&lt;p&gt;Unlike other headers in the &lt;code&gt;_headers&lt;/code&gt; file, the &lt;code&gt;Basic-Auth&lt;/code&gt; header will obviously not be sent as a standard HTTP header but used to control the appropriate HTTP headers for basic authentication.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Behind the Scenes of StaticGen.com</title>
    <link rel="alternate" href="/blog/2014/07/31/behind-the-scenes-of-staticgen-dot-com.html"/>
    <id>/blog/2014/07/31/behind-the-scenes-of-staticgen-dot-com.html</id>
    <published>2014-07-31T00:00:00Z</published>
    <updated>2014-07-31T00:00:00Z</updated>
    <author>
      <name>Michael Ruescher</name>
    </author>
    <summary type="html">&lt;p&gt;&lt;iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/157332357&amp;amp;color=0066cc&amp;amp;auto_play=false&amp;amp;hide_related=false&amp;amp;show_artwork=true"&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;/p&gt;

&lt;p&gt;Mathias Biilmann, founder of BitBalloon, dives into details about the redesign of staticgen.com. Our listing of &lt;a href="https://www.staticgen.com"&gt;the top, open-source, static site generators&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;He shares how he used Github&amp;rsquo;s API, Gist, Middleman and Factor.io to build an always up to date, dynamic listing as a static website hosted on BitBalloon.&lt;/p&gt;

</summary>
    <content type="html">&lt;p&gt;&lt;iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/157332357&amp;amp;color=0066cc&amp;amp;auto_play=false&amp;amp;hide_related=false&amp;amp;show_artwork=true"&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;/p&gt;

&lt;p&gt;Mathias Biilmann, founder of BitBalloon, dives into details about the redesign of staticgen.com. Our listing of &lt;a href="https://www.staticgen.com"&gt;the top, open-source, static site generators&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;He shares how he used Github&amp;rsquo;s API, Gist, Middleman and Factor.io to build an always up to date, dynamic listing as a static website hosted on BitBalloon.&lt;/p&gt;



&lt;h3&gt;Transcript:&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Hey everybody. I&amp;rsquo;m Michael Ruescher.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; And I&amp;rsquo;m Mathias Biilmann.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; And this is the BitBalloon podcast number two. And today, we want to talk about the redesign of StaticGen.com.&lt;/p&gt;

&lt;p&gt;StaticGen.com was a simple leaderboard that I created about a year ago, when Mathias and I, first were kind of thinking about building a service that was focused on just static sites. And at that time, we were also running the Webpop platform, and I said, &amp;ldquo;Okay, this is a great opportunity to kind of use what&amp;rsquo;s there at Webpop, and build a simple little site that just gives me a little bit of oversight about what&amp;rsquo;s going on with the static generator, open-source community.&amp;rdquo;&lt;/p&gt;

&lt;p&gt;At that time, I sort of looked at static sites as more of this quick, like HTML one-pagers, but quickly discovered that there&amp;rsquo;s this whole world out there, people using static site generators to build much bigger, more interesting, complex sites. And there&amp;rsquo;s hundreds of these generators out there, and a large open-source community building them. So I figured I wanted to figure out how to surface the best ones, and which ones I should be looking at, if I ever need to build those kinds of sites.&lt;/p&gt;

&lt;p&gt;So we used the server-side extension framework that Webpop offers to write a little bit of JavaScript that basically looks at each Github repository of a generator that you add to the collection there. And basically, it pulls down the stats of how many stars, how many forks, and how many issues it has. And then puts those together into one big leaderboard, and also keeps a record for each individual generator, so you can see its progression through time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; Yeah.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; When I first put this thing together, it was pretty neat. I mean, you could very quickly see which ones were getting the most action, the most stars. And it definitely gave you a good idea of which languages were popular, and which frameworks had the most contributions going on, and the most plug-ins, etcetera.&lt;/p&gt;

&lt;p&gt;But one thing we found out pretty quickly is that all these people who are building these generators, wanted to get on the list. So people started leaving comments in the Disqus on the site. And the problem was kind of that I was pretty busy doing other stuff, and that every time this happened, I said, &amp;ldquo;Hey, can you add this?&amp;rdquo; It would just be all this additional work. And at the same time, I also didn&amp;rsquo;t really know how to represent them, necessarily. So if someone asks me to add their generator for them to our listing, it was kind of like, &amp;ldquo;Well, okay. I guess I&amp;rsquo;m just going to look at your GitHub page if I have time, and basically copy and paste what you have there, and hope that that works,&amp;rdquo; right?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; Yeah. And you then try to, like dig up stuff that can sometimes not be completely obvious, such as what kind of templates is this generator primarily using, and so on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Right. And there&amp;rsquo;s all kinds of people going &amp;ldquo;Hey, can you fix this? This actually uses this kind of template, etcetera.&amp;rdquo; And so it kind of became unscalable in that sense, and we really weren&amp;rsquo;t set up to make this a collaborative process. And another issue that was sort of coming up with it was that we were making a ton of API requests to Github, and that was causing the site to load rather slowly at times.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; We had a bunch of caching underneath it, but still it&amp;rsquo;s just like, just to generate the index page, there&amp;rsquo;s no other way through the Github API, than to make at least one API request for each generator on that index page, and there&amp;rsquo;s just no way that all of those requests were always getting cached, so load times became a real problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; So this thing kind of sat around for a while, and then you decided you&amp;rsquo;d give it a refresh.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; Yeah. I really like the site, and I like having a place with just all the static site generators. There was an another list that came up, staticsitegenerators.net I think, and I was actually using that a bit to do research and so on, but that&amp;rsquo;s great resource for, like everything in the static world, but it&amp;rsquo;s just also a very large list with a lot of things on it that&amp;rsquo;s not necessarily static site generators actually. Like a bunch of the stuff there is also flat file CMSs, or even hosting services. And I sort of wanted a list that was really just static site generators, and that also had some more details on each of them. And in the mean time, we launched BitBalloon and had gotten quite a bit of experience ourselves with building sites with static site generators. BitBallon.com is built with Middleman.&lt;/p&gt;

&lt;p&gt;So I didn&amp;rsquo;t actually like this whole process of having this, sort of directory with all the ratings and so on as a dynamic site. It makes a lot more sense as a static site because&amp;hellip; it doesn&amp;rsquo;t make sense that every time someone goes and see the index, we need to ask Github about all the details of all the repositories. It makes a lot more sense that just once a day or twice a day, we just run a build and find all those statistics and build the leaderboard of the day. I was thinking about that for a while, but also didn&amp;rsquo;t really have the time to set up all of that. And then I ran into the guys from Factor.io, that actually started integrating both BitBalloon and Middleman into their service. And what their service does is that it&amp;rsquo;s simply a deployment service, where you can, sort of use a little DSL that they&amp;rsquo;ve written, to plot together different types of services and data sources. And so in this case, once they had added BitBalloon and Middleman, it was easy for us to say &amp;ldquo;take a time resource and make sure that every six hours you fetch this source code from Github, and then you run the Middleman build, and then you push the result to BitBalloon&amp;rdquo;. All just in five little lines of their DSL. And that&amp;rsquo;s a really nice way of skipping the whole process of also having to keep tabs on some server somewhere that needs to run a crontab and so on, and just automate it all. So once I saw that that was possible, I just started to hack on a new version of static based on Middleman.&lt;/p&gt;

&lt;p&gt;So for those who don&amp;rsquo;t know, Middleman is a static site generator in Ruby that has a feel, kind of like, Rails for static sites. If you come from Rails development, you&amp;rsquo;ll immediately feel very familiar with how Middleman, sort of organizes stuff, and with the Asset Pipeline of Middleman, and with the way you can use the typical template languages that you were used to from Rails, by default ERB, but you could also use HAML or the like and it&amp;rsquo;s easy to create CoffeeScript and get Sass and those kind of things working. And the way a typical Middleman site works is that you have, sort of different collections of content. What each collection is just a folder with markdown files in them, and each markdown file is a piece of content with a body text and some metadata of data called frontmatter, that you write in the very start of the file in YAML.&lt;/p&gt;

&lt;p&gt;So what I did with Middleman was making a folder with a collection of Github projects. Each project is a static site generator. There&amp;rsquo;s some metadata in the beginning that just tells us what the Github repository is, what the title is, and a little short description, and the data for what language it&amp;rsquo;s in, what kind of template it uses. And then there&amp;rsquo;s just a body text with the description of that static site generator.&lt;/p&gt;

&lt;p&gt;And then just from that, I could sort of start just building up the whole design of the new StaticGen. Sort of taking elements from the old one and rewriting them a bit, and making some JavaScript based filters and authoring, and just get the whole site to work as a completely normal Middleman project that would just list all the site generators I had added there.&lt;/p&gt;

&lt;p&gt;To transition, I made like a quick little Ruby script that just fetched all the data we already had in Webpop, from the old version of StaticGen, and just put each of those into a Markdown file, and then actually just grabbed the Readme from the repository from each of them, and put it as the body text. And then I could just go in and sort of edit out the stuff that I didn&amp;rsquo;t really want to have in StaticGen.com. I didn&amp;rsquo;t want to have like the whole, all the set up instructions, and how to build and install and that stuff. I just edited out anything that wasn&amp;rsquo;t just the pure description of what is the static site generator, what&amp;rsquo;s the philosophy of it, and what&amp;rsquo;s the idea of it. And then once I sort of actually kind of done most of the design and got the whole site just functioning, and got the list working, I then started to work on this little extension to Middleman that would&amp;hellip; Like Middleman allows you to sort of hook into its representation of the pages you have in a site. So during build time, you can add all the information to those pages. So in this case, I&amp;hellip;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Are you just operating on the HTML there, for the output?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; No. It&amp;rsquo;s operating on sort of the&amp;hellip; like each page is an object that has,  different fields: A title&amp;hellip;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Got you. Right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; And in the case of StaticGen,  in the projects folder, each project is a markdown file, and it then has, front end matter, where each of them has a title, a repo, a homepage, a language, a license, a list of templates, and a description. So the object I would operate on would have all of those fields.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; And that means that what the Github extension would do is that it would look at the repo field.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; And then will speak to the Github API, and fetch the data on that repo from Github, then add to that object, methods for accessing, like the number of stars, the number of forks, the number of issues. And then obviously, I could easily, include those into the page, and even with Middleman, it&amp;rsquo;s easy enough to just write stuff to sort all the output, show all the repositories, but sort it by number of stars in Github. And of course, below the scenes, this has sort of the same issue as Webpop, like to build the index page, you do need to make an API request to Github for every single static site generator, to get the data. But the big difference with this flow is just that, since this happens at the build time, it really doesn&amp;rsquo;t matter. I mean, it doesn&amp;rsquo;t matter if it takes 15 seconds or something like that, to fetch all the data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; And you get what? Like 5,000 requests a day, or something, so&amp;hellip;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; Yeah. And the beauty of this here is that it&amp;rsquo;s just at build time, so when I run the Middleman build, it will do all these queries to Github, but then it will push the site to BitBalloon as a completely static site. And then once it&amp;rsquo;s live, there are no dynamic actions going on there. So it really doesn&amp;rsquo;t matter at all how many API requests we need to do, and how much work we need to do. We don&amp;rsquo;t have to worry about being especially efficient or any thing, because it&amp;rsquo;s really just being run once a day.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Absolutely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; And then one thing I needed to solve was: what would I do with&amp;hellip; like one thing we already did in the first version was to sort of keep track of&amp;hellip; keep a little archive for each static site generator, where we could have, the historical data on how many&amp;hellip;  making it easy to go in and see, like how is this static site generator trending at the moment? Is it getting more stars? Is it getting less stars?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Yeah. And that&amp;rsquo;s something I added at that time because I didn&amp;rsquo;t see any way in Github to kind of get this historical record, and I was thinking, you know, what&amp;rsquo;s something we can add beyond what you can just see in the Github repo. So this isn&amp;rsquo;t just basically reproducing what&amp;rsquo;s already on Github. And so I kind of figured, well I might as well start logging this, and who knows what kind of interesting thing we can pull out of it later. As long as we have the data, it creates opportunities down the road.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; Absolutely. So I definitely wanted to have that as well for our static version. But of course, I have to think about, so what am I going to do? I don&amp;rsquo;t want to have to run a database somewhere. I mean, I really wanted this simple system, where build could just run on Factor. Where there&amp;rsquo;s actually no server somewhere running the build, it&amp;rsquo;s just this service called Factor that just builds it and push it to BitBalloon. So I definitively didn&amp;rsquo;t want to have to host a database somewhere, and I also just wanted to keep it really simple, for people to&amp;hellip; I mean, one of the big ideas with doing this as a static site, apart just from the fact that it fits the model really well because you get away from the problem of having to do all those API requests in real time, it&amp;rsquo;s also just ideal that the whole site can just be open-source on Github, and when people want to add a new static site generator, instead of leaving us comments and discuss and asking to do it, they can just send in a pull request and say, &amp;ldquo;Hey, here&amp;rsquo;s a new static site generator.&amp;rdquo; So I also wanted to make it really easy for people to be able to just download the repositories and run a Middleman build. So I also don&amp;rsquo;t&amp;hellip; I didn&amp;rsquo;t want to have some weird database running, and stuff like that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; It needed to just be really simple. So one of the things that are really nice is that, again, since this is just a process that&amp;rsquo;s supposed to run once a day, you really don&amp;rsquo;t have to worry about typical things, such as latency to a database, or speed, or stuff like that. You can be much more lenient with those kinds of things. So the solution that I&amp;rsquo;m using now is that, what you need to do to run Middleman in a way that stores the stats and everything, is just to set up an empty Gist. And then when you run the build, you need to have this environment variables, your access token to, an access token for the Github API, and the ID of that Gist. And then during the build, the Middleman extension will actually use the Github API to use that Gist as kind of JSON database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Oh wow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; So it just, like generates a big fat JSON with all the stats of the  the stats of the static site generators, and then just stores that in the Gist. So I actually have like a Gist that has like the archive for StaticGen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; And just with the whole history of how many stats of each of these had and so on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Yeah.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; And I mean it&amp;rsquo;s not terribly efficient or anything. It&amp;rsquo;s not like the recommended database solution for dynamic site for sure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; But it&amp;rsquo;s just really simple for this, and the beauty of it is that it really doesn&amp;rsquo;t need to be very efficient. I mean, I can just store it and grab it, and then that Gist also kind of works as a cache. So if the data for the day is already in that Gist, we don&amp;rsquo;t need to make new API requests. So in the end, it kind of speeds up also the build process a bit. But it&amp;rsquo;s just also an example of how we can just do things in a different way, when you move the site generation from run time to compile time, actually.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Is that something you came up with yourself?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; Yeah.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Or is that something you saw somewhere else? Because I&amp;rsquo;ve never heard of such a thing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; No. This is definitely my own&amp;hellip; my own invention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Wow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; And it&amp;rsquo;s working great.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Sure, yeah. Gist don&amp;rsquo;t go away, I guess you can rely on them, right?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; Yeah, it&amp;rsquo;s there. And the beauty is that you can even roll it back and roll it forward or whatever.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Perfect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; Each Gist is like a little Github repository in its own way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; I think after this podcast, you&amp;rsquo;re going to get a phone call from Github saying, &amp;ldquo;What have you done?&amp;rdquo; It&amp;rsquo;s going to be the new, like hipster database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; Absolutely. But I mean, I was thinking of various options, but it was just easy because the API I was working with was already Github. So I was already reading all this data from Github, so it was sort of natural that I would also just use Github as my database for writing data. But you could imagine many ways. Another option I was considering was just having a Google Doc spreadsheet with the historical data. And they also have a JSON, OAuth2-based API for that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; So that&amp;rsquo;s another thing that you can totally use for a database in these kind of static sites.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Yeah.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; But you would never really want to use as a database in a dynamic site. But again, in this case, the whole requirement&amp;hellip; the requirements for a database change fundamentally when you just care about it, being up and being there, but you don&amp;rsquo;t really care about latency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Right. So let&amp;rsquo;s go back to, you know, one of the things you mentioned, I think we kind of crossed over earlier, is the fact that this is now an open-source project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; Yeah.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; What are some of the implications of that now? Like what have we seen that&amp;rsquo;s different from when it was just a private project on Webpop?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; Yeah. Obviously, the big difference is, that since we launched it we&amp;rsquo;ve gotten a bunch of pull requests. Where people have been&amp;hellip; especially adding new static site generators, some corrected, some data in existing ones, and some pull requests just to help us with things, like we have some rules that used to say that it had to be open source, and under that point that it had to be accessible on Github. Someone made a really good point of, open source and &amp;ldquo;accessible on Github&amp;rdquo; being two completely different things. And made a pull request just correcting that in the rules. And it&amp;rsquo;s a really awesome flow, actually. You just get a pull request with a new static site generator. You can just go in and look it over. And then if everything is fine with that pull request, I just merge it in. Then Factor will pick up that there&amp;rsquo;s a new commit to staticgen, and it will just run the build. And once it&amp;rsquo;s done, it will deploy to BitBalloon. So it makes the whole process of having people contribute and getting new static site generators added and then making sure that the information we have on the static site generators are up to date, really smooth and really easy, and very collaborative.&lt;/p&gt;

&lt;p&gt;A great example also of how nice this kind of process can be, is also that, again, since the end result is always just a static site, and due to the way BitBalloon works, where we really have atomic deploys and so on. I didn&amp;rsquo;t have to worry at all when we were on the front page in Hacker News, and a bunch of pull requests were coming in, about just merging those in and let Factor deploy it. I&amp;rsquo;m sure that if this had been more of a dynamic site, I would have been a little more nervous of sort of tampering with it while it was getting tons of traffic. But it&amp;rsquo;s a nice bonus now that you can just do this, then the new version will just roll out once the build has been working fine and everything is good.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; So as you were considering what to rebuild the site in, you obviously ended up with picking Middleman, are there any other generators that caught your eye?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; Yeah. I mean, I&amp;rsquo;ve lately been diving into various of them, and it&amp;rsquo;s such an interesting field just because there are more and more of them coming out all the time. And one of the nice things is that you can sort of pick very much, based on what kind of project you&amp;rsquo;re making. And a lot of them will have different strong points.&lt;/p&gt;

&lt;p&gt;I could have considered Jekyll as well. That&amp;rsquo;s obviously one of the default choices, and it&amp;rsquo;s really nice as well and it&amp;rsquo;s quite easy to make plug-ins for as well. It just doesn&amp;rsquo;t have as much of a&amp;hellip; like a nice thing with Middleman is this way that it has an idea of this sitemap that your extensions can interact with, that made it a really good fit for this because I just wanted to sort of add stuff to that sitemap. And with this project, I was also just pragmatic, and since we already built BitBalloon that common Middleman I was familiar and it was easy to jump into.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; Some of the other like&amp;hellip; there are also static site generators that are more suited to specific things like,  Assemble is a nice grunt-based static site generator. I know that, for example, the guys from ZURB use it to build foundation&amp;rsquo;s documentation with. But it&amp;rsquo;s not like, as simple as&amp;hellip; in my opinion, it&amp;rsquo;s not very good for anything with more of a content model or something like that. But it&amp;rsquo;s really nice that it&amp;rsquo;s just like it integrates into Grunt. So Assemble is great for building documentation and stuff like that, for project where you already have your Grunt file and everything, you can just likehook in a little static site generator to build part of the project as a static site.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; That makes sense.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; I&amp;rsquo;ve been looking quite a bit on Hugo lately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Oh yeah.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; And it looks really interesting. It&amp;rsquo;s one of the new Go-based static site generators. And that&amp;rsquo;s kind of like, it has some&amp;hellip; just being Go, it&amp;rsquo;s just a download. It doesn&amp;rsquo;t have any dependencies and so on. And of course Go is really fast, and it looks like it has a really interesting model as well. So that&amp;rsquo;s one of the ones I&amp;rsquo;m sort of following with interest. And then apart from that, it&amp;rsquo;s also really like, the nice thing with static site generators, that there are several in just about any language you want. So for many projects, picking a static site generator is also just a question of, what languages are we already using. If people are using Python and Django, it will probably be obvious to pick something like Cactus that, just like Middleman, sort of feels like a Rails for static sites, then Cactus sort of feels like a Django for static sites.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; And I see that Pelican is consistently in the top three of static site generators. Python.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; Yeah. Pelican is also sort of one of those that&amp;rsquo;s been around for a long time. Like just about as long as&amp;hellip;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Imports from WordPress.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; Yeah. It&amp;rsquo;s also cool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Nice. What do you think motivates people to make all these generators? I mean, there&amp;rsquo;s hundreds of them out here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; Yeah. I think there&amp;rsquo;s a lot of different motivations. I think, in general, every developer at some point has made their own blogging engine. And with static site generators, it&amp;rsquo;s a little the same. A lot of people will just start saying, &amp;ldquo;I&amp;rsquo;m a developer, I want my own site. I want it to generate some way, so let me just build my own static site generator and generate it&amp;rdquo;. So a bunch of them are like very personal projects, with just like, &amp;ldquo;Okay, I&amp;rsquo;ll do this to scratch an itch&amp;rdquo; And then some of those gets popular with a lot of people. Then you can see that some of them are more architected. Some of them comes out of&amp;hellip; like Cactus came out of an agency&amp;hellip; Assemble really came out of this idea, of let&amp;rsquo;s just use Grunt and create some grunt helpers help us that can basically build static sites from a directory. And then there&amp;rsquo;s also just the fact that some of them are focused on different things. Jekyll was from the start, like really focused on blogging, and just made it really simple to make a static blog. Whereas others are much more based on building landing pages, or documentation. And of course, once Jekyll came out, there was also a bunch of them that people built to have something like Jekyll, but in their language of choice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Absolutely. Yeah, there&amp;rsquo;s quite a few of those.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; Yeah. Which makes sense. I mean, it&amp;rsquo;s one of the reasons for building BitBalloon in a way that this process just makes a lot of sense, where you don&amp;rsquo;t, move all the building to the compile time side of things. And then you use something like BitBalloon to just deploy them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Yeah.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; And all the choice around, like what kind of tools and workflow, and so on, do we want to use? Well, it really doesn&amp;rsquo;t matter. I mean, it&amp;rsquo;s just what suits you best during the compile time phase. And if you use, if you&amp;rsquo;re a start up and you&amp;rsquo;re building a tech product, I imagine that it would always makes the most sense to have the static site generator that was as similar as possible to the stack you&amp;rsquo;re already using to build your technology with.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; So I&amp;rsquo;ve got one last question for you while I got you on the horn here. So one thing I&amp;rsquo;ve been kind of&amp;hellip; I&amp;rsquo;ve got a few friends that are photographers, and I&amp;rsquo;ve seen their solution. They&amp;rsquo;re not web developers, and they ended up with some sort of plug-in on their WordPress site, to serve their photography. But it&amp;rsquo;s basically like killing them. Like their site just kind of grinds to a halt as soon as they get traffic. And I&amp;rsquo;ve really been thinking that a static site on BitBalloon would be the ideal solution for them. The only kind of disconnect is, that they&amp;rsquo;re not hackers, they&amp;rsquo;ve never run a command line. But I feel like they would cross that chasm if they could get a result, where they could just kind of like load a folder of files in, and that would sort of create a new, tab or thing of photos that people can check out. Basically a new post, right? And so I don&amp;rsquo;t know if you&amp;rsquo;ve looked into this, or just through your perusing of these generators. If you have one that sort of stands out. I mean, you could probably do something like this with Middleman, I would assume.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; Yeah. But actually, it&amp;rsquo;s a fun question because one of the pull requests we got for StaticGen after we launched was a very unknown, like it just has two stars on Github, a small static site generator called ThumbsUp that basically does that. It&amp;rsquo;s actually&amp;hellip; I haven&amp;rsquo;t really tried it, but it looks like it&amp;rsquo;s really cool idea. The input is just a directory, where for each photo album you just have  photos, and then you just run one command line, and it will build you a photogallery website with different albums, and so on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Yeah, right on. This might be it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; So that&amp;rsquo;s definitively a good starting point, I think. And it&amp;rsquo;s something I only know about because we got that pull request for Static Gen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; So that&amp;rsquo;ll be one to explore. I&amp;rsquo;ll give it a star right now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; Yeah. I&amp;rsquo;ll give it one as well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Well, right on man. This has been really fun. I hope that people learned a little something, and definitely check out &lt;a href="https://github.com/bitballoon/staticgen"&gt;StaticGen on Github&lt;/a&gt;, if you&amp;rsquo;re curious. All that how it works, pull it down.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; Yeah. Send pull requests!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Absolutely. And I will catch you guys next time.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Download Your Old Deploys</title>
    <link rel="alternate" href="/blog/2014/07/07/deploy-version-control.html"/>
    <id>/blog/2014/07/07/deploy-version-control.html</id>
    <published>2014-07-07T00:00:00Z</published>
    <updated>2014-07-07T00:00:00Z</updated>
    <author>
      <name>Mathias Biilmann Christensen</name>
    </author>
    <summary type="html">&lt;p&gt;&lt;img alt="Deploy Drafts" src="/images/posts/deploys-with-downloads.png" /&gt;&lt;/p&gt;

&lt;p&gt;Ever lost your local version of a website? Ever wish you had stored an earlier version after making a change?&lt;/p&gt;

&lt;p&gt;From today you can download the source files for any version of your website you&amp;rsquo;ve ever hosted on BitBalloon.&lt;/p&gt;

</summary>
    <content type="html">&lt;p&gt;&lt;img alt="Deploy Drafts" src="/images/posts/deploys-with-downloads.png" /&gt;&lt;/p&gt;

&lt;p&gt;Ever lost your local version of a website? Ever wish you had stored an earlier version after making a change?&lt;/p&gt;

&lt;p&gt;From today you can download the source files for any version of your website you&amp;rsquo;ve ever hosted on BitBalloon.&lt;/p&gt;



&lt;p&gt;Just go to the &lt;strong&gt;History&lt;/strong&gt; tab when viewing one of your sites in the admin backend. Next to each deploy you&amp;rsquo;ll find a new &lt;strong&gt;Download&lt;/strong&gt; button that will let you download a zip with all the original source files you uploaded for that deploy.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Draft Deploys</title>
    <link rel="alternate" href="/blog/2014/06/13/draft-deploys.html"/>
    <id>/blog/2014/06/13/draft-deploys.html</id>
    <published>2014-06-13T00:00:00Z</published>
    <updated>2014-06-13T00:00:00Z</updated>
    <author>
      <name>Mathias Biilmann Christensen</name>
    </author>
    <summary type="html">&lt;p&gt;&lt;img alt="Deploy Drafts" src="/images/posts/draft-deploys.png" /&gt;&lt;/p&gt;

&lt;p&gt;Today we&amp;rsquo;re launching a new API feature that&amp;rsquo;ll give you a bit more control over the deployment process, by allowing you to mark a deploy as a draft.&lt;/p&gt;

</summary>
    <content type="html">&lt;p&gt;&lt;img alt="Deploy Drafts" src="/images/posts/draft-deploys.png" /&gt;&lt;/p&gt;

&lt;p&gt;Today we&amp;rsquo;re launching a new API feature that&amp;rsquo;ll give you a bit more control over the deployment process, by allowing you to mark a deploy as a draft.&lt;/p&gt;



&lt;p&gt;A draft deploy won&amp;rsquo;t automatically get published once all the uploaded assets have been prepared on the CDN and processed for max performance.&lt;/p&gt;

&lt;p&gt;Instead you&amp;rsquo;ll be able to view the deploy on it&amp;rsquo;s deploy url and then publish it once you&amp;rsquo;ve verified that everything looks right.&lt;/p&gt;

&lt;p&gt;Here&amp;rsquo;s some small code examples based on the Ruby API client:&lt;/p&gt;

&lt;pre&gt;&lt;code class="ruby"&gt;site = client.get(&amp;quot;my-site-id&amp;quot;)
deploy = site.deploys.create(:dir =&amp;gt; &amp;quot;/path/to/my/folder&amp;quot;, :draft =&amp;gt; true)
deploy.wait_for_ready

# Verify that everything looks right on deploy.deploy_url before publushing

deploy.publish
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you&amp;rsquo;re deploying a single page app, a great usecase for this would be to run an integration test suite against the BitBalloon deployed page as part of a continous deployment process, and only publish the deploy if all tests pass.&lt;/p&gt;

&lt;p&gt;If you&amp;rsquo;re doing work for a client, this can be a great way to let your client validate a new version before publishing.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>The Middleman BitBalloon Extension</title>
    <link rel="alternate" href="/blog/2014/05/16/middleman-biballoon.html"/>
    <id>/blog/2014/05/16/middleman-biballoon.html</id>
    <published>2014-05-16T00:00:00Z</published>
    <updated>2014-05-16T00:00:00Z</updated>
    <author>
      <name>Mathias Biilmann Christensen</name>
    </author>
    <summary type="html">&lt;p&gt;&lt;img alt="Middleman Logo" src="/images/posts/middleman.png" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://middlemanapp.com/"&gt;Middleman&lt;/a&gt; is one of our favorite static site generators here at BitBalloon.&lt;/p&gt;

&lt;p&gt;This site is built with Middleman and we recently launched &lt;a href="http://www.staticgen.com"&gt;StaticGen&lt;/a&gt;, a directory of open-source static site generators, powered by Middleman.&lt;/p&gt;

&lt;p&gt;Our new &lt;a href="https://github.com/BitBalloon/middleman-bitballoon"&gt;middleman-bitballoon&lt;/a&gt; extension now makes it even easier to deploy Middleman built sites to BitBalloon.&lt;/p&gt;

</summary>
    <content type="html">&lt;p&gt;&lt;img alt="Middleman Logo" src="/images/posts/middleman.png" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://middlemanapp.com/"&gt;Middleman&lt;/a&gt; is one of our favorite static site generators here at BitBalloon.&lt;/p&gt;

&lt;p&gt;This site is built with Middleman and we recently launched &lt;a href="http://www.staticgen.com"&gt;StaticGen&lt;/a&gt;, a directory of open-source static site generators, powered by Middleman.&lt;/p&gt;

&lt;p&gt;Our new &lt;a href="https://github.com/BitBalloon/middleman-bitballoon"&gt;middleman-bitballoon&lt;/a&gt; extension now makes it even easier to deploy Middleman built sites to BitBalloon.&lt;/p&gt;



&lt;h3&gt;Using the Plugin&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;middleman-bitballoon&lt;/code&gt; extension adds a &lt;code&gt;middleman deploy&lt;/code&gt; command to Middleman.&lt;/p&gt;

&lt;p&gt;First add &lt;code&gt;middleman-bitballoon&lt;/code&gt; to the Gemfile of you Middleman project:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;gem &amp;#39;middleman-bitballoon&amp;#39;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And then run &lt;code&gt;bundle install&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Before you can deploy, you&amp;rsquo;ll need to configure the extension in your config.rb:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;activate :bitballoon do |bitballoon|
  bitballoon.token = ENV[&amp;quot;BB_TOKEN&amp;quot;]
  bitballoon.site  = &amp;quot;my-bitballoon-site.bitballoon.com&amp;quot;

  # Optional: always run a build before deploying
  bitballoon.build_before = true
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We recommend setting the Access Token from an environment variable, but obviously you can also load it from a file or hardcode it in your config.rb.&lt;/p&gt;

&lt;p&gt;To generate a token, just go to &lt;a href="https://www.bitballoon.com/applications"&gt;the BitBalloon Applications screen&lt;/a&gt; and create a personal token.&lt;/p&gt;

&lt;p&gt;Once the project has been configured right, you can deploy at any time with:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;bundle exec middleman deploy
&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  <entry>
    <title>Grunt BitBalloon Deploy Task</title>
    <link rel="alternate" href="/blog/2014/04/28/grunt-bitballoon.html"/>
    <id>/blog/2014/04/28/grunt-bitballoon.html</id>
    <published>2014-04-28T00:00:00Z</published>
    <updated>2014-04-28T00:00:00Z</updated>
    <author>
      <name>Mathias Biilmann Christensen</name>
    </author>
    <summary type="html">&lt;p&gt;&lt;img alt="Grunt Logo" src="/images/posts/grunt-logo.png" /&gt;&lt;/p&gt;

&lt;p&gt;Grunt has quickly become the standard build-tool for the front-end world, with a huge ecosystem with hundreds of plugins you can use to automate just about anything.&lt;/p&gt;

&lt;p&gt;Today we&amp;rsquo;re adding one more to the list: &lt;a href="https://github.com/BitBalloon/grunt-bitballoon"&gt;grunt-bitballoon&lt;/a&gt;.&lt;/p&gt;

</summary>
    <content type="html">&lt;p&gt;&lt;img alt="Grunt Logo" src="/images/posts/grunt-logo.png" /&gt;&lt;/p&gt;

&lt;p&gt;Grunt has quickly become the standard build-tool for the front-end world, with a huge ecosystem with hundreds of plugins you can use to automate just about anything.&lt;/p&gt;

&lt;p&gt;Today we&amp;rsquo;re adding one more to the list: &lt;a href="https://github.com/BitBalloon/grunt-bitballoon"&gt;grunt-bitballoon&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;The BitBalloon Grunt plugin makes it straight forward to deploy to BitBalloon straight from your Gruntfile. It&amp;rsquo;s a multi-task plugin, so you can easily setup development, staging and production targets.&lt;/p&gt;

&lt;p&gt;Here&amp;rsquo;s a simple example of a Gruntfile using the plugin to setup a separate dev and prod target:&lt;/p&gt;

&lt;pre&gt;&lt;code class="javascript"&gt;grunt.initConfig({
  bb: grunt.file.readJSON(&amp;#39;./grunt-bitballoon.json&amp;#39;),
  bitballoon: {
    options: {
      token: &amp;#39;&amp;lt;%= bb.token %&amp;gt;&amp;#39;,
      src: &amp;#39;dist&amp;#39;
    },
    dev: {
      site: &amp;quot;http://my-staging-site.bitballoon.com&amp;quot;
    },
    prod: {
      site: &amp;quot;http://my-production-site.bitballoon.com&amp;quot;
    }
  }
});

grunt.registerTask(&amp;#39;deploy&amp;#39;, [
  &amp;#39;bitballoon:prod&amp;#39;
]);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Get all the details in our &lt;a href="/docs/grunt"&gt;grunt-bitballoon docs&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Ara T Howard on Static Sites, Dynamic Content &amp; Creativity</title>
    <link rel="alternate" href="/blog/2014/03/27/ara-t-howard-on-static-sites-dynamic-content-and-creativity.html"/>
    <id>/blog/2014/03/27/ara-t-howard-on-static-sites-dynamic-content-and-creativity.html</id>
    <published>2014-03-27T00:00:00Z</published>
    <updated>2014-03-27T00:00:00Z</updated>
    <author>
      <name>Michael Ruescher</name>
    </author>
    <summary type="html">&lt;iframe class="soundcloud-player" width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/140631507&amp;amp;color=0066cc&amp;amp;auto_play=false&amp;amp;hide_related=false&amp;amp;show_artwork=true"&gt;&lt;/iframe&gt;

&lt;p&gt;Ara T Howard, long time Rubyist and partner at the Boulder Colorado based web agency, Dojo4, explains why using a static site architecture unleashes the creative forces of the agency&amp;rsquo;s front end talent.&lt;/p&gt;

&lt;p&gt;He shares how to use Draftin and Middleman to create a collaborative authoring environment that seamlessly publishes Markdown documents to rendered HTML on BitBalloon.&lt;/p&gt;

</summary>
    <content type="html">&lt;iframe class="soundcloud-player" width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/140631507&amp;amp;color=0066cc&amp;amp;auto_play=false&amp;amp;hide_related=false&amp;amp;show_artwork=true"&gt;&lt;/iframe&gt;

&lt;p&gt;Ara T Howard, long time Rubyist and partner at the Boulder Colorado based web agency, Dojo4, explains why using a static site architecture unleashes the creative forces of the agency&amp;rsquo;s front end talent.&lt;/p&gt;

&lt;p&gt;He shares how to use Draftin and Middleman to create a collaborative authoring environment that seamlessly publishes Markdown documents to rendered HTML on BitBalloon.&lt;/p&gt;



&lt;h3&gt;Transcript:&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Hey everybody I&amp;rsquo;m Mike Ruescher and I am here with Ara Howard from Dojo4 and this is the BitBalloon podcast where we discuss new ways of developing websites and applications using the static site architecture. So Ara How&amp;rsquo;s it going?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ara:&lt;/strong&gt; It&amp;rsquo;s going great. Launching some sites today.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Okay. I&amp;rsquo;ll try to stick to the point then so you can get back to launching stuff! You guys are out in Boulder, Colorado, right?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ara:&lt;/strong&gt; Yeah, Dojo4, we&amp;rsquo;re a creative technology agency that&amp;rsquo;s located in downtown Boulder. We&amp;rsquo;ve been working here as the agency for about five years, although the founders worked together in some fashion for a number of years before that. And so we&amp;rsquo;re really fortunate to be right in the middle of what we like to call start-up alley here in Boulder and we get to do a lot of fun stuff. Everything from website to native apps, to Rails applications, to massive like cloud infrastructure, so yeah.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Quite the range there. Sounds like you&amp;rsquo;re no strangers to building fully dynamic web properties.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ara:&lt;/strong&gt; No. Absolutely not. I&amp;rsquo;ve been a Ruby developer since Ruby 1.4 maybe even a little bit before then, long before rails was on the scene and you know at that point, I was building a lot of dynamic web applications for NOAA through the Co-operative Institute for Research and Sciences and we were doing — so at that point it was mainly CGI applications but also some really, really sophisticated java applications using old school MPM-CGI which is new school kids call that Server push. But yeah, I&amp;rsquo;ve been building dynamic data-driven web applications for, I&amp;rsquo;m embarrassed to say, probably more than 15 years at this point.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; So, you started this Dojo4 about 5 years ago?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ara:&lt;/strong&gt; Yeah. At the time I became a partner in Dojo4, I had an LLC codeforpeople and a lot of people know that name from the Ruby world, it&amp;rsquo;s 200 gems, definitely way more than 150 gems in the Ruby community at this point, so that was my former consultancy and then that company and myself along with a few other individuals came together to do something a little bit bigger than just doing rails work including design and production work, copywriting and interface design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Integrating vertically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ara:&lt;/strong&gt; Yeah there you go.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Excellent. So when you guys started out, you obviously had to  put up some sort of website to tell the world about who you are, and was that a static site from the beginning?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ara:&lt;/strong&gt; Yeah. It was actually and I&amp;rsquo;ve always been a big fan of static. To the extent that ten years ago I was using some dynamic tools like the Ruby CGI library, most people don&amp;rsquo;t know that you can run CGI programs off standard in and standard out. And I was basically developing my own static site generators. So that I could work with some of the really early Ruby templating libraries. Don&amp;rsquo;t know if anyone remembers that. We were doing a lot of template driven static site generators, at the time. Like 10 years ago before it was really in fashion. And I&amp;rsquo;ve always been a fan of that just for the obvious reason that static scales like mad. But also as a developer, I like having everything in source control, My IDE is VIM and I like just being able to work.&lt;/p&gt;

&lt;p&gt;I believe in the power of plain text.&lt;/p&gt;

&lt;p&gt;Static makes it possible to create architectures that scale really easily, so I&amp;rsquo;ve always had a preference for that. And when we started Dojo4 our very first website was something static. Our creative director and I had a couple versions of the site that was static, of course it was checked into Github and we went through a variety of deployment solutions. It was even running out of a box in a closet here at one point. And it was on a EC2 node we hosted on S3 at one point when that first was possible. So I&amp;rsquo;ve been deploying dynamically generated static sites for the duration of the time I&amp;rsquo;ve been working on the internet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Then at some point though, you guys moved on to a more CMS-based solution, which actually had a database which was generating your site, not pre-rendering it, right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ara:&lt;/strong&gt; Yeah, and at the time it was of the former partners of Dojo4, and we had this discussion and we really wanted to encourage people to write. I mean that was the motivation, to increase participation in the development of the website that was the impetus for moving on to a more CMS-based tooling, and so we looked at a variety of things and some of the people in the shop were experts with expression engine, of course had experience with WordPress but as developers we wanted input into having a modern framework that was simpler to deploy, easier to manage, and Github had a variety of deployment options and was more extensible, solid MVC framework. So that ruled out pretty much most of the popular CMS&amp;rsquo;s with the exception say of expression engine which was ruled out on the basis of it being semi-closed. Its not open source software. And so we ruled it out.&lt;/p&gt;

&lt;p&gt;We ended up going with Refinery at the time which it was a nice toolkit. We rolled out a new site and it certainly worked. Certainly people who were non technical could use it, so we had that setup for a while and we noticed that people weren&amp;rsquo;t doing a significant amount of new writing. Design was limited because the people who were sort of passionate about design so on a spectrum of designers and front end developers, there was a barrier to entry. They were like, can I change a little bit of HTML, a template here and there and it&amp;rsquo;s like well yes but it depends, it just depends. Like you had to actually understand the technical stack depending on what you were trying to achieve. Say we wanted to lay the blog out in a grid and not have traditional pagination, like a design concern, you&amp;rsquo;re going to have to think about that a little bit, infinite scrolling or Oh we&amp;rsquo;ve got to write some Ajax or something like that. So we didn&amp;rsquo;t see a lot of additional writing. We didn&amp;rsquo;t see a lot of creative revisions to this site and we saw despite the fact that it was a good framework and was usually extensible, we saw almost no custom code written.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Perhaps there is even a bit of a psychological barrier to actually writing and getting stuff out there, and that&amp;rsquo;s what might have happened in your situation. I think in a lot of situations, if you have the added overhead of maybe a rails app or any sort of additional complexity around authoring then that becomes the excuse to not do it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ara:&lt;/strong&gt; Absolutely and so we saw a lack of both technical and creative input into the site or innovation. Lack of technical and creative innovation and so. then we launched into our second most recent version of the website which we ditched the custom stack and we did  something custom. And the reason that we did something totally custom was again, you know the thinking was. Well there was two lines of thinking. One I don&amp;rsquo;t know if you&amp;rsquo;ve read the Done manifesto but I&amp;rsquo;m a big believer in the concept that doing something makes you right, its one of the ideas there and we were basically seeing that the Rails dev, the developers were doing a majority of work.&lt;/p&gt;

&lt;p&gt;And so the overhead of having a predetermined model structure and to be limited by even what the CMS could offer just to create a dynamically generated blog-post didn&amp;rsquo;t seem to work out. And so we developed a custom rails app and we have a CMS plugin that we&amp;rsquo;ve written that  is very simple, it&amp;rsquo;s not a fully fledged CMS, it fulfills the need where you have a rails app and like hey we just need to also edit some content type, so that&amp;rsquo;s very common in rails projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; I&amp;rsquo;ll have to check that out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ara:&lt;/strong&gt; Well, its one of the few projects that&amp;rsquo;s not in the public domain. I could extract it into an engine, it&amp;rsquo;s on the to-do list. I have some hesitation around it for a variety of reasons. But in any case we use that and then we were able to achieve somethings quite easily because we were on a fully custom stack. so for example our old rails app, our deployment actually it basically when something like deploy the rails app, and then because we had a quite good configuration I had it so that content editing we used page caching, heavy heavy use of rails page caching. So that for all practical purposes the site was almost exclusively served by Apache and nginx, depending on whatever was deployed to you.&lt;/p&gt;

&lt;p&gt;So we basically wired into the content editor invalidate the entirety of the page cache, it was a sledge hammer, but it had a beautiful property that for almost no work, the site was extremely fast, extremely durable and easy to manage. Page caching has gone out of fashion in the rails world but for content non authenticated apps, it&amp;rsquo;s absolutely unbeatable. So we were quite happy with that. That was the best incarnation of the site that we had for a long time. We were able to have a lot of authoring again, not a significant uptick but it was very easy for developers to make changes for sure. When we had a new idea, like oh we should do this customer survey thing at Christmas time or whatever. It should have add this little webhook to do whatever. We should build a tweet feed, it would be super simple and super robust to implement.&lt;/p&gt;

&lt;p&gt;But then again something started to smell a little funny to me and during the period that we are using this on our own website we were building a lot of static sites using primarily middleman as a site generator for customers and the niche that we were filling there really was, I&amp;rsquo;ll just take a little tangent here, you know we worked for a lot of customers that were dissatisfied in particular with rails apps deployed to Heroku, or with Wordpress, because of the common litany of excuses: it&amp;rsquo;s insecure, it gets hacked all the time, it&amp;rsquo;s down every now and again, it cost too much to maintain, and so for a variety of companies it was a little challenging to get them to make the switch. But we basically were able to say to them look, if you just give up on real time editing of content, just give up on that. A funny story on that is of the bigger companies, they&amp;rsquo;re very large, a successful startup here in Boulder and they were definitely reticent to off Wordpress for their main sites, they has some reticence to going to a fully static site and like well, what if we want to make updates? Fortunately we had been working with them for a year, and we were sort of able to point out that look your organization is larger now, you have 50, 60 people, nobody just publishes directly to the blog.&lt;/p&gt;

&lt;p&gt;You have a publishing flow which ultimately ends up in internal review outside of the system, and at the end of the day a word doc would get shipped to us. And we would report it. And this is very common, very common. Basically, for the one person shops static html works fine. And then there&amp;rsquo;s the sweet spot of like maybe two to eight people were something like WordPress for small business does allow every body to contribute. Everybody can put their plugins in, everybody can edit content, but once an organization gets bigger the invariably end up with a content publishing wordflow. You know this stuff has to go through Marketing, it needs to be approved, it needs to be scheduled for November, instead of September. And so all of that kind of goes out the window and so publishing is much more controlled and centralized, so we were able to say that look what does it matter to you when you&amp;rsquo;re giving us this content and we&amp;rsquo;re putting it in to whatever system and simultaneously they have concerns around up time. Absolutely we need our site to be fast, people forget how important speed is for SEO.&lt;/p&gt;

&lt;p&gt;We want it to be robust, people forget what poor marketing having your website be down is, if you&amp;rsquo;re a technical company, it really makes you look like an ass if you can&amp;rsquo;t keep a website up. And so we made the switch. And their site is managed completely in Middleman, every single change by every author is in Github. We can rollback this site to any moment in time, all data, all content, seven months three hours and  2 minutes ago we know exactly what the site looks like. We would deploy it to S3, we were doing quite a bit if that about a year ago and I liked that quite a bit and I was looking over some of the clients we had done that with.&lt;/p&gt;

&lt;p&gt;I was looking at what we had done, and then I realized and felt kind of foolish in a way that I&amp;rsquo;m like you know, our site, our rails app it really is a static site generator. We&amp;rsquo;ve moved fully paged caching at the end of the day,in fact at the end of my deploy, I could actually run wget mirror and warm the cache and at that point, other than when we&amp;rsquo;re editing, it didn&amp;rsquo;t really matter if the site was up and I thought well okay that&amp;rsquo;s neat. But it certainly is driving a plastic tack in with a 30 lb sledgehammer.&lt;/p&gt;

&lt;p&gt;But that wasn&amp;rsquo;t the motivation to reinvent the site, so we talked for sometime about moving this site back from Rails to Middleman and making it static.&lt;/p&gt;

&lt;p&gt;But one of the things I got hung up, and this is still an issue is that there are some issues with deploying to S3. For example we have had some issues with content negotiations, so gzipped versus not gzipped, that&amp;rsquo;s a small issue.&lt;/p&gt;

&lt;p&gt;But I think the biggest one we have is deployments and S3 especially for our larger sites say like 1000 pages, 2000 pages - It doesn&amp;rsquo;t offer atomic deploys. So that especially when you&amp;rsquo;re doing client work, can be a little nerve wracking to push out a new version of the site and worry that your network is going to go down in the middle or that people are going to basically be experiencing a broken site during the deployment.&lt;/p&gt;

&lt;p&gt;Now practically speaking it wasn&amp;rsquo;t a huge issue but I wasn&amp;rsquo;t comfortable, I wanted to make our site even better, I wanted fast and I wanted atomic and I wanted robust performance out of what was serving our website.&lt;/p&gt;

&lt;p&gt;So I played with the normal permutations of, we can make it HA, we can load balance between servers and then have Capistrano based deployment, so it&amp;rsquo;s atomic, it&amp;rsquo;s HA, but are you kidding me? It take two minutes to like three minutes to like  pushup a one character change, it just didn&amp;rsquo;t feel good. And that&amp;rsquo;s also very challenging to reason about.&lt;/p&gt;

&lt;p&gt;I was telling you for the our second to last permutation we were mostly concerned with allowing developers, the people who are doing the work to be able to do the work easily in the tools that they like using. And so that was a step in the right direction. But really the people who need to be editing websites are front end engineers they&amp;rsquo;re not designers, they&amp;rsquo;re not back end developers, they&amp;rsquo;re not Rails developers.&lt;/p&gt;

&lt;p&gt;They are people who are passionate about HTML and CSS and retina optimized images and why we want to a SVG logo and we have to use this IE hack. And that&amp;rsquo;s because the front end, just the HTML you deliver has gotten exponentially more complex in the last 2 years. Because of he proliferation of the byte sizes combined with resolutions combined with network speeds right 3G, 4G, online, offline, broadband, android phone, turn sideways, suddenly the development the ability to be creative on the front end has gotten quite technical.&lt;/p&gt;

&lt;p&gt;And that&amp;rsquo;s where the real innovation can occur in a web and so I realized it&amp;rsquo;s those people that you really want to give those people a playground on your website, if you want to experience like the maximum creativity, those people need to be able to work quickly. and so those people they don&amp;rsquo;t really care about say SSH Key round robin, I need to deploy the three servers to make these up, oh I need to run a database migration to like get some change deployed, they don&amp;rsquo;t give a shit about this.&lt;/p&gt;

&lt;p&gt;And nor should they.&lt;/p&gt;

&lt;p&gt;So I went back to the drawing board and I had been looking at BitBalloon for a while, it seemed very promising: the atomic deployments, the CDN distribution which of course is something you can do on AWS if you push an S3 site out unto cloud front, but all of the sudden your deployment has really gotten complicated, and caching validations is really hard to reason about.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; You wanna abstract that stuff away if you want to make simple for people.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ara:&lt;/strong&gt; Yeah and we can do it, back end engineers can do it, but the question is as a web agency is do I really want to spend time screwing with caching validation across a CDN for our website, it like the last thing I want to spend time on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; I think half of our job is avoiding bunny trails.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ara:&lt;/strong&gt; Yes exactly. And so where we&amp;rsquo;re at now our new site, I&amp;rsquo;ve been talking to Steve one of our really talented engineers and  it just happened like one day, I said you know what let&amp;rsquo;s rebuild the whole site in static and about 48 hrs later we were done. We took the rails site and we designed, implemented and deployed an entirely new infrastructure that is based on BitBalloon, a webhook and the Draftin editing service, and Middleman. And so from the beginning the site is a Middleman site and it doesn&amp;rsquo;t matter what site generator you would use. You might use Docpad or there&amp;rsquo;s a variety of really great site generators but we have a site generator and all our content is checked into Github so we started there.&lt;/p&gt;

&lt;p&gt;Here is a website, a very easy, a very well factored website but data-driven and all static entirely contained in Github. And so then we needed to move on to like how do we deploy it. And so we made the deployment we went to BitBalloon. That was not a lot of work.&lt;/p&gt;

&lt;p&gt;We compared our Rails site being served from Apache to one being served from BitBalloon, same content. Our Google page rank jumped from a 35 to like a 88, just with no work!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; That&amp;rsquo;s awesome.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ara:&lt;/strong&gt; Yeah, it was really beautiful. We were able to take sprockets out of the entire thing. That&amp;rsquo;s something the BitBalloon does for you. It&amp;rsquo;s sprockets as a service, we are like screw compressing images and CSS and we don&amp;rsquo;t even want to think about it also, like not our problem like why do we care about this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Absolutely, why does everyone have to re-invent the wheel there, right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ara:&lt;/strong&gt; Yeah, and I mean, sprocket&amp;rsquo;s is a good tool chain, but again I&amp;rsquo;ve spent many, many days of my life debugging asset compilation issues on developers boxes and to the extent that sometimes I&amp;rsquo;ll avoid using the tool chain for small things.&lt;/p&gt;

&lt;p&gt;Its just not important enough, so in any case although I&amp;rsquo;ll will say its gotten much better. so we have this static website, its written in middleman, its all in github and it can deploy to bitballoon.&lt;/p&gt;

&lt;p&gt;And so now we&amp;rsquo;re in a position where the front end guys can iterate very, very quickly. They&amp;rsquo;re just able to churn out new features. Like we had a St. Patrick Day version of the site took a few minutes to make the tweaks, deploy, great. The hosting is super robust, it&amp;rsquo;s super fast, it takes out a whole bunch of complexity. CDN invalidation, asset magnification.&lt;/p&gt;

&lt;p&gt;So as a technologist, a CTO, I can look at it and say yes I will put my name on that, I can show that to a client and say you think you need key words or a certain CMS for SEO which of course Google ignores now. But your site is like a dog and Google cares about this, you need to make it fast so that search engines can consume it, prefer to consume it. And so I can look at the site and it&amp;rsquo;s like yeah something I&amp;rsquo;m proud of as technologist. Look how fast it is on your phone, on 3G, its blazing fast, oh and by the way its up, like I don&amp;rsquo;t have any infrastructure to host it, I don&amp;rsquo;t have boxes, I don&amp;rsquo;t pay for anything to host it, or pay for very little to host it, so I&amp;rsquo;m very happy about that.&lt;/p&gt;

&lt;p&gt;But we lost the ability to publish and for non-technical people to publish. And that&amp;rsquo;s kind of a deal killer for some people right. So what we did, we have been using the very excellent Draftin service and I don&amp;rsquo;t know how many people are listening here have used it. Its basically a markdown editor. It&amp;rsquo;s an in browser markdown editor at first glance that&amp;rsquo;s what it is but if you dig a little deeper and the UI&amp;rsquo;s deceptively simple, it offers a lot of features, but two of them we really like for our publishing workflow, well three of them, i should say.&lt;/p&gt;

&lt;p&gt;One: it allows you to share your draft and get feedback on people in a sort of git pull request based way. So people are able to make suggestions and alterations and the author is able to merge them in very quickly. This is all happening outside of any CMS or online site repository or anything, it&amp;rsquo;s just online service were you&amp;rsquo;re writing things and very, very good collaboration tolls and merging tools. That one feature we were using a lot before we started using it for the website.&lt;/p&gt;

&lt;p&gt;The other feature that we use a lot, is I&amp;rsquo;m writing a lot of proposals in it, so often times I would write something, solicit feedback from my team and then I have a really nice feature called ask your pro where you just pay and you just pay a small fee 6 bucks for a professional editor, who&amp;rsquo;s automatically under and NDA will edit your draft.&lt;/p&gt;

&lt;p&gt;I really like that because I make a lot of spelling errors, I&amp;rsquo;m a very fast writer, but I&amp;rsquo;m sloppy and it&amp;rsquo;s great for me to be able to put together a you know 200 word blog post and go you edit it. That&amp;rsquo;s 6 dollars it&amp;rsquo;s so worth my time it&amp;rsquo;s not even funny.&lt;/p&gt;

&lt;p&gt;So I&amp;rsquo;d often times put the editor into Hemingway mode which means you cant even hit the back space key you can only write you can&amp;rsquo;t delete. So I write then press I press the button, hey editor for 6 bucks clean this up then I&amp;rsquo;ll solicit feedback from the team, and now I have something that I might post. And I was doing this when we had the rails app. And so a rails app we could post in Markdown too and I would just export it and paste it in there.&lt;/p&gt;

&lt;p&gt;So Draftin has another killer feature, you can configure arbitrary web hooks and it can deploy content to WordPress, It can deploy content to Tumblr, FaceBook or arbitrary webhooks. And this is where our coup de grace came in we said we built a little robot, its&amp;#39; a teeny little webhook that sits on one of our EC2 nodes she listens to these post backs from Draftin. It&amp;rsquo;s a secure webhook so every author has a secure URL and we basically just give it to them, I&amp;rsquo;m like look all you need to do in a Draftin  interface is put this URL and call it Dojo4. you can give it a name, its your Dojo4 endpoint.&lt;/p&gt;

&lt;p&gt;So now you can use this Draftin tool which is like so much more sophisticated than any CMS editor out there in terms of managing arbitrary workflows, of review, revisions, internet planning, so on and so forth to get to develop really good content. Which is the basis of a good site, and then my two seconds with a URL and a name you can say and there&amp;rsquo;s s Webhook. So that Webhook when they hit publish, when anyone set up in Draftin hits publish, it posts to our little robot and so she catches the draft it comes in as a big ball of JSON and without getting too technical, what I do is drop it in the file system once in temp just to like make sure that I&amp;rsquo;ve captured it and then I basically spawn an import process and so that import process is actually written in our website repo and in plain English our website repo has a command line tool that knows how to import files which is the JSON, the blob JSON, the Draftin post to us, it knows how to import that and the fact that it happens to do it though obviously you can run it from the command line if you have the file. And this is basically what this little command line script does it just examines, it has a mapping of the webhook to what kind of content, so right now all of our webhooks make blog posts.&lt;/p&gt;

&lt;p&gt;But it could be a blog posting or anything else, it&amp;rsquo;s the URL that determines this, what end point you publish to. So right now they&amp;rsquo;re all blog posts and the UID that&amp;rsquo;s in the URL also as well, lets me know what author it is, so obviously I can drop stuff on the floor if its not an author I know about, and so then I can just basically explore that into the file system into our static site repo, so we have data, and Middleman uses a data layer that&amp;rsquo;s mostly -based and we have something that&amp;rsquo;s much more sophisticated than that, its on Github, it under &lt;a href="https://github.com/ahoward"&gt;ahoward&lt;/a&gt; my github name ro standing for &amp;lsquo;read only objects&amp;rsquo; and it&amp;rsquo;s a system that just meant to like manage your site content in a really super understandable directory hierarchy, its not that complicated.&lt;/p&gt;

&lt;p&gt;But if you think how would I lay out the data with relative assets for those blog posts in a file system that what it does. It just gives you a very good interface to it. So the import of the file from, I just basically write some files and the directory to disk and it gets committed. And so then it&amp;rsquo;s in the repo, there&amp;rsquo;s notifications coming to our Campfire room and all the other notification channels like another git commit, and then the robot deploys the site and we have some email hooks so as the robot is pushing the site up it just lets the author know that we get three messages which is like hey I got your post, i am building the website and I deployed it and it&amp;rsquo;s live. That process takes a few minutes, and I have some new work that I believe will make it many times faster compiling the site, building the site, its not actually the deployment&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Pulling in dependencies?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ara:&lt;/strong&gt; Yeah, I mean basically the Middleman site generator it&amp;rsquo;s linear, its primarily  a single threaded, it could be much faster, I guess is all I&amp;rsquo;m saying. But some site generators are faster. There&amp;rsquo;s a lot of competitors in that space right now.  But in any case we generate the site and then users just get a couple of emails, some robots check in their content, their bit of content and push it to BitBalloon. So that gives us all the properties that i was looking for which is the thing is super easy to tweak for the people who tweak websites. Which is front end engineers. They can hack with impunity because they can preview locally or they can review the site in any way, shape or form, right anything can serve static HTML, they have no barrier to playing because there&amp;rsquo;s no fear that lets just say what they did is oh my gosh you&amp;rsquo;re crying over the MO data and it an N+1 query, so you just make the build take a minute longer. Well that&amp;rsquo;s not ideal but who cares. This isn&amp;rsquo;t happening in real time or you know one of those pages goes boom, but it doesn&amp;rsquo;t take the app down. if when we build it doesn&amp;rsquo;t work, but it&amp;rsquo;s not an error that the enduser is going to see a 500 of a website for example. So they don&amp;rsquo;t have to worry about database layers, asset pipe lines any of that. They basically have a site generator, they have data, its all HTML, CSS and Javascript and that&amp;rsquo;s it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; If only that&amp;rsquo;s what it meant when it&amp;rsquo;s a What You See Is What You Get.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ara:&lt;/strong&gt; Yes, right. And I think that something and I have explained this to clients too, it&amp;rsquo;s a real hard. the concept of content editors lowering the barrier to entry for the layman to be able to edit content, I don&amp;rsquo;t want to say it&amp;rsquo;s impossible now but that question &amp;ldquo;what do you see?&amp;rdquo; is actually pretty hard to answer right now and it&amp;rsquo;s like well, do you mean on an iPad when it&amp;rsquo;s rotated sideways or do you mean on a large screen Mac monitor and it&amp;rsquo;s like and of course it&amp;rsquo;s like a rabbit hole, and it&amp;rsquo;s like actually Jeez should that banner image even be there on the iPad, it&amp;rsquo;s real big, what if they aren&amp;rsquo;t 3G, we may not even send it down, And so your points were all taken, i think, the concept of, I think, it has got to change, its not What You See Is What You Get when you&amp;rsquo;re editing, it really needs to change, that these are the important aspects of my content. And then the system has to do something clever based on the  device and the network that the user is using to consume it and that problem is getting worse faster, its not getting better faster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Well I think there a few things I want to note here is that one is this is a perfect example of where we really believe the web is headed to: a more composable ecosystems of services. Where you use the services you need and compose them together to produce a result and this is what you&amp;rsquo;re doing here. You&amp;rsquo;re using BitBalloon for deployment and hosting you&amp;rsquo;re using EC2 to automate the process from getting to Draftin to your site generator and these parts just work together and I think that it&amp;rsquo;s really neat to see this happening for you and working so well for you.&lt;/p&gt;

&lt;p&gt;The other thing is that going back to what you see is what you get, definitely Markdown is emerging as the standard in the industry.  It finds that middle ground between making it possible for people to author and also understand that what matters is the important aspects of what you what to have on your site and that really distills it down into that and kind of removes a lot of the pain.&lt;/p&gt;

&lt;p&gt;If you can get someone to understand and use Markdown I think you&amp;rsquo;ve really kind of have solved the problem in terms of getting a client to manage content on their site and not having to deal with issues why does this look different in my WYSIWYG editor that it looks on the site and so forth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ara:&lt;/strong&gt; Yeah, I agree with you, I mean yeah on all those points and definitely we feel like we are using composable tools and Draftin for collaborative editing. For collaborative editing is a superior tool to anything available to any CMS on the market. Markdown as an intermediate format is absolutely the best format currently to store your content in. You know you really don&amp;rsquo;t want to be coupled to any complex, data formats or databases when your talking about content that part of company&amp;rsquo;s IP, that content is very important, it&amp;rsquo;s very hard to generate, you want to be able to reuse it in a variety of ways and so you want a format, you don&amp;rsquo;t want it in a propriety CMS format, you want it in something very simple that you&amp;rsquo;re going to be able to migrate through systems for 10 years, because that content, you know that represents your company knowledge base, your company marketing. I don&amp;rsquo;t know how to put an exact dollar figure on it, but it&amp;rsquo;s much higher than people realize.&lt;/p&gt;

&lt;p&gt;That&amp;rsquo;s the hard part of websites, its generating good content. And that includes the images, It&amp;rsquo;s the images and the writing but you want those to be in a very simple importable format that&amp;rsquo;s going to be durable over time. And just case in point, like when I&amp;rsquo;m working with a new site generator actually based on Rails that I&amp;rsquo;m actually working on that&amp;rsquo;s building our site is actually take about 3 seconds with this new site generator but when I was getting the new tool working over our content, because our content is using this gem and it would be the same with the files, but because our content is using this gem ro, our content is laid out in a directory hierarchy which basically one blog post per directory as you can imagine. And then inside there, there&amp;rsquo;s one file that&amp;rsquo;s just the data attributes, attributes.yml, but the content is body.md, it&amp;rsquo;s a markdown file. very easy to edit in vim, and read and understand and then the assets are in a relative directory under that.&lt;/p&gt;

&lt;p&gt;If I tarred up that content and there&amp;rsquo;s other content-type in there too, people and jobs and stuff like that, but if I tarred that up and gave it to any web developer, anywhere in the world, who have ever worked in any language ever and I said you need to expose this in your Go static generator or your php dynamic site, whatever, you would not even require a readme. It would be like this is all the content of all of Dojo4 right here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Right. That&amp;rsquo;s impressive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ara:&lt;/strong&gt; Yeah, and then it&amp;rsquo;s not. Ff you asked a hundred developers to lay out a directory hierarchy of content for a website, 99 of them would do it this way. So keeping it plain text and portable, that&amp;rsquo;s another, that&amp;rsquo;s also sort of the composable idea that you&amp;rsquo;re talking about right?&lt;/p&gt;

&lt;p&gt;I should be able to take this content and do something else. Write it, script it, takes our blog and publish it as a book. Which is something done for clients for example. So that&amp;rsquo;s true and then finally just using BitBalloon to solve the asset compilation, CDN, hosting, HA, speed problem for us, I don&amp;rsquo;t even remember what you guys charged, it&amp;rsquo;s like so cheap, I&amp;rsquo;ve forgotten because It doesn&amp;rsquo;t matter to me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; We appreciate your enthusiasm on that!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ara:&lt;/strong&gt; Yeah you should raise your prices by the way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; That&amp;rsquo;s always good to hear. Let&amp;rsquo;s see is there anything else we want to go over here? If I want to set this up for a myself, is there a code you&amp;rsquo;ve made available? The murkiest part for me is the bot you have on EC2 is this something you guys are keeping to yourselves or is this going to be something that&amp;rsquo;s available for others to take a look at?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ara:&lt;/strong&gt; I haven&amp;rsquo;t released it as a very, very generic application yet. It&amp;rsquo;s a very small rack application, its only 200 lines of code and it has a good read me. They were some passwords and things well they were encrypted, but there was some data in the repo that prevented me from just saying the repo is open although it&amp;rsquo;s on my to do list at some point, I have no, my intention is to have the entire Dojo4 site and this robot have public repos, but in the short term I did publish about this workflow. It&amp;rsquo;s on the dojo4.com blog and the title of the blog is Static is the New Black. At the bottom of the article, I allowed people to download the entire rack application, I did strip out some sensitive stuff just to make it smaller and safer but I gave people the middleman app and the rack app, so that&amp;rsquo;s 98 percent of the entire system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Okay.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ara:&lt;/strong&gt; So yeah we&amp;rsquo;re giving it away eventually it will be public on Github but you can look at this rack app and see oh geez. I mean the webhook to catch the content from Draftin is trivial. There is a little bit of thinking. You know programming robots, having a repo with a robot that modifies the repo, is you need to think about that a little bit, its not a lot of code, it&amp;rsquo;s only a few lines. The penalty for screwing up is that things can go horribly wrong as it goes Boom!. But the beauty of it is: so what. All of our content is in Github, it&amp;rsquo;s revision controlled, it doesn&amp;rsquo;t really matter if we screw up because we can go back. Every single change.&lt;/p&gt;

&lt;p&gt;So, I may or may not have programmed an infinite loop that did somethings to our website that I regret last week, but you know it really didn&amp;rsquo;t do anything harmful in the end. So again that&amp;rsquo;s the real beauty of aggressive caching right or having a static website is that having your website be up and what&amp;rsquo;s available to the public is entirely decoupled from any of these details. It just doesn&amp;rsquo;t matter if our whole publishing workflow is exploded or we&amp;rsquo;re doing it by hand today, it makes no difference. So for  me as a developer it&amp;rsquo;s also liberating. I have no fear to try new things, I can&amp;rsquo;t take the site down by screwing with our publishing work flow. They&amp;rsquo;re independent concepts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; You mentioned already some ideas for ways that you could repurpose content for example generating a book. Is there any other things you see on the horizon in terms of how you plan to use this with future clients or existing clients that you have?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ara:&lt;/strong&gt; I think the thing that I realized is that ultimate system that we would build, Draftin&amp;rsquo;s really close and think that very, very appropriate say for blogging  and other things. But there are some limitations as in if you share something you&amp;rsquo;re going to publish with me as you&amp;rsquo;re writing it, we can both see it, if you publish it then it&amp;rsquo;s checked into the repo and everyone can make edits to it. And then of course when its published everyone can see it. But other than the repository I don&amp;rsquo;t say have a view automatically into every draft, every person is working on if they haven&amp;rsquo;t solicited me for input.&lt;/p&gt;

&lt;p&gt;Now our organization is only 15 people but if you use an approach like this for an organization of a hundred people, that may not cut it and so I see Draftin and I&amp;rsquo;m realizing that in the old domain system you still may have I guess what&amp;rsquo;s called a centralized CMS. In other words there&amp;rsquo;s a Rails app and you log in to it and you can use the tools there and that can publish content. That same rails app may have content that Draftin can consume. Right, you like have this simple web interface or any other reasons, yes Draftin is an inlet too, Oh by the way so is email, right, we have lots of scripts that listen to email channels so for me to write well  I won&amp;rsquo;t go into what we do with those, but for me to modify one of those, scripts that we have that listens on an inbox one of out company inboxes and say yeah actually if you email to blog at dojo4.com too, it does the same thing.&lt;/p&gt;

&lt;p&gt;So I think the fundamental architecture is firmly decoupled, authoring is decoupled from publishing is decoupled from revision control is decoupled from hosting.&lt;/p&gt;

&lt;p&gt;So that&amp;rsquo;s perfect but I do see maybe developing more of a centralized application to have more total knowledge of the system. For example an administrative person could go in and click a button and generate a Webhook URL for a new employee for example, so here&amp;rsquo;s one now you can use this to publish on Draft, which right now is, well we do it from the command line but its not exposed to non technical people.&lt;/p&gt;

&lt;p&gt;So i really see augmenting it more than any thing else is what I see in the new future, augmenting and optimizing because right now our workflow is good. The price we pay for having you know a site that is screaming fast, simple to manage and close to a 100 percent up-time is several minutes from hitting the publish button to seeing it. I think you know if we can get that down thats fine for us technologists, I think it might make some end users, it might make then uncomfortable.&lt;/p&gt;

&lt;p&gt;I mean it just depends on how sophisticated they are because you have a similar lag if you&amp;rsquo;re using any CMS pretty much you can see, a kind of a lag. But I think getting the whole build and deploy site go down you know even 15 seconds that something you could easily explain to a client, yeah it take 15 to 20 secs before, after you hit publish a bunch of bots churn away and now your site in unbelievably fast. And we guarantee that it will be up, that&amp;rsquo;s a totally reasonable trade-off. So yes optimizing and augmenting, I think are the next things but I haven&amp;rsquo;t had more creative thoughts than that at this moment&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Yeah that makes a lot of sense. So wrapping this up, what you just mentioned to me, it just reminds me of conversation I had a few months ago with Kin Lane, the API Evangelist, he&amp;rsquo;s also really big on a sort of git based markdown authoring workflow. And he&amp;rsquo;s got a huge empire of content that he does entirely through this kind of process. I can put you in touch with him, you guys might have a really interesting conversation about what you&amp;rsquo;re talking about, the orchestration of multiple authors and this kind of publishing flow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ara:&lt;/strong&gt; Yeah. I&amp;rsquo;m really interested in that because, I think it&amp;rsquo;s important for people that really care about their content or in large organizations where the curation is so important and it&amp;rsquo;s not served at all in the web publishing marketing place right now by any major CMS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Yes, I think there is a real opportunity there and you guys are making some real badass inroads into it. So thanks a lot Ara, I really appreciate you time and for those of you listening, definitely check out the blogpost at the dojo4.com blog &lt;a href="http://dojo4.com/blog/static-is-the-new-black"&gt;Static is the New Black&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Working with clients and collaborators</title>
    <link rel="alternate" href="/blog/2014/03/26/working-with-clients-and-collaborators.html"/>
    <id>/blog/2014/03/26/working-with-clients-and-collaborators.html</id>
    <published>2014-03-26T00:00:00Z</published>
    <updated>2014-03-26T00:00:00Z</updated>
    <author>
      <name>Mathias Biilmann</name>
    </author>
    <summary type="html">&lt;p&gt;&lt;img alt="User Management Panel" src="/images/posts/user-panel.png" /&gt;&lt;/p&gt;

&lt;p&gt;Most websites have a group of people involved in building, updating and maintaining them.&lt;/p&gt;

&lt;p&gt;This is no different with static sites or one-page apps, and so far BitBalloon hasn&amp;rsquo;t been giving the ideal experience for a team working together or for a designer with a client.&lt;/p&gt;

</summary>
    <content type="html">&lt;p&gt;&lt;img alt="User Management Panel" src="/images/posts/user-panel.png" /&gt;&lt;/p&gt;

&lt;p&gt;Most websites have a group of people involved in building, updating and maintaining them.&lt;/p&gt;

&lt;p&gt;This is no different with static sites or one-page apps, and so far BitBalloon hasn&amp;rsquo;t been giving the ideal experience for a team working together or for a designer with a client.&lt;/p&gt;



&lt;p&gt;Today we&amp;rsquo;re happy to announce our new user management feature.&lt;/p&gt;

&lt;p&gt;Now inviting clients or collaborators to your site is as easy as typing their emails in a textbox. We&amp;rsquo;ll send them an invitation and when they follow the confirmation link they get access to the site.&lt;/p&gt;

&lt;p&gt;Never share an FTP password again!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Building a Mobile Todo App with Appery.io and BitBalloon</title>
    <link rel="alternate" href="/blog/2014/02/19/building-a-mobile-app-with-appery-io-and-bitballoon.html"/>
    <id>/blog/2014/02/19/building-a-mobile-app-with-appery-io-and-bitballoon.html</id>
    <published>2014-02-19T00:00:00Z</published>
    <updated>2014-02-19T00:00:00Z</updated>
    <author>
      <name>Mathias Biilmann</name>
    </author>
    <summary type="html">&lt;iframe width="640" height="480" src="//www.youtube-nocookie.com/embed/RijSKSYeSk4" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;Max Katz from &lt;a href="http://appery.io/"&gt;Appery.io&lt;/a&gt; made an awesome little tutorial showing how to build a todo app with Appery and BitBalloon.&lt;/p&gt;

&lt;p&gt;Appery.io is a cloud-based rapid development environment that helps you create cross-platform apps in HTML5 with a drag and drop app builder.&lt;/p&gt;

</summary>
    <content type="html">&lt;iframe width="640" height="480" src="//www.youtube-nocookie.com/embed/RijSKSYeSk4" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;Max Katz from &lt;a href="http://appery.io/"&gt;Appery.io&lt;/a&gt; made an awesome little tutorial showing how to build a todo app with Appery and BitBalloon.&lt;/p&gt;

&lt;p&gt;Appery.io is a cloud-based rapid development environment that helps you create cross-platform apps in HTML5 with a drag and drop app builder.&lt;/p&gt;


</content>
  </entry>
</feed>
