diff --git a/Gruntfile.js b/Gruntfile.js
index 6f677210fbe8d388ff337ff78384533dd1bca9dd..0ed8cb32362418ea8ccadb60e202baf3767f9de7 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -52,13 +52,13 @@ module.exports = function (grunt) {
     less: {
       all: {
         options: {
-    				paths: [lessDir],
-    				plugins: [
-  						autoprefixPlugin,
+            paths: [lessDir],
+            plugins: [
+              autoprefixPlugin,
               cleanCssPlugin
-  					]
-    			},
-    			files: lessFiles
+            ]
+          },
+          files: lessFiles
       }
     },
     uglify: {
@@ -69,20 +69,49 @@ module.exports = function (grunt) {
         files: builtJsFiles
       }
     },
+    requirejs: {
+      all: {
+        options: {
+          appDir: 'www/js/embed-src/',
+          baseUrl: './',
+          dir: 'www/js/embed/',
+          optimize: 'uglify2',
+          logLevel: 2,
+          preserveLicenseComments: false,
+          generateSourceMaps: true,
+          paths: {
+            'requireLib': 'require'
+          },
+          map: {
+            "*": {
+              css: 'require-css/css'
+            }
+          },
+          modules: [
+            {
+              name: 'all',
+              create: true,
+              include: ['requireLib', 'require-css/css', 'main', 'jquery', 'analytics'],
+              exclude: ['require-css/normalize']
+            }
+          ]
+        }
+      }
+    },
     clean: {
       css: Object.keys(lessFiles).concat(lessVendorDir),
       js: Object.keys(builtJsFiles).concat(jsDir + '/**/*.map')
     },
     watch: {
       less: {
-  			files: lessDir + '/**/*.less',
-  			tasks: ['less']
-  		}
+        files: lessDir + '/**/*.less',
+        tasks: ['less']
+      }
     }
   });
 
   // establish grunt default
-  var defaultTasks = ['less', 'uglify'];
+  var defaultTasks = ['less', 'uglify', 'requirejs'];
   var localTasks = defaultTasks.slice();
   if (!allMixinsExist) {
     defaultTasks.unshift('curl-dir');
diff --git a/package.json b/package.json
index bad93c9f401f31f1a44fc37e739b8e33b806eb7a..5bf0e0c9f164e043998f449e22be5f6e152fd8ac 100644
--- a/package.json
+++ b/package.json
@@ -7,6 +7,7 @@
     "grunt": "^0.4.5",
     "grunt-contrib-clean": "^0.6.0",
     "grunt-contrib-less": "^1.0.1",
+    "grunt-contrib-requirejs": "^0.4.4",
     "grunt-contrib-uglify": "^0.9.2",
     "grunt-contrib-watch": "^0.6.1",
     "grunt-curl": "^2.2.0",
diff --git a/www/js/.gitignore b/www/js/.gitignore
index 813ad52b0ab9c39b5f25d1fa230c9314b3580d4b..b358685fc6476c39497b7b5ef85a63616c28ad5f 100644
--- a/www/js/.gitignore
+++ b/www/js/.gitignore
@@ -1,2 +1,3 @@
 /*.map
 /search.min.js
+/embed