diff --git a/README.md b/README.md
index a02ca45..e8947b7 100644
--- a/README.md
+++ b/README.md
@@ -136,11 +136,11 @@ Congratulations, you just built your organization's open source project site!
 
 For compiling the SASS styles into CSS, run the following command at the root of the directory:
 
-    sass sass/style.scss:resources/public/style.css
+    sass sass/style.scss:resources/public/css/style.css
 
 If you want sass to be automatically recompiled when modifying .scss files add the `--watch` flag:
 
-    sass --watch sass/style.scss:resources/public/style.css
+    sass --watch sass/style.scss:resources/public/css/style.css
 
 ## License
 
diff --git a/scripts/deploy.sh b/scripts/deploy.sh
index ccd83f9..65a674a 100755
--- a/scripts/deploy.sh
+++ b/scripts/deploy.sh
@@ -5,15 +5,9 @@
 git config --global user.name $USER_NAME
 git config --global user.email $USER_EMAIL
 
-# Pull latest version of published subtree
-git checkout master
-git subtree pull --prefix=docs --message="[skip ci] Update subtree" https://47deg:$GITHUB_API_KEY@github.com/47deg/47deg.github.io.git master
-
 # Build & Commit built site
+git checkout master
 lein run
 git add docs
 git commit -m "[skip ci] Generate site"
 git push https://47deg:$GITHUB_API_KEY@github.com/47deg/org master
-
-# Push built subtree to official website
-git subtree push --prefix=docs https://47deg:$GITHUB_API_KEY@github.com/47deg/47deg.github.io.git master
diff --git a/src/org/app.cljs b/src/org/app.cljs
index 2412ea0..2aad217 100644
--- a/src/org/app.cljs
+++ b/src/org/app.cljs
@@ -17,7 +17,7 @@
 (defn init!
   []
   (let [state (atom (read-state!))
-        {:keys [organization token-name extra-repos analytics] :as config} (:config @state)]
+        {:keys [organization token extra-repos analytics] :as config} (:config @state)]
     ;; turn on analytics
     (when analytics
       (js/ga "create" analytics "auto")
diff --git a/src/org/build.clj b/src/org/build.clj
index 3b8289b..f46131f 100644
--- a/src/org/build.clj
+++ b/src/org/build.clj
@@ -109,8 +109,8 @@
   (clojure.edn/read-string (slurp (clojure.java.io/resource path))))
 
 (defn fetch-data!
-  [{:keys [organization token-name extra-repos]}]
-  @(c/fetch-org-and-extra-repos! organization {:token-name token-name
+  [{:keys [organization token extra-repos]}]
+  @(c/fetch-org-and-extra-repos! organization {:token token
                                                :extra-repos extra-repos}))
 
 (defn make-dirs!
@@ -144,9 +144,14 @@
 
 (defn -main
   [& args]
-  (let [config (read-config! "config.edn")]
+  (let [config (read-config! "config.edn")
+        token (get (System/getenv) (str (:token-name config)))
+        cfg-with-token (assoc config :token token)]
     (when-not (s/valid? :org/config config)
       (println "Invalid configuration: " (s/explain-str :org/config config))
       (System/exit 1))
-    (generate-site! config)))
+    (when-not (s/valid? :org/token token)
+      (println "Invalid token, you may have missed setting the environment variable " (str \` (:token-name config) \`))
+      (System/exit 1))
+    (generate-site! cfg-with-token)))
 
diff --git a/src/org/client.cljc b/src/org/client.cljc
index fe1c1d3..2a443c0 100644
--- a/src/org/client.cljc
+++ b/src/org/client.cljc
@@ -111,42 +111,33 @@
                     result))
                 (p/rejected (ex-info "Unsuccessful request" {:response resp})))))))
 
-(defn get-token
-  [token-name]
-  (let [token (get (System/getenv) (str token-name))]
-    token))
-
-(def get-token-memo (memoize get-token))
-
 (defn get-repo!
-  [user repo token-name]
-  (let [token (get-token-memo token-name)]
-    (let [req {:method :get
-               :url (repo-url user repo)
-               :headers (headers token)}
-          prom (http/send! client req)]
-      (p/then prom
-              (fn [resp]
-                (if (status/success? resp)
-                  (parse-repo-response resp)
-                  (p/rejected (ex-info "Unsuccessful request" {:response resp}))))))))
+  [user repo token]
+  (let [req {:method :get
+             :url (repo-url user repo)
+             :headers (headers token)}
+        prom (http/send! client req)]
+    (p/then prom
+            (fn [resp]
+              (if (status/success? resp)
+                (parse-repo-response resp)
+                (p/rejected (ex-info "Unsuccessful request" {:response resp})))))))
 
 (defn get-org-repos!
-  [org token-name]
-  (let [token (get-token-memo token-name)]
-    (let [req {:method :get
-               :url (org-repos-url org)
-               :query-string "type=public&per_page=100"
-               :headers (headers token)}
-          prom (http/send! client req)]
-      (p/then prom
-              (fn [resp]
-                (if (status/success? resp)
-                  (let [result (parse-repos-response resp)]
-                    (if (has-next? resp)
-                      (get-org-repos-next! token result resp)
-                      result))
-                  (p/rejected (ex-info "Unsuccessful request" {:response resp}))))))))
+  [org token]
+  (let [req {:method :get
+             :url (org-repos-url org)
+             :query-string "type=public&per_page=100"
+             :headers (headers token)}
+        prom (http/send! client req)]
+    (p/then prom
+            (fn [resp]
+              (if (status/success? resp)
+                (let [result (parse-repos-response resp)]
+                  (if (has-next? resp)
+                    (get-org-repos-next! token result resp)
+                    result))
+                (p/rejected (ex-info "Unsuccessful request" {:response resp})))))))
 
 (defn parse-languages-response
   [resp]
@@ -157,26 +148,25 @@
         (set (keys $))))
 
 (defn get-repo-languages!
-  [repo token-name]
-  (let [token (get-token-memo token-name)]
-    (let [req {:method :get
-               :url (get repo :languages-url)
-               :query-string "type=public"
-               :headers (headers token)}
-          prom (http/send! client req)]
-      (p/then  prom
-               (fn [resp]
-                 (if (status/success? resp)
-                   (parse-languages-response resp)
-                   (p/rejected (ex-info "Unsuccessful request" {:response resp}))))))))
+  [repo token]
+  (let [req {:method :get
+             :url (get repo :languages-url)
+             :query-string "type=public"
+             :headers (headers token)}
+        prom (http/send! client req)]
+    (p/then  prom
+             (fn [resp]
+               (if (status/success? resp)
+                 (parse-languages-response resp)
+                 (p/rejected (ex-info "Unsuccessful request" {:response resp})))))))
 
 (defn parse-contributors-response
   [resp]
   (as-> (:body resp) $
         #?(:clj
            (slurp $))
-        (j/json->clj $ {:keywordize? false :default []})
-        (count $)))
+        (j/json->clj $ {:keywordize? true :default []})
+        (map :id $)))
 
 (defn get-repo-contributors-next!
   [token contribs links]
@@ -186,7 +176,7 @@
         prom (http/send! client req)]
     (p/mapcat (fn [resp]
                 (if (status/success? resp)
-                  (let [result (+ contribs (parse-contributors-response resp))]
+                  (let [result (into contribs (parse-contributors-response resp))]
                     (if (has-next? resp)
                       (get-repo-contributors-next! token result (parse-links resp))
                       (p/resolved result)))
@@ -194,21 +184,20 @@
               prom)))
 
 (defn get-repo-contributors!
-  [repo token-name]
-  (let [token (get-token-memo token-name)]
-    (let [req {:method :get
-               :url (get repo :contributors-url)
-               :query-string "type=public&per_page=100"
-               :headers (headers token)}
-          prom (http/send! client req)]
-      (p/mapcat (fn [resp]
-                 (if (status/success? resp)
-                   (let [result (parse-contributors-response resp)]
-                     (if (has-next? resp)
-                       (get-repo-contributors-next! token result (parse-links resp))
-                       (p/resolved result)))
-                   (p/rejected (ex-info "Unsuccessful request" {:response resp}))))
-               prom))))
+  [repo token]
+  (let [req {:method :get
+             :url (get repo :contributors-url)
+             :query-string "type=public&per_page=100"
+             :headers (headers token)}
+        prom (http/send! client req)]
+    (p/mapcat (fn [resp]
+               (if (status/success? resp)
+                 (let [result (parse-contributors-response resp)]
+                   (if (has-next? resp)
+                     (get-repo-contributors-next! token result (parse-links resp))
+                     (p/resolved result)))
+                 (p/rejected (ex-info "Unsuccessful request" {:response resp}))))
+             prom)))
 
 ;; Data sources
 
@@ -216,29 +205,29 @@
   u/DataSource
   (-identity [_]
     [:repo [user repo]])
-  (-fetch [_ {:keys [token-name]}]
-    (get-repo! user repo token-name)))
+  (-fetch [_ {:keys [token]}]
+    (get-repo! user repo token)))
 
 (deftype Repos [org]
   u/DataSource
   (-identity [_]
     [:repos org])
-  (-fetch [_ {:keys [token-name]}]
-    (get-org-repos! org token-name)))
+  (-fetch [_ {:keys [token]}]
+    (get-org-repos! org token)))
 
 (deftype Languages [repo]
   u/DataSource
   (-identity [_]
     [:languages (:name repo)])
-  (-fetch [_ {:keys [token-name]}]
-    (get-repo-languages! repo token-name)))
+  (-fetch [_ {:keys [token]}]
+    (get-repo-languages! repo token)))
 
 (deftype Contributors [repo]
   u/DataSource
   (-identity [_]
     [:contributors (:name repo)])
-  (-fetch [_ {:keys [token-name]}]
-    (get-repo-contributors! repo token-name)))
+  (-fetch [_ {:keys [token]}]
+    (get-repo-contributors! repo token)))
 
 (defn- fetch-languages
   [repo]
@@ -272,12 +261,12 @@
           repos))))
 
 (defn fetch-org-and-extra-repos
-  [org {:keys [token-name extra-repos]}]
+  [org {:keys [token extra-repos]}]
   (u/collect [(fetch-org-repos org)
               (fetch-repos extra-repos)]))
 
 (defn fetch-org-and-extra-repos!
-  [org {:keys [token-name] :as config}]
-  (p/then (u/run! (fetch-org-and-extra-repos org config) {:env {:token-name token-name}})
+  [org {:keys [token] :as config}]
+  (p/then (u/run! (fetch-org-and-extra-repos org config) {:env {:token token}})
           (fn [[org-repos extra-repos]]
             (concat org-repos extra-repos))))
diff --git a/src/org/config.cljc b/src/org/config.cljc
index 0ef41d9..85ee567 100644
--- a/src/org/config.cljc
+++ b/src/org/config.cljc
@@ -1,8 +1,10 @@
 (ns org.config
   #?(:clj
-     (:require [clojure.spec :as s])
+     (:require [cuerdas.core :as str]
+               [clojure.spec :as s])
      :cljs
-     (:require [cljs.spec :as s])))
+     (:require [cuerdas.core :as str]
+               [cljs.spec :as s])))
 
 ;; Organization
 
@@ -48,6 +50,7 @@
 ;; Tokens
 
 (s/def :org/token-name string?)
+(s/def :org/token (s/and string? (complement str/blank?)))
 (s/def :org/analytics string?)
 
 ;; Style
diff --git a/src/org/core.cljc b/src/org/core.cljc
index 901d760..b188991 100644
--- a/src/org/core.cljc
+++ b/src/org/core.cljc
@@ -34,6 +34,11 @@
   (let [langs (into [] (all-languages repos))]
     (reverse (sort-by #(count (filter-by-language % repos)) langs))))
 
+(defn sum-contributors
+  [repos]
+  (count
+    (into #{} (mapcat :contributors) repos)))
+
 (rum/defc link-list
   [links]
   [:ul
@@ -70,10 +75,10 @@
   [:div.github-stats
    [:ul
     [:li.contributors
-     [:span (sum-by :contributors repos)]
+     [:span (sum-contributors repos)]
      [:span [:span.octicon.octicon-person] "contributors"]]
     [:li.stars
-     [:span (sum-by :stars repos)]
+     [:span (transduce (map :stars) + repos)]
      [:span [:span.octicon.octicon-star] "stars"]]
     [:li.repositories
      [:span (count repos)]
@@ -203,7 +208,7 @@
       [:li
        {:key "contributors"}
        [:span.octicon.octicon-person]
-       [:span contributors]]]]))
+       [:span (count contributors)]]]]))
 
 (rum/defc search < rum/reactive
   [state]
diff --git a/src/org/server.clj b/src/org/server.clj
index 3ce8c6c..8647248 100644
--- a/src/org/server.clj
+++ b/src/org/server.clj
@@ -8,7 +8,9 @@
   (when (or (= uri "/")
             (= uri "/index.html"))
     (let [config (b/read-config! "config.edn")
-          repos (b/fetch-data! config)]
+          token (get (System/getenv) (str (:token-name config)))
+          cfg (assoc config :token token)
+          repos (b/fetch-data! cfg)]
       {:status 200
        :headers {"content-type" "text/html"}
-       :body (b/render-index-page repos config)})))
+       :body (b/render-index-page repos cfg)})))