# MEAN (Mongo Express Angular Node) seed
*MongoDB, Express.js, AngularJS, Node.js + Yeoman (Grunt, Bower, Yo) + Jasmine, Karma, Protractor*

This is project is meant to be a starting point for full stack javascript (Angular + Node) HTML5 websites and mobile apps (cross platform, responsive, can optionally be wrapped with TriggerIO, Phonegap, etc.).
- It's meant to be:
	- more specific than barebones language specific seeds such as angular-seed so you can start out with core functionality such as user login, sign up, forgot password, etc. out of the box, BUT:
	- broad and modularized enough to be used for a wide variety of applications. Angular and Node are the core technologies and Express, Mongo (using mongodb-native) and Grunt are pretty heavily integrated but all other technologies can be swapped as needed with a little bit of work.

- mongodb-native is used (rather than mongoose) as the npm plugin for the node-mongoDB interface.

- See `tools-dependencies` docs folder for more info / other key technologies used
	
- For a full list of dependencies / technologies see below, though many of the non-core ones can be switched out as necessary.
	- frontend: `bower.json` and `app/src/lib`
	- backend: `package.json` and `app/modules/services`

- NO jQuery depdendency! (AngularJS is meant to be used with its included jqLite)
	
Feel free to add Yeoman builds and submit pull requests for other 'cores' (i.e. Mongoose instead of mongo-db-native, SASS instead of LESS, Mocha instead of Jasmine for backend tests, etc.).

Any suggestions for improvement are welcome!

### NOTE: if you are NOT using Facebook login, REMOVE the `facebook.all.js` file that's included in `buildfilesModules.json` since it's a HUGE (170kb minified!) file and thus a huge waste if you're not using it!


## Code standards and expectations

Borrowing from Extreme Programming, Kanban, etc. we believe QUALITY is the most important aspect of code and that high quality code will actually SAVE time and allow FASTER building in the medium to long term by dramatically reducing Quality Assurance (QA) and bug squashing - which can easily take forever and is the most boring and frustrating part of coding!

Therefore, our 6 code quality standards are that all code should be:

1. Linted
2. Tested
	1. This is arguably the MOST important part - a robust test suite with continuous integration will automatically ensure the code is as bug free as possible and will allow updates and refactoring without lots of regressions.
3. Well-documented, clear, and understandable
4. Maintainable, easy to change and update. Modular.
5. Performant
6. Well designed, with good UI, UX, and aesthetics (for frontend code)



## Limitations / Compatibility
- Built to be cross browser and cross platform (mobile, desktop, Windows, Mac, etc.) compatibile so it should work most everywhere. Most robustly tested on Chrome and Firefox.
	- Exceptions - it will NOT work:
		- Internet Explorer <=9. Works on Internet Explorer 10+ (10 is the first version to support flexbox. It can work on IE9 without flexbox use but IE8 and below is iffy..)
	- Tested / should work on:
		- Chrome, Firefox, Safari, Internet Explorer 10+
		- Android 2.3+
		- iOS
		- should work elsewhere too but not rigorously tested outside the ones listed above
	- In total, should be about 85% coverage (IE 9, 8, 7, 6 make up about 15% market share - this number will likely go down with time as more people switch to IE10 and above). See current statistics below; note they vary as these are all (albiet very large) samples from different sites - there is no 'definitive answer' for exact browser share so it will vary by source.
		- http://www.impressivewebs.com/browser-usage-stats/
			- http://gs.statcounter.com/
			- http://www.w3counter.com/globalstats.php


## Documentation

### API (rpc) documentation and interactive usage
See `api-docs.md`


### YUIDoc auto documentation, generated by grunt

- Frontend docs are in `yuidocs/frontend`. View them by opening `yuidocs/frontend/index.html` with a browser.
- Backend docs are in `yuidocs/backend`. View them by opening `yuidocs/backend/index.html` with a browser.


## Testing, Continuous Integration
See `testing.md`, `test-coverage.md` and `continous-integration.md` files


## Grunt / build process
See `grunt.md`


## Conventions / Style guide
See `conventions-style-guide` docs folder



## Frameworks, MVC (Model View Controller) and Flow
The app (both backend and frontend) follow MVC but the file structure is modularized (so the view, controller and model are typically in the same folder) as opposed to all the controllers in one folder, all the models in one folder and all the views in one folder as may be more common. The module approach allows for easier adding, editing, and removing of components since everything the module needs is right there in the same folder. Managing dependencies and connecting modules together is easier since things are more separated.

See `frontend-angular` and `backend-node` docs folders for more info.


	
## File Structure
See `file-structure.md`


## Common actions
See `common-actions.md`


## Workflow
See `workflow.md`


## Project Files

### Configuration

- see the `app/configs` folder for all the config.json files and examples. You can create as many configurations as you like and tell grunt which one to use when building your app.
- see `configs.md` for more info
