Skip to content

How to Move a Repo from Github to Bitbucket, and Host it on Aerobatic

Heroku has killed the free 24/7 hosting option. So, you have to decide if having your site up 18 hours a day is acceptable (Really? No.) Or, find a different free host. If your site is all front-end code that runs in the browser, I have a great option for you. A lot of my hobby sites are like this, and I'm switching away from Heroku for all of these sites.

I am now working with a startup called Aerobatic. It has an excellent solution for static web site hosting and git push deployment. I will give you my biased opinion on why Aerobatic is easier and better. (Biased, but well-informed ;-)

I'll outline step-by-step instructions on how to get started. I'll also show how to move your code from Github to Bitbucket, because it has free private hosting. Bitbucket has an easy integration with Aerobatic.

Aerobatic has additional benefits beyond Heroku. Your site visitors will see your site fa

View index.html
<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8">
<title>Test Promises</title>
var promise = new Promise(function(resolve, reject) {
console.log('begin doing async part of promise');
View Setup Solarized for Gnome on Ubuntu

Dark version

wget --no-check-certificate
mv dircolors.ansi-dark .dircolors
eval `dircolors ~/.dircolors`

git clone
cd gnome-terminal-colors-solarized
View error.hs
Downloading HDBC-mysql-
Configuring HDBC-mysql-
Failed to install HDBC-mysql-
Build log ( /Users/ivan/.cabal/logs/HDBC-mysql- ):
cabal: Error: some packages failed to install:
HDBC-mysql- failed during the configure step. The exception was:
user error ('/usr/local/bin/ghc' exited with an error:
Couldn't match typeIO (Maybe FilePath)’
View Makefile
# Hello, and welcome to makefile basics.
# You will learn why `make` is so great, and why, despite its "weird" syntax,
# it is actually a highly expressive, efficient, and powerful way to build
# programs.
# Once you're done here, go to
# to learn SOOOO much more.
View hello-spec.js
var chai = require('chai');
var expect = chai.expect;
var port = process.env.port || 3000;
var async = require('async');
describe('acceptance test', function() {
it('has a browser injected into it', function () {
/* eslint-disable no-unused-expressions */
View output.txt
[09:32:56] Using gulpfile ~/dev/react-starter/gulpfile.js
[09:32:56] Starting 'test:karma'...
DEBUG [config]: autoWatch set to false, because of singleRun
DEBUG [plugin]: Loading inlined plugin (defining webpackPlugin, preprocessor:webpack).
DEBUG [plugin]: Loading inlined plugin (defining framework:mocha).
DEBUG [plugin]: Loading inlined plugin (defining launcher:Chrome, launcher:ChromeCanary, launcher:Dartium, test).
DEBUG [plugin]: Loading inlined plugin (defining launcher:IE).
DEBUG [plugin]: Loading inlined plugin (defining launcher:Firefox, launcher:FirefoxDeveloper, launcher:FirefoxAurora, launcher:FirefoxNightly).
DEBUG [plugin]: Loading inlined plugin (defining launcher:PhantomJS).
DEBUG [plugin]: Loading inlined plugin (defining preprocessor:sourcemap).
View card.js
import React from 'react';
let Card = React.createClass({
propTypes: {
header: React.PropTypes.string,
body: React.PropTypes.string,
imageUrl: React.PropTypes.string,
imageAlt: React.PropTypes.string,
draggable: React.PropTypes.string
View fix_json.js
// Goal is to convert the JSON at this URL into a json string that has the keys quoted
var fs = require("fs");
var path = require("path");
var file = path.join(__dirname, "term_current.json");
var data = fs.readFileSync(file, "utf8");
View rightDropZone.js
import React from 'react/addons';
import { DonorCard } from './donorCard.js';
export class DropZone extends React.Component {
constructor(props) {
this.state = {
draggedOver: false
Something went wrong with that request. Please try again.