# MyPaper ## Running 1. `$ git clone git@gitlab.thecodebureau.com:lohfu/pomodoro.git` 2. `$ cd pomodoro` 2. `$ npm install` 3. `$ npm run gulp` Navigate to localhost:1337 (Node app runs on the port given in `server/config/port`, but Gulp starts a [BrowserSync](https://github.com/BrowserSync/browser-sync) proxy that reloads your browser automatically when you change certain files). ## Building (Production environment) Simply call `$ npm run gulp:production` to run all build tasks in production mode, without starting the server. ## Routes ## Files & Directories ### /img/raster All raster images. Will be symlinked into `/public/img`. ### /img/svg All SVG images. Will be symlinked into `/public/img` in development ENV, and minified to the same location in production ENV. ### /gulpfile.js Runs the code in `/gulp`. ### /gulp This contains ALL gulp logic. #### /gulp/config.js This file contains all the configuration for the gulp tasks. Editing this file should be enough for most needs. ### /less This folder contains all SASS files and is compiled with the gulp sass task, which puts the output CSS into `/public/css` ### /public This directory is maintained by gulp. All static assets get symlinked in here, and any built code This folder should not be edited directly, or commited to git. It is removed everytime gulp initializes. ### /server This directory contains all JavaScript that only has to do with running your server instance. ### /server/middleware Generic middleware that do not belong to a specific service. Should export a single middleware function, or a namespaced object of functions. ### /server/models Shared models or models that do not belong to a specific service. Should export the initialized model, ie: ``` module.exports = new mongoose.Model('Model', ModelSchema); ``` ### /server/routes Routes that do not belong to a server. Should return an array of route arrays (`[ path, method, [ mw ] ]`)routes: ``` module.exports = [ [ '/', 'get', [ mw.one, mw.two ] ], [ '/page', 'get', [ mw.three, mw.four ] ], [ '/page2', 'get', [ mw.five, mw.eight ] ] ]; ``` ### /server/config All configuration for the server. Most files export different options depending on the environment. A file might look like this: ``` module.exports = { development: {}, testing: {}, staging: {}, production: {} }[ENV]; ``` If you want defaults applied, you might do something like this: ``` const defaults = {} module.exports = Object.assign({}, defaults, { production: {} }[ENV]); ``` In which case defaults will be used for all environments except `production`, in which the production settings will override any settings in defaults. If you don't want to override, do this instead: ``` const defaults = {} module.exports = { production: {} }[ENV] || defaults); ``` ### /server/services Instead of splitting models, middlewares and routes into three seperate folders, we create service directories that contain files relating to the same functionality. ### /server/templates Marko templates. ### /src This contains all isomorphic and pure browser JavaScript. Browserify bundles these files (entry point is `app.js`) and outputs `public/app.js`. ### /static This contains all static content. All files in here are symlinked into `/public`, while retaining its relative path. IE `/static/fonts/font.otf` gets symlinked to `/public/fonts/font.otf`. The only special files are robots.txt. In all ENV besides production `robots.txt` will be symlinked, in production environment `robots-production.txt` will be used instead.