diff --git a/.drone.yml b/.drone.yml
index b17c7bcf01ad11fc7d9dbc8e8a38118c40bc016e..0616c0d63573efe9bfc273bfc68f99fe777d04af 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -28,6 +28,13 @@ pipeline:
     when:
       matrix:
         TESTS: vue-build-updatenotification
+  vue-build-oauth2:
+    image: node
+    commands:
+     - ./build/vue-builds.sh ./apps/oauth2/js/oauth2.js
+    when:
+      matrix:
+        TESTS: vue-build-oauth2
   checkers:
     image: nextcloudci/php7.0:php7.0-19
     commands:
@@ -685,6 +692,7 @@ matrix:
     - TESTS: checkers
     - TESTS: vue-build-settings
     - TESTS: vue-build-updatenotification
+    - TESTS: vue-build-oauth2
     - TESTS: nodb-codecov
       ENABLE_REDIS: true
     - TESTS: db-codecov
diff --git a/.gitignore b/.gitignore
index 2098df1c557f39f0873dbfb78d34080e2bb5429c..852f05cf3c519170db0e359dbc8f13ee7e51abc5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,11 +31,6 @@
 !/apps/testing
 !/apps/admin_audit
 !/apps/updatenotification
-/apps/updatenotification/build
-#/apps/updatenotification/js/merged.js
-#/apps/updatenotification/js/merged.js.map
-/apps/updatenotification/js/*.hot-update.*
-/apps/updatenotification/node_modules
 !/apps/theming
 !/apps/twofactor_backupcodes
 !/apps/workflowengine
@@ -46,6 +41,9 @@
 /apps/files_external/3rdparty/irodsphp/prods/test*
 /apps/files_external/tests/config.*.php
 
+# apps modules
+/apps/*/node_modules
+
 
 # ignore themes except the example and the README
 /themes/*
diff --git a/apps/oauth2/Makefile b/apps/oauth2/Makefile
index f2bc6292bedfd13b450bc94640b5eccf2522332c..12714c620034941319ad4ec9a0ff09b64912587e 100644
--- a/apps/oauth2/Makefile
+++ b/apps/oauth2/Makefile
@@ -19,7 +19,7 @@ watch-js:
 
 clean:
 	rm -f js/oauth2.js
-	rm -f js/oauth2.map
+	rm -f js/oauth2.js.map
 
 clean-dev:
 	rm -rf node_modules
diff --git a/apps/oauth2/js/oauth2.js b/apps/oauth2/js/oauth2.js
index 09663c788d76b66eb322b1ded33f772f84ecd225..0b2ac7bd34d320e12a768f84f46aa8631885d29e 100644
Binary files a/apps/oauth2/js/oauth2.js and b/apps/oauth2/js/oauth2.js differ
diff --git a/apps/oauth2/js/oauth2.js.map b/apps/oauth2/js/oauth2.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..ed2f3ca605a01b3505cc9dac77fd0fad511a8d47
Binary files /dev/null and b/apps/oauth2/js/oauth2.js.map differ
diff --git a/apps/oauth2/package-lock.json b/apps/oauth2/package-lock.json
index e425b4387ba5b2ea6b2b1a62e57af5f20034badb..b6e7b229aa38a12b8895ac5e7b9ba18c9dedcdb3 100644
--- a/apps/oauth2/package-lock.json
+++ b/apps/oauth2/package-lock.json
@@ -1,6 +1,6 @@
 {
   "name": "oauth2",
-  "version": "1.0.0",
+  "version": "1.1.0",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
diff --git a/apps/oauth2/package.json b/apps/oauth2/package.json
index 5e96b1b9914ced05b9d7c9e3d7681efc1f547bf2..9934b98c45ef12c369e9948bb2b71c07802019a3 100644
--- a/apps/oauth2/package.json
+++ b/apps/oauth2/package.json
@@ -1,6 +1,6 @@
 {
   "name": "oauth2",
-  "version": "1.0.0",
+  "version": "1.1.0",
   "description": "OAuth2 setup",
   "author": "Roeland Jago Douma <roeland@famdouma.nl>",
   "license": "AGPL-3.0-or-later",
@@ -10,9 +10,9 @@
     "test": "tests"
   },
   "scripts": {
-    "dev": "webpack --config src/webpack.dev.js",
-    "watch": "webpack --progress --watch --config src/webpack.dev.js",
-    "build": "webpack --progress --hide-modules --config src/webpack.prod.js",
+    "dev": "webpack --config webpack.dev.js",
+    "watch": "webpack --progress --watch --config webpack.dev.js",
+    "build": "webpack --progress --hide-modules --config webpack.prod.js",
     "test": "echo \"Error: no test specified\" && exit 1"
   },
   "dependencies": {
diff --git a/apps/oauth2/src/webpack.common.js b/apps/oauth2/webpack.common.js
similarity index 82%
rename from apps/oauth2/src/webpack.common.js
rename to apps/oauth2/webpack.common.js
index 72bce3b287d5854e2ebfb242a5cffafac41679aa..01e01940a35245835772aa8076ee5953d5cc8027 100644
--- a/apps/oauth2/src/webpack.common.js
+++ b/apps/oauth2/webpack.common.js
@@ -2,9 +2,9 @@ const path = require('path')
 const { VueLoaderPlugin } = require('vue-loader');
 
 module.exports = {
-  entry: path.join(__dirname, 'main.js'),
+  entry: path.join(__dirname, 'src', 'main.js'),
   output: {
-    path: path.resolve(__dirname, '../js'),
+    path: path.resolve(__dirname, './js'),
     publicPath: '/js',
     filename: 'oauth2.js'
   },
diff --git a/apps/oauth2/src/webpack.dev.js b/apps/oauth2/webpack.dev.js
similarity index 100%
rename from apps/oauth2/src/webpack.dev.js
rename to apps/oauth2/webpack.dev.js
diff --git a/apps/oauth2/src/webpack.prod.js b/apps/oauth2/webpack.prod.js
similarity index 100%
rename from apps/oauth2/src/webpack.prod.js
rename to apps/oauth2/webpack.prod.js