diff --git a/.gitignore b/.gitignore
index ad572e632bc8..f09155922386 100644
--- a/.gitignore
+++ b/.gitignore
@@ -34,6 +34,7 @@ local.properties
 node_modules/
 npm-debug.log
 yarn-error.log
+dist/
 
 # BUCK
 buck-out/
diff --git a/package-lock.json b/package-lock.json
index 0c9ec2cf8be9..1ccdc93d07bc 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -3829,6 +3829,17 @@
       "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
       "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
     },
+    "clone-deep": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+      "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
+      "dev": true,
+      "requires": {
+        "is-plain-object": "^2.0.4",
+        "kind-of": "^6.0.2",
+        "shallow-clone": "^3.0.0"
+      }
+    },
     "co": {
       "version": "4.6.0",
       "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@@ -9430,6 +9441,13 @@
             "@babel/plugin-transform-unicode-regex": "^7.0.0",
             "@babel/template": "^7.0.0",
             "react-refresh": "^0.4.0"
+          },
+          "dependencies": {
+            "react-refresh": {
+              "version": "0.4.3",
+              "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz",
+              "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA=="
+            }
           }
         },
         "metro-source-map": {
@@ -10200,6 +10218,14 @@
         "@babel/plugin-transform-unicode-regex": "^7.0.0",
         "@babel/template": "^7.0.0",
         "react-refresh": "^0.4.0"
+      },
+      "dependencies": {
+        "react-refresh": {
+          "version": "0.4.3",
+          "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz",
+          "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==",
+          "dev": true
+        }
       }
     },
     "metro-react-native-babel-transformer": {
@@ -10266,6 +10292,13 @@
             "@babel/plugin-transform-unicode-regex": "^7.0.0",
             "@babel/template": "^7.0.0",
             "react-refresh": "^0.4.0"
+          },
+          "dependencies": {
+            "react-refresh": {
+              "version": "0.4.3",
+              "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz",
+              "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA=="
+            }
           }
         }
       }
@@ -12051,6 +12084,11 @@
             }
           }
         },
+        "react-refresh": {
+          "version": "0.4.3",
+          "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz",
+          "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA=="
+        },
         "semver": {
           "version": "6.3.0",
           "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
@@ -12075,11 +12113,6 @@
         "react-timer-mixin": "^0.13.4"
       }
     },
-    "react-refresh": {
-      "version": "0.4.3",
-      "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz",
-      "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA=="
-    },
     "react-router": {
       "version": "5.2.0",
       "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz",
@@ -12907,6 +12940,15 @@
         "safe-buffer": "^5.0.1"
       }
     },
+    "shallow-clone": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+      "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
+      "dev": true,
+      "requires": {
+        "kind-of": "^6.0.2"
+      }
+    },
     "shallowequal": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
@@ -15355,6 +15397,16 @@
         }
       }
     },
+    "webpack-merge": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.1.1.tgz",
+      "integrity": "sha512-UhIkHAVqeG9EqFfYo7dRELrVfH6HYaOTYM7ssKCwfIIHYnWepGVOFp1E166GwgPGFqV6M68UgRiKOERjVOKIXA==",
+      "dev": true,
+      "requires": {
+        "clone-deep": "^4.0.1",
+        "wildcard": "^2.0.0"
+      }
+    },
     "webpack-sources": {
       "version": "1.4.3",
       "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
@@ -15440,6 +15492,12 @@
       "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
       "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
     },
+    "wildcard": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz",
+      "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
+      "dev": true
+    },
     "word-wrap": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
diff --git a/package.json b/package.json
index 7a0fbd270444..f3337de3a474 100644
--- a/package.json
+++ b/package.json
@@ -6,8 +6,8 @@
     "android": "react-native run-android",
     "ios": "react-native run-ios",
     "start": "react-native start",
-    "web": "webpack-dev-server --open --config webpack.config.js",
-    "build": "webpack --config webpack.config.js",
+    "web": "webpack-dev-server --open --config webpack.dev.js",
+    "build": "webpack --config webpack.prod.js",
     "test": "jest",
     "lint": "eslint ."
   },
@@ -54,7 +54,8 @@
     "react-test-renderer": "16.13.1",
     "webpack": "^4.44.1",
     "webpack-cli": "^3.3.12",
-    "webpack-dev-server": "^3.11.0"
+    "webpack-dev-server": "^3.11.0",
+    "webpack-merge": "^5.1.1"
   },
   "jest": {
     "preset": "react-native"
diff --git a/src/lib/Network.js b/src/lib/Network.js
index 47be13226a86..7ac7e4914fec 100644
--- a/src/lib/Network.js
+++ b/src/lib/Network.js
@@ -30,6 +30,7 @@ function request(command, data, type = 'post') {
             if (responseData.jsonCode === 200) {
                 return responseData;
             }
+            // eslint-disable-next-line no-console
             console.info('[API] Error', responseData);
         })
         // eslint-disable-next-line no-unused-vars
diff --git a/src/lib/Pusher/pusher.js b/src/lib/Pusher/pusher.js
index ac9c99485397..d257fdf0b4e9 100644
--- a/src/lib/Pusher/pusher.js
+++ b/src/lib/Pusher/pusher.js
@@ -209,6 +209,7 @@ function unsubscribe(channelName, eventName = '') {
         channel.unbind(eventName);
     } else {
         if (!channel.subscribed) {
+            // eslint-disable-next-line no-console
             console.warn('[Pusher] Attempted to unsubscribe from channel, but we are not subscribed to begin with', 0, {channelName});
             return;
         }
diff --git a/src/store/actions/PersonalDetailsActions.js b/src/store/actions/PersonalDetailsActions.js
index 482be1f42b0e..31c88fc6d959 100644
--- a/src/store/actions/PersonalDetailsActions.js
+++ b/src/store/actions/PersonalDetailsActions.js
@@ -71,6 +71,7 @@ function fetch() {
         })
         .catch((error) => {
             if (error.message === 'No login') {
+                // eslint-disable-next-line no-console
                 console.info('No email in store, not fetching personal details.');
                 return;
             }
diff --git a/src/store/actions/ReportActions.js b/src/store/actions/ReportActions.js
index 7de76b682e3a..b0714398b841 100644
--- a/src/store/actions/ReportActions.js
+++ b/src/store/actions/ReportActions.js
@@ -131,6 +131,7 @@ function fetchAll() {
                 return data;
             })
             .then(data => Store.set(STOREKEYS.REPORTS, _.values(data.reports)))
+            // eslint-disable-next-line no-console
             .catch((error) => { console.log('Error fetching report actions', error); });
     }
 
@@ -146,6 +147,7 @@ function fetchAll() {
             return data;
         })
         .then(data => Store.set(STOREKEYS.REPORTS, _.values(data.reportListBeta)))
+        // eslint-disable-next-line no-console
         .catch((error) => { console.log('Error fetching report actions', error); });
 }
 
diff --git a/webpack.config.js b/webpack.common.js
similarity index 88%
rename from webpack.config.js
rename to webpack.common.js
index b8b938c9a876..df1f64d4c9e6 100644
--- a/webpack.config.js
+++ b/webpack.common.js
@@ -3,7 +3,6 @@ const {CleanWebpackPlugin} = require('clean-webpack-plugin');
 const HtmlWebpackPlugin = require('html-webpack-plugin');
 
 module.exports = {
-    mode: 'development',
     entry: {
         app: './web/index.js',
     },
@@ -11,11 +10,6 @@ module.exports = {
         filename: '[name]-[hash].bundle.js',
         path: path.resolve(__dirname, 'dist'),
     },
-    devtool: 'inline-source-map',
-    devServer: {
-        contentBase: path.join(__dirname, 'dist'),
-        hot: true,
-    },
     plugins: [
         new CleanWebpackPlugin(),
         new HtmlWebpackPlugin({
diff --git a/webpack.dev.js b/webpack.dev.js
new file mode 100644
index 000000000000..cdfcec908438
--- /dev/null
+++ b/webpack.dev.js
@@ -0,0 +1,12 @@
+const path = require('path');
+const {merge} = require('webpack-merge');
+const common = require('./webpack.common.js');
+
+module.exports = merge(common, {
+    mode: 'development',
+    devtool: 'inline-source-map',
+    devServer: {
+        contentBase: path.join(__dirname, 'dist'),
+        hot: true,
+    },
+});
diff --git a/webpack.prod.js b/webpack.prod.js
new file mode 100644
index 000000000000..d6aad68a2fe5
--- /dev/null
+++ b/webpack.prod.js
@@ -0,0 +1,7 @@
+const {merge} = require('webpack-merge');
+const common = require('./webpack.common.js');
+
+module.exports = merge(common, {
+    mode: 'production',
+    devtool: 'source-map',
+});
