anchor.diff:                   (<:input :type "textarea" :id "ooc-input")
                    (<:submit :value "Send"))))
   
  -(defun templ::user-input-area ()
  +(defun user-input-area ()
     ;; TODO - Maybe let client.js install send_input()?
     (<:form :id "user-input-area" :name "user-input-area" :action "javascript:sykosomatic.send_input()"
             (<:input :type "textarea" :id "user-input")
             (<:submit :value "Send")))
   
  -(defun templ::scene-recording ()
  +(defun scene-recording ()
     ;; TODO - let client.js install these?
     (<:submit :class "btn" :id "start-recording" :value "Start Recording")
     (<:submit :class "btn" :id "stop-recording" :value "Stop Recording"))
   
  -(defun templ::scene-list-link ()
  +(defun scene-list-link ()
     (<:a :class "btn"
          :href "/scenes" "My Scenes"))
   
   ;;; /role
  -(defpage templ::role (characters) ()
  +(defpage role (characters) ()
       "What role shall you play?"
  -  (templ::error-messages)
  -  (templ::character-list characters)
  +  (error-messages)
  +  (character-list characters)
     (<:href "/newchar" "Create a new character.")
  -  (templ::logout-button))
  -
  -(defun templ::character-list (characters)
  +  (logout-button))
  +
  +(defun character-list (characters)
     (<:ul
  -   (mapc (lambda (char) (<:li (templ::character-link char)))
  +   (mapc (lambda (char) (<:li (character-link char)))
            characters)))
   
  -(defun templ::character-link (char)
  +(defun character-link (char)
     ;; TODO - This ~A smells really bad.
     (<:href (format nil "/stage?char=~A" (string-downcase char))
             (<:ah char)))
   
   ;;; /scenes
  -(defpage templ::scenes (scenes) ()
  +(defpage scenes (scenes) ()
       "My scenes"
     (<:ul :class "scene-list"
           (mapc (lambda (scene)
  
positive.code:           (<:submit :value "Submit")))
  
  ;;; /newchar
  (defpage templ::newchar () ()
      "Create a character"
    (templ::error-messages)
    (templ::character-creation-component))
  
  (defun templ::character-creation-component ()
    (<:form :name "create-character" :action "/newchar" :method "post"
            (<:label (<:ah "Create a character."))
            (<:br)
  
negative.code:               scenes)))
  
  ;;; /view-scene
  (defpage view-scene (scene display-vote-button-p scene-rating) ()
      "Viewing Scene"
    (scene scene)
    (when display-vote-button-p
      (scene-upvote scene))
    (when scene-rating
      (scene-rating scene-rating)))
  
  (defun scene-rating (rating)
    (<:p (<:ah "Rating: " rating)))
  
  (defun scene-upvote (scene-id)
    (<:form :method "post" :action (format nil "/view-scene?id=~A" scene-id)
            (<:submit :value "Vote for Scene")))
  
  ;; TODO - fixme
  (defun user-action (user-action)
    (let ((action (sykosomatic::user-action-action user-action))
          (dialogue (sykosomatic::user-action-dialogue user-action)))
      (<:div :class "user-entry"
        (if (and (not (emptyp action)) (emptyp dialogue))
            (<:p :class "action"
                 (<:ah (sykosomatic::user-action-user user-action) " " action))
            (progn
              (<:p :class "character"
                   (<:ah (sykosomatic::user-action-user user-action)))
              (unless (emptyp action)
                (<:p :class "parenthetical"
                     (<:ah "(" action ")")))
  