     (keywordize-keys
       (assoc (apply hash-map contents) :tags (or tags []) :id id))))
 
-(defn view-models []
-  (s/validate [NodeView] (map view-model (node-ids))))
+(s/defn view-models :- [NodeView] []
+  (map view-model (node-ids)))
 
-(defn view-model-from-url [url]
-  (s/validate s/Str url)
-  (s/validate NodeView (first (filter #(= (% :url) url) (view-models)))))
+(s/defn view-model-from-url :- NodeView
+  [url :- s/Str]
+  (first (filter #(= (% :url) url) (view-models))))
 
-(defn modify-node [id {:keys [url tags]
-                       :or {:url nil
-                            :tags nil}}]
+(s/defn modify-node :- NodeView
+  [id {:keys [url tags]
+       :or {:url nil
+            :tags nil}}]
   (last
     (with-car*
       (let [node-key (node-key id)

(defn node-tags-key [id]
  (format node-tags-key-template id))

(defn node-ids []
  (with-car* (car/smembers node-set-key)))

(defn uuid [] (str (java.util.UUID/randomUUID)))

(defn node-ids []
  (with-car* (car/smembers node-set-key)))

(def NodeInRedis

   (s/optional-key :url)   s/Str
   (s/optional-key :tags) [s/Str]})

(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*
