Skip to content


Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time
  is a prototype for turning code repositories into interactive tutorials and books, with code snippets that can be edited and run on the web.

Test your locally

  • git clone
  • cd
  • git submodule init; git submodule update
  • cd pub/templates/local
  • git clone<user>/<repo>.git
  • cd ../.. (back to pub directory)
  • python (powered by flask and requests)
  • visit http://localhost:5000/learn/<user>/<repo>
  • if you make code changes, refresh the server installation by visiting<user>/<repo>?refresh=1

Development server-side installation steps

These steps have been tested on an Ubuntu derivative and Mac OS X.

  • Install dependencies

    • Install docker for for Ubuntu or for Mac OS X.
    • Install dependencies (example from a clean slate Ubuntu)
      • sudo apt-get install redis-server python-pip git
      • sudo pip install flask redis docker-py
  • Set up local repository in a directory of your choice

    • git clone --recursive
    • export LIVECODE_DIR=``pwd``/
  • Install the docker image

    • Get the official image
      • docker pull namin/
      • export LIVECODE_CONFIG="dev"
    • Or build your own from the source repo
      • cd $LIVECODE_DIR; docker build -t=namin/ .
      • export LIVECODE_CONFIG="dev_docker"
  • export GITHUB_BOT_TOKEN="your_access_token"

  • Run local development server

    • cd $LIVECODE_DIR/pub
    • python

Production server-side installation steps

These steps have been tested on a DigitalOcean (referral link) docker application droplet, and work regardless of the actual (sub)domain name of your server (i.e. no need to change occurrences of in config files).

  • Create a new droplet in the DigitalOcean UI:

    • for the image, select the default Ubuntu image
    • for the other options, select as you please. My options:
      • for the size, I use the second smallest droplet, though any other including the smallest should work too.
      • for the last settings, I keep the default VirtIO enabled (I have not tested it disabled).
  • Initial setup of the server

    • Instructions to install Docker
    • $ME refers to your preferred username (e.g. namin for me)
    • $DKR refers to a docker-enabled user (e.g. dkr, which I use for scheduling docker cleanups)
    • as root:
      • be sure to set $ME and $DKR as you like. I do:
        • export ME=namin
        • export DKR=dkr
      • apt-get update
      • apt-get upgrade
      • Install docker.
      • adduser $ME
      • usermod -a -G www-data,docker,sudo $ME
      • usermod -a -G docker www-data
      • adduser $DKR
      • usermod -a -G docker $DKR
    • as $ME:
      • set up your favorite editor (and other tools) as you please. I do:
        • set up emacs
          • sudo apt-get install emacs

          • git clone -b server

            (in $HOME directory)

          • run emacs to ensure customization works

        • configure git
          • git config --global "Nada Amin"
          • git config --global ""
          • git config --global core.editor emacs
      • pull official docker image
        • docker pull namin/
      • set up NGINX
        • sudo apt-get install nginx

        • sudo rm /etc/nginx/sites-enabled/default

          (rationale: the default kicks in too easily)

        • (when adding another domain (e.g., I had to comment out this line in /etc/nginx/nginx.conf: server_names_hash_bucket_size 64;)

      • set up dependencies
        • sudo apt-get install uwsgi uwsgi-plugin-python
        • sudo apt-get install redis-server
        • sudo apt-get install python-pip python-dev
        • sudo pip install flask redis docker-py
      • set up website
        • cd /var
        • sudo mkdir -p www
        • sudo chown www-data:www-data www
        • sudo chmod g+w www
        • cd www
        • git clone
        • cd
        • git submodule init; git submodule update
        • cp app.wsgi.sample app.wsgi
        • edit the app.wsgi to include the environment variable GITHUB_BOT_TOKEN
        • cd cfg
        • sudo cp nginx-site.sample /etc/nginx/sites-available/
        • sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/
        • sudo cp uwsgi-app.ini.sample /etc/uwsgi/apps-available/
        • sudo ln -s /etc/uwsgi/apps-available/ /etc/uwsgi/apps-enabled/
    • as $DKR:
      • mkdir log
      • touch log/clean.log
      • contrab -e
      • add line
        • */10 * * * * (/var/www/ >>log/clean.log

Docker cheat sheet

  • docker run -i -t -u runner -e HOME=/home/runner namin/ /bin/bash --login

    (shell access)


interactive programming tutorials, powered by Github and Docker








No releases published


No packages published