├── .gitignore ├── tangerine ├── src │ ├── partials │ │ ├── footer.jade │ │ └── header.jade │ ├── includes │ │ ├── analytics.html │ │ └── head-metas.jade │ ├── assets │ │ ├── styles │ │ │ ├── variables.css │ │ │ └── style.css │ │ └── scripts │ │ │ └── index.js │ ├── index.jade │ └── layouts │ │ └── default.jade ├── _gitignore ├── README.md ├── _jshintrc ├── config.json ├── tests │ └── unit │ │ └── indexSpec.js ├── _editorconfig ├── package.json ├── karma.conf.js └── gulpfile.js ├── logo.png ├── CONTRIBUTING.md ├── package.json ├── LICENSE.md ├── slushfile.js ├── DOCS.md └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | -------------------------------------------------------------------------------- /tangerine/src/partials/footer.jade: -------------------------------------------------------------------------------- 1 | footer footer -------------------------------------------------------------------------------- /tangerine/src/partials/header.jade: -------------------------------------------------------------------------------- 1 | header header 2 | -------------------------------------------------------------------------------- /tangerine/_gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | out/ 4 | -------------------------------------------------------------------------------- /tangerine/src/includes/analytics.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tangerine/README.md: -------------------------------------------------------------------------------- 1 | # <%= appNameSlug %> 2 | 3 | > <%= appDescription %> 4 | -------------------------------------------------------------------------------- /logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afonsopacifer/slush-tangerine/HEAD/logo.png -------------------------------------------------------------------------------- /tangerine/src/assets/styles/variables.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --bgColor: #000; 3 | --mainBg: #ccc; 4 | } 5 | -------------------------------------------------------------------------------- /tangerine/_jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "undef": true, 3 | "unused": true, 4 | "eqeqeq": true, 5 | "indent": 2, 6 | "newcap": true, 7 | "curly": true 8 | } 9 | -------------------------------------------------------------------------------- /tangerine/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "site_url":"", 3 | "share_img_url":"", 4 | "twitter_card_type":"summary_large_image", 5 | "open_graph_type":"website" 6 | } -------------------------------------------------------------------------------- /tangerine/src/assets/scripts/index.js: -------------------------------------------------------------------------------- 1 | /* jshint esversion: 6 */ 2 | 3 | "use strict"; 4 | 5 | let show = text => console.log(text) 6 | 7 | show("OK") 8 | -------------------------------------------------------------------------------- /tangerine/tests/unit/indexSpec.js: -------------------------------------------------------------------------------- 1 | describe("Fun", function() { 2 | 3 | it("should be return a smile", function() { 4 | var result = smile(); 5 | expect(result).toEqual(":)"); 6 | }); 7 | 8 | }); 9 | -------------------------------------------------------------------------------- /tangerine/src/index.jade: -------------------------------------------------------------------------------- 1 | extends ./layouts/default.jade 2 | 3 | block page_infos 4 | -var title = "Slush Tangerine" 5 | -var description = "" 6 | -var keywords = "" 7 | 8 | block content 9 | main main 10 | -------------------------------------------------------------------------------- /tangerine/_editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig helps developers define and maintain consistent 2 | # coding styles between different editors and IDEs 3 | # http://editorconfig.org 4 | 5 | root = true 6 | 7 | [*] 8 | indent_style = space 9 | indent_size = 2 10 | end_of_line = lf 11 | charset = utf-8 12 | trim_trailing_whitespace = true 13 | insert_final_newline = true 14 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | ##Contributing 2 | 3 | *1 - Fork it!* 4 | 5 | *2 - Clone* 6 | 7 | *3 - Create your feature branch:* 8 | ```sh 9 | $ git checkout -b my-new-feature 10 | ``` 11 | *4 - Commit your changes:* 12 | ```sh 13 | $ git commit -m 'Add some feature' 14 | ``` 15 | *5 - Push to the branch:* 16 | ```sh 17 | $ git push origin my-new-feature 18 | ``` 19 | *6 - Submit a pull request* 20 | -------------------------------------------------------------------------------- /tangerine/src/assets/styles/style.css: -------------------------------------------------------------------------------- 1 | @import "variables.css"; 2 | 3 | html { 4 | height: 100%; 5 | } 6 | 7 | body { 8 | height: 100%; 9 | display: flex; 10 | flex-direction: column; 11 | } 12 | 13 | header,footer { 14 | background-color: var(--bgColor); 15 | color: #fff; 16 | padding: 20px 0; 17 | text-align: center; 18 | } 19 | 20 | main { 21 | background-color: var(--mainBg); 22 | flex: 1; 23 | display: flex; 24 | justify-content: center; 25 | align-items: center; 26 | } 27 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "slush-tangerine", 3 | "version": "1.0.0", 4 | "description": "Front-End boilerplate generator with tangerine flavor.", 5 | "main": "slushfile.js", 6 | "keywords": [ 7 | "slushgenerator" 8 | ], 9 | "dependencies": { 10 | "gulp": "~3.5.6", 11 | "gulp-template": "~0.1.1", 12 | "gulp-install": "~0.1.1", 13 | "gulp-conflict": "~0.1.1", 14 | "gulp-rename": "~1.2.0", 15 | "underscore.string": "~2.3.3", 16 | "inquirer": "~0.4.1" 17 | }, 18 | "author": { 19 | "name": "Afonso Pacifer", 20 | "email": "afonsopacifer@live.com", 21 | "url": "http://afonsopacifer.com" 22 | }, 23 | "license": "MIT" 24 | } 25 | -------------------------------------------------------------------------------- /tangerine/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "<%= appNameSlug %>", 3 | "description": "<%= appDescription %>", 4 | "version": "<%= appVersion %>", 5 | "author": { 6 | "name": "<%= appAuthor %>", 7 | "email": "<%= appEmail %>" 8 | }, 9 | "devDependencies": { 10 | "babel-preset-es2015": "^6.3.13", 11 | "gulp": "^3.9.0", 12 | "gulp-babel": "^6.1.1", 13 | "gulp-connect": "^2.3.1", 14 | "gulp-cssnext": "^1.0.1", 15 | "gulp-data": "^1.2.1", 16 | "gulp-gh-pages": "^0.5.4", 17 | "gulp-imagemin": "^2.4.0", 18 | "gulp-jade": "^1.1.0", 19 | "gulp-jshint": "^2.0.0", 20 | "jasmine-core": "^2.4.1", 21 | "jshint": "^2.8.0", 22 | "karma": "^0.13.19", 23 | "karma-chrome-launcher": "^0.2.2", 24 | "karma-cli": "^0.1.2", 25 | "karma-jasmine": "^0.3.6", 26 | "karma-phantomjs-launcher": "^0.2.3", 27 | "phantomjs": "^1.9.19", 28 | "postcss": "^5.0.13" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /tangerine/src/layouts/default.jade: -------------------------------------------------------------------------------- 1 | doctype html 2 | html(lang="en" prefix="og: http://ogp.me/ns#") 3 | 4 | head 5 | 6 | //- head metas 7 | //- =========================================== 8 | include ./../includes/head-metas.jade 9 | 10 | //- head requests 11 | //- =========================================== 12 | link(rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/3.0.3/normalize.min.css") 13 | link(rel="stylesheet" href="assets/styles/style.css") 14 | 15 | body 16 | 17 | //- header 18 | //- =========================================== 19 | include ./../partials/header.jade 20 | 21 | //- main 22 | //- =========================================== 23 | block content 24 | 25 | //- footer 26 | //- =========================================== 27 | include ./../partials/footer.jade 28 | 29 | //- bottom requests 30 | //- =========================================== 31 | include ./../includes/analytics.html 32 | script(type="text/javascript" src="assets/scripts/index.js") 33 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016 Afonso Pacifer, [afonsopacifer.com](http://afonsopacifer.com/) 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /tangerine/src/includes/head-metas.jade: -------------------------------------------------------------------------------- 1 | //- meta 2 | meta(name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0") 3 | meta(charset="utf-8") 4 | 5 | //- favicons 6 | //- link(rel="icon" href="assets/img/favicons/favicon-16.png" sizes="16x16") 7 | //- link(rel="icon" href="assets/img/favicons/favicon-32.png" sizes="32x32") 8 | //- link(rel="apple-touch-icon" href="assets/img/favicons/apple-touch-icon-144x144.png" sizes="144x144") 9 | //- link(rel="apple-touch-icon" href="assets/img/favicons/apple-touch-icon-114x114.png" sizes="114x114") 10 | //- link(rel="apple-touch-icon" href="assets/img/favicons/apple-touch-icon-72x72.png" sizes="72x72") 11 | //- link(rel="apple-touch-icon" href="assets/img/favicons/apple-touch-icon.png") 12 | 13 | //- page_infos 14 | block page_infos 15 | 16 | //- SEO 17 | meta(name="keywords" content=keywords) 18 | meta(name="description" content=description) 19 | meta(name="robots" content="index,follow") 20 | title=title 21 | 22 | //- Open Graph 23 | meta(property="og:type" content=open_graph_type) 24 | meta(property="og:title" content=title) 25 | meta(property="og:description" content=description) 26 | meta(property="og:url" content=site_url) 27 | meta(property="og:image" content=share_img_url) 28 | 29 | //- Twitter Cards 30 | meta(name="twitter:card" content=twitter_card_type) 31 | meta(name="twitter:title" content=title) 32 | meta(name="twitter:description" content=description) 33 | meta(name="twitter:url" content=site_url) 34 | meta(name="twitter:image" content=share_img_url) 35 | -------------------------------------------------------------------------------- /slushfile.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var gulp = require('gulp'), 4 | install = require('gulp-install'), 5 | conflict = require('gulp-conflict'), 6 | template = require('gulp-template'), 7 | rename = require('gulp-rename'), 8 | _ = require('underscore.string'), 9 | inquirer = require('inquirer'); 10 | 11 | gulp.task('default', function(done) { 12 | 13 | //Answers 14 | var prompts = [{ 15 | name: 'appName', 16 | message: 'What the name of project?' 17 | }, { 18 | name: 'appDescription', 19 | message: 'What the description?' 20 | }, { 21 | name: 'appVersion', 22 | message: 'What the version?', 23 | default: '0.1.0' 24 | }, { 25 | name: 'appAuthor', 26 | message: 'Name of author?' 27 | }, { 28 | name: 'appEmail', 29 | message: 'Author e-mail?' 30 | }]; 31 | 32 | //Ask 33 | inquirer.prompt(prompts, 34 | function(answers) { 35 | if (!answers.appName) { 36 | return done(); 37 | } 38 | answers.appNameSlug = _.slugify(answers.appName) 39 | answers.appAuthorSlug = _.slugify(answers.appAuthor) 40 | gulp.src(__dirname + '/tangerine/**') 41 | .pipe(template(answers)) 42 | .pipe(rename(function(file) { 43 | if (file.basename[0] === '_') { 44 | file.basename = '.' + file.basename.slice(1); 45 | } 46 | })) 47 | .pipe(conflict('./')) 48 | .pipe(gulp.dest('./')) 49 | .pipe(install()) 50 | .on('end', function() { 51 | done(); 52 | }); 53 | }); 54 | }); 55 | -------------------------------------------------------------------------------- /DOCS.md: -------------------------------------------------------------------------------- 1 | # Getting Started 2 | 3 | ## 1 - Install 4 | *install the basics dependencies* 5 | 6 | - [NodeJS](https://nodejs.org/en/) 7 | - [GulpJS](http://gulpjs.com/) 8 | - [Slush](http://slushjs.github.io/) 9 | 10 | *install and use the generator* 11 | 12 | ```sh 13 | $ [sudo] npm install -g slush-tangerine 14 | $ slush tangerine 15 | ``` 16 | 17 | ## 2 - Set the global configs 18 | 19 | *Open the `config.json` file and add your global information and preferences:* 20 | 21 | ```json 22 | { 23 | "site_url":"https://example.com/", 24 | "share_img_url":"https://example.com/logo.jpg", 25 | "twitter_card_type":"summary_large_image", 26 | "open_graph_type":"website" 27 | } 28 | ``` 29 | 30 | - `site_url`: Will be used for social sharing meta tags.
31 | - `share_img_url`: Will be used for social sharing meta tags. 32 | - `twitter_card_type`: More Info on [Twitte Cards Types](https://dev.twitter.com/cards/types). 33 | - `open_graph_type`: More Info on [Open Graph Reference](https://developers.facebook.com/docs/reference/opengraph/). 34 | 35 |
36 | 37 | ## 3 - Create your first page 38 | 39 | *Go to `src/` directory and create your `.jade` file:* 40 | 41 | `example.jade` 42 | 43 | ```jade 44 | extends ./layouts/default.jade 45 | 46 | block page_infos 47 | -var title = "Example title" 48 | -var description = "Cool description" 49 | -var keywords = "Your keywords" 50 | 51 | block content 52 | div Hello World 53 | ``` 54 | 55 | - `title`: Will be used for social sharing and SEO meta tags. 56 | - `description`: Will be used for social sharing and SEO meta tags. 57 | - `keywords`: Will be used for SEO meta tag. 58 | 59 |
60 | 61 | ## 4 - Build, Serve and Deploy 62 | 63 | *Build all files* 64 | ```sh 65 | $ gulp build 66 | ``` 67 | 68 | *Watch the files to build and run a static server on http://localhost:8080/* 69 | ```sh 70 | $ gulp serve 71 | ``` 72 | 73 | *Deploy for gh-pages* 74 | ```sh 75 | $ gulp deploy 76 | ``` 77 | -------------------------------------------------------------------------------- /tangerine/karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration 2 | // Generated on Wed Jan 06 2016 00:45:26 GMT-0200 (BRST) 3 | 4 | module.exports = function(config) { 5 | config.set({ 6 | 7 | // base path that will be used to resolve all patterns (eg. files, exclude) 8 | basePath: '', 9 | 10 | 11 | // frameworks to use 12 | // available frameworks: https://npmjs.org/browse/keyword/karma-adapter 13 | frameworks: ['jasmine'], 14 | 15 | 16 | // list of files / patterns to load in the browser 17 | files: [ 18 | 'src/assets/scripts/**/**.js', 19 | 'tests/**/**.js' 20 | ], 21 | 22 | 23 | // list of files to exclude 24 | exclude: [ 25 | ], 26 | 27 | 28 | // preprocess matching files before serving them to the browser 29 | // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor 30 | preprocessors: { 31 | }, 32 | 33 | 34 | // test results reporter to use 35 | // possible values: 'dots', 'progress' 36 | // available reporters: https://npmjs.org/browse/keyword/karma-reporter 37 | reporters: ['progress'], 38 | 39 | 40 | // web server port 41 | port: 9876, 42 | 43 | 44 | // enable / disable colors in the output (reporters and logs) 45 | colors: true, 46 | 47 | 48 | // level of logging 49 | // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG 50 | logLevel: config.LOG_INFO, 51 | 52 | 53 | // enable / disable watching file and executing tests whenever any file changes 54 | autoWatch: true, 55 | 56 | 57 | // start these browsers 58 | // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher 59 | browsers: ['PhantomJS'], 60 | 61 | 62 | // Continuous Integration mode 63 | // if true, Karma captures browsers, runs the tests and exits 64 | singleRun: false, 65 | 66 | // Concurrency level 67 | // how many browser should be started simultaneous 68 | concurrency: Infinity 69 | }) 70 | } 71 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Slush Tangerine Logo](https://github.com/afonsopacifer/slush-tangerine/blob/master/logo.png) 2 | 3 | # Slush Tangerine 4 | 5 | > Front-End boilerplate generator with tangerine flavor. 6 | 7 | ## How to install and use the generator? 8 | 9 | Install the slush: 10 | 11 | ```sh 12 | $ [sudo] npm install -g slush 13 | ``` 14 | 15 | Install the tangerine generator: 16 | 17 | ```sh 18 | $ [sudo] npm install -g slush-tangerine 19 | ``` 20 | 21 | Use the generator: 22 | 23 | ```sh 24 | $ slush tangerine 25 | ``` 26 | 27 | ## The generated boilerplate 28 | 29 | Basic docs: 30 | 31 | - [Getting Started](https://github.com/afonsopacifer/slush-tangerine/blob/master/DOCS.md) 32 | 33 | Stack based in NodeJS: 34 | 35 | - Generator: [Slush](http://slushjs.github.io/#/) 36 | - Task Runner: [Gulp](http://gulpjs.com/) 37 | - HTML Template Engine: [Jade](http://jade-lang.com/) 38 | - CSS Post Processor: [PostCSS](https://github.com/postcss/postcss) 39 | - JS Traspiler: [BabelJS](https://babeljs.io/) 40 | - Test Runner: [Karma](https://www.npmjs.com/package/karma) 41 | - Test Framework: [Jasmine](https://github.com/karma-runner/karma-jasmine) 42 | - "Browser" for test: [PhantomJS](http://phantomjs.org/) 43 | 44 | Vendors: 45 | 46 | - CSS Reset: [Normalize](https://necolas.github.io/normalize.css/) 47 | 48 | Folders Structure: 49 | 50 | . 51 | ├── README.md 52 | ├── out/ 53 | ├── tests/ 54 | ├── src/ 55 | | ├── assets/ 56 | | ├── includes/ 57 | | ├── partials/ 58 | | ├── layouts/ 59 | | └── index.jade 60 | ├── config.json 61 | ├── gulpfile.js 62 | ├── package.json 63 | ├── karma.conf.js 64 | ├── .editorconfig 65 | ├── .jshintrc 66 | └── .gitignore 67 | 68 | Automatic Tasks: 69 | 70 | - `$ gulp build`: Compile, concat and minify all files. 71 | - `$ gulp serve`: Watch the files to build and start a static server. 72 | - `$ gulp deploy`: Deploy for gh-pages. 73 | - `$ gulp validate`: Code quality (JS Hint). 74 | - `$ karma start`: Launch a Phantomjs and watch for unit tests. 75 | 76 | ## Versioning 77 | 78 | To keep better organization of releases we follow the [Semantic Versioning 2.0.0](http://semver.org/) guidelines. 79 | 80 | ## Contributing 81 | 82 | Find on our [roadmap](https://github.com/afonsopacifer/slush-tangerine/issues/1) the next steps of the project ;) 83 |
84 | Want to contribute? [Follow these recommendations](https://github.com/afonsopacifer/slush-tangerine/blob/master/CONTRIBUTING.md). 85 | 86 | ## History 87 | 88 | See [Releases](https://github.com/afonsopacifer/slush-tangerine/releases) for detailed changelog. 89 | 90 | ## License 91 | 92 | [MIT License](https://github.com/afonsopacifer/slush-tangerine/blob/master/LICENSE.md) © [Afonso Pacifer](http://afonsopacifer.com/) 93 | -------------------------------------------------------------------------------- /tangerine/gulpfile.js: -------------------------------------------------------------------------------- 1 | // Modules :) 2 | // =========================================== 3 | var gulp = require('gulp'), 4 | jade = require('gulp-jade'), 5 | data = require('gulp-data'), 6 | cssnext = require('gulp-cssnext'), 7 | babel = require('gulp-babel'), 8 | jshint = require('gulp-jshint'), 9 | imagemin = require('gulp-imagemin'), 10 | connect = require('gulp-connect'), 11 | ghPages = require('gulp-gh-pages'); 12 | 13 | // Compile Jade 14 | // =========================================== 15 | gulp.task('jade', () => { 16 | gulp.src('src/**.jade') 17 | .pipe(data(file => require('./config.json'))) 18 | .pipe(jade()) 19 | .pipe(gulp.dest('out')) 20 | .pipe(connect.reload()); 21 | }); 22 | 23 | // cssnext features 24 | // =========================================== 25 | gulp.task('cssnext', () => { 26 | gulp.src('src/assets/styles/style.css') 27 | .pipe(cssnext({ 28 | compress: false 29 | })) 30 | .pipe(gulp.dest('out/assets/styles/')) 31 | .pipe(connect.reload()); 32 | }); 33 | 34 | // Babel 35 | // =========================================== 36 | gulp.task('babel', () => { 37 | gulp.src('src/assets/scripts/**.js') 38 | .pipe(babel({ 39 | presets: ['es2015'] 40 | })) 41 | .pipe(gulp.dest('out/assets/scripts/')) 42 | .pipe(connect.reload()); 43 | }); 44 | 45 | // JSHint 46 | // =========================================== 47 | gulp.task('hint', () => { 48 | return gulp.src('src/assets/scripts/**.js') 49 | .pipe(jshint()) 50 | .pipe(jshint.reporter('default')) 51 | .pipe(connect.reload()); 52 | }); 53 | 54 | // Imagemin 55 | // =========================================== 56 | gulp.task('imagemin', () => { 57 | gulp.src('src/assets/img/**/**') 58 | .pipe(imagemin({ 59 | progressive: true, 60 | svgoPlugins: [{removeViewBox: false}] 61 | })) 62 | .pipe(gulp.dest('out/assets/img/')) 63 | .pipe(connect.reload()); 64 | }); 65 | 66 | // Watch 67 | // =========================================== 68 | gulp.task('watch', () => { 69 | gulp.watch(['src/**/**.jade'], ['jade']); 70 | gulp.watch(['src/assets/styles/**/**.css'], ['cssnext']); 71 | gulp.watch(['src/assets/scripts/**.js'], ['babel']); 72 | gulp.watch(['src/assets/img/**/**'], ['imagemin']); 73 | gulp.watch(['src/assets/scripts/**.js'], ['hint']); 74 | }); 75 | 76 | // Static server 77 | // =========================================== 78 | gulp.task('connect', () => { 79 | connect.server({ 80 | root: 'out', 81 | livereload: true 82 | }); 83 | }); 84 | 85 | // Deploy for gh-pages 86 | // =========================================== 87 | gulp.task('deploy', () => { 88 | return gulp.src('./out/') 89 | .pipe(ghPages()); 90 | }); 91 | 92 | // More Tasks 93 | // =========================================== 94 | gulp.task('serve', ['connect', 'watch']); 95 | gulp.task('build', ['jade', 'cssnext', 'babel', 'hint', 'imagemin']); 96 | gulp.task('validate', ['hint']); 97 | --------------------------------------------------------------------------------