Generating app and serving APIs
diff --git a/xos/core/xoslib/ngXosLib/generator-xos/app/templates/gulp/build.js b/xos/core/xoslib/ngXosLib/generator-xos/app/templates/gulp/build.js
new file mode 100644
index 0000000..40136c8
--- /dev/null
+++ b/xos/core/xoslib/ngXosLib/generator-xos/app/templates/gulp/build.js
@@ -0,0 +1,93 @@
+'use strict';
+
+// BUILD
+// 
+// The only purpose of this gulpfile is to build a XOS view and copy the correct files into
+// .html => dashboards
+// .js (minified and concat) => static/js
+// 
+// The template are parsed and added to js with angular $templateCache
+
+var gulp = require('gulp');
+var ngmin = require('gulp-ngmin');
+var uglify = require('gulp-uglify');
+var templateCache = require('gulp-angular-templatecache');
+var runSequence = require('run-sequence');
+var minifyHtml = require("gulp-minify-html");
+var concat = require("gulp-concat");
+var del = require('del');
+var wiredep = require('wiredep');
+var babel = require('gulp-babel');
+var angularFilesort = require('gulp-angular-filesort');
+
+var TEMPLATE_HEADER = '/*This code is autogenerated from the templates files */ angular.module("<%= module %>"<%= standalone %>).run(["$templateCache", function($templateCache) {';
+
+module.exports = function(options){
+  
+  // empty the dist folder
+  gulp.task('clean', function(){
+    return del([options.dist + '**/*']);
+  });
+
+  // compile and minify scripts
+  gulp.task('scripts', function() {
+    return gulp.src([
+        options.scripts + '**/*.js'
+      ])
+      .pipe(babel())
+      .pipe(ngmin())
+      .pipe(angularFilesort())
+      .pipe(concat('xosContentProvider.js'))
+      .pipe(uglify())
+      .pipe(gulp.dest(options.dist));
+  });
+
+  // set templates in cache
+  gulp.task('templates', function(){
+    return gulp.src("./src/templates/*.html")
+      .pipe(templateCache({
+        module: 'xos.contentProviderApp',
+        root: '../../static/templates/contentProvider/',
+        templateHeader: TEMPLATE_HEADER
+      }))
+      .pipe(gulp.dest(options.scripts));
+  });
+
+  // copy js output to Django Folder
+  gulp.task('copyJs', function(){
+    return gulp.src('dist/xosContentProvider.js')
+      .pipe(gulp.dest('../static/js/'))
+  });
+
+  // copy vendor js output to Django Folder
+  gulp.task('copyVendor', function(){
+    return gulp.src('dist/xosNgVendor.js')
+      .pipe(gulp.dest('../static/js/vendor/'));
+  });
+
+  // minify vendor js files
+  gulp.task('wiredep', function(){
+    var bowerDeps = wiredep().js;
+    return gulp.src(bowerDeps)
+      .pipe(concat('xosNgVendor.js'))
+      .pipe(uglify())
+      .pipe(gulp.dest(options.dist));
+  });
+
+  // TODO vendor
+  // - define a list of common components (eg: angular, angular-route, ...)
+  // - find the difference between local components e common components
+  // - minify only the local
+  // - unify wiredep, filter and copyVendor task
+
+  gulp.task('build', function() {
+    runSequence(
+      'clean',
+      'templates',
+      'scripts',
+      'copyJs',
+      'wiredep',
+      'copyVendor'
+    );
+  });
+}
\ No newline at end of file