Skip to content
A decentralized, encrypted document signing tool where you own and control your own documents, contracts and data. It is built on Blockstack
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


A decentralized document signing tool where you own and control your own documents, contracts and data.

It is built on BlockStack.

Build Status

alt text

To Run Locally

The app uses Ionic (Angular + Cordova + Material Design UI) make sure you have it installed

npm install -g ionic@latest

It also uses electron to wrap up as a desktop app (*electron code not written yet for auth)

npm install -g electron

cd BlockUSign.Ionic

npm install

There are several ways to start the app. Sometimes when logging in with blockstack you come across cors issues. Most apps use a Node proxy, but then livereload does not work. That is why I created a few npm scripts to help.

If you goto the package.json file look at the scripts sections and look for "start"

For mac, the script should read :

"start:mac": "npm run chrome-mac && ionic serve",

For windows: change the script to this (take off the -mac):

"start": "npm run chrome && ionic serve"

To actually start the app run:

npm run start

You will most likely get this error:

Cannot GET /signup.html

This only happens the first time you open the app. Sorry, I have not had time to improve this part yet :( . To fix this, you will need to open the developer tools and set a localStorage setting in the console or else you will be redirected to a non-existent signup.html page.

localStorage.setItem('signUp', 'true')

Refresh the app back to the root and you should be prompted for blockstack login!


If you are having login issues due to CORS, you can run the app the first time with a node proxy. This will boot up the app as a node app. * note you cannot live reload while debugging, so I recommend only using this when logging in for the first time.s

npm run serve

Production Build

npm run buildweb

This will copy the ionic project to the wwwroot directory to be served up from the .net core project

Azure Deploy Settings

Make sure you have the following files configured on the azure website in Kudu:


  "SendGridKey": "SG.q....",
  "GaiaToken": "bearer v1:eyJw...=",
  "EmailConfirmKey": "0181..."

Azure Portal Settings

Lets Encrypt

Architecture Diagram


Check out for some basic architectural and design decisions.

Blockusign Schema

Blockusign Document Schema Protocol
    |_ List Documents Index
        |_ document1
        |_ document2

User (
    |_ List Document Index (guid, fileName, key) - asymmetric
        |_ document1 (guid, fileName, fileExt, key, paths([user, pathToStorage)]) - symmetric => asymmetric
        |_ document2 (guid, fileName, key, paths(user, pathToStorage)) - symmetric => asymmetric

Blockusign Global Index Protocol (Map document guids to user's storage bucket)
    pathToStorageForUser1 -

Integration Tests

Install the global dependencies npm install -g protractor npm install -g webpack npm install -g webpack-cli

Open a terminal and run ionic serve

In another terminal run npm run e2e

or run run test

** (* note I had to downgrade a jasmine package from the tutorial) npm install --save-dev jasmine@^2.99.0

Support on Beerpay

Hey dude! Help me out for a couple of 🍻!

Beerpay Beerpay

You can’t perform that action at this time.