diff --git a/www/render/index.html b/www/render/index.html
new file mode 100644
index 000000000..b5cc16947
--- /dev/null
+++ b/www/render/index.html
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/www/render/main.js b/www/render/main.js
new file mode 100644
index 000000000..9e42eef28
--- /dev/null
+++ b/www/render/main.js
@@ -0,0 +1,138 @@
+define([
+ '/api/config?cb=' + Math.random().toString(16).substring(2),
+ '/common/realtime-input.js',
+ '/common/messages.js',
+ '/common/crypto.js',
+ '/common/marked.js',
+ '/common/convert.js',
+ '/bower_components/jquery/dist/jquery.min.js',
+ '/customize/pad.js'
+], function (Config, Realtime, Messages, Crypto, Marked, Convert) {
+ var $ = jQuery;
+
+ var Vdom = Convert.core.vdom,
+ Hyperjson = Convert.core.hyperjson,
+ Hyperscript = Convert.core.hyperscript;
+
+ window.Vdom = Vdom;
+ window.Hyperjson = Hyperjson;
+ window.Hyperscript = Hyperscript;
+
+ $(window).on('hashchange', function() {
+ window.location.reload();
+ });
+ if (window.location.href.indexOf('#') === -1) {
+ window.location.href = window.location.href + '#' + Crypto.genKey();
+ return;
+ }
+
+ var key = Crypto.parseKey(window.location.hash.substring(1));
+
+ var $textarea = $('textarea'),
+ $target = $('#target');
+
+ var stripScripts = function (md) {
+ return md.replace(/<[\s\S]*?script[\s\S]*?>[\s\S]*?<\/script[\s\S]*?>/ig, "");
+ };
+
+ window.$textarea = $textarea;
+
+ // set markdwon rendering options
+ Marked.setOptions({
+ sanitize: true
+ });
+
+ window.draw = (function () {
+ var target = $target[0],
+ inner = $target.find('#inner')[0];
+
+ if (!target) { throw new Error(); }
+
+ var Previous = Convert.dom.to.vdom(inner);
+ return function (md) {
+ // strip scripts or people get xss
+ var rendered = stripScripts(Marked(md||""));
+ // make a dom
+ var R = $(''+rendered+'
')[0];
+ var New = Convert.dom.to.vdom(R);
+ var patches = Vdom.diff(Previous, New);
+ Vdom.patch(inner, patches);
+ Previous = New;
+ return patches;
+ };
+ }());
+
+ window.colour = (function () {
+ var r = 0.6,
+ n = 24,
+ i = 0,
+ t = [],
+ rgb = [0,2,4];
+
+ while(i