     :mixins [rum/reactive]
     :name "app"}))
 
+;; --- Loader
+
+(defn loader-render
+  [own]
+  (when (rum/react loader-l)
+    (html
+     [:div.loader-content i/loader])))
+
+(def loader
+  (mx/component
+   {:render loader-render
+    :name "loader"
+    :mixins [rum/reactive mx/static]}))
+
+;; --- Main Entry Point
+
 (defn init
   []
-  (println "ui/init")
   (let [app-dom (gdom/getElement "app")
-        lb-dom (gdom/getElement "lightbox")]
+        lightbox-dom (gdom/getElement "lightbox")
+        loader-dom (gdom/getElement "loader")]
     (rum/mount (app) app-dom)
-    (rum/mount (ui-lightbox/lightbox) lb-dom)))
+    (rum/mount (ui-lightbox/lightbox) lightbox-dom)
+    (rum/mount (loader) loader-dom)))

            [uxbox.ui.mixins :as mx]
            [uxbox.ui.shapes]))

(def ^:const auth-data
  (as-> (l/key :auth) $
    (l/focus-atom $ s/state)))

(def ^:const +unrestricted+
  #{:auth/login})

(def ^:const restricted?
  (complement +unrestricted+))

(defn app-render
  [own]
  (let [route (rum/react r/route-l)
        auth (rum/react auth-data)
        location (:id route)
        params (:params route)]
    (if (and (restricted? location) (not auth))

            [uxbox.rstore :as rs]
            [uxbox.data.projects :as dp]
            [uxbox.data.users :as udu]
            [uxbox.ui.icons :as i]
            [uxbox.ui.lightbox :as ui-lightbox]
            [uxbox.ui.auth :as ui-auth]
            [uxbox.ui.dashboard :as ui-dashboard]
