                  :follow-repo
                  api-ch
                  :params {:vcs-type (:vcs_type repo)}
-                 :context repo)
-    (analytics/track {:event-type :project-followed
-                      :current-state current-state
-                      :properties {:org org-name
-                                   :repo repo-name}})))
+                 :context repo
+                 :events {:success #(analytics/track {:event-type :project-followed
+                                                      :current-state current-state
+                                                      :properties {:org org-name
+                                                                   :repo repo-name}})})))
 
 
 (defmethod control-event :inaccessible-org-toggled

(defn button-ajax
  "An ajax/ajax wrapper that releases the current managed-button after the API
  request.  Exists to faciliate migration away from stateful-button."
  [method url message channel & opts]
  (let [uuid frontend.async/*uuid*
        c (chan)]
    (apply ajax/ajax method url message c opts)
    (go-loop []
      (when-let [[_ status _ :as event] (<! c)]
        (when (#{:success :failed} status)
          (release-button! uuid status))
        (>! channel event)
        (recur)))))

;; --- Navigation Multimethod Declarations ---


                 :unfollow-repo
                 api-ch
                 :params {:vcs-type (:vcs_type repo)}
                 :context repo
                 :events {:success #(analytics/track {:event-type :project-unfollowed
                                                      :current-state current-state
                                                      :properties {:org org-name
                                                                   :repo repo-name}})})))


(defmethod post-control-event! :unfollowed-project
