diff --git a/CONTRIBUTORS b/CONTRIBUTORS
new file mode 100644
index 0000000000000000000000000000000000000000..412f662381fd03b4382cce2f3c265da3ed53938f
--- /dev/null
+++ b/CONTRIBUTORS
@@ -0,0 +1,34 @@
+Austin King <shout@ozten.com>
+Ben Adida <ben@adida.net>
+Brian J Brennan <brianloveswords@gmail.com>
+Brian Warner <warner-github@lothar.com>
+Bryan Clark <clarkbw@gmail.com>
+Dan Callahan <dan.callahan@gmail.com>
+Christian Kakesa <christian.kakesa@gmail.com>
+David Burns <dburns@mozilla.com>
+Francois Marier <francois@mozilla.com>
+Gervase Markham <gerv@gerv.net>
+Jakub Wieczorek <fawek@fawek.net>
+Jared Hirsch <ohai@6a68.net>
+Jed Parsons <jedp@me.com>
+John Morrison <jrgmorrison@gmail.com>
+Jonathan "Duke" Leto <jonathan@leto.net>
+James Burke <jrburke@gmail.com>
+Leah Klearman <lklrmn@gmail.com>
+Lloyd Hilaiel <lloyd@hilaiel.com>
+Matjaž Horvat <matjaz.horvat@gmail.com>
+Michael Hanson <mhanson@gmail.com>
+Milos Dinic <milos@mozilla.com>
+Pete Fritchman <petef@databits.net>
+Richard Soderberg <rsoderberg@gmail.com>
+ringe <runar@rin.no>
+s9e <s9e.dev@gmail.com>
+salmonz <andrewgsalmons@gmail.com>
+Sawyer Hollenshead <s.hollenshead@gmail.com>
+Sean McArthur <sean.monstar@gmail.com>
+Shane Tomlinson <stomlinson@mozilla.com>
+Thomas Grainger <tagrain@gmail.com>
+Tj Holowaychuk <tj@vision-media.ca>
+Thomas Grainger <tagrain@gmail.com>
+Zac Campbell <zcampbell@mozilla.com>
+Zachary Carter <zack.carter@gmail.com>
diff --git a/lib/static/views.js b/lib/static/views.js
index cd498b0f4eb05f6411a9082b0af7d48df624f97c..2d0c43fb40aa3dc9b9916f95d6f4b601381ea8c5 100644
--- a/lib/static/views.js
+++ b/lib/static/views.js
@@ -32,7 +32,8 @@ const VIEW_PATH = path.join(__dirname, "..", "..", "resources", "views");
 // with reasonable cache headers.  This wrapper around rendering handles
 // cache headers maximally leveraging the same logic that connect uses
 // issue #910
-function renderCachableView(req, res, template, options) {
+
+function cacheAllTheThings(res) {
   if (config.get('env') !== 'local') {
     // allow caching, but require revalidation via ETag
     res.etagify();
@@ -43,6 +44,10 @@ function renderCachableView(req, res, template, options) {
   }
   res.setHeader('Date', new Date().toUTCString());
   res.setHeader('Vary', 'Accept-Encoding,Accept-Language');
+}
+
+function renderCachableView(req, res, template, options) {
+  cacheAllTheThings(res);
   res.setHeader('Content-Type', 'text/html; charset=utf8');
 
   options.enable_development_menu = config.get('enable_development_menu');
@@ -206,6 +211,12 @@ exports.setup = function(app) {
     renderCachableView(req, res, 'confirm.ejs', {title: _('Confirm Email')});
   });
 
+  var humans = fs.readFileSync(path.join(__dirname, "..", "..", "CONTRIBUTORS")).toString();
+  app.get("/humans.txt", function(req, res) {
+    cacheAllTheThings(res);
+    res.send(humans);
+  });
+
 
 
   // serve up testing templates.  but NOT in staging or production.  see GH-1044