Update to Node 6.9, Semantic 2.2.6, fixed .gitignore for Semantic build
diff --git a/.gitignore b/.gitignore
index bba8f85..8272c5c 100755
--- a/.gitignore
+++ b/.gitignore
@@ -21,10 +21,10 @@
 npm-debug.log
 .tmp
 /node_modules/*
-build
+/build
 
-static/*
-!static/admin/
+/static/*
+/!static/admin/
 
 archive/*
 
diff --git a/package.json b/package.json
index 883cac9..16a9398 100644
--- a/package.json
+++ b/package.json
@@ -26,41 +26,18 @@
     "Tap"
   ],
   "engines": {
-    "node": ">= 4.4.5"
+    "node": "^6.9.1"
   },
   "dependencies": {
-    "better-console": "^0.2.4",
     "d3": "^4.1.1",
-    "extend": "^3.0.0",
-    "gulp-chmod": "^1.3.0",
-    "gulp-clone": "^1.0.0",
-    "gulp-concat-css": "^2.3.0",
-    "gulp-copy": "0.0.2",
-    "gulp-dedupe": "0.0.2",
-    "gulp-flatten": "^0.3.0",
-    "gulp-header": "^1.8.7",
-    "gulp-help": "^1.6.1",
-    "gulp-if": "^2.0.1",
-    "gulp-less": "^3.1.0",
-    "gulp-minify-css": "^1.2.4",
-    "gulp-notify": "^2.2.0",
-    "gulp-plumber": "^1.1.0",
-    "gulp-print": "^2.0.1",
-    "gulp-rename": "^1.2.2",
-    "gulp-replace": "^0.5.4",
-    "gulp-rtlcss": "^1.0.0",
-    "gulp-watch": "^4.3.8",
     "lodash": "^4.13.1",
-    "map-stream": "0.0.6",
     "react": "^15.2.0",
     "react-dom": "^15.2.0",
     "react-redux": "^4.4.5",
     "react-router": "^2.5.2",
     "redux": "^3.5.2",
     "redux-thunk": "^2.1.0",
-    "require-dot-file": "^0.4.0",
-    "semantic-ui": "^2.2.1",
-    "yamljs": "^0.2.8"
+    "semantic-ui": "^2.2.6"
   },
   "devDependencies": {
     "babel-core": "^6.10.4",
diff --git a/semantic/tasks/build/assets.js b/semantic/tasks/build/assets.js
new file mode 100644
index 0000000..bc37ad9
--- /dev/null
+++ b/semantic/tasks/build/assets.js
@@ -0,0 +1,35 @@
+/*******************************
+          Build Task
+*******************************/
+
+var
+  gulp         = require('gulp'),
+
+  // gulp dependencies
+  chmod        = require('gulp-chmod'),
+  gulpif       = require('gulp-if'),
+
+  // config
+  config       = require('../config/user'),
+  tasks        = require('../config/tasks'),
+
+  // shorthand
+  globs        = config.globs,
+  assets       = config.paths.assets,
+  output       = config.paths.output,
+  source       = config.paths.source,
+
+  log          = tasks.log
+;
+
+module.exports = function(callback) {
+
+  console.info('Building assets');
+
+  // copy assets
+  return gulp.src(source.themes + '/**/assets/**/*.*')
+    .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+    .pipe(gulp.dest(output.themes))
+  ;
+
+};
\ No newline at end of file
diff --git a/semantic/tasks/build/css.js b/semantic/tasks/build/css.js
new file mode 100644
index 0000000..6f579d8
--- /dev/null
+++ b/semantic/tasks/build/css.js
@@ -0,0 +1,113 @@
+/*******************************
+          Build Task
+*******************************/
+
+var
+  gulp         = require('gulp'),
+
+  // node dependencies
+  console      = require('better-console'),
+  fs           = require('fs'),
+
+  // gulp dependencies
+  autoprefixer = require('gulp-autoprefixer'),
+  chmod        = require('gulp-chmod'),
+  clone        = require('gulp-clone'),
+  flatten      = require('gulp-flatten'),
+  gulpif       = require('gulp-if'),
+  less         = require('gulp-less'),
+  minifyCSS    = require('gulp-clean-css'),
+  plumber      = require('gulp-plumber'),
+  print        = require('gulp-print'),
+  rename       = require('gulp-rename'),
+  replace      = require('gulp-replace'),
+  runSequence  = require('run-sequence'),
+
+  // config
+  config       = require('../config/user'),
+  tasks        = require('../config/tasks'),
+  install      = require('../config/project/install'),
+
+  // shorthand
+  globs        = config.globs,
+  assets       = config.paths.assets,
+  output       = config.paths.output,
+  source       = config.paths.source,
+
+  banner       = tasks.banner,
+  comments     = tasks.regExp.comments,
+  log          = tasks.log,
+  settings     = tasks.settings
+;
+
+// add internal tasks (concat release)
+require('../collections/internal')(gulp);
+
+module.exports = function(callback) {
+
+  var
+    tasksCompleted = 0,
+    maybeCallback  = function() {
+      tasksCompleted++;
+      if(tasksCompleted === 2) {
+        callback();
+      }
+    },
+
+    stream,
+    compressedStream,
+    uncompressedStream
+  ;
+
+  console.info('Building CSS');
+
+  if( !install.isSetup() ) {
+    console.error('Cannot build files. Run "gulp install" to set-up Semantic');
+    return;
+  }
+
+  // unified css stream
+  stream = gulp.src(source.definitions + '/**/' + globs.components + '.less')
+    .pipe(plumber(settings.plumber.less))
+    .pipe(less(settings.less))
+    .pipe(autoprefixer(settings.prefix))
+    .pipe(replace(comments.variables.in, comments.variables.out))
+    .pipe(replace(comments.license.in, comments.license.out))
+    .pipe(replace(comments.large.in, comments.large.out))
+    .pipe(replace(comments.small.in, comments.small.out))
+    .pipe(replace(comments.tiny.in, comments.tiny.out))
+    .pipe(flatten())
+  ;
+
+  // two concurrent streams from same source to concat release
+  uncompressedStream = stream.pipe(clone());
+  compressedStream   = stream.pipe(clone());
+
+  // uncompressed component css
+  uncompressedStream
+    .pipe(plumber())
+    .pipe(replace(assets.source, assets.uncompressed))
+    .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+    .pipe(gulp.dest(output.uncompressed))
+    .pipe(print(log.created))
+    .on('end', function() {
+      runSequence('package uncompressed css', maybeCallback);
+    })
+  ;
+
+  // compressed component css
+  compressedStream = stream
+    .pipe(plumber())
+    .pipe(clone())
+    .pipe(replace(assets.source, assets.compressed))
+    .pipe(minifyCSS(settings.minify))
+    .pipe(rename(settings.rename.minCSS))
+    .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+    .pipe(gulp.dest(output.compressed))
+    .pipe(print(log.created))
+    .on('end', function() {
+      runSequence('package compressed css', maybeCallback);
+    })
+  ;
+
+};
diff --git a/semantic/tasks/build/javascript.js b/semantic/tasks/build/javascript.js
new file mode 100644
index 0000000..f99c130
--- /dev/null
+++ b/semantic/tasks/build/javascript.js
@@ -0,0 +1,77 @@
+/*******************************
+          Build Task
+*******************************/
+
+var
+  gulp         = require('gulp'),
+
+  // node dependencies
+  console      = require('better-console'),
+  fs           = require('fs'),
+
+  // gulp dependencies
+  chmod        = require('gulp-chmod'),
+  flatten      = require('gulp-flatten'),
+  gulpif       = require('gulp-if'),
+  plumber      = require('gulp-plumber'),
+  print        = require('gulp-print'),
+  rename       = require('gulp-rename'),
+  replace      = require('gulp-replace'),
+  uglify       = require('gulp-uglify'),
+
+  // config
+  config       = require('../config/user'),
+  tasks        = require('../config/tasks'),
+  install      = require('../config/project/install'),
+
+  // shorthand
+  globs        = config.globs,
+  assets       = config.paths.assets,
+  output       = config.paths.output,
+  source       = config.paths.source,
+
+  banner       = tasks.banner,
+  comments     = tasks.regExp.comments,
+  log          = tasks.log,
+  settings     = tasks.settings
+;
+
+// add internal tasks (concat release)
+require('../collections/internal')(gulp);
+
+module.exports = function(callback) {
+
+  var
+    stream,
+    compressedStream,
+    uncompressedStream
+  ;
+
+  console.info('Building Javascript');
+
+  if( !install.isSetup() ) {
+    console.error('Cannot build files. Run "gulp install" to set-up Semantic');
+    return;
+  }
+
+  // copy source javascript
+  gulp.src(source.definitions + '/**/' + globs.components + '.js')
+    .pipe(plumber())
+    .pipe(flatten())
+    .pipe(replace(comments.license.in, comments.license.out))
+    .pipe(gulp.dest(output.uncompressed))
+    .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+    .pipe(print(log.created))
+    .pipe(uglify(settings.uglify))
+    .pipe(rename(settings.rename.minJS))
+    .pipe(gulp.dest(output.compressed))
+    .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+    .pipe(print(log.created))
+    .on('end', function() {
+      gulp.start('package compressed js');
+      gulp.start('package uncompressed js');
+      callback();
+    })
+  ;
+
+};
\ No newline at end of file