{"id":13393066,"url":"https://github.com/sahat/megaboilerplate","last_synced_at":"2025-04-13T18:34:16.150Z","repository":{"id":2594877,"uuid":"46940449","full_name":"sahat/megaboilerplate","owner":"sahat","description":"Handcrafted starter projects, optimized for simplicity and ease of use.","archived":false,"fork":false,"pushed_at":"2022-07-22T00:58:43.000Z","size":13518,"stargazers_count":3832,"open_issues_count":79,"forks_count":255,"subscribers_count":83,"default_branch":"master","last_synced_at":"2024-10-29T15:34:12.081Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"CSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sahat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-11-26T17:51:50.000Z","updated_at":"2024-10-24T07:10:56.000Z","dependencies_parsed_at":"2022-08-20T11:40:51.418Z","dependency_job_id":null,"html_url":"https://github.com/sahat/megaboilerplate","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sahat%2Fmegaboilerplate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sahat%2Fmegaboilerplate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sahat%2Fmegaboilerplate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sahat%2Fmegaboilerplate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sahat","download_url":"https://codeload.github.com/sahat/megaboilerplate/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248760820,"owners_count":21157435,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-30T17:00:42.122Z","updated_at":"2025-04-13T18:34:16.126Z","avatar_url":"https://github.com/sahat.png","language":"CSS","funding_links":["https://opencollective.com/megaboilerplate","https://opencollective.com/megaboilerplate/backer/0/website","https://opencollective.com/megaboilerplate/backer/1/website","https://opencollective.com/megaboilerplate/backer/2/website","https://opencollective.com/megaboilerplate/backer/3/website","https://opencollective.com/megaboilerplate/backer/4/website","https://opencollective.com/megaboilerplate/backer/5/website","https://opencollective.com/megaboilerplate/backer/6/website","https://opencollective.com/megaboilerplate/backer/7/website","https://opencollective.com/megaboilerplate/backer/8/website","https://opencollective.com/megaboilerplate/backer/9/website","https://opencollective.com/megaboilerplate/backer/10/website","https://opencollective.com/megaboilerplate/backer/11/website","https://opencollective.com/megaboilerplate/backer/12/website","https://opencollective.com/megaboilerplate/backer/13/website","https://opencollective.com/megaboilerplate/backer/14/website","https://opencollective.com/megaboilerplate/backer/15/website","https://opencollective.com/megaboilerplate/backer/16/website","https://opencollective.com/megaboilerplate/backer/17/website","https://opencollective.com/megaboilerplate/backer/18/website","https://opencollective.com/megaboilerplate/backer/19/website","https://opencollective.com/megaboilerplate/backer/20/website","https://opencollective.com/megaboilerplate/backer/21/website","https://opencollective.com/megaboilerplate/backer/22/website","https://opencollective.com/megaboilerplate/backer/23/website","https://opencollective.com/megaboilerplate/backer/24/website","https://opencollective.com/megaboilerplate/backer/25/website","https://opencollective.com/megaboilerplate/backer/26/website","https://opencollective.com/megaboilerplate/backer/27/website","https://opencollective.com/megaboilerplate/backer/28/website","https://opencollective.com/megaboilerplate/backer/29/website"],"categories":["CSS","JavaScript","others","🏎 Boilerplates"],"sub_categories":[],"readme":"\u003cimg src=\"http://i.imgur.com/UNyLl3s.png\" height=\"60\"\u003e\n \n[![Gitter](https://badges.gitter.im/sahat/megaboilerplate.svg)](https://gitter.im/sahat/megaboilerplate)\n[![Build Status](https://travis-ci.org/sahat/megaboilerplate.svg?branch=master)](https://travis-ci.org/sahat/megaboilerplate)\n\nMega Boilerplate is a starter project generator that focuses on simplicity and ease of use, while providing you with flexibility of choices. It was heavily inspired by the [Hackathon Starter](https://github.com/sahat/hackathon-starter), but unlike it, you can customize any part of your application stack — from web framework and database to CSS preprocessor and client-side JavaScript framework. Currently, generators are primarily limited to Node.js web apps, but I am planning to expand support for other platforms and languages in the near future.\n\nTable of Contents\n-----------------\n\n- [**Getting Started**](#getting-started)\n - [Express](#express)\n - [Meteor](#meteor)\n - [Jekyll](#jekyll)\n - [Middleman](#middleman)\n - [JS Library](#js-library)\n- [**Database Setup**](#database-setup)\n - [MongoDB](#mongodb)\n - [MySQL](#mysql)\n - [PostgreSQL](#postgresql)\n - [SQLite](#sqlite)\n- [**Project Structure**](#project-structure)\n- [**Obtaining API Keys**](#obtaining-api-keys)\n- [**Learning Resources**](#learning-resources)\n - [React / Redux](#react--redux)\n- [**Cheatsheets**](#cheatsheets)\n - [ES6](#-es6-cheatsheet)\n - [JavaScript Date](#-javascript-date-cheatsheet)\n- [**Deployment**](#deployment)\n- [**FAQ**](#faq)\n - [\u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/57/React.js_logo.svg/50px-React.js_logo.svg.png\" height=\"17\"\u003e React](#-react)\n - [\u003cimg src=\"https://angular.io/resources/images/logos/standard/shield-large.png\" height=\"17\"\u003e Angular](#-angular)\n- [**Changelog**](#changelog)\n- [**Contributing**](#contributing)\n- [**License**](#license)\n\nGetting Started\n---------------\n\n### Prerequisites\n\n- [Node.js 6.0](http://nodejs.org)\n- [Git](https://git-scm.com/)\n- Command Line Tools\n - \u003cimg src=\"http://deluge-torrent.org/images/apple-logo.gif\" height=\"17\"\u003e **Mac OS X**: [Xcode](https://developer.apple.com/xcode/download/) or `xcode-select --install`\n - \u003cimg src=\"http://dc942d419843af05523b-ff74ae13537a01be6cfec5927837dcfe.r14.cf1.rackcdn.com/wp-content/uploads/windows-8-50x50.jpg\" height=\"17\"\u003e **Windows**: [Visual C++ Build Tools 2015](http://go.microsoft.com/fwlink/?LinkId=691126)\n - \u003cimg src=\"https://lh5.googleusercontent.com/-2YS1ceHWyys/AAAAAAAAAAI/AAAAAAAAAAc/0LCb_tsTvmU/s46-c-k/photo.jpg\" height=\"17\"\u003e **Ubuntu**: `sudo apt-get install build-essential`\n - \u003cimg src=\"http://i1-news.softpedia-static.com/images/extra/LINUX/small/slw218news1.png\" height=\"17\"\u003e **Fedora**: `sudo dnf groupinstall \"Development Tools\"`\n - \u003cimg src=\"https://en.opensuse.org/images/b/be/Logo-geeko_head.png\" height=\"17\"\u003e **OpenSUSE**: `sudo zypper install --type pattern devel_basis`\n\n### Express\n\u003cimg src=\"http://blog.newrelic.com/wp-content/uploads/expresslogo.png\" height=\"70px\"\u003e\n\nDownload and extract the project. Then in your Terminal type the following:\n\n```shell\n$ cd megaboilerplate-app\n\n# Install NPM dependencies\n$ npm install\n\n# Start the app\n$ node server.js\n\n# Express server listening on port 3000\n```\n\n**Note**: If you have selected **Gulp** or **NPM** build tool, you may also need to run `npm run build` command.\n\n**Note**: If you have selected a database, please make sure it is up and running. For additional information, see [**Database Setup**](#database-setup).\n\n\n\n:top: \u003csub\u003e[**back to top**](#table-of-contents)\u003c/sub\u003e\n\n### Jekyll\n\u003cimg src=\"http://build.prestashop.com/assets/images/2015/04/jekyll.png\" height=\"70px\"\u003e\n\n#### Prerequisites\n\n- [Ruby 2.0+](http://rubyinstaller.org)\n- [Jekyll](https://jekyllrb.com/) Ruby Gem\n\n```shell\n$ cd megaboilerplate-app\n\n# Start Jekyll app\n$ jekyll serve\n\n# Server address: http://127.0.0.1:4000/\n# Server running... press ctrl-c to stop.\n```\n\n:top: \u003csub\u003e[**back to top**](#table-of-contents)\u003c/sub\u003e\n\n\n### Middleman\n\u003cimg src=\"https://avatars2.githubusercontent.com/u/1280820?v=3\u0026s=400\" height=\"70px\"\u003e\n\n#### Prerequisites\n\n- [Ruby 2.0+](http://rubyinstaller.org)\n- [Middleman](https://middlemanapp.com/) Ruby Gem\n\n```shell\n$ cd megaboilerplate-app\n\n# Install Ruby dependencies\n$ bundle install\n\n# Start Middleman app\n$ bundle exec middleman\n\n# The Middleman is loading\n# View your site at \"http://localhost:4567\"\n```\n\n:top: \u003csub\u003e[**back to top**](#table-of-contents)\u003c/sub\u003e\n\n### JS Library\n\nThis JavaScript library boilerplate was inspired and based on Dan Abramov's [library-boilerplate](https://github.com/gaearon/library-boilerplate) project. The main idea here is you write your code in ES6, which then gets transpiled into CommonJS and UMD builds. Consider [lodash](https://lodash.com/) as an example - a very popular JavaScript library that supports ES6 `import`, CommonJS `require()` and can be used inside a browser via `\u003cscript\u003e` tag.\n\n```shell\n$ cd megaboilerplate-app\n\n# Install NPM dependencies\n$ npm install\n\n# ES5 / CommonJS build\n$ npm run build\n\n# UMD build\n$ npm run build:umd\n\n# Run tests\n$ npm test\n```\n\n:top: \u003csub\u003e[**back to top**](#table-of-contents)\u003c/sub\u003e\n\n## Database Setup\n\n- [MongoDB](#mongodb)\n- [MySQL](#mysql)\n- [PostgreSQL](#postgresql)\n- [SQLite](#sqlite)\n\n:top: \u003csub\u003e[**back to top**](#table-of-contents)\u003c/sub\u003e\n\n### MongoDB\n\u003cimg src=\"http://s3.amazonaws.com/info-mongodb-com/_com_assets/media/mongodb-logo-rgb.jpeg\" height=\"70px\"\u003e\n\n\u003cimg src=\"http://deluge-torrent.org/images/apple-logo.gif\" height=\"17\"\u003e **Mac OS X**\n\nInstall [Homebrew](http://brew.sh/) package manager. Then follow the steps below to install and setup MongoDB.\n\n```shell\n# Update Homebrew's package database\n$ brew update\n\n# Install MongoDB\n$ brew install mongodb\n\n# Create the data directory\n$ sudo mkdir -p /data/db\n\n# Set permissions for the data directory\n$ sudo chown -R `whoami` /data/db\n\n# Run MongoDB Server\n$ mongod\n```\n\n\u003cimg src=\"http://dc942d419843af05523b-ff74ae13537a01be6cfec5927837dcfe.r14.cf1.rackcdn.com/wp-content/uploads/windows-8-50x50.jpg\" height=\"17\"\u003e **Windows**\n\n1. Download and install the [current stable release](https://www.mongodb.org/downloads#production).\n2. Create the data directory: **C:\\data\\db**.\n3. Run MongoDB Server by opening `mongod.exe` in **C:\\Program Files\\MongoDB\\Server\\3.2\\bin**.\n\n\u003cimg src=\"https://lh5.googleusercontent.com/-2YS1ceHWyys/AAAAAAAAAAI/AAAAAAAAAAc/0LCb_tsTvmU/s46-c-k/photo.jpg\" height=\"17\"\u003e **Ubuntu**\n\n```shell\n# Import the public key used by the package management system\n$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927\n\n# Create a source list file for MongoDB\n$ echo \"deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse\" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list\n\n# Update the repository\n$ sudo apt-get update\n\n# Install the latest stable version of MongoDB\n$ sudo apt-get install -y mongodb-org\n\n# Start MongoDB service\n$ sudo service mongod start\n```\n\n:top: \u003csub\u003e[**back to top**](#table-of-contents)\u003c/sub\u003e\n\n### MySQL\n\u003cimg src=\"https://upload.wikimedia.org/wikipedia/en/thumb/6/62/MySQL.svg/640px-MySQL.svg.png\" height=\"70px\"\u003e\n\nUse database settings below in the `.env` file.\n\n| Key           | Value                                                             |\n| ------------- |:-----------------------------------------------------------------:|\n| `DB_HOST`     | localhost                                                         |\n| `DB_USER`     | root                                                              |\n| `DB_PASSWORD` | (use root password configured during installation or leave blank) |\n| `DB_NAME`     | mysql                                                             |\n\n\u003cimg src=\"http://deluge-torrent.org/images/apple-logo.gif\" height=\"17\"\u003e **Mac OS X**\n\nInstall [Homebrew](http://brew.sh/) package manager. Then follow the steps below to install and start MySQL.\n\n```shell\n# Update Homebrew's package database\n$ brew update\n\n# Install MySQL\n$ brew install mysql\n\n# Start MySQL Server\n$ mysql.server start\n```\n\n\u003cimg src=\"http://dc942d419843af05523b-ff74ae13537a01be6cfec5927837dcfe.r14.cf1.rackcdn.com/wp-content/uploads/windows-8-50x50.jpg\" height=\"17\"\u003e **Windows**\n\n1. Download [MySQL Installer for Windows](http://dev.mysql.com/downloads/mysql/).\n2. Start the installer and follow instructions until the installation is complete.\n - When prompted, choose *Server only* or *Developer Default* setup type.\n\n**Note**: Alternatively, you may use [XAMPP](https://www.apachefriends.org/index.html), which already comes bundled with MySQL and phpMyAdmin.\n\n\u003cimg src=\"https://lh5.googleusercontent.com/-2YS1ceHWyys/AAAAAAAAAAI/AAAAAAAAAAc/0LCb_tsTvmU/s46-c-k/photo.jpg\" height=\"17\"\u003e **Ubuntu**\n\n```shell\n# Update the repository\n$ sudo apt-get update\n$ sudo apt-get upgrade\n\n# Install MySQL\n$ sudo apt-get install mysql-server\n```\n\n:top: \u003csub\u003e[**back to top**](#table-of-contents)\u003c/sub\u003e\n\n### PostgreSQL\n\u003cimg src=\"http://yiqunc.org/wp-content/uploads/2013/12/postgresql-logo.png\" height=\"70px\"\u003e\n\nUse database settings below in the `.env` file.\n\n| Key           | Value                                                             |\n| ------------- |:-----------------------------------------------------------------:|\n| `DB_HOST`     | localhost                                                         |\n| `DB_USER`     | postgres                                                          |\n| `DB_PASSWORD` | (use root password configured during installation)                |\n| `DB_NAME`     | postgres                                                          |\n\n\u003cimg src=\"http://deluge-torrent.org/images/apple-logo.gif\" height=\"17\"\u003e **Mac OS X**\n\nInstall [Homebrew](http://brew.sh/) package manager. Then follow the steps below to install and start PostgreSQL.\n\n```shell\n# Update Homebrew's package database\n$ brew update\n\n# Install PostgreSQL\n$ brew install postgres\n\n# Start PostgreSQL Server\n$ postgres -D /usr/local/var/postgres\n```\n\n\u003cimg src=\"http://dc942d419843af05523b-ff74ae13537a01be6cfec5927837dcfe.r14.cf1.rackcdn.com/wp-content/uploads/windows-8-50x50.jpg\" height=\"17\"\u003e **Windows**\n\n1. Download the latest version of [PostgreSQL Installer](http://www.enterprisedb.com/products-services-training/pgdownload#windows).\n2. Start the installer and follow instructions until the installation is complete.\n\n\u003cimg src=\"https://lh5.googleusercontent.com/-2YS1ceHWyys/AAAAAAAAAAI/AAAAAAAAAAc/0LCb_tsTvmU/s46-c-k/photo.jpg\" height=\"17\"\u003e **Ubuntu**\n\n```shell\n# Update the repository\n$ sudo apt-get update\n$ sudo apt-get upgrade\n\n# Install PostgreSQL\n$ sudo apt-get install postgresql postgresql-contrib\n```\n\n### SQLite\n\u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/3/38/SQLite370.svg/1280px-SQLite370.svg.png\" height=\"70px\"\u003e\n\nNo additional steps required. Package [`sqlite3`](https://www.npmjs.com/package/sqlite3) will be automatically installed during `npm install` in [**Getting Started**](#getting-started).\n\n:top: \u003csub\u003e[**back to top**](#table-of-contents)\u003c/sub\u003e\n\nProject Structure\n-----------------\n\nDue to the nature of this project, there are too many possible project structure variations to list here. For the sake of simplicity, let's consider just the following project types:\n\n- [Traditional Node.js Web App](#-traditional-nodejs-web-app)\n- [React App](#-react-app)\n- [AngularJS App](#-angularjs-app)\n- Meteor App\n\n### \u003cimg src=\"https://nodejs.org/static/apple-touch-icon.png\" align=\"top\" height=\"34\"\u003e Traditional Node.js Web App\n\nThis is perhaps the most straightforward web app type that does not use any client-side JavaScript frameworks or build tools. Is also the closest thing to [Hackathon Starter](https://github.com/sahat/hackathon-starter) project.\n\n```\n.\n├── config/                    # Configuration files for OAuth, database, etc.\n│   ├── passport.js/           # Passport strategies\n├── controllers/               # Express route handlers\n├── models/                    # Express database models\n├── public/                            \n│   ├── css/                   # Sass/LESS/PostCSS/CSS stylesheets (both source and generated)\n│   ├── fonts/                 # Web fonts\n│   ├── js/                    # Client-side JavaScript and third-party vendor files\n├── views/                     # Templates\n├── test/                      # Unit tests                    \n├── .env                       # API keys, passwords, and other sensitive information\n├── server.js                  # Express application\n└── package.json               # NPM Dependencies and scripts\n```\n\n### \u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/57/React.js_logo.svg/50px-React.js_logo.svg.png\" align=\"top\" height=\"34\"\u003e React App\n\nThe new hotness of the web — Universal JavaScript app, powered by [React](http://facebook.github.io/react/), [Redux](http://redux.js.org/), [React Router](https://github.com/reactjs/react-router) and [Server Rendering](http://redux.js.org/docs/recipes/ServerRendering.html). \n\n**Note:** Some files were ommited like `gulpfile.js` and `webpack.config.js`.\n\n```\n.\n├── app/                       # React application\n│   ├── actions/               # Redux actions\n│   ├── components/            # React components\n│   ├── reducers/              # Redux reducers\n│   ├── store/                 # Store initialization and configuration\n│   ├── main.js                # Client-side app entry-point\n│   ├── routes.js              # Universal application routes (React Router)\n├── controllers/               # Express route handlers\n├── models/                    # Express database models\n├── public/                    \n│   ├── css/                   # Sass/LESS/PostCSS/CSS stylesheets (both source and generated)\n│   ├── fonts/                 # Font Awesome web fonts\n│   ├── js/                    # Third-party vendor files and generated React app (bundle.js)\n├── views/                    \n│   ├── layout.jade            # Main container, into which React app is rendered\n│   ├── loading.jade           # Loading spinner animation for OAuth 1.0 / 2.0 authentication flow inside a popup\n├── .babelrc                   # Babel config\n├── .env                       # API keys, passwords, and other sensitive information\n├── server.js                  # Express application\n└── package.json               # NPM Dependencies and scripts\n```\n\n### \u003cimg src=\"https://avatars0.githubusercontent.com/u/139426?v=3\u0026s=400\" align=\"top\" height=\"34\"\u003e AngularJS App\n\nYour typical MEAN stack (MongoDB, Express, AngularJS, Node.js). Originally, I was not planning on adding AngularJS 1.x generator, especailly with Angular 2 around the corner. So without investing too much time, I kept it real simple: **no Browserify, no ES6 classes, no AngularJS 1.5 components**. Once officially released, Angular 2 generator will be more elaborate with quite a few additional options.\n\n```\n.\n├── app/                       # Angular app directory\n│   ├── controllers/           # Angular controllers\n│   ├── partials/              # Angular view templates\n│   ├── services/              # Angular services\n│   ├── store/                 # Store initialization and configuration\n│   ├── app.js                 # Main Angular app file\n│   ├── index.html             # Main layout template\n├── controllers/               # Express route handlers\n├── models/                    # Express database models\n├── public/                    \n│   ├── css/                   # Sass/LESS/PostCSS/CSS stylesheets (both source and generated)\n│   ├── js/                    # Compiled Angular app and third-party vendor files, e.g. angular.js, angular-route.js\n├── .env                       # API keys, passwords, and other sensitive information\n├── gulpfile.js                # Compiles Angular application and templates\n├── server.js                  # Express application\n└── package.json               # NPM Dependencies and scripts\n```\n\n:top: \u003csub\u003e[**back to top**](#table-of-contents)\u003c/sub\u003e\n\nObtaining API Keys\n------------------\n\nTo use any of the included OAuth providers (e.g. Facebook, Twitter, Google), you will need to obtain API keys. I have included \"throw-away\" API keys for all OAuth providers to get you up and running quickly, but be sure to update them with your own keys.\n\n\u003cimg src=\"http://www.doit.ba/img/facebook.jpg\" width=\"200\"\u003e\n- Go to [Facebook Developers](https://developers.facebook.com/).\n- Click on **My Apps** dropdown, then select **Add a New App**.\n- Select **Website** platform, then click on **Skip and Create App ID** button.\n- Enter a **name** and choose a **category** for your app.\n- Click on **Create App ID** button.\n- Copy and paste **App ID** and **App Secret** keys into `.env` file:\n - `FACEBOOK_ID='YOUR_APP_ID'`\n - `FACEBOOK_SECRET='YOUR_APP_SECRET'`\n- Click on the **Settings** tab, then click on **+ Add Platform** button.\n- Select **Website**, then enter `http://localhost:3000/auth/facebook/callback` in the **Site URL**.\n\n**Note**: If you are using React or AngularJS, copy and paste **App Secret** into `.env` file and **App ID** into *app/actions/oauth.js* (React) and *app/app.js* (AngularJS).\n\n\u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Google_2015_logo.svg/1000px-Google_2015_logo.svg.png\" width=\"200\"\u003e\n- Go to [Google Cloud Console](https://cloud.google.com/console/project)\n- Click on **Create project** button.\n- Enter a **Project name**, then click on **Create** button.\n- Click on **Use Google APIs** (Enable and manage APIs) panel.\n- Click on **Credentials** tab in the sidebar.\n- Client on **Create credentials** dropdown, then select **OAuth client ID**.\n- Select or enter the following:\n - **Application type**: `Web application`\n - **Authorized JavaScript origins**: `http://localhost:3000`\n - **Authorized redirect URIs**: `http://localhost:3000/auth/google/callback`\n- Click on **Create** button.\n- Copy and paste **client ID** and **client secret** keys into `.env` file:\n  - `GOOGLE_ID='YOUR_CLIENT_ID'`\n  - `GOOGLE_SECRET='YOUR_CLIENT_SECRET'`\n\n**Note**: If you are using React or AngularJS, copy and paste **client secret** into `.env` file and **client ID** into *app/actions/oauth.js* (React) and *app/app.js* (AngularJS).\n\n\u003cimg src=\"https://g.twimg.com/ios_homescreen_icon.png\" width=\"75\"\u003e\n- Go to [Twitter Application Management](https://apps.twitter.com/).\n- Click on **Create New App** button.\n- Fill out required fields.\n - **Callback URL**: `http://127.0.0.1:3000/auth/twitter/callback`\n- Go to **Settings** tab.\n- Click on **Allow this application to be used to Sign in with Twitter** checkbox.\n- Click on **Update Settings** button.\n- Go to **Keys and Access Tokens** tab.\n- Copy and paste **Consumer Key** and **Consumer Secret** keys into `.env` file:\n - `TWITTER_ID='YOUR_CONSUMER_KEY'`\n - `TWITTER_SECRET='YOUR_CONSUMER_SECRET'`\n\n**Note**: If you are using React or AngularJS, copy and paste **Consumer Secret** into `.env` file and **Consumer Key** into *app/actions/oauth.js* (React) and *app/app.js* (AngularJS).\n\n\u003cimg src=\"https://cdn2.iconfinder.com/data/icons/social-flat-buttons-3/512/vkontakte-256.png\" height=\"75\"\u003e\n- Go to [Developers | VK](http://new.vk.com/dev)\n- Click on **Create an Application** button.\n- Enter a **Title** and select a **Category** (Website), then click on **Connect Application** button.\n- Confirm activation code via your mobile number.\n- Click on **Settings** tab in the sidebar.\n- Select or enter the following:\n - **Application status**: `Application on and visible to all`\n - **Site address**: `http://localhost:3000`\n - **Authorized redirect URI**: `http://localhost:3000/auth/vkontakte/callback`\n- Copy and paste **Application ID** and **Secure key** into `.env` file:\n - `VK_ID='YOUR_APPLICATION_ID'`\n - `VK_SECRET='YOUR_SECURE_KEY'`\n\n**Note**: If you are using React or AngularJS, copy and paste **Secure key** into `.env` file and **Application ID** into *app/actions/oauth.js* (React) and *app/app.js* (AngularJS).\n\n\u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/2/24/GitHub_logo_2013_padded.svg\" width=\"200\"\u003e\n- Go to [Github Developer Applications Settings](https://github.com/settings/developers)\n- Click on **Register a new application** button.\n- Fill out required fields.\n - **Application Name**\n - **Homepage URL**\n - **Callback URL**: `http://127.0.0.1:3000/auth/github/callback`\n- Click on **Register application**\n- Copy and paste **client ID** and **client secret** keys into `.env` file:\n  - `GITHUB_ID='YOUR_CLIENT_ID'`\n  - `GITHUB_SECRET='YOUR_CLIENT_SECRET'`\n\n**Note**: If you are using React or AngularJS, copy and paste **client secret** into `.env` file and **client ID** into *app/actions/oauth.js* (React) and *app/app.js* (AngularJS).\n\n:top: \u003csub\u003e[**back to top**](#table-of-contents)\u003c/sub\u003e\n\nLearning Resources\n------------------\n\n### Web Tools\n- [HTML to Jade converter](http://html2jade.aaron-powell.com/)\n- [SassMe - A Tool for Visualizing SASS Color Functions](http://sassme.arc90.com/)\n- [uiGradients](http://uigradients.com/)\n\n### Express\n- [Creating a Simple RESTful Web App with Node.js, Express, and MongoDB](http://cwbuecheler.com/web/tutorials/2014/restful-web-app-node-express-mongodb/)\n- [How To Implement Password Reset In Node.js](http://sahatyalkabov.com/how-to-implement-password-reset-in-nodejs/)\n\n### React / Redux\n- [:movie_camera: React in 7 Minutes](https://egghead.io/lessons/react-react-in-7-minutes)\n- [:movie_camera: Getting Started with Redux (30 free videos)](https://egghead.io/series/getting-started-with-redux)\n- [:movie_camera: Building React Applications with Idiomatic Redux (27 free videos)](https://egghead.io/courses/building-react-applications-with-idiomatic-redux)\n- [:book: Create a character voting app using React, Node.js, MongoDB and Socket.IO](http://sahatyalkabov.com/create-a-character-voting-app-using-react-nodejs-mongodb-and-socketio/)\n- [:book: Handcrafting an Isomorphic Redux Application](https://medium.com/front-end-developers/handcrafting-an-isomorphic-redux-application-with-love-40ada4468af4#.vft63avyi)\n- [:book: React.js Introduction For People Who Know Just Enough jQuery To Get By](http://reactfordesigners.com/labs/reactjs-introduction-for-people-who-know-just-enough-jquery-to-get-by/)\n\n### Performance and SEO\n- [Managing Mobile Performance Optimization](https://www.smashingmagazine.com/2016/03/managing-mobile-performance-optimization)\n- [A technical guide to SEO](https://ma.ttias.be/technical-guide-seo/)\n\n### AngularJS\n- [John Papa's Angular Style Guide](https://github.com/johnpapa/angular-styleguide/)\n- [Build an Instagram clone with AngularJS, Satellizer, Node.js and MongoDB](http://sahatyalkabov.com/build-an-instagram-clone-using-angularjs-satellizer-nodejs-and-mongodb/)\n- [Create a TV Show Tracker using AngularJS, Node.js and MongoDB](http://sahatyalkabov.com/create-a-tv-show-tracker-using-angularjs-nodejs-and-mongodb/)\n\n### Jekyll\n- [Setting up your GitHub Pages site locally with Jekyll](https://help.github.com/articles/setting-up-your-github-pages-site-locally-with-jekyll/)\n- [Build A Blog With Jekyll And GitHub Pages](https://www.smashingmagazine.com/2014/08/build-blog-jekyll-github-pages/)\n\n### Middleman\n- [How to Setup a Static Website with Middleman](http://webdesign.tutsplus.com/articles/how-to-setup-a-static-website-with-middleman--cms-25275)\n- [Static Website Generators Reviewed: Jekyll, Middleman, Roots, Hugo](https://www.smashingmagazine.com/2015/11/static-website-generators-jekyll-middleman-roots-hugo-review/)\n\n### JS Library\n- [:movie_camera: How to Write an Open Source JavaScript Library](https://egghead.io/courses/how-to-write-an-open-source-javascript-library)\n\n### Bookshelf.js (SQL ORM)\n- [Bookshelf.js: A Node.js ORM](http://stackabuse.com/bookshelf-js-a-node-js-orm/)\n- [Getting Started with Bookshelf.js](https://joepettit.com/bookshelf-js/)\n\n### Mongoose (MongoDB ODM)\n- [Easily Develop Node.js and MongoDB Apps with Mongoose](https://scotch.io/tutorials/using-mongoosejs-in-node-js-and-mongodb-applications)\n- [Object Modeling in Node.js with Mongoose](https://devcenter.heroku.com/articles/nodejs-mongoose)\n\n:top: \u003csub\u003e[**back to top**](#table-of-contents)\u003c/sub\u003e\n\nCheatsheets\n-----------\n\n### \u003cimg src=\"https://frontendmasters.com/assets/es6-logo.png\" height=\"34\" align=\"top\"\u003e ES6 Cheatsheet\n\n#### Declarations\n\nDeclares a read-only named constant.\n\n```js\nconst name = 'yourName';\n```\n\nDeclares a block scope local variable.\n```js\nlet index = 0;\n```\n\n#### Template Strings\n\nUsing the **\\`${}\\`** syntax, strings can embed expressions.\n\n```js\nconst name = 'Oggy';\nconst age = 3;\n\nconsole.log(`My cat is named ${name} and is ${age} years old.`);\n```\n\n#### Modules\n\nTo import functions, objects or primitives exported from an external module. These are the most common types of importing.\n\n```js\nimport name from 'module-name';\n```\n```js\nimport * as name from 'module-name';\n```\n```js\nimport { foo, bar } from 'module-name';\n```\n\nTo export functions, objects or primitives from a given file or module.\n\n```js\nexport { myFunction };\n```\n```js\nexport const name = 'yourName';\n```\n```js\nexport default myFunctionOrClass\n```\n\n#### Spread Operator\n\nThe spread operator allows an expression to be expanded in places where multiple arguments (for function calls) or multiple elements (for array literals) are expected.\n\n```js\nmyFunction(...iterableObject);\n```\n```jsx\n\u003cChildComponent {...this.props} /\u003e\n```\n\n#### Promises\n\nA Promise is used in asynchronous computations to represent an operation that hasn't completed yet, but is expected in the future.\n\n```js\nvar p = new Promise(function(resolve, reject) { });\n```\n\nThe `catch()` method returns a Promise and deals with rejected cases only.\n\n```js\np.catch(function(reason) { /* handle rejection */ });\n```\n\nThe `then()` method returns a Promise. It takes 2 arguments: callback for the success \u0026 failure cases.\n\n```js\np.then(function(value) { /* handle fulfillment */, function(reason) { /* handle rejection */ });\n```\n\nThe `Promise.all(iterable)` method returns a promise that resolves when all of the promises in the iterable argument have resolved, or rejects with the reason of the first passed promise that rejects.\n\n```js\nPromise.all([p1, p2, p3]).then(function(values) { console.log(values) });\n```\n\n#### Arrow Functions\n\nArrow function expression. Shorter syntax \u0026 lexically binds the `this` value. Arrow functions are anonymous.\n\n```js\nsingleParam =\u003e { statements }\n```\n```js\n() =\u003e { statements }\n```\n```js\n(param1, param2) =\u003e expression\n```\n```js\nconst arr = [1, 2, 3, 4, 5];\nconst squares = arr.map(x =\u003e x * x);\n```\n\n#### Classes\n\nThe class declaration creates a new class using prototype-based inheritance.\n\n```js\nclass Person {\n  constructor(name, age, gender) {\n    this.name   = name;\n    this.age    = age;\n    this.gender = gender;\n  }\n\n  incrementAge() {\n    this.age++;\n  }\n}\n```\n\n:gift: **Credits**: [DuckDuckGo](https://duckduckgo.com/?q=es6+cheatsheet\u0026ia=cheatsheet\u0026iax=1) and [@DrkSephy](https://github.com/DrkSephy/es6-cheatsheet).\n\n:top: \u003csub\u003e[**back to top**](#table-of-contents)\u003c/sub\u003e\n\n### \u003cimg src=\"http://i.stack.imgur.com/Mmww2.png\" height=\"34\" align=\"top\"\u003e JavaScript Date Cheatsheet\n\n#### Unix Timestamp (seconds)\n\n```js\nMath.floor(Date.now() / 1000);\n```\n\n#### Add 30 minutes to a Date object\n\n```js\nvar now = new Date();\nnow.setMinutes(now.getMinutes() + 30);\n```\n\n#### Date Formatting\n\n```js\n// DD-MM-YYYY\nvar now = new Date();\n\nvar DD = now.getDate();\nvar MM = now.getMonth() + 1;\nvar YYYY = now.getFullYear();\n\nif (DD \u003c 10) {\n  DD = '0' + DD;\n} \n\nif (MM \u003c 10) {\n  MM = '0' + MM;\n}\n\nconsole.log(MM + '-' + DD + '-' + YYYY); // 03-30-2016\n```\n```js\n// hh:mm (12 hour time with am/pm)\nvar now = new Date();\nvar hours = now.getHours();\nvar minutes = now.getMinutes();\nvar amPm = hours \u003e= 12 ? 'pm' : 'am';\n\nhours = hours % 12;\nhours = hours ? hours : 12;\nminutes = minutes \u003c 10 ? '0' + minutes : minutes;\n\nconsole.log(hours + ':' + minutes + ' ' + amPm); // 1:43 am\n```\n\n#### Next week Date object\n\n```js\nvar today = new Date();\nvar nextWeek = new Date(today.getTime() + 7 * 24 * 60 * 60 * 1000);\n```\n\n#### Yesterday Date object\n\n```js\nvar today = new Date();\nvar yesterday = date.setDate(date.getDate() - 1);\n```\n\n:top: \u003csub\u003e[**back to top**](#table-of-contents)\u003c/sub\u003e\n\n\nDeployment\n----------\n\nOnce you are ready to deploy your app, you will need to create an account with\na cloud platform to host it. These are not the only choices you have, but they are my top\npicks.\n\n### Heroku\n\u003cimg src=\"https://camo.githubusercontent.com/fb89a03a7dd0393851b9ed3720742b738944d863/687474703a2f2f7265732e636c6f7564696e6172792e636f6d2f646a7a6c356b6d61372f696d6167652f75706c6f61642f76313433373838333435312f4865726f6b755f6c6f676f5f6d6f6b7369702e706e67\" width=\"200\"\u003e\n\n- Download and install [Heroku Toolbelt](https://toolbelt.heroku.com/)\n- In Terminal, run `heroku login`, then enter your Heroku credentials\n- Navigate to the **megaboilerplate-app** directory and run the following commands:\n 1. `git init`\n 2. `git add .`\n 3. `git commit -m 'Initial commit'`\n- Then run `heroku create` to create a new Heroku app and link it with your current Git repository\n\n   ```bash\n   Creating app... done, ⬢ floating-mesa-51019\n   https://floating-mesa-51019.herokuapp.com/ | https://git.heroku.com/floating-mesa-51019.git\n   ```\n   \n- Run `git push heroku master` and you are done!\n\n**Note**: If you have created a new app via Heroku Dashboard, you can link it with an existing Git repository by running:\n\n```bash\nheroku git:remote -a your-heroku-app-name\n```\n\nFor more information, please visit [Getting Started on Heroku with Node.js](https://devcenter.heroku.com/articles/getting-started-with-nodejs#introduction).\n\n#### Heroku + PostgreSQL\n\nConnecting to a [Heroku Postgres](https://postgres.heroku.com) database from outside of the Heroku network requires SSL. Furthermore, connection string given by Heroku (`DATABASE_URL`) does not have `\"?ssl=true\"` parameter by default.\n\nThe simplest solution is to add `PGSSLMODE=require` config var in the Heroku dashboard or via CLI: `heroku config:set PGSSLMODE=require`.\n\n**TODO:** Deployment instructions for SQL and MongoDB databases. (~~Heroku Postgres~~, Compose, MongoLab)\n\n### Microsoft Azure\n\u003cimg src=\"https://worldvectorlogo.com/logos/microsoft-azure-2.svg\" width=\"200\"\u003e\n\n- Sign in to your account at [Azure Portal](https://portal.azure.com/)\n- Click on \u003cimg src=\"https://media.licdn.com/mpr/mpr/shrinknp_400_400/AAEAAQAAAAAAAASJAAAAJDZlNmM0YmIyLWZjYWQtNDRjMC05NDAzLTVkNGQ4ZWY4NzcxYw.png\" height=\"17px\"\u003e **App Services**, then click on **Add** button\n- Enter an *App name* for your app and create or select an existing *Resource Group*\n- Click on **Create** button and give it 15-20 seconds \n- Find and select your app under **App Services**\n- In the right-hand **Settings** sidebar, find and click on **Deployment source**\n- Under **Choose Source** select **Local Git Repository**, then press **OK**\n - Alternatively, you can choose **GitHub** to sync Azure with a GitHub repository for continous deployment\n- Right below **Deployment source**, click on **Deployment credentials** and create new username and password, then hit **Save**\n- Still inside **Settings** sidebar, find and click on **Properties** located under General settings\n- Copy **Git URL**, e.g. `https://username@appname.scm.azurewebsites.net:443/appname.git`\n- Navigate to the **megaboilerplate-app** directory and run the following commands:\n 1. `git init`\n 2. `git add .`\n 3. `git commit -m 'Initial commit'`\n 4. `git remote add azure https://username@appname.scm.azurewebsites.net:443/appname.git`\n   - **Note**: Use your Git URL from above \n- Run `git push azure master`, and when prompted, enter your password created under **Deployment credentials**\n- All set!\n\n### Digital Ocean\n\u003cimg src=\"https://www.digitalocean.com/assets/images/logos-badges/png/DO_Logo_Vertical_Blue-2c654e19.png\" width=\"200\"\u003e\n\nTODO\n\n:top: \u003csub\u003e[**back to top**](#table-of-contents)\u003c/sub\u003e\n\nFAQ\n---\n\n- [React](#-react)\n - [Actions, reducers, stores, containers, provider...what? ಠ_ರೃ](#user-content-actions-reducers-stores-containers-providerwhat-ಠ_ರೃ)\n \n:top: \u003csub\u003e[**back to top**](#table-of-contents)\u003c/sub\u003e\n\n### \u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/57/React.js_logo.svg/50px-React.js_logo.svg.png\" align=\"top\" height=\"34\"\u003e React\n\n#### Actions, reducers, stores, containers, provider...what? ಠ_ರೃ\n\nDespite being such a small library, [Redux](http://redux.js.org/) can be difficult to grasp for beginners. It took me almost three days until Redux \"clicked\" for me, even with my prior experience of working with React and Flux. Here is a TL;DR: summary:\n\n| Concept       | Description                                                       |\n| ------------- |:-----------------------------------------------------------------:|\n| **Actions**   | Your application events, e.g. fetch data from server. Success and failure events of data fetching could also be actions. Actions are just plain JavaScript objects. They typically have some data associated with it. For example, `LOGIN_ERROR` action may contain an error message. Actions describe the fact that something happened, but don't specify how the application’s state changes in response. This is the job of a reducer. |\n| **Reducers**  | Basically your action handlers, internally implemented via [`Array.prototype.reduce()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce). This is where you specify how should the application state be updated when `LOGIN_ERROR` action is dispatched, for example. And that's it. How that state affects your application should still be managed in your components. One thing to note, **you never mutate the state**, but rather create a new copy of your current state + new changes using [`Object.assign()`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign). |\n| **Store**     | Brings **actions** and **reducers** together. Store holds entire application state, allows you access current state via `getState()`, and update application state via `dispatch(action)`. You typically have just one Redux store that is configured during the inital bootstrap stage. |\n| **Provider**     | Syntactic sugar from [react-redux](https://github.com/reactjs/react-redux) library. [`\u003cProvider\u003e`](https://github.com/reactjs/react-redux/blob/master/docs/api.md#provider-store) component wrapper makes the Redux store available to the [`connect()`](https://github.com/reactjs/react-redux/blob/master/docs/api.md#connectmapstatetoprops-mapdispatchtoprops-mergeprops-options) function. Alternatively, you can manually pass `store` as a prop to every `connect()`ed component. [`connect()`](https://github.com/reactjs/react-redux/blob/master/docs/api.md#connectmapstatetoprops-mapdispatchtoprops-mergeprops-options) is another syntactic sugar provided by react-redux which connects a React component to a Redux store. Alternatively, you can manually subscribe/unsubscribe to/from a store during `componentDidMount()` and `componentDidUnmount()` lifecycle of each component. |\n| **Container** | So-called smart components that are aware of Redux, whereas traditional components are now considered dumb components, which are not aware of Redux; they just render markup with given props. I intentionally combined containers and components into simply — *components* for the sake of simplicity.\n\n:top: \u003csub\u003e[**back to faq**](#faq)\u003c/sub\u003e\n\nBackers\n-------\nSupport us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/megaboilerplate#backer)]\n\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/0/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/0/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/1/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/1/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/2/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/2/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/3/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/3/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/4/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/4/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/5/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/5/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/6/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/6/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/7/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/7/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/8/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/8/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/9/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/9/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/10/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/10/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/11/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/11/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/12/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/12/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/13/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/13/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/14/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/14/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/15/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/15/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/16/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/16/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/17/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/17/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/18/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/18/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/19/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/19/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/20/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/20/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/21/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/21/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/22/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/22/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/23/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/23/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/24/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/24/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/25/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/25/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/26/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/26/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/27/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/27/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/28/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/28/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/backer/29/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/backer/29/avatar.svg\"\u003e\u003c/a\u003e\n\n\nSponsors\n--------\nBecome a sponsor and get your logo on our website and on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/megaboilerplate#sponsor)]\n\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/0/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/0/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/1/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/1/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/2/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/2/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/3/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/3/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/4/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/4/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/5/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/5/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/6/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/6/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/7/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/7/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/8/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/8/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/9/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/9/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/10/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/10/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/11/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/11/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/12/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/12/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/13/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/13/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/14/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/14/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/15/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/15/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/16/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/16/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/17/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/17/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/18/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/18/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/19/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/19/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/20/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/20/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/21/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/21/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/22/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/22/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/23/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/23/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/24/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/24/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/25/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/25/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/26/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/26/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/27/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/27/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/28/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/28/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/megaboilerplate/sponsor/29/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/megaboilerplate/sponsor/29/avatar.svg\"\u003e\u003c/a\u003e\n\n\n\nSites Built with Mega Boilerplate\n---------------------------------\n\nIf you have built an app using Mega Boilerplate, please enter yourself here by sending a pull request.\n\nChangelog\n---------\n\n### 1.1.0 (June 10, 2016)\n- Added Stylus CSS preprocessor support when no CSS Framework is selected.\n- Generate `README.md` for each boilerplate with selected choices.\n- Enabled Webpack hot module replacement for Redux reducers.\n- Updated React 15.0.2 to 15.1.0.\n- Removed unused lodash require() in the user controller.\n- Improved responsive design of login and signup container (Bootstrap).\n- Fixed indentation inside profile update controller (SQL).\n- Hide `password` field when calling `toJSON()` method on user model (Bookshelf.js / SQL).\n- Fixed a bug where an error was thrown after user updates their profile (SQL only).\n- Fixed invalid file path for Bootstrap CSS/JS imports inside `layout.jade`.\n- `knexfile.js` is no longer generated twice.\n- Updated Redux learning resources section in README.\n- Added special instructions to \"Obtaining API Keys\" section for React / AngularJS.\n\n### 1.0.0 (June 8, 2016)\n- Initial release.\n\nContributing\n------------\n\nPull requests from beginners and seasoned JavaScript developers are welcome! As it stands, Mega Boilerplate is pretty large in scope to be maintained by a single person, so I am asking for your help to contribute where you can, whether it's a small fix in README or adding a whole new generator type, e.g. Meteor, Angular 2, React Native, Electron.\n\n:top: \u003csub\u003e[**back to top**](#table-of-contents)\u003c/sub\u003e\n\nLicense\n-------\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsahat%2Fmegaboilerplate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsahat%2Fmegaboilerplate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsahat%2Fmegaboilerplate/lists"}