          (= (vcs-url/repo-name (:vcs_url project))
             (get-in app [:navigation-data :repo])))))
 
+(defn follow-project-button [project owner]
+  (reify
+    om/IRender
+    (render [_]
+      (let [project-id (project-model/id project)
+            vcs-url (:vcs_url project)]
+        (forms/managed-button
+         [:button#follow-project-button.btn.btn-primary
+          {:on-click #(do
+                        (raise! owner [:followed-project {:vcs-url vcs-url :project-id project-id}])
+                        ((om/get-shared owner :track-event) {:event-type :header-follow-project-clicked
+                                                             :properties {:vcs-url vcs-url}}))
+           :data-spinner true}
+          "follow the " (vcs-url/repo-name vcs-url) " project"])))))
+
 (defn show-settings-link? [app]
   (and
     (:read-settings (get-in app state/page-scopes-path))
     (not= false (-> app :navigation-data :show-settings-link?))))
 
 (defn settings-link [app owner]
-  (when (show-settings-link? app)
-    (let [{:keys [repo org] :as navigation-data} (:navigation-data app)]
-      (cond repo (when (:write-settings (get-in app state/project-scopes-path))
-                   [:a.settings.project-settings
-                    {:href (routes/v1-project-settings-path navigation-data)}
-                    [:img.dashboard-icon {:src (common/icon-path "QuickLink-Settings")}]
-                    "Project Settings"])
-            org [:a.settings.org-settings
-                 {:href (routes/v1-org-settings-path navigation-data)
-                  :on-click #((om/get-shared owner :track-event) {:event-type :header-org-settings-link-clicked
-                                                                  :properties {:org org}})}
-                 [:img.dashboard-icon {:src (common/icon-path "QuickLink-Settings")}]
-                 "Organization Settings"]
-            :else nil))))
+  (let [{:keys [repo org] :as navigation-data} (:navigation-data app)]
+    (cond repo (when (:write-settings (get-in app state/project-scopes-path))
+                 [:a.settings.project-settings
+                  {:href (routes/v1-project-settings-path navigation-data)}
+                  [:img.dashboard-icon {:src (common/icon-path "QuickLink-Settings")}]
+                  "Project Settings"])
+          org [:a.settings.org-settings
+               {:href (routes/v1-org-settings-path navigation-data)
+                :on-click #((om/get-shared owner :track-event) {:event-type :header-org-settings-link-clicked
+                                                                :properties {:org org}})}
+               [:img.dashboard-icon {:src (common/icon-path "QuickLink-Settings")}]
+               "Organization Settings"]
+          :else nil)))
 
 (defn head-user
   "Builds the header section which contains, among other things, the breadcrumb.
-  actions is an optional component which will be placed on the right of the
-  header; this is where page-wide actions are placed."
+  actions is an optional component (or collection of components which will be
+  placed on the right of the header; this is where page-wide actions are
+  placed."
   [{:keys [app actions]} owner]
   (reify
     om/IDisplayName (display-name [_] "User Header")
     om/IRender
     (render [_]
-      (let [crumbs-data (get-in app state/crumbs-path)
-            project (get-in app state/project-path)
-            project-id (project-model/id project)
-            vcs-url (:vcs_url project)]
+      (let [crumbs-data (get-in app state/crumbs-path)]
         (html
          [:div.head-user
           ;; Avoids a React warning for not giving each `li` a key. Correctly,

           [:a.dismiss {:on-click #(raise! owner [:dismiss-trial-offer-banner event-data])}
            [:i.material-icons "clear"]]])))))

(defn inner-header [{:keys [app actions] :as params} owner]
  (reify
    om/IDisplayName (display-name [_] "Inner Header")
    om/IRender

          ;; each one a `:key` here. This gets rid of the warning for now and
          ;; avoids re-architecting the crumbs rendering.
          (apply vector :ol.breadcrumb (crumbs/crumbs crumbs-data))
          [:div.actions actions]])))))

(defn maybe-active [current goal]
  {:class (when (= current goal)
