           [:button.ui.primary.button
            {:on-click (fn [_]
                         (let [article (om/get-state owner :editing-article)
-                              [result map] (b/validate article :article/name v/required)]
+                              [result map] (b/validate article
+                                                       :article/name v/required
+                                                       :article/blocks [[v/every #(not (or (nil? (:curating-block/content %))
+                                                                                           (empty? (:curating-block/content %))))
+                                                                         :message "All editable spaces must be saved."]])]
                           (if result
                             (om/set-state! owner :error-map (:bouncer.core/errors map))
                             (if-let [id (:db/id article)]

                   (om/build editorial-space-view curating-block
                             {:state {:content (:curating-block/content curating-block)}
                              :opts {:save-fn (fn [content]
                                                (om/update-state! owner [:editing-article :article/blocks index ]
                                                                  (fn [block]
                                                                    (assoc block
                                                                           :curating-block/content content
                                                                           :curating-block/posted-at (js/Date.)))))}})
                   (case (get-in curating-block [:curating-block/format :db/ident])
                     :curating-block.format/markdown {:dangerouslySetInnerHTML {:__html (.render js/md (:curating-block/content curating-block))}}
                     :curating-block.format/voice [:audio {:controls true

                      {:class "error"})
         [:textarea
          {:value content
           :placeholder "Input content and press Ctrl+Enter to save."
           :on-change (fn [e]
                        (om/set-state! owner :content
                                       (.. (om/get-node owner) (querySelector "textarea") -value)))
