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