    async = require 'async'
    
    notify = require '../lib/notify'
    refresh = require '../lib/refresh'

    cleanup = require './lib/cleanup'
    deps = require './lib/deps'
    js = require './lib/js'
    css = require './lib/css'
    jade = require './lib/jade'
    watcher = require './lib/watcher'

    bake = (opts, cb) -> 

      notify 'Bake', opts.notify or "Cookin' up a Pages application for #{process.env.NODE_ENV}..."

      global.pages = 
        opts: opts 
        assets: 
          js: []
          css: []

      global.pages.opts.watch = false  if !global.pages.opts.watch 

      async.series [

Step 1. Remove everything compiled or downloaded.

        cleanup

Step 2. Install vendor assets.

        deps.install

Step 3. Remove erroneous vendor assets.

        deps.cleanup

Step 4. Build the core `app.litcoffee` file based on `pages.litcoffee`.

        deps.injectAndBuild

Step 5. Compile CoffeeScripts. Concat/minify applicable to `production` only.

        js.build

Step 6. Concat/minify CSS. Applicable to `production` only.

        css.build

Step 7. Compile Jade, giving it dependencies to render.

        jade.build

Step 8. Watch for changes. Applicable to `development` only.

        watcher

      ], () ->

        refresh global.pages.opts.browser

        cb()

## Public API ##

    module.exports = exports = (opts, cb) -> bake opts, cb