diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 00000000..06f77efb
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,20 @@
+# .travis.yml file
+language: node_js
+node_js:
+  - "10"
+  - "12"
+  - "14"
+services: mongodb  
+cache:  
+  directories:
+    - "node_modules"
+install:
+  - npm install
+script:
+  - npm test
+deploy:
+  - provider: script
+    skip_cleanup: true
+    script: chmod +x ./deploy.sh && ./deploy.sh
+    on:
+      branch: master
\ No newline at end of file
diff --git a/Screen Shot 2021-01-11 at 3.43.11 PM.png b/Screen Shot 2021-01-11 at 3.43.11 PM.png
new file mode 100644
index 00000000..493a83dc
Binary files /dev/null and b/Screen Shot 2021-01-11 at 3.43.11 PM.png differ
diff --git a/Screen Shot 2021-01-11 at 3.43.52 PM.png b/Screen Shot 2021-01-11 at 3.43.52 PM.png
new file mode 100644
index 00000000..739f8608
Binary files /dev/null and b/Screen Shot 2021-01-11 at 3.43.52 PM.png differ
diff --git a/Screen Shot 2021-01-11 at 3.47.33 PM.png b/Screen Shot 2021-01-11 at 3.47.33 PM.png
new file mode 100644
index 00000000..701964d1
Binary files /dev/null and b/Screen Shot 2021-01-11 at 3.47.33 PM.png differ
diff --git a/Screen Shot 2021-01-11 at 3.54.15 PM.png b/Screen Shot 2021-01-11 at 3.54.15 PM.png
new file mode 100644
index 00000000..31934f91
Binary files /dev/null and b/Screen Shot 2021-01-11 at 3.54.15 PM.png differ
diff --git a/Screen Shot 2021-01-11 at 4.28.01 PM.png b/Screen Shot 2021-01-11 at 4.28.01 PM.png
new file mode 100644
index 00000000..a2a7e94f
Binary files /dev/null and b/Screen Shot 2021-01-11 at 4.28.01 PM.png differ
diff --git a/Screen Shot 2021-01-11 at 4.28.06 PM.png b/Screen Shot 2021-01-11 at 4.28.06 PM.png
new file mode 100644
index 00000000..ace530fd
Binary files /dev/null and b/Screen Shot 2021-01-11 at 4.28.06 PM.png differ
diff --git a/Screen Shot 2021-01-11 at 4.28.11 PM.png b/Screen Shot 2021-01-11 at 4.28.11 PM.png
new file mode 100644
index 00000000..722b9061
Binary files /dev/null and b/Screen Shot 2021-01-11 at 4.28.11 PM.png differ
diff --git a/Screen Shot 2021-01-11 at 4.28.15 PM.png b/Screen Shot 2021-01-11 at 4.28.15 PM.png
new file mode 100644
index 00000000..137563f0
Binary files /dev/null and b/Screen Shot 2021-01-11 at 4.28.15 PM.png differ
diff --git a/Screen Shot 2021-01-11 at 4.28.33 PM.png b/Screen Shot 2021-01-11 at 4.28.33 PM.png
new file mode 100644
index 00000000..49f73d38
Binary files /dev/null and b/Screen Shot 2021-01-11 at 4.28.33 PM.png differ
diff --git a/Screen Shot 2021-01-11 at 4.30.46 PM.png b/Screen Shot 2021-01-11 at 4.30.46 PM.png
new file mode 100644
index 00000000..ec429fc3
Binary files /dev/null and b/Screen Shot 2021-01-11 at 4.30.46 PM.png differ
diff --git a/Screen Shot 2021-01-11 at 4.53.00 PM.png b/Screen Shot 2021-01-11 at 4.53.00 PM.png
new file mode 100644
index 00000000..9828581a
Binary files /dev/null and b/Screen Shot 2021-01-11 at 4.53.00 PM.png differ
diff --git a/deploy.js b/deploy.js
new file mode 100644
index 00000000..60db75e3
--- /dev/null
+++ b/deploy.js
@@ -0,0 +1,148 @@
+var cmd = require('node-cmd');
+var path, node_ssh, ssh, fs;
+fs = require('fs');
+path = require('path');
+node_ssh = require('node-ssh');
+ssh = new node_ssh();
+
+// the method that starts the deployment process
+function main() {
+  console.log('Deployment started.');
+  sshConnect();
+}
+
+// installs PM2
+function installPM2() {
+  return ssh.execCommand(
+    'sudo npm install pm2 -g', {
+      cwd: '/home/ubuntu'
+  });
+}
+
+// transfers local project to the remote server
+function transferProjectToRemote(failed, successful) {
+  return ssh.putDirectory(
+    '../hackathon-starter',
+    '/home/ubuntu/starter-node-angular-temp',
+    {
+      recursive: true,
+      concurrency: 1,
+      validate: function(itemPath) {
+        const baseName = path.basename(itemPath);
+        return (
+          baseName.substr(0, 1) !== '.' && baseName !== 'node_modules' // do not allow dot files
+        ); // do not allow node_modules
+      },
+      tick: function(localPath, remotePath, error) {
+        if (error) {
+          failed.push(localPath);
+          console.log('failed.push: ' + localPath);
+        } else {
+          successful.push(localPath);
+          console.log('successful.push: ' + localPath);
+        }
+      }
+    }
+  );
+}
+
+// creates a temporary folder on the remote server
+function createRemoteTempFolder() {
+  return ssh.execCommand(
+    'rm -rf starter-node-angular-temp && mkdir starter-node-angular-temp', {
+      cwd: '/home/ubuntu'
+  });
+}
+
+// stops mongodb and node services on the remote server
+function stopRemoteServices() {
+  return ssh.execCommand(
+    'pm2 stop all && sudo service mongod stop', {
+      cwd: '/home/ubuntu'
+  });
+}
+
+// updates the project source on the server
+function updateRemoteApp() {
+  return ssh.execCommand(
+    'mkdir starter-node-angular && cp -r starter-node-angular starter-node-angular-temp/* starter-node-angular/ && rm -rf starter-node-angular-temp', {
+      cwd: '/home/ubuntu'
+  });
+}
+
+// restart mongodb and node services on the remote server
+function restartRemoteServices() {
+  return ssh.execCommand(
+    'cd starter-node-angular && sudo service mongod start && pm2 start app.js', {
+      cwd: '/home/ubuntu'
+  });
+}
+
+// connect to the remote server
+function sshConnect() {
+  console.log('Connecting to the server...');
+
+  ssh
+    .connect({
+      // TODO: ADD YOUR IP ADDRESS BELOW (e.g. '12.34.5.67')
+      host: '34.228.143.133',
+      username: 'ubuntu',
+      privateKey: 'sn-key.pem'
+    })
+    .then(function() {
+      console.log('SSH Connection established.');
+      console.log('Installing PM2...');
+      return installPM2();
+    })
+    .then(function() {
+      console.log('Creating `starter-node-angular-temp` folder.');
+      return createRemoteTempFolder();
+    })
+    .then(function(result) {
+      const failed = [];
+      const successful = [];
+      if (result.stdout) {
+        console.log('STDOUT: ' + result.stdout);
+      }
+      if (result.stderr) {
+        console.log('STDERR: ' + result.stderr);
+        return Promise.reject(result.stderr);
+      }
+      console.log('Transferring files to remote server...');
+      return transferProjectToRemote(failed, successful);
+    })
+    .then(function(status) {
+      if (status) {
+        console.log('Stopping remote services.');
+        return stopRemoteServices();
+      } else {
+        return Promise.reject(failed.join(', '));
+      }
+    })
+    .then(function(status) {
+      if (status) {
+        console.log('Updating remote app.');
+        return updateRemoteApp();
+      } else {
+        return Promise.reject(failed.join(', '));
+      }
+    })
+    .then(function(status) {
+      if (status) {
+        console.log('Restarting remote services...');
+        return restartRemoteServices();
+      } else {
+        return Promise.reject(failed.join(', '));
+      }
+    })
+    .then(function() {
+      console.log('DEPLOYMENT COMPLETE!');
+      process.exit(0);
+    })
+    .catch(e => {
+      console.error(e);
+      process.exit(1);
+    });
+}
+
+main();
diff --git a/deploy.sh b/deploy.sh
new file mode 100644
index 00000000..4be82cb2
--- /dev/null
+++ b/deploy.sh
@@ -0,0 +1,6 @@
+echo "Installing 'node-cmd'"
+npm install node-cmd
+echo "Installing 'node-ssh'"
+npm install node-ssh
+echo "Running 'deploy.js'"
+node deploy.js
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 00000000..5a244a3b
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,556 @@
+{
+  "name": "starter-node-angular",
+  "requires": true,
+  "lockfileVersion": 1,
+  "dependencies": {
+    "accepts": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.0.7.tgz",
+      "integrity": "sha1-W1AftPBwQwmWTM2wSBclQSCNqxo=",
+      "requires": {
+        "mime-types": "~1.0.0",
+        "negotiator": "0.4.7"
+      }
+    },
+    "asn1": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+      "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+      "requires": {
+        "safer-buffer": "~2.1.0"
+      }
+    },
+    "bcrypt-pbkdf": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+      "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+      "requires": {
+        "tweetnacl": "^0.14.3"
+      }
+    },
+    "bluebird": {
+      "version": "2.10.2",
+      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.10.2.tgz",
+      "integrity": "sha1-AkpVFylTCIV/FPkfEQb8O1VfRGs="
+    },
+    "body-parser": {
+      "version": "1.4.3",
+      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.4.3.tgz",
+      "integrity": "sha1-RyeVLP9K8Hc+76SyJsL0Ei9eI00=",
+      "requires": {
+        "bytes": "1.0.0",
+        "depd": "0.3.0",
+        "iconv-lite": "0.4.3",
+        "media-typer": "0.2.0",
+        "qs": "0.6.6",
+        "raw-body": "1.2.2",
+        "type-is": "1.3.1"
+      }
+    },
+    "bson": {
+      "version": "0.2.22",
+      "resolved": "https://registry.npmjs.org/bson/-/bson-0.2.22.tgz",
+      "integrity": "sha1-/NoQPybQwHTVpS1Qkn24D9ArSzk=",
+      "requires": {
+        "nan": "~1.8"
+      }
+    },
+    "buffer-crc32": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.3.tgz",
+      "integrity": "sha1-u1RRnpXRB8vSQA520MqxRnM22SE="
+    },
+    "bytes": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz",
+      "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g="
+    },
+    "cookie": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.2.tgz",
+      "integrity": "sha1-cv7D0k5Io0Mgc9kMEmQgBQYQBLE="
+    },
+    "cookie-signature": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.4.tgz",
+      "integrity": "sha1-Dt0iKG46ERuaKnDbNj6SXoZ/aso="
+    },
+    "debug": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-1.0.2.tgz",
+      "integrity": "sha1-OElZHBDM5khHbDx8Li40FttZY8Q=",
+      "requires": {
+        "ms": "0.6.2"
+      }
+    },
+    "depd": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/depd/-/depd-0.3.0.tgz",
+      "integrity": "sha1-Ecm8KOQlMl+9iziUC+/2n6UyaIM="
+    },
+    "ee-first": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.0.3.tgz",
+      "integrity": "sha1-bJjECJq+y1p7hcGsRJqmA9Oz2r4="
+    },
+    "escape-html": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz",
+      "integrity": "sha1-GBoobq05ejmpKFfPsdQwUuNWv/A="
+    },
+    "express": {
+      "version": "4.5.1",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.5.1.tgz",
+      "integrity": "sha1-S8Pm7J2yjldf5ZHDb7t4H/72/nw=",
+      "requires": {
+        "accepts": "~1.0.7",
+        "buffer-crc32": "0.2.3",
+        "cookie": "0.1.2",
+        "cookie-signature": "1.0.4",
+        "debug": "1.0.2",
+        "depd": "0.3.0",
+        "escape-html": "1.0.1",
+        "finalhandler": "0.0.2",
+        "fresh": "0.2.2",
+        "media-typer": "0.2.0",
+        "merge-descriptors": "0.0.2",
+        "methods": "1.0.1",
+        "parseurl": "1.0.1",
+        "path-to-regexp": "0.1.2",
+        "proxy-addr": "1.0.1",
+        "qs": "0.6.6",
+        "range-parser": "1.0.0",
+        "send": "0.5.0",
+        "serve-static": "~1.3.0",
+        "type-is": "~1.3.2",
+        "utils-merge": "1.0.0",
+        "vary": "0.1.0"
+      },
+      "dependencies": {
+        "mime-types": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz",
+          "integrity": "sha1-mVrhOSq4r/y/yyZB3QVOlDwNXc4="
+        },
+        "type-is": {
+          "version": "1.3.2",
+          "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.3.2.tgz",
+          "integrity": "sha1-TypdxYd1yhYwJQr8cYb4s2MJ0bs=",
+          "requires": {
+            "media-typer": "0.2.0",
+            "mime-types": "~1.0.1"
+          }
+        }
+      }
+    },
+    "finalhandler": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.0.2.tgz",
+      "integrity": "sha1-BgPYde6H1WeiZmkoFcyK1E/M7to=",
+      "requires": {
+        "debug": "1.0.2",
+        "escape-html": "1.0.1"
+      }
+    },
+    "finished": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/finished/-/finished-1.2.2.tgz",
+      "integrity": "sha1-QWCOr639ZWg7RqEiC8Sx7D2u3Ng=",
+      "requires": {
+        "ee-first": "1.0.3"
+      }
+    },
+    "fresh": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.2.2.tgz",
+      "integrity": "sha1-lzHc9WeMf660T7kDxPct9VGH+nc="
+    },
+    "hooks": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/hooks/-/hooks-0.2.1.tgz",
+      "integrity": "sha1-D1kbGzRL3LPfWXc/Yvu6+Fv0Aos="
+    },
+    "iconv-lite": {
+      "version": "0.4.3",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.3.tgz",
+      "integrity": "sha1-nniHeTt2nMaV6yLSVGpP0tebeh4="
+    },
+    "inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+      "optional": true
+    },
+    "ipaddr.js": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-0.1.2.tgz",
+      "integrity": "sha1-ah/T2FT1ACllw017vNm0qNSwRn4="
+    },
+    "kerberos": {
+      "version": "0.0.11",
+      "resolved": "https://registry.npmjs.org/kerberos/-/kerberos-0.0.11.tgz",
+      "integrity": "sha1-yymJHCHCKsGV8xQLl90SIE/qfcI=",
+      "optional": true,
+      "requires": {
+        "nan": "~1.8"
+      }
+    },
+    "make-dir": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+      "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+      "requires": {
+        "semver": "^6.0.0"
+      }
+    },
+    "media-typer": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.2.0.tgz",
+      "integrity": "sha1-2KBlITrf6qLnYyGitt2jb/YzWYQ="
+    },
+    "merge-descriptors": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-0.0.2.tgz",
+      "integrity": "sha1-w2pSp4FDdRPFcnXzndnTF1FKyMc="
+    },
+    "method-override": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/method-override/-/method-override-2.0.2.tgz",
+      "integrity": "sha1-AFMSeMeXiWQL8n6X4mo6Wh98ynM=",
+      "requires": {
+        "methods": "1.0.1",
+        "parseurl": "1.0.1",
+        "vary": "0.1.0"
+      }
+    },
+    "methods": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/methods/-/methods-1.0.1.tgz",
+      "integrity": "sha1-dbyRlD3/19oDfPPusO1zoAN80Us="
+    },
+    "mime": {
+      "version": "1.2.11",
+      "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz",
+      "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA="
+    },
+    "mime-types": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-1.0.0.tgz",
+      "integrity": "sha1-antKavLn2S+Xr+A/BHx4AejwAdI="
+    },
+    "mongodb": {
+      "version": "1.4.38",
+      "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-1.4.38.tgz",
+      "integrity": "sha1-jP/WGBAK86RkiplUmL/Py07Yq9I=",
+      "requires": {
+        "bson": "~0.2",
+        "kerberos": "0.0.11",
+        "readable-stream": "^3.6.0"
+      }
+    },
+    "mongoose": {
+      "version": "3.8.40",
+      "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-3.8.40.tgz",
+      "integrity": "sha1-Ay9bpVWCSXVZqHwfP0s5WcJkBqc=",
+      "requires": {
+        "hooks": "0.2.1",
+        "mongodb": "1.4.38",
+        "mpath": "0.1.1",
+        "mpromise": "0.4.3",
+        "mquery": "1.10.0",
+        "ms": "0.1.0",
+        "muri": "1.1.0",
+        "regexp-clone": "0.0.1",
+        "sliced": "0.0.5"
+      },
+      "dependencies": {
+        "ms": {
+          "version": "0.1.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-0.1.0.tgz",
+          "integrity": "sha1-8h+sSQ2vHXZn/RgP6QdzicyUQrI="
+        }
+      }
+    },
+    "mpath": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.1.1.tgz",
+      "integrity": "sha1-I9qFK3wjLuCX9HWdKcDunNItXkY="
+    },
+    "mpromise": {
+      "version": "0.4.3",
+      "resolved": "https://registry.npmjs.org/mpromise/-/mpromise-0.4.3.tgz",
+      "integrity": "sha1-7cR6daKhd7DpOCc121Lb7DgIzDM="
+    },
+    "mquery": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/mquery/-/mquery-1.10.0.tgz",
+      "integrity": "sha1-hgPwKwtSTResBTmoWZYSTuF7fLM=",
+      "requires": {
+        "bluebird": "2.10.2",
+        "debug": "2.2.0",
+        "regexp-clone": "0.0.1",
+        "sliced": "0.0.5"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+          "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+          "requires": {
+            "ms": "0.7.1"
+          }
+        },
+        "ms": {
+          "version": "0.7.1",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+          "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg="
+        }
+      }
+    },
+    "ms": {
+      "version": "0.6.2",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz",
+      "integrity": "sha1-2JwhJMb9wTU9Zai3e/GqxLGTcIw="
+    },
+    "muri": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/muri/-/muri-1.1.0.tgz",
+      "integrity": "sha1-o6bXTmiogPQzokmnSWnLtmXMCt0="
+    },
+    "nan": {
+      "version": "1.8.4",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-1.8.4.tgz",
+      "integrity": "sha1-PHa1OC6rM+RLdY0oE8qdkuk0LzQ="
+    },
+    "negotiator": {
+      "version": "0.4.7",
+      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.4.7.tgz",
+      "integrity": "sha1-pBYPcXfsgGc4Yx0NMFIyXaQqvcg="
+    },
+    "node-cmd": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/node-cmd/-/node-cmd-4.0.0.tgz",
+      "integrity": "sha512-3OHy8KI8MuwADyugQRZBsaqe3c0r3yxQSoLsDBVk7vAjPmfG01512MPBQjfmBJxrH+2qURbiBf/ZyoimrhdA6A=="
+    },
+    "node-ssh": {
+      "version": "11.1.1",
+      "resolved": "https://registry.npmjs.org/node-ssh/-/node-ssh-11.1.1.tgz",
+      "integrity": "sha512-B3Tb3t54nCj2PyA8vnUMeH19Z2hybJzg5n4t9mRCOTfVGwGlJrv0frDjhPjisTAg3JplJiSxzfImOTMvFPkraQ==",
+      "requires": {
+        "make-dir": "^3.1.0",
+        "sb-promise-queue": "^2.1.0",
+        "sb-scandir": "^3.1.0",
+        "shell-escape": "^0.2.0",
+        "ssh2": "^0.8.9"
+      }
+    },
+    "parseurl": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.0.1.tgz",
+      "integrity": "sha1-Llfc5u/dN8NRhwEDCUTCK/OIt7Q="
+    },
+    "path-to-regexp": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.2.tgz",
+      "integrity": "sha1-mysVH5zDAYye6lDKlXKeBXgXErQ="
+    },
+    "proxy-addr": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.1.tgz",
+      "integrity": "sha1-x8Vm1etOP61n7rnHfFVYzMObiKg=",
+      "requires": {
+        "ipaddr.js": "0.1.2"
+      }
+    },
+    "qs": {
+      "version": "0.6.6",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz",
+      "integrity": "sha1-bgFQmP9RlouKPIGQAdXyyJvEsQc="
+    },
+    "range-parser": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.0.tgz",
+      "integrity": "sha1-pLJkz+C+XONqvjdlrJwqJIdG28A="
+    },
+    "raw-body": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.2.2.tgz",
+      "integrity": "sha1-DGjh7ijP7X26SCIjSuxgeEYcvB8=",
+      "requires": {
+        "bytes": "1",
+        "iconv-lite": "0.4.3"
+      }
+    },
+    "readable-stream": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+      "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+      "optional": true,
+      "requires": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      }
+    },
+    "regexp-clone": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz",
+      "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk="
+    },
+    "safe-buffer": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+      "optional": true
+    },
+    "safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+    },
+    "sb-promise-queue": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/sb-promise-queue/-/sb-promise-queue-2.1.0.tgz",
+      "integrity": "sha512-zwq4YuP1FQFkGx2Q7GIkZYZ6PqWpV+bg0nIO1sJhWOyGyhqbj0MsTvK6lCFo5TQwX5pZr6SCQ75e8PCDCuNvkg=="
+    },
+    "sb-scandir": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/sb-scandir/-/sb-scandir-3.1.0.tgz",
+      "integrity": "sha512-70BVm2xz9jn94zSQdpvYrEG101/UV9TVGcfWr9T5iob3QhCK4lYXeculfBqPGFv3XTeKgx4dpWyYIDeZUqo4kg==",
+      "requires": {
+        "sb-promise-queue": "^2.1.0"
+      }
+    },
+    "semver": {
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+      "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+    },
+    "send": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/send/-/send-0.5.0.tgz",
+      "integrity": "sha1-/A9+L5Limuv9ihst60o5TnpTGmg=",
+      "requires": {
+        "debug": "1.0.2",
+        "escape-html": "1.0.1",
+        "finished": "1.2.2",
+        "fresh": "0.2.2",
+        "mime": "1.2.11",
+        "ms": "0.6.2",
+        "range-parser": "~1.0.0"
+      }
+    },
+    "serve-static": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.3.2.tgz",
+      "integrity": "sha1-2QSmy/VfURx4E49vRe5uadnRBco=",
+      "requires": {
+        "escape-html": "1.0.1",
+        "parseurl": "~1.1.3",
+        "send": "0.6.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "1.0.3",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-1.0.3.tgz",
+          "integrity": "sha1-/IxrLWACgEtAgcAgjg9kYLofo+Q=",
+          "requires": {
+            "ms": "0.6.2"
+          }
+        },
+        "parseurl": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.1.3.tgz",
+          "integrity": "sha1-HwBXOKxxtBe8LQhFy9+iqLY+pjk="
+        },
+        "send": {
+          "version": "0.6.0",
+          "resolved": "https://registry.npmjs.org/send/-/send-0.6.0.tgz",
+          "integrity": "sha1-pZ2pJl23w1FB4Qec8fNo7g1Zs6s=",
+          "requires": {
+            "debug": "1.0.3",
+            "depd": "0.3.0",
+            "escape-html": "1.0.1",
+            "finished": "1.2.2",
+            "fresh": "0.2.2",
+            "mime": "1.2.11",
+            "ms": "0.6.2",
+            "range-parser": "~1.0.0"
+          }
+        }
+      }
+    },
+    "shell-escape": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/shell-escape/-/shell-escape-0.2.0.tgz",
+      "integrity": "sha1-aP0CXrBJC09WegJ/C/IkgLX4QTM="
+    },
+    "sliced": {
+      "version": "0.0.5",
+      "resolved": "https://registry.npmjs.org/sliced/-/sliced-0.0.5.tgz",
+      "integrity": "sha1-XtwETKTrb3gW1Qui/GPiXY/kcH8="
+    },
+    "ssh2": {
+      "version": "0.8.9",
+      "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-0.8.9.tgz",
+      "integrity": "sha512-GmoNPxWDMkVpMFa9LVVzQZHF6EW3WKmBwL+4/GeILf2hFmix5Isxm7Amamo8o7bHiU0tC+wXsGcUXOxp8ChPaw==",
+      "requires": {
+        "ssh2-streams": "~0.4.10"
+      }
+    },
+    "ssh2-streams": {
+      "version": "0.4.10",
+      "resolved": "https://registry.npmjs.org/ssh2-streams/-/ssh2-streams-0.4.10.tgz",
+      "integrity": "sha512-8pnlMjvnIZJvmTzUIIA5nT4jr2ZWNNVHwyXfMGdRJbug9TpI3kd99ffglgfSWqujVv/0gxwMsDn9j9RVst8yhQ==",
+      "requires": {
+        "asn1": "~0.2.0",
+        "bcrypt-pbkdf": "^1.0.2",
+        "streamsearch": "~0.1.2"
+      }
+    },
+    "streamsearch": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
+      "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo="
+    },
+    "string_decoder": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+      "optional": true,
+      "requires": {
+        "safe-buffer": "~5.2.0"
+      }
+    },
+    "tweetnacl": {
+      "version": "0.14.5",
+      "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+      "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
+    },
+    "type-is": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.3.1.tgz",
+      "integrity": "sha1-pnibWlITgomt4e+PbZ8odP/XC2s=",
+      "requires": {
+        "media-typer": "0.2.0",
+        "mime-types": "1.0.0"
+      }
+    },
+    "util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+      "optional": true
+    },
+    "utils-merge": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz",
+      "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg="
+    },
+    "vary": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/vary/-/vary-0.1.0.tgz",
+      "integrity": "sha1-3wlFiZ6TwMxb0YzIMh2dIedPYXY="
+    }
+  }
+}
diff --git a/package.json b/package.json
index 9fdb424f..e21a4c49 100644
--- a/package.json
+++ b/package.json
@@ -2,10 +2,11 @@
   "name": "starter-node-angular",
   "main": "server.js",
   "dependencies": {
-    "express" : "~4.5.1",
-	"mongoose" : "~3.8.0",
-	"body-parser" : "~1.4.2",
-	"method-override" : "~2.0.2"
+    "body-parser": "~1.4.2",
+    "express": "~4.5.1",
+    "method-override": "~2.0.2",
+    "mongoose": "~3.8.0",
+    "node-cmd": "^4.0.0",
+    "node-ssh": "^11.1.1"
   }
 }
-
diff --git a/public/index.html b/public/index.html
index 84970c0c..60a13290 100644
--- a/public/index.html
+++ b/public/index.html
@@ -33,7 +33,7 @@
 		</div>
 		<ul class="nav navbar-nav">
 			<li><a href="/nerds">Nerds</a></li>
-			<li><a href="/geeks">Geeks</a></li>
+			<li><a href="/geeks">Geekz</a></li>
 		</ul>
 	</nav>
 
diff --git a/sn-key.pem b/sn-key.pem
new file mode 100644
index 00000000..47af86c6
--- /dev/null
+++ b/sn-key.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpQIBAAKCAQEAgNfKHQob9vl+37txpnY/HzS38DzB3cS7zZGc4kSzXbKRnmR8
+2+jAO3GJ7ni9a896hgAlQUBQjDtJOnCCPdC+Lv7d42bkLqDImexrzQQ5cZsl9OVG
+sLs3aIdWGnj7qHkm1em5xhMTNv0jiql3OS7i7nxD15EGA8kXrWHm+aqmmVlrg5yp
+O1HZdcSDmPQBlwoSOex7XHsj4vW+eC1ECXUxboJeXOuRhcWGMB4Or3BViRIMHGxG
+BljSUfV5yO7HWa3Whc5MzDyCYO+/wQMaFnTFaji1S0/UAzJhIJZ/PIbeIkkKzLeC
+ftMtRhhHMtGip+7HbECEfmyg+XUDz71chg3l4wIDAQABAoIBADZTRkwiRBJJtp49
+Wbk3aHwO7XOlGpUYa5tMx1p8Xyilr1Kayi6rH8qwn9jmHfBERkQT8aFmrc/C+6hh
+YfkQd/A21HYanyGt94c3MWj7XAEzyrhMqBbCiaVQUxTMaEfr9V0CtKr4xgRMjdzc
+gYGh7FtkF/LfmiqkcpBPlGU2+BH2EdvIW/yD9O5tLhFqWB5iqKGya5jHzw3VNp3R
+i+G417FerVc9i3nKyk9+zkF0tJJcC9p6xDOOb6eSbOf7LgyIidrO83AiLMUJHld8
+d+GehItPY/SzrzpgQsvmMkXlH7JnH+OMBq7mm4FzWsx5W7w+WUrn+klJtSWgvTNX
+oW56WTECgYEAvavs2u15uPCUBcZTVHu9KZFt4sRCHVDboVkq86/n3B3EPOMS10PX
+OSB6/PTbKUswQdaBd9789CNjAGheVGtBTbMars5C8GnWWf28roWkWdjkhvmRXWAw
+iN7z85EbHlsyeYfW2gU8/pmE/OroKnbuMItFhRGCTy+f4hg/s68AVLsCgYEAreZE
+Rwc0YGv4k7MR1aGR3NyIEhpmlsXLU3vRMCnHWgUKcYBqgPRuwjbvXOpUySjbCNR4
+ZPIONnOzlurQe8Dr7u5IgE78Qfm2eFBFHql7Mk6GURi5xF9wMKebZFeFFNsjQb9a
+KpVP3NU4FLnEwzCCsSjEU9IU1EqR8t3T+hr4tPkCgYEAjMXKsJ5qplGgezy8YkrI
+lc6DUTg6ncmCiRlGIMFhA+Tv3gTm2fBXD+ZEgfQ1qUtN0L+lLdPJyGVvOEE+KcfF
+GycgWbdqxUa4OehyHtG/rpOk4Wzfb/9RZnSbeR4sk3Y6Wyrv0rbqk0hcBN9QWxwU
+IuFrQp1BKwZ80vEObo0nYLsCgYEAjnCrgoZ7N3OZI9oshJEYOhGFf1aSq3MOTa6A
+tXOzL6ArYrbuBfyxcHGw9KmYk0Dc0MnAZ+cBD0cMVlS2OnfWiVoylq6b36qb9MbD
+Jw9pstYxHOIk353Q9nmDRdiOUHwC0Ard3z14MgmQKyHS8pKcqmIbFhFhMFZ4X7el
+txo6l3kCgYEApGJ64OaV7PjFrvz6rU4wdgDyK+4RpLE0gW+Nze0/hlVydx1ehsDY
+ZfmKU3MoGfTxyQBnAvi+PV7XIrwLnaonWtZea3CmajCTY+GABzujrNwewa4l3JH0
+6TA6oVk+bUbyMVsLwp1fNmaytdpAGOPk7Oc6JEI0mbAeXMxrWPrApOI=
+-----END RSA PRIVATE KEY-----
\ No newline at end of file