diff --git a/README.md b/README.md
index 7f8f7626d9b..bfe254fae1c 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
+[![Throughput Graph](https://graphs.waffle.io/freecodecamp/freecodecamp/throughput.svg)](https://waffle.io/freecodecamp/freecodecamp/metrics)
+
[![Stories in Ready](https://badge.waffle.io/FreeCodeCamp/freecodecamp.png?label=ready&title=Ready)](https://waffle.io/FreeCodeCamp/freecodecamp)
diff --git a/app.js b/app.js
index 6e5fefd8dbe..3c253644a01 100644
--- a/app.js
+++ b/app.js
@@ -421,7 +421,7 @@ app.post('/account/profile', userController.postUpdateProfile);
app.post('/account/password', userController.postUpdatePassword);
app.post('/account/delete', userController.postDeleteAccount);
app.get('/account/unlink/:provider', userController.getOauthUnlink);
-
+app.get('/sitemap.xml', resourcesController.sitemap);
/**
* API examples routes.
diff --git a/controllers/challenges.js b/controllers/challenges.js
index ec63b3eac66..6658e18e136 100644
--- a/controllers/challenges.js
+++ b/controllers/challenges.js
@@ -23,9 +23,7 @@ exports.returnNextChallenge = function(req, res) {
res.redirect('challenges/0');
}
} else {
- res.render('home', {
- title: 'Learn to Code and Become a Software Engineer',
- });
+ return res.redirect('../challenges/0');
}
};
diff --git a/controllers/resources.js b/controllers/resources.js
index 05d97b09393..5f5b15ae9be 100644
--- a/controllers/resources.js
+++ b/controllers/resources.js
@@ -1,11 +1,13 @@
var User = require('../models/User'),
+ Challenge = require('./../models/Challenge'),
+ Bonfire = require('./../models/Bonfire'),
resources = require('./resources.json'),
questions = resources.questions,
steps = resources.steps,
secrets = require('./../config/secrets'),
- Challenge = require('./../models/Challenge'),
- bonfires = require('../seed_data/bonfires.json');
- coursewares = require('../seed_data/coursewares.json');
+ bonfires = require('../seed_data/bonfires.json'),
+ coursewares = require('../seed_data/coursewares.json'),
+ moment = require('moment'),
Client = require('node-rest-client').Client,
client = new Client(),
debug = require('debug')('freecc:cntr:bonfires'),
@@ -50,6 +52,40 @@ module.exports = {
});
},
+ sitemap: function sitemap(req, res, next) {
+ var appUrl = 'http://www.freecodecamp.com';
+ var now = moment(new Date).format('YYYY-MM-DD');
+
+ errors = {};
+ User.find({'profile.username': {'$ne': '' }}, function(err, users) {
+ if (err) {
+ debug('User err: ', err);
+ next(err);
+ }
+ console.log('user count', users.length);
+ Challenge.find({}, function (err, challenges) {
+ if (err) {
+ debug('User err: ', err);
+ next(err);
+ }
+ Bonfire.find({}, function (err, bonfires) {
+ if (err) {
+ debug('User err: ', err);
+ next(err);
+ }
+ res.header('Content-Type', 'application/xml');
+ res.render('resources/sitemap', {
+ appUrl: appUrl,
+ now: now,
+ users: users,
+ challenges: challenges,
+ bonfires: bonfires
+ });
+ });
+ });
+ });
+ },
+
deployAWebsite: function deployAWebsite(req, res) {
res.render('resources/deploy-a-website', {
title: 'Deploy a Dynamic Website in 7 Minutes'
diff --git a/public/sitemap.xml b/public/sitemap.xml
deleted file mode 100644
index 06ff6c54391..00000000000
--- a/public/sitemap.xml
+++ /dev/null
@@ -1,309 +0,0 @@
-
-
-
-
-
- http://www.freecodecamp.com/
- daily
-
-
- http://www.freecodecamp.com/challenges/0
- daily
-
-
- http://www.freecodecamp.com/challenges/1
- daily
-
-
- http://www.freecodecamp.com/challenges/2
- daily
-
-
- http://www.freecodecamp.com/challenges/3
- daily
-
-
- http://www.freecodecamp.com/challenges/4
- daily
-
-
- http://www.freecodecamp.com/challenges/5
- daily
-
-
- http://www.freecodecamp.com/challenges/6
- daily
-
-
- http://www.freecodecamp.com/challenges/7
- daily
-
-
- http://www.freecodecamp.com/challenges/8
- daily
-
-
- http://www.freecodecamp.com/challenges/9
- daily
-
-
- http://www.freecodecamp.com/challenges/10
- daily
-
-
- http://www.freecodecamp.com/challenges/11
- daily
-
-
- http://www.freecodecamp.com/challenges/12
- daily
-
-
- http://www.freecodecamp.com/challenges/13
- daily
-
-
- http://www.freecodecamp.com/challenges/14
- daily
-
-
- http://www.freecodecamp.com/challenges/15
- daily
-
-
- http://www.freecodecamp.com/challenges/16
- daily
-
-
- http://www.freecodecamp.com/challenges/17
- daily
-
-
- http://www.freecodecamp.com/challenges/18
- daily
-
-
- http://www.freecodecamp.com/challenges/19
- daily
-
-
- http://www.freecodecamp.com/challenges/20
- daily
-
-
- http://www.freecodecamp.com/challenges/21
- daily
-
-
- http://www.freecodecamp.com/challenges/22
- daily
-
-
- http://www.freecodecamp.com/challenges/23
- daily
-
-
- http://www.freecodecamp.com/challenges/24
- daily
-
-
- http://www.freecodecamp.com/challenges/25
- daily
-
-
- http://www.freecodecamp.com/challenges/26
- daily
-
-
- http://www.freecodecamp.com/challenges/27
- daily
-
-
- http://www.freecodecamp.com/challenges/28
- daily
-
-
- http://www.freecodecamp.com/challenges/29
- daily
-
-
- http://www.freecodecamp.com/challenges/30
- daily
-
-
- http://www.freecodecamp.com/challenges/31
- daily
-
-
- http://www.freecodecamp.com/challenges/32
- daily
-
-
- http://www.freecodecamp.com/challenges/33
- daily
-
-
- http://www.freecodecamp.com/challenges/34
- daily
-
-
- http://www.freecodecamp.com/challenges/35
- daily
-
-
- http://www.freecodecamp.com/challenges/36
- daily
-
-
- http://www.freecodecamp.com/challenges/37
- daily
-
-
- http://www.freecodecamp.com/challenges/38
- daily
-
-
- http://www.freecodecamp.com/challenges/39
- daily
-
-
- http://www.freecodecamp.com/challenges/40
- daily
-
-
- http://www.freecodecamp.com/challenges/41
- daily
-
-
- http://www.freecodecamp.com/challenges/42
- daily
-
-
- http://www.freecodecamp.com/challenges/43
- daily
-
-
- http://www.freecodecamp.com/challenges/44
- daily
-
-
- http://www.freecodecamp.com/challenges/45
- daily
-
-
- http://www.freecodecamp.com/challenges/46
- daily
-
-
- http://www.freecodecamp.com/challenges/47
- daily
-
-
- http://www.freecodecamp.com/challenges/48
- daily
-
-
- http://www.freecodecamp.com/challenges/49
- daily
-
-
- http://www.freecodecamp.com/challenges/50
- daily
-
-
- http://www.freecodecamp.com/challenges/51
- daily
-
-
- http://www.freecodecamp.com/challenges/52
- daily
-
-
- http://www.freecodecamp.com/challenges/53
- daily
-
-
- http://www.freecodecamp.com/challenges/54
- daily
-
-
- http://www.freecodecamp.com/challenges/55
- daily
-
-
- http://www.freecodecamp.com/challenges/56
- daily
-
-
- http://www.freecodecamp.com/challenges/57
- daily
-
-
- http://www.freecodecamp.com/challenges/58
- daily
-
-
- http://www.freecodecamp.com/challenges/59
- daily
-
-
- http://www.freecodecamp.com/
- daily
-
-
- http://www.freecodecamp.com/stats
- daily
-
-
- http://www.freecodecamp.com/deploy-a-website
- daily
-
-
- http://www.freecodecamp.com/control-shortcuts
- daily
-
-
- http://www.freecodecamp.com/pair-program-with-team-viewer
- daily
-
-
- http://www.freecodecamp.com/login
- daily
-
-
- http://www.freecodecamp.com/nonprofits
- daily
-
-
- http://www.freecodecamp.com/learn-to-code
- daily
-
-
- http://www.freecodecamp.com/about
- daily
-
-
- http://www.freecodecamp.com/chromebook
- daily
-
-
- http://www.freecodecamp.com/live-pair-programming
- daily
-
-
- http://www.freecodecamp.com/privacy
- daily
-
-
- http://www.freecodecamp.com/jquery-exercises
- daily
-
-
- http://www.freecodecamp.com/javascript-in-your-inbox
- daily
-
-
\ No newline at end of file
diff --git a/views/resources/sitemap.jade b/views/resources/sitemap.jade
new file mode 100644
index 00000000000..84839975bce
--- /dev/null
+++ b/views/resources/sitemap.jade
@@ -0,0 +1,112 @@
+doctype xml
+urlset(xmlns="http://www.sitemaps.org/schemas/sitemap/0.9")
+
+ url
+ loc http://www.freecodecamp.com/
+ changefreq weekly
+ lastmod= now
+ priority= 0.5
+
+ url
+ loc http://www.freecodecamp.com/install-screenhero
+ changefreq weekly
+ lastmod= now
+ priority= 0.5
+
+ url
+ loc http://www.freecodecamp.com/deploy-a-website
+ changefreq weekly
+ lastmod= now
+ priority= 0.5
+
+ url
+ loc http://www.freecodecamp.com/control-shortcuts
+ changefreq weekly
+ lastmod= now
+ priority= 0.5
+
+ url
+ loc http://www.freecodecamp.com/pair-program-with-team-viewer
+ changefreq weekly
+ lastmod= now
+ priority= 0.5
+
+ url
+ loc http://www.freecodecamp.com/login
+ changefreq weekly
+ lastmod= now
+ priority= 0.5
+
+ url
+ loc http://www.freecodecamp.com/nonprofits
+ changefreq weekly
+ lastmod= now
+ priority= 0.5
+
+ url
+ loc http://www.freecodecamp.com/learn-to-code
+ changefreq weekly
+ lastmod= now
+ priority= 0.5
+
+ url
+ loc http://www.freecodecamp.com/chromebook
+ changefreq weekly
+ lastmod= now
+ priority= 0.5
+
+ url
+ loc http://www.freecodecamp.com/live-pair-programming
+ changefreq weekly
+ lastmod= now
+ priority= 0.5
+
+ url
+ loc http://www.freecodecamp.com/privacy
+ changefreq weekly
+ lastmod= now
+ priority= 0.5
+
+ url
+ loc http://www.freecodecamp.com/jquery-exercises
+ changefreq weekly
+ lastmod= now
+ priority= 0.5
+
+ url
+ loc http://www.freecodecamp.com/javascript-in-your-inbox
+ changefreq weekly
+ lastmod= now
+ priority= 0.5
+
+
+ //- Home page
+ url
+ loc= appUrl
+ lastmod= now
+ changefreq daily
+ priority= 0.8
+
+ //- Users
+ each user in users
+ url
+ loc #{appUrl}/#{user.profile.username}
+ lastmod= now
+ changefreq daily
+ priority= 0.9
+
+ //- Products
+ each bonfire in bonfires
+ url
+ loc #{appUrl}/#{bonfire.name.replace(/\s/, '-')}
+ lastmod= now
+ changefreq weekly
+ priority= 0.5
+
+ //- Challenges
+ each challenge in challenges
+ url
+ loc #{appUrl}/#{challenge.challengeNumber}
+ lastmod= now
+ changefreq weekly
+ priority= 0.5
\ No newline at end of file