    (s/optional-key :url)   s/Str
    (s/optional-key :tags) [s/Str]})
 
-(defn view-model [id]
+(s/defn view-model :- NodeView
+  [id :- s/Str]
   (let [node-key (node-key id)
         node-tags-key (node-tags-key id)
         [contents tags] (with-car*

        (modify-node id {:url url :tags tags})
        (car/return (view-model id))))))

(defn destroy-node [id]
  (s/validate s/Str id)
  (with-car*
    (car/watch node-set-key)
    (try

    (keywordize-keys
      (assoc (apply hash-map contents) :tags (or tags []) :id id))))

(s/defn view-models :- [NodeView] []
  (map view-model (node-ids)))

(s/defn view-model-from-url :- NodeView
  [url :- s/Str]
  (first (filter #(= (% :url) url) (view-models))))

(s/defn modify-node :- NodeView
  [id {:keys [url tags]
       :or {:url nil
            :tags nil}}]
  (last
    (with-car*
      (let [node-key (node-key id)
