npm init
touch Gruntfile.js
module.exports = function(grunt)
record steps
grunt-contrib-concat
concat globs
globs as dependency management
- allow us to not care about ordering
- works best with frameworks that have opinionated module systems and/or
lifecycles; angular is a great example of this due to angular.module
cleanup from globbing
Gruntfile.coffee
- coffeescript is a nicer format for configuration files, as it is
much less verbose.
grunt-contrib-watch
- tired of having to manually re-run the grunt command line?
- install this watch task
grunt-contrib-less
- datauri inlining is cool, but can present problems if the browsers
you support don't support it
- have to be careful size of stylesheets does not bloat
- base64 encoded strings are highly compressible with gzip, so you'll
want to have your server configured to gzip static assets

notes:
- we pulled an npm package from a custom git url, to get the latest
version of Less (1.5.0)
- we updated index.html to point to our generated asset, it's probably
time we figured out a lifecycle for our assets to differentiate 
between src, generated and dist, let's do that next
watch less files
- we changed the files format in the less configuration target to use
explicit src/dest keys instead of implicit dest/src mappings
split file concerns to promote reuse
- by splitting the list of files our tasks will use into a separate
config target, we can re-use those lists
- the grunt config is always kept up to date between task execution
_except_ in the case where you have tasks that spawn child processes
grunt-contrib-copy
- moves the index.html file to our development workspace in preparation
for being able to spin up an actual static fileserver
server custom task
- allows us to utilize other nifty tasks like livereload, and also
sets us up for better mirroring how our app will be deployed, as a
single page .html app
app.use(express.compress());
- it's great to get a feel for what enabling gzip does for us in 
development, and because express is serving up our static assets this
gives us a nice little performance boost as well :)
live-reload
- useful for prototyping, easy to turn off if you have the chrome
extension
- works great when mapping a workspace in chrome dev tools
grunt-contrib-clean
- for if you need to reset the workspace folders if a file is corrupted
or something else bad happens
- this is also needed for setting up our build workflow, which will
generate our production ready assets
grunt-contrib-less 0.8.0
build workflow
- first step is to emit compressed css into the dist directory as well
as copy the .html file over
- this showcases the different files object types, including object, 
compact and array.