diff --git a/gulpfile.js b/gulpfile.js
index 5164b87387ebb51afe39cf3dffd7f0f5d733fbf2..d07cdf4e2aba760dbb214630ab8cc31bf14fcdae 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -71,6 +71,7 @@ var gulp      = require('gulp'),
 // Load webpack config
 var webpackDev = () => require(options.theme.app + 'webpack.dev.config.js');
 var webpackProd = () => require(options.theme.app + 'webpack.prod.config.js');
+var webpackAnalyze = () => require(options.theme.app + 'webpack.analyze.config.js');
 
 // The sass files to process.
 var sassFiles = [
@@ -184,6 +185,14 @@ gulp.task('app:production', function() {
         .pipe(gulp.dest(options.theme.app_dest));
 })
 
+// Analyze Prod build of App
+gulp.task('app:analyze', function() {
+    return gulp.src(options.theme.app + 'src/')
+        .pipe(webpackStrm( webpackAnalyze() ))
+        .pipe(gulp.dest(options.theme.app_dest));
+})
+
+
 // Copy images.
 gulp.task('images', function copy () {
   return gulp.src(options.theme.img + '**/*.*').pipe(gulp.dest(options.theme.img_dest));
diff --git a/opentech/static_src/src/app/webpack.analyze.config.js b/opentech/static_src/src/app/webpack.analyze.config.js
new file mode 100644
index 0000000000000000000000000000000000000000..2d3ccfd0b4a748799529c4ee45acce136657e7ef
--- /dev/null
+++ b/opentech/static_src/src/app/webpack.analyze.config.js
@@ -0,0 +1,9 @@
+const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
+
+var config = require('./webpack.base.config.js')
+
+config.plugins = config.plugins.concat([
+    new BundleAnalyzerPlugin(),
+])
+
+module.exports = config
diff --git a/package-lock.json b/package-lock.json
index d10f0471c2081a3079170793b5d8651760f5bb49..783199a4b501fcc4afe1fe17dc6885bca1c51905 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1548,6 +1548,12 @@
             "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
             "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI="
         },
+        "async-limiter": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+            "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
+            "dev": true
+        },
         "async-settle": {
             "version": "1.0.0",
             "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz",
@@ -1726,6 +1732,18 @@
                 "tweetnacl": "^0.14.3"
             }
         },
+        "bfj": {
+            "version": "6.1.1",
+            "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.1.tgz",
+            "integrity": "sha512-+GUNvzHR4nRyGybQc2WpNJL4MJazMuvf92ueIyA0bIkPRwhhQu3IfZQ2PSoVPpCBJfmoSdOxu5rnotfFLlvYRQ==",
+            "dev": true,
+            "requires": {
+                "bluebird": "^3.5.1",
+                "check-types": "^7.3.0",
+                "hoopy": "^0.1.2",
+                "tryer": "^1.0.0"
+            }
+        },
         "big.js": {
             "version": "3.2.0",
             "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
@@ -2141,6 +2159,12 @@
             "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
             "dev": true
         },
+        "check-types": {
+            "version": "7.4.0",
+            "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.4.0.tgz",
+            "integrity": "sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==",
+            "dev": true
+        },
         "chokidar": {
             "version": "2.0.4",
             "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
@@ -3242,6 +3266,12 @@
             "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
             "dev": true
         },
+        "ejs": {
+            "version": "2.6.1",
+            "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz",
+            "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==",
+            "dev": true
+        },
         "electron-to-chromium": {
             "version": "1.3.95",
             "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.95.tgz",
@@ -4073,6 +4103,12 @@
             "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
             "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY="
         },
+        "filesize": {
+            "version": "3.6.1",
+            "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
+            "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==",
+            "dev": true
+        },
         "fill-range": {
             "version": "4.0.0",
             "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
@@ -5743,6 +5779,12 @@
                 "parse-passwd": "^1.0.0"
             }
         },
+        "hoopy": {
+            "version": "0.1.4",
+            "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz",
+            "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==",
+            "dev": true
+        },
         "hosted-git-info": {
             "version": "2.7.1",
             "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
@@ -7788,6 +7830,12 @@
                 "mimic-fn": "^1.0.0"
             }
         },
+        "opener": {
+            "version": "1.5.1",
+            "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz",
+            "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==",
+            "dev": true
+        },
         "opn": {
             "version": "5.4.0",
             "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz",
@@ -10651,6 +10699,12 @@
                 "glob": "^7.1.2"
             }
         },
+        "tryer": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz",
+            "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==",
+            "dev": true
+        },
         "tslib": {
             "version": "1.9.3",
             "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
@@ -11199,6 +11253,44 @@
                 "webpack-sources": "^1.3.0"
             }
         },
+        "webpack-bundle-analyzer": {
+            "version": "3.0.3",
+            "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.0.3.tgz",
+            "integrity": "sha512-naLWiRfmtH4UJgtUktRTLw6FdoZJ2RvCR9ePbwM9aRMsS/KjFerkPZG9epEvXRAw5d5oPdrs9+3p+afNjxW8Xw==",
+            "dev": true,
+            "requires": {
+                "acorn": "^5.7.3",
+                "bfj": "^6.1.1",
+                "chalk": "^2.4.1",
+                "commander": "^2.18.0",
+                "ejs": "^2.6.1",
+                "express": "^4.16.3",
+                "filesize": "^3.6.1",
+                "gzip-size": "^5.0.0",
+                "lodash": "^4.17.10",
+                "mkdirp": "^0.5.1",
+                "opener": "^1.5.1",
+                "ws": "^6.0.0"
+            },
+            "dependencies": {
+                "commander": {
+                    "version": "2.19.0",
+                    "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
+                    "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
+                    "dev": true
+                },
+                "gzip-size": {
+                    "version": "5.0.0",
+                    "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz",
+                    "integrity": "sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA==",
+                    "dev": true,
+                    "requires": {
+                        "duplexer": "^0.1.1",
+                        "pify": "^3.0.0"
+                    }
+                }
+            }
+        },
         "webpack-bundle-tracker": {
             "version": "0.4.2-beta",
             "resolved": "https://registry.npmjs.org/webpack-bundle-tracker/-/webpack-bundle-tracker-0.4.2-beta.tgz",
@@ -11870,6 +11962,15 @@
                 "mkdirp": "^0.5.1"
             }
         },
+        "ws": {
+            "version": "6.1.3",
+            "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.3.tgz",
+            "integrity": "sha512-tbSxiT+qJI223AP4iLfQbkbxkwdFcneYinM2+x46Gx2wgvbaOMO36czfdfVUBRTHvzAMRhDd98sA5d/BuWbQdg==",
+            "dev": true,
+            "requires": {
+                "async-limiter": "~1.0.0"
+            }
+        },
         "x-is-string": {
             "version": "0.1.0",
             "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz",
diff --git a/package.json b/package.json
index 87d561690312b3fd500b45eb93f058790a1a9454..227a783718ec91552b2aedb641f05dd31f492124 100644
--- a/package.json
+++ b/package.json
@@ -61,6 +61,7 @@
         "sass-loader": "^7.1.0",
         "style-loader": "^0.23.1",
         "webpack": "^4.28.3",
+        "webpack-bundle-analyzer": "^3.0.3",
         "webpack-bundle-tracker": "^0.4.2-beta",
         "webpack-cli": "^3.1.2",
         "webpack-dev-server": "^3.1.14",