anchor.diff:          (encode-json (get-all-stories) out))
         403))
   
  +(defmacro with-post-parameters (parameters &body body)
  +  `(let ,(mapcar (lambda (p)
  +                   (list (intern (string-upcase p))
  +                         `(hunchentoot:post-parameter ,p)))
  +                 parameters)
  +     ,@body))
  +
   (define-route stories-new ("stories/new" :method :post)
     (if (logged-in-p)
  -      (let ((role (hunchentoot:post-parameter "role"))
  -            (necessity (hunchentoot:post-parameter "necessity"))
  -            (title (hunchentoot:post-parameter "headline"))
  -            (content (hunchentoot:post-parameter "content")))
  -        (post-story role necessity title content
  +      (with-post-parameters ("role" "necessity" "headline" "content")
  +        (post-story role necessity headline content
                       (hunchentoot:session-value :username))
           200)
         403))
   
   (define-route tasks-new ("stories/tasks/new" :method :post)
     (if (logged-in-p)
  -      (let ((id (hunchentoot:post-parameter "storyId"))
  -            (description (hunchentoot:post-parameter "description")))
  -        (post-task id description (hunchentoot:session-value :username))
  +      (with-post-parameters ("storyId" "description")
  +        (post-task storyid description
  +                   (hunchentoot:session-value :username))
           200)
         403))
   
  
positive.code: 
  (define-route logout-page ("logout")
    (if (logged-in-p)
        (progn
          (setf (hunchentoot:session-value :username) nil)))
    (redirect 'login-page))
  
  (defun json-to-string (obj)
  
negative.code: (defun page-title (title)
    (<:title (concatenate 'string title " | scrumli")))
  
  (defun css (&rest sheets)
    (apply 'concatenate 'string
           (mapcar (lambda (s)
                     (<:link :href s :rel "stylesheet" :type "text/css"))
                   sheets)))
  
  (defun js (&rest scripts)
    (apply 'concatenate 'string
           (mapcar (lambda (s)
                     (<:script :type "text/javascript" :src s))
                   scripts)))
  
  (defmacro navbar (&body body)
    `(<:div :class "navbar navbar-static-top navbar-inverse"
            (<:div :class "navbar-inner"
                   (<:div :class "container"
                          (<:a :class "brand" "scrumli")
                          ,@body))))
  
  (define-route main ("")
    (if (logged-in-p)
        (<:html
         (<:head (page-title "Backlog")
                 (css *scrumli-bootstrap-css-location*
                      *scrumli-font-awesome-css-location*)
                 (js *scrumli-bootstrap-js-location*
                     *scrumli-jquery-js-location*
                     *scrumli-react-js-location*
                     *scrumli-jsxtransformer-js-location*))
         (<:body
          (navbar (<:div :class "pull-right"
                         (<:span :class "navbar-text"
                                 (hunchentoot:session-value :username))
                         (<:ul :class "nav pull-right"
                               (<:li :class "divider-vertical")
                               (<:li (<:a :href (genurl 'logout-page)
                                          "Logout"))
                               (<:li :class "divider-vertical"))))
          (<:div :class "container"
                 (<:h1 "Backlog")
                 (<:div :id "content")
                 (<:script :type "text/jsx" :src (genurl 'main-js)))))
        (redirect 'login-page)))
  
  (defmacro serve-static (name relpath)
    `(define-route ,name (,relpath :content-type "application/ecmascript")
       (merge-pathnames ,relpath *static-directory*)))
  
  (serve-static main-js "js/main.js")
  (serve-static login-js "js/login.js")
  
  (define-route stories-json ("stories" :content-type "text/json")
    (if (logged-in-p)
  