This is a standard application to use for all Pages projects. It understands the concept of _Server Modules_, and requires _Node.js Modules_ accordingly.

    express = require 'express'
    uuid = require 'node-uuid'
    connect = require 'connect'
    ejs = require 'ejs'

    log = require './lib/log'
    serverModules = require './lib/server_modules.litcoffee'

    app = express()

    app.use express.bodyParser()

    run = (cb) ->

      configureServer () -> serverModules.serverStarting app, () -> listen () -> 

        serverModules.serverStarted()

        cb()
    
    configureServer = (cb) ->

      app.configure () ->

        app.engine 'html', ejs.renderFile 
        app.set 'view options', layout: false

        app.use express.cookieParser()

Session secrets are generated as time-based UUIDs.

        secret = uuid.v1()

        app.use express.session(
          secret: secret
        )

        app.use express.methodOverride()
        app.use express.favicon()
        app.use connect.logger stream: log.stream

        allowCrossDomain = (req, res, next) ->

          res.header 'Access-Control-Allow-Origin', '*'
          res.header 'Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'
          res.header 'Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With'
  
Intercept OPTIONS method.

          if 'OPTIONS' is req.method then res.send 200 else next()
        
        app.use allowCrossDomain
        app.use app.router
        app.use express.static "#{process.cwd()}/_app"

        app.get '/', (req, res) -> res.render "#{process.cwd()}/_app/index.html"

      cb app

    listen = (cb) -> app.listen process.env.PORT, () -> cb()

## Public API ##

    publicFns = 
      run: run 

    module.exports = publicFns