   {:svg svg
    :view-size (math-vec width height)
    :camera-pos (math-vec 0 0)
-   :nodes []})
+   :nodes []
+   :edges []})
 
 (defn swap-state! [current-state f & args]
   (apply swap! current-state f args)

        displacement (subtract-vec pos camera-pos)
        r (scaled-distance-from-camera state pos)
        projected-r (project-displacement r)]
      (add-vec view-center
            (vec-clamp-to-bounds (scalar-multiply displacement (/ projected-r r)) view-center))))

(defn project-radius [t]
  (+ min-radius (* (- max-radius min-radius)

        current-state (atom (initial-state svg width height))
        gesture-manager (hammer-manager svg)]
    (sync-graph! @current-state)
    (load-graph "miserables.json"
                (fn [graph]
                  (let [{:keys [nodes links]} graph]
                    (swap-state! current-state assoc :nodes nodes :links links))))
                (move-camera-on-arrow-keys! current-state)
                (move-camera-on-pan! gesture-manager current-state)
                (move-camera-on-swipe! gesture-manager current-state)
                (zoom-out-on-pinch! gesture-manager current-state)))
