@mustardamus & @lazzrek

Team Members

Launch Site

VPN on demand

On demand VPN Server creation & connection app.

V800 4


Why a VPN?

VPN's are a crucial part if you care about online privacy. They are encrypting your communication, so crackers can't snoop on it when you are in a shared network, like the Wifi in your favorite café. It also helps you to hide your communication from your ISP, either they are snooping on you on purpose, are hacked by some three letter agency, or simply selling your data, like your browsing history.

3rd Party VPN Providers

In the post-Snowden era VPN providers have popped up en masse, making VPN's usable for the masses. But there lies also the problem. You have to trust them with your communication, because they are in control of the encryption keys. Now maybe they are snooping on you, or selling your browsing history. You just moved the problems away from your ISP to some provider somewhere in the world. More recently there was this story with PureVPN, promising their users they don't keep logs. Then the FBI came collecting their none existing logs.


The only solution to this problem is to set up your own VPN Server. That way you generate the encryption keys yourself, you are also in control if you want to keep logs or not. You have the keys to the kingdom, which is your communication. There are good solutions out there that help tech-savvy users to set it up. But try to explain SSH, OpenVPN, apt-get, etc. to the casual internet user.

Our solution

With our little application we try to help users to set up their own VPN server with a couple of clicks, and even connect them to their own VPN's. For that we chose Vultr as a server provider, but basically any service that can dynamically create servers would work (like Digital Ocean). Once a server is created and we have a secure communication via SSH, we install OpenVPN, generate the encryption keys and get the config. We then use the OpenVPN client to connect the user to the newly created VPN server.

And all we need from the user is the API key of their Vultr account. Sign up, copy & paste, done.


  • create VPN servers in different locations as pleased
  • as cheap as $5 per month, even cheaper if you destroy servers after usage ($1.68 if used 8h a day for a month)
  • you are in possession of your keys, both the SSH keys to the server, and the encryption keys for OpenVPN
  • our app is hardening your server, making it as secure as possible
  • no technical knowledge needed
  • do anything you want, it is your server
  • no need to trust your local network, your ISP and any VPN provider


Unfortunately we could not finish the marrying between the UI and the backend. But you can get a basic idea how it would look like, and the basic setup.

  • clone the repo from https://github.com/Hackbit/nko2017-vpn.git
  • run yarn dev(npm run dev)
  • this will start the electron app in dev mode, you can close the developer tools
  • enter any key you want as Vultr API key
  • next you can choose a location, click on one
  • then you would see the server setup, this is where it unfortunately breaks
  • quit the app, re-open it again
  • check out the rest of the UI
  • thanks for voting!

Built With

  "dependencies": {
    "axios": "^0.16.1",
    "bulma": "^0.6.1",
    "element-ui": "^2.0.4",
    "font-awesome": "^4.7.0",
    "http-server": "^0.10.0",
    "js-yaml": "^3.10.0",
    "keypair": "^1.0.1",
    "moment": "^2.19.1",
    "nedb": "^1.8.0",
    "nedb-promise": "^2.0.1",
    "node-forge": "^0.7.1",
    "node-ssh": "^5.0.0",
    "qs": "^6.5.1",
    "tmp": "^0.0.33",
    "vue": "^2.3.3",
    "vue-electron": "^1.0.6",
    "vue-router": "^2.5.3",
    "vuex": "^2.3.1"
  "devDependencies": {
    "babel-core": "^6.25.0",
    "babel-loader": "^7.1.1",
    "babel-plugin-transform-runtime": "^6.23.0",
    "babel-preset-env": "^1.6.0",
    "babel-preset-stage-0": "^6.24.1",
    "babel-register": "^6.24.1",
    "babili-webpack-plugin": "^0.1.2",
    "cfonts": "^1.1.3",
    "chalk": "^2.1.0",
    "copy-webpack-plugin": "^4.0.1",
    "cross-env": "^5.0.5",
    "css-loader": "^0.28.4",
    "del": "^3.0.0",
    "devtron": "^1.4.0",
    "electron": "^1.7.9",
    "electron-builder": "^19.19.1",
    "electron-debug": "^1.4.0",
    "electron-devtools-installer": "^2.2.0",
    "extract-text-webpack-plugin": "^3.0.0",
    "file-loader": "^0.11.2",
    "html-webpack-plugin": "^2.30.1",
    "multispinner": "^0.2.1",
    "node-loader": "^0.6.0",
    "node-sass": "^4.6.1",
    "sass-loader": "^6.0.6",
    "style-loader": "^0.18.2",
    "url-loader": "^0.5.9",
    "vue-html-loader": "^1.2.4",
    "vue-loader": "^13.0.5",
    "vue-style-loader": "^3.0.1",
    "vue-template-compiler": "^2.4.2",
    "webpack": "^3.5.2",
    "webpack-dev-server": "^2.7.1",
    "webpack-hot-middleware": "^2.18.2"

Feedback / Ratings (2)

All Feedback