diff --git a/www/examples/pin/index.html b/www/examples/pin/index.html
new file mode 100644
index 000000000..e17a68143
--- /dev/null
+++ b/www/examples/pin/index.html
@@ -0,0 +1,13 @@
+
+
+
+ CryptPad
+
+
+
+
+
+
+
+
+
diff --git a/www/examples/pin/inner.html b/www/examples/pin/inner.html
new file mode 100644
index 000000000..9680685b7
--- /dev/null
+++ b/www/examples/pin/inner.html
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+PEWPEW
diff --git a/www/examples/pin/main.js b/www/examples/pin/main.js
new file mode 100644
index 000000000..9a4ad1f08
--- /dev/null
+++ b/www/examples/pin/main.js
@@ -0,0 +1,58 @@
+require.config({ paths: { 'json.sortify': '/bower_components/json.sortify/dist/JSON.sortify' } });
+define([
+ '/common/cryptpad-common.js',
+ '/common/pinpad.js',
+ '/bower_components/jquery/dist/jquery.min.js',
+], function (Cryptpad, Pinpad) {
+ var $ = window.jQuery;
+ var APP = window.APP = {
+ Cryptpad: Cryptpad,
+ };
+
+ var then = function (call) {
+ call.getFileSize('26f014b2ab959418605ea37a6785f317', function (e, msg) {
+ if (e) {
+ if (e === 'ENOENT') { return; }
+ return void console.error(e);
+ }
+ console.error("EXPECTED ENOENT");
+ console.log(msg);
+ });
+
+ call.getFileSize('pewpew', function (e, msg) {
+ if (e) {
+ if (e === 'INVALID_CHAN') { return; }
+ return void console.error(e);
+ }
+ console.log(msg);
+ });
+/*
+ var list = Cryptpad.getUserChannelList();
+ if (list.length) {
+ call.getFileSize(list[0], function (e, msg) {
+ if (e) {
+ return void console.error(e);
+ }
+ console.log(msg);
+ });
+ }
+ call.getFileListSize(list, function (e, bytes) {
+ if (e) { return void console.error(e); }
+ console.log("%s total bytes used", bytes);
+ });
+*/
+ call.getServerHash(function (e, hash) {
+ if (e) { return void console.error(e); }
+ console.log("the server believes your user hash is [%s]", hash);
+ });
+ };
+
+ $(function () {
+ Cryptpad.ready(function (err, env) {
+ Pinpad.create(function (e, call) {
+ if (e) { return void console.error(e); }
+ then(call);
+ });
+ });
+ });
+});