diff --git a/.gitignore b/.gitignore
index 22915b52ef2fecf39e81264a7a02c5e4badb22a1..b06a9e2c14dc1b71b697f1de6b4704e535d6efbb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,7 +12,3 @@ target/
 
 # Branch switching
 generated/
-
-# Front-end client
-node_modules/
-bower_components/
\ No newline at end of file
diff --git a/springboot-petclinic-client/.gitignore b/springboot-petclinic-client/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..e6eb5c8fdc9498b66b38dd379f3a10d1bcdc1c5e
--- /dev/null
+++ b/springboot-petclinic-client/.gitignore
@@ -0,0 +1,3 @@
+node_modules/
+bower_components/
+npm-debug.log
\ No newline at end of file
diff --git a/springboot-petclinic-client/gulpfile.js b/springboot-petclinic-client/gulpfile.js
new file mode 100644
index 0000000000000000000000000000000000000000..9406cf50db9dc1789a63ed83eab09b674c3e36ed
--- /dev/null
+++ b/springboot-petclinic-client/gulpfile.js
@@ -0,0 +1,42 @@
+var gulp = require('gulp');
+var cleanCSS = require('gulp-clean-css');
+var uglify = require('gulp-uglify');
+
+var paths = {
+    "css"    : "src/css/*",
+    "fonts"  : "src/fonts/*",
+    "images" : "src/images/*",
+    "html"   : "src/scripts/**/*.html",
+    "js"     : "src/scripts/**/*.js",
+    "dist"   : "target/dist/"
+};
+
+gulp.task('minify-css', function() {
+    return gulp.src(paths.css)
+        .pipe(cleanCSS())
+        .pipe(gulp.dest(paths.dist + 'css/'));
+});
+
+gulp.task('minify-js', function() {
+    return gulp.src(paths.js)
+        .pipe(uglify())
+        .pipe(gulp.dest(paths.dist + 'scripts/'));
+});
+
+gulp.task('copy-fonts', function() {
+    return gulp.src(paths.fonts)
+        .pipe(gulp.dest(paths.dist + 'fonts/'))
+});
+
+gulp.task('copy-html', function() {
+    return gulp.src(paths.html)
+        .pipe(gulp.dest(paths.dist + 'scripts/'))
+});
+
+gulp.task('copy-images', function() {
+    return gulp.src(paths.images)
+        .pipe(gulp.dest(paths.dist + 'images/'))
+});
+
+gulp.task('default', ['minify-css', 'minify-js', 'copy-fonts',
+          'copy-html', 'copy-images'], function() {});
diff --git a/springboot-petclinic-client/package.json b/springboot-petclinic-client/package.json
index 2e809be066b51f25fe00dbee1d4800b70acb1d37..3bd8abfb3ce6e980ffb7603df99a51c7cc49d228 100644
--- a/springboot-petclinic-client/package.json
+++ b/springboot-petclinic-client/package.json
@@ -2,6 +2,9 @@
   "private": true,
   "dependencies": {},
   "devDependencies": {
-    "bower": "^1.7.9"
+    "bower": "^1.7.9",
+    "gulp": "^3.9.1",
+    "gulp-clean-css": "^2.0.6",
+    "gulp-uglify": "^1.5.3"
   }
 }
diff --git a/springboot-petclinic-client/pom.xml b/springboot-petclinic-client/pom.xml
index 04f549a94f4faaa0b6e277f0450d65b6a2ac42e5..fd39c54530721ec9481c79e8daad91687d14dc91 100644
--- a/springboot-petclinic-client/pom.xml
+++ b/springboot-petclinic-client/pom.xml
@@ -18,7 +18,7 @@
 	<build>
 		<resources>
 			<resource>
-				<directory>${basedir}/src</directory>
+				<directory>${project.build.directory}/dist</directory>
 			</resource>
 			<resource>
 				<directory>${basedir}/bower_components</directory>
@@ -54,6 +54,12 @@
 							<goal>bower</goal>
 						</goals>
 					</execution>
+					<execution>
+						<id>gulp build</id>
+						<goals>
+							<goal>gulp</goal>
+						</goals>
+					</execution>
 				</executions>
 			</plugin>
 			<plugin>