Merge branch 'master' into helmet

Conflicts:
	controllers/resources.js
	package.json
	views/partials/meta.jade
This commit is contained in:
Michael Q Larson
2014-12-22 11:49:51 -08:00
32 changed files with 1665 additions and 949 deletions

46
app.js
View File

@ -33,6 +33,10 @@ var userController = require('./controllers/user');
var apiController = require('./controllers/api');
var contactController = require('./controllers/contact');
/**
* User model
*/
var User = require('./models/User');
/**
* API keys and Passport configuration.
*/
@ -132,8 +136,13 @@ app.get(
app.get('/learn-to-code', resourcesController.learnToCode);
app.get('/privacy', resourcesController.privacy);
app.get('/jquery-exercises', resourcesController.jqueryExercises);
app.get('/text-based-adventure-tutorial-app', resourcesController.textBasedAdventureTutorial);
app.get('/live-pair-programming', resourcesController.livePairProgramming);
app.get('/javascript-in-your-inbox', resourcesController.javaScriptInYourInbox);
app.get('/chromebook', resourcesController.chromebook);
app.get('/pair-program-with-team-viewer', resourcesController.pairProgramWithTeamViewer);
app.get('/done-with-first-100-hours', resourcesController.doneWithFirst100Hours);
app.get('/programmer-interview-questions-app', resourcesController.programmerInterviewQuestionsApp);
app.get('/about', resourcesController.about);
app.get('/login', userController.getLogin);
app.post('/login', userController.postLogin);
@ -168,9 +177,18 @@ app.get('/account/unlink/:provider', userController.getOauthUnlink);
/**
* API examples routes.
* accepts a post request. the challenge id req.body.challengeNumber
* and updates user.challengesHash & user.challengesCompleted
*
*/
app.post('/completed_challenge', function(req, res) {
req.user.challengesCompleted.push(parseInt(req.body.cn));
req.user.challengesHash[parseInt(req.body.challengeNumber)] = Math.round(+new Date() / 1000);
var ch = req.user.challengesHash;
var p = 0;
for (k in ch) {
if (ch[k] > 0) { p += 1}
}
req.user.points = p;
req.user.save();
});
@ -235,27 +253,3 @@ app.listen(app.get('port'), function() {
});
module.exports = app;
//app.get('/api', apiController.getApi);
//app.get('/api/lastfm', apiController.getLastfm);
//app.get('/api/nyt', apiController.getNewYorkTimes);
//app.get('/api/aviary', apiController.getAviary);
//app.get('/api/steam', apiController.getSteam);
//app.get('/api/stripe', apiController.getStripe);
//app.post('/api/stripe', apiController.postStripe);
//app.get('/api/scraping', apiController.getScraping);
//app.get('/api/twilio', apiController.getTwilio);
//app.post('/api/twilio', apiController.postTwilio);
//app.get('/api/clockwork', apiController.getClockwork);
//app.post('/api/clockwork', apiController.postClockwork);
//app.get('/api/foursquare', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getFoursquare);
//app.get('/api/tumblr', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getTumblr);
//app.get('/api/facebook', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getFacebook);
//app.get('/api/github', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getGithub);
//app.get('/api/twitter', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getTwitter);
//app.post('/api/twitter', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.postTwitter);
//app.get('/api/venmo', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getVenmo);
//app.post('/api/venmo', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.postVenmo);
//app.get('/api/linkedin', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getLinkedin);
//app.get('/api/instagram', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getInstagram);
//app.get('/api/yahoo', apiController.getYahoo);

View File

@ -7,7 +7,7 @@ var _ = require('lodash');
exports.returnChallenge = function(req, res, next) {
var challengeNumber = parseInt(req.params.challengeNumber) || 0;
if (challengeNumber > 41) { challengeNumber = 0; }
if (challengeNumber > 59) { challengeNumber = 0; }
Challenge.findOne({challengeNumber: challengeNumber}, function (err, c) {
if (err) {
console.error('Challenge err: ', err);
@ -19,7 +19,7 @@ exports.returnChallenge = function(req, res, next) {
video: c.video,
time: c.time,
steps: c.steps,
cc: req.user.challengesCompleted
cc: req.user.challengesHash
});
});
};

View File

@ -5,8 +5,12 @@
exports.index = function(req, res) {
if (req.user) {
if (req.user.challengesCompleted.length > 0) {
nextChallenge = Math.max.apply(Math, req.user.challengesCompleted) + 1;
ch = req.user.challengesHash;
if (req.user.challengesHash[0] > 0) {
var max = Object.keys(ch).reduce(function(max,key){
return (max === undefined || ch[key] > ch[max]) ? +key : max;
});
nextChallenge = max + 1;
res.redirect("challenges/" + nextChallenge);
} else {
res.redirect("challenges/0");

View File

@ -27,32 +27,85 @@ exports.privacy = function(req, res) {
exports.statistics = function(req, res) {
res.render('statistics', {
title: 'Code Camper Statistics',
totalUsers: totalUsers,
//totalUsers: totalUsers,
//usersOverTenChallenges: usersOverTenChallenges
});
}
exports.chromebook = function(req, res) {
res.render('chromebook', {
title: 'Win a Chromebook'
});
}
exports.jqueryExercises = function(req, res) {
res.render('jquery-exercises', {
title: 'jQuery Exercises'
});
}
exports.livePairProgramming = function(req, res) {
res.render('live-pair-programming', {
title: 'Live Pair Programming'
});
}
exports.javaScriptInYourInbox = function(req, res) {
res.render('javascript-in-your-inbox', {
title: 'JavaScript in your Inbox'
});
}
exports.programmerInterviewQuestionsApp = function(req, res) {
res.render('programmer-interview-questions-app', {
title: 'programmer-interview-questions-app'
title: 'Programmer Interview Questions App'
});
}
exports.textBasedAdventureTutorial = function(req, res) {
res.render('text-based-adventure-tutorial-app', {
title: 'text-based-adventure-tutorial-app'
exports.pairProgramWithTeamViewer = function(req, res) {
res.render('pair-program-with-team-viewer', {
title: 'Challenge: Pair Program with Team Viewer',
name: "Pair Program with Team Viewer",
video: '',
time: 30,
steps: ["In the spirit of keeping Free Code Camp 100% free, we've created directions for using a totally free pair programming tool called Team Viewer. It's not as user-friendly as Screen Hero, but it gets the job done (and works on Linux!).",
"Go to <a href='http://www.teamviewer.com/en/index.aspx' target='_blank'>http://www.teamviewer.com/en/index.aspx</a> and download Team Viewer. Be sure not to download the beta version, which isn't compatible with the current stable version everyone else will be using.",
"Install it and launch it",
"Go to the chat room and ask if anyone wants to pair program with you on a CoderByte challenge.",
"If someone is interested, they will be your \"pair\" - the person you pair programming with.",
"<strong>First, you will pair program on your pair's computer.</strong> Ask your pair for his or her Team Viewer ID and password.",
"Enter this id, and then password, to start the session.",
"Once the Team Viewer session starts, look at the the top of the screen. You will see 6 buttons. If you hover your cursor over the buttons, they will slide down so that you can read them. Click the audio/video button. This will allow you to turn on Voice Over IP and unmute your microphone, opening up your voice channel.",
"Note that you can now control your pair's keyboard and mouse, enabling you to step in and code yourself on your pair's computer when desired",
"Now you can click the X to end the pair programming session.",
"<strong>Next, you will pair program on your computer.</strong> Copy your Team Viewer ID and paste it into the private chat, so that your pair can use it to connect with you.",
"You will need to share your randomly generated password with your pair as well.",
"Once your pair connects, you will see a Team Viewer side menu. ",
"Click the audio button that drops down.",
"Click the headset icon and choose Voice over IP",
"Click the microphone button to unmute your microphone. Once your pair does the same, you two will have an open voice channel.",
"Now you can click the X to end the pair programming session.",
"Now it's time to tackle CoderByte.",
"Create a CoderByte account at <a href='http://coderbyte.com/sl/' target='_blank'>http://coderbyte.com/sl/</a>",
"Now go to <a href='http://coderbyte.com/CodingArea/Challenges/#easyChals' target='_blank'>http://coderbyte.com/CodingArea/Challenges/#easyChals</a> and start working through Coderbyte's easy algorithm scripting challenges using JavaScript.",
"When you are finished pair programming, click the X to end the session.",
"Congratulations! You have completed your first pair programming session.",
"You should pair program with different Code Campers until you've completed all the Easy, Medium and Hard CoderByte challenges. This is a big time investment, but the JavaScript practice you'll get, along with the scripting and algorithm experience, are well worth it!",
"You can complete CoderByte problems while you continue to work through Free Code Camp's challenges.",
"Be sure to pair program on these challenges, and remember to apply the RSAP methodology.",
"Click the button below to return to the Pair Programming challenge, then mark it complete."],
cc: req.user.challengesHash
});
}
exports.about = function(req, res) {
res.render('about', {
title: 'Who We Are'
title: 'About Free Code Camp and Our Team of Volunteers'
});
}
exports.doneWithFirst100Hours = function(req, res) {
res.render('done-with-first-100-hours', {
title: 'Congratulations on finishing the first 100 hours of Free Code Camp!'
});
}

View File

@ -5,6 +5,7 @@ var nodemailer = require('nodemailer');
var passport = require('passport');
var User = require('../models/User');
var secrets = require('../config/secrets');
var moment = require('moment');
/**
* GET /login
@ -130,7 +131,9 @@ exports.postEmailSignup = function(req, res, next) {
exports.getAccount = function(req, res) {
res.render('account/profile', {
title: 'Manage your Free Code Camp Account'
title: 'Manage your Free Code Camp Account',
cc: req.user.challengesHash,
moment: moment
});
};

View File

@ -14,8 +14,70 @@ var userSchema = new mongoose.Schema({
instagram: String,
linkedin: String,
tokens: Array,
points: { type: Number, default: 0 },
challengesCompleted: { type: Array, default: [] },
challengesHash: {
0: { type: Number, default: 0 },
1: { type: Number, default: 0 },
2: { type: Number, default: 0 },
3: { type: Number, default: 0 },
4: { type: Number, default: 0 },
5: { type: Number, default: 0 },
6: { type: Number, default: 0 },
7: { type: Number, default: 0 },
8: { type: Number, default: 0 },
9: { type: Number, default: 0 },
10: { type: Number, default: 0 },
11: { type: Number, default: 0 },
12: { type: Number, default: 0 },
13: { type: Number, default: 0 },
14: { type: Number, default: 0 },
15: { type: Number, default: 0 },
16: { type: Number, default: 0 },
17: { type: Number, default: 0 },
18: { type: Number, default: 0 },
19: { type: Number, default: 0 },
20: { type: Number, default: 0 },
21: { type: Number, default: 0 },
22: { type: Number, default: 0 },
23: { type: Number, default: 0 },
24: { type: Number, default: 0 },
25: { type: Number, default: 0 },
26: { type: Number, default: 0 },
27: { type: Number, default: 0 },
28: { type: Number, default: 0 },
29: { type: Number, default: 0 },
30: { type: Number, default: 0 },
31: { type: Number, default: 0 },
32: { type: Number, default: 0 },
33: { type: Number, default: 0 },
34: { type: Number, default: 0 },
35: { type: Number, default: 0 },
36: { type: Number, default: 0 },
37: { type: Number, default: 0 },
38: { type: Number, default: 0 },
39: { type: Number, default: 0 },
40: { type: Number, default: 0 },
41: { type: Number, default: 0 },
42: { type: Number, default: 0 },
43: { type: Number, default: 0 },
44: { type: Number, default: 0 },
45: { type: Number, default: 0 },
46: { type: Number, default: 0 },
47: { type: Number, default: 0 },
48: { type: Number, default: 0 },
49: { type: Number, default: 0 },
50: { type: Number, default: 0 },
51: { type: Number, default: 0 },
52: { type: Number, default: 0 },
53: { type: Number, default: 0 },
54: { type: Number, default: 0 },
55: { type: Number, default: 0 },
56: { type: Number, default: 0 },
57: { type: Number, default: 0 },
58: { type: Number, default: 0 },
59: { type: Number, default: 0 }
},
profile: {
name: { type: String, default: '' },
gender: { type: String, default: '' },

View File

@ -20,6 +20,7 @@
"connect-mongo": "^0.4.1",
"cookie-parser": "^1.3.3",
"csso": "^1.3.11",
"dateformat": "^1.0.11",
"dotenv": "^0.4.0",
"errorhandler": "^1.3.0",
"express": "^4.10.4",
@ -36,6 +37,7 @@
"lodash": "^2.4.1",
"lusca": "^1.0.2",
"method-override": "^2.3.0",
"moment": "^2.8.4",
"mongoose": "^3.8.19",
"morgan": "^1.5.0",
"newrelic": "^1.13.3",

View File

@ -14,8 +14,8 @@
@gray-light: lighten(@gray-base, 46.7%); // #777
@gray-lighter: lighten(@gray-base, 93.5%); // #eee
@brand-primary: #4e8c39;
@brand-success: #2F8DA3;
@brand-primary: #215f1e;
@brand-success: #457E86;
@brand-info: #5bc0de;
@brand-warning: #f0ad4e;
@brand-danger: #d9534f;
@ -26,12 +26,12 @@
//## Settings for some of the most global styles.
//** Background color for `<body>`.
@body-bg: #c5b3a0;
@body-bg: #457E86;
//** Global text color on `<body>`.
@text-color: @gray-dark;
//** Global textual link color.
@link-color: #4e8c39;
@link-color: #215f1e;
//** Link hover color set via `darken()` function.
@link-hover-color: darken(@link-color, 15%);
//** Link hover decoration.
@ -487,7 +487,7 @@
//
//## Define colors for form feedback states and, by default, alerts.
@state-success-text: #3c763d;
@state-success-text: #215f1e;
@state-success-bg: #dff0d8;
@state-success-border: darken(spin(@state-success-bg, -10), 5%);

View File

@ -6,14 +6,23 @@
@import url(http://fonts.googleapis.com/css?family=Lato:300);
@import url(http://fonts.googleapis.com/css?family=Lato:400);
@import url(http://fonts.googleapis.com/css?family=Lato:500);
html,body,div,span,a,li,td,th {
font-family: 'Lato', sans-serif;
font-weight: 300;
}
li {
white-space: pre; /* CSS 2.0 */
white-space: pre-wrap; /* CSS 2.1 */
white-space: pre-line; /* CSS 3.0 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
white-space: -moz-pre-wrap; /* Mozilla */
white-space: -hp-pre-wrap; /* HP Printers */
word-wrap: break-word; /* IE 5+ */
}
html {
position: relative;
min-height: 100%;
@ -37,7 +46,7 @@ h1, h2 {
}
.btn {
font-weight: 500;
font-weight: 400;
}
h1, h2, h3, h4, h5, h6, p, li {
@ -154,6 +163,7 @@ ul {
.nav-height {
height: 50px;
border: none;
}
.landing-icon {
@ -172,6 +182,10 @@ ul {
margin-top: -10px;
}
.negative-15 {
margin-top: -15px;
}
.landing-p {
font-size: 18px !important;
}
@ -180,11 +194,6 @@ ul {
color: @brand-success;
}
.delay-half {
-webkit-animation-delay: 0.5s;
animation-delay: 0.5s;
}
.delay-1 {
-webkit-animation-delay: 1s;
animation-delay: 1s;
@ -195,24 +204,9 @@ ul {
animation-delay: 2s;
}
.delay-3 {
-webkit-animation-delay: 3s;
animation-delay: 3s;
}
.delay-4 {
-webkit-animation-delay: 4s;
animation-delay: 4s;
}
.delay-5 {
-webkit-animation-delay: 5s;
animation-delay: 5s;
}
.delay-6 {
-webkit-animation-delay: 6s;
animation-delay: 6s;
.delay-10 {
-webkit-animation-delay: 10s;
animation-delay: 10s;
}
.fast-animation {
@ -220,11 +214,6 @@ ul {
animation-duration: 0.5s;
}
.slow-animation {
-webkit-animation-duration: 2s;
animation-duration: 2s;
}
.disabled {
pointer-events: none;
cursor: default;
@ -271,7 +260,7 @@ ul {
}
.navbar {
background-color: #502D16;
background-color: #4a2b0f;
}
.navbar-default .navbar-nav > li > a {
@ -282,7 +271,7 @@ ul {
}
.hug-top {
margin-top: -40px;
margin-top: -35px;
margin-bottom: -10px;
}
@ -316,9 +305,11 @@ ul {
box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.3);
}
.profile-image {
border-radius: 10px;
width: 200px;
height: 200px;
border-radius: 10px;
padding-left: 5px;
padding-right: 5px;
}
.team-member {
@ -344,3 +335,25 @@ ul {
position:relative;
display: block;
}
.btn-big {
font-size: 30px;
}
.table {
margin-left: -16px;
}
thead {
font-size: 150%;
}
.hamburger {
background-color: #ddd;
text-align: left;
font-size: 20px;
}
.nowrap {
white-space: nowrap;
}

View File

@ -20,14 +20,11 @@ $(document).ready(function() {
$('#complete-dialog').modal('show');
l = location.pathname.split('/');
cn = l[l.length - 1]
console.log(cn);
$.ajax({
type: 'POST',
data: {cn: cn},
url: '/completed_challenge/',
success: function(data) {
console.log('success');
console.log(JSON.stringify(data));
}
data: {challengeNumber: cn},
url: '/completed_challenge/'
});
});

View File

@ -22,4 +22,28 @@
<loc>http://www.freecodecamp.com/learn-to-code</loc>
<changefreq>daily</changefreq>
</url>
<url>
<loc>http://www.freecodecamp.com/about</loc>
<changefreq>daily</changefreq>
</url>
<url>
<loc>http://www.freecodecamp.com/chromebook</loc>
<changefreq>daily</changefreq>
</url>
<url>
<loc>http://www.freecodecamp.com/live-pair-programming</loc>
<changefreq>daily</changefreq>
</url>
<url>
<loc>http://www.freecodecamp.com/privacy</loc>
<changefreq>daily</changefreq>
</url>
<url>
<loc>http://www.freecodecamp.com/jquery-exercises</loc>
<changefreq>daily</changefreq>
</url>
<url>
<loc>http://www.freecodecamp.com/javascript-in-your-inbox</loc>
<changefreq>daily</changefreq>
</url>
</urlset>

View File

@ -1,330 +1,705 @@
[
{
"link": "a-one-minute-introduction-to-free-code-camp",
"name": "A one-minute introduction to Free Code Camp",
"name": "Learn how Free Code Camp Works",
"time": 2,
"video": "114486344",
"challengeNumber": 0,
"video": "110729062",
"time": "1 minute",
"steps": ["Watch this video.", "When you're done, click the \"I've completed this challenge\" button to move on to your next challenge."]
"steps": [
"Watch this 1-minute video, or simply read this summary:",
"Welcome to Free Code Camp. We're a community of busy people learning to code.",
"We built this community because learning to code is hard. But anyone who can stay motivated can learn to code. And the best way to stay motivated is to code with friends.",
"To maximize accessibility, all our challenges are self-paced, browser-based, and free.",
"All of us start with the same 100 hours of interactive coding challenges. These cover everything from Computer Science to SQL. They also cover in-demand JavaScript tools like jQuery, Node.js and MongoDB.",
"Once we have a basic understanding of web development, we'll spend another 900 hours putting that theory into practice. We'll build full stack solutions for nonprofits.",
"By the end of this process, we'll be good at coding. We'll have a portfolio of apps with happy users to prove it. We'll also have an alumni network of fellow coders and nonprofits ready to serve as references.",
"If you make it through Free Code Camp, you will be able to get a coding job. There are far more job openings out there than there are qualified coders to fill them.",
"Also, for every pure coding job, there are at least 5 additional jobs that require some coding skills. So even if you decide not to pursue coding as a career, you'll still walk away with a valuable job skill.",
"There are 3 keys to succeeding in our community: do the challenges, make friends, and find a routine.",
"Now it's time to join our chatroom. Click the \"I've completed this challenge\" button to move on to your next challenge."
]
},
{
"link": "enter-the-free-code-camp-chat-room",
"name": "Enter the Free Code Camp Chat Room",
"name": "Join Our Chat Room",
"time": 5,
"video": "114627322",
"challengeNumber": 1,
"video": "110753794",
"time": "5 minutes",
"steps": ["Register for the Free Code Camp chat room at <a href='https://www.hipchat.com/invite/178107/cc2f6ea4dfac9e48b9a88b305adae48a' target='_blank'>https://www.hipchat.com/invite/178107/cc2f6ea4dfac9e48b9a88b305adae48a</a>", "Introduce yourself to our chat room by typing: \"hello world!\""]
"steps": [
"Now we're going to join the Free Code Camp chat room. You can come here any time of day to hang out, ask questions, or find another Code Camper who's on the same challenge as you and wants to pair program.",
"If you don't already have a GitHub account, create one real quick at <a href='https://www.github.com' target='_blank'>https://www.github.com</a>.",
"Be sure to update your biographical information and upload an image. A picture of your face works best. This is how people will see you in the chat room, so put your best foot forward.",
"Now enter the chat room by going to <a href='https://gitter.im/FreeCodeCamp/FreeCodeCamp' target='_blank'>https://gitter.im/FreeCodeCamp/FreeCodeCamp</a> and clicking the \"sign in with GitHub\" button.",
"Introduce yourself to our chat room by typing: \"hello world!\".",
"Tell your fellow Code Campers how you found Free Code Camp. Also tell us why you want to learn to code.",
"Keep the chat room open while you work through the other challenges. That way you ask for help If you get stuck on a challenge. You can also socialize when you feel like taking a break."
]
},
{
"link": "create-and-deploy-a-website",
"name": "Create a Website and Deploy it to the Internet",
"name": "Join our Forum",
"time": 5,
"video": "114578442",
"challengeNumber": 2,
"video": "110753793",
"time": "5 minutes",
"steps": ["Download a template from <a href='http://startbootstrap.com' target='_blank'>http://startbootstrap.com</a>", "Go to <a href='http://bitballoon.com' target='_blank'>http://bitballoon.com</a>", "Find the template you downloaded in your file manager (Finder on Mac, Windows Explorer on Windows)", "Drag the entire template directory onto BitBalloon to deploy it", "Once it's deployed, share the link to it in the Free Code Camp chat room."]
"steps": [
"Go to Free Code Camp's forum: <a href='http://forum.freecodecamp.com' target='_blank'>http://forum.freecodecamp.com</a>.",
"You can come here to share and discuss coding resources, ask questions to our entire community, and coordinate local Free Code Camp events.",
"Our chat room is great for realtime discussions, but our forum is ideal for longer-term discussions and open-ended questions.",
"Sign in with the Github account you created during Challenge 1.",
"Click on the \"Introduce yourself here\" discussion.",
"Here you can read through other Free Code Camp community members' self introductions.",
"Go ahead and type a brief self introduction of your own.",
"Click on the \"Categories\" drop-down menu. You should see a category called \"Local Chapters\". Click that. If your city isn't already on the list, you can create a topic for it. Otherwise, you can also introduce yourself to the other Code Campers from your city.",
"Come back here daily to ask questions, engage in discussions, and share links to helpful coding tools."
]
},
{
"link": "install-github-atom-text-editor",
"name": "Install Github's Atom Text Editor",
"name": "Build a Personal Website",
"time": 60,
"video": "114627406",
"challengeNumber": 3,
"video": "110753792",
"time": "5 minutes",
"steps": ["Download the Atom editor at <a href='http://atom.io' target='_blank'>http://atom.io</a>", "Unzip it and install Atom.", "Open up Atom.", "Now you have a dedicated text editor!"]
"steps": [
"There are tons of interactive HTML and CSS tutorials out there, but Nathan Bashaw's Dash tutorials, which he built for General Assembly, are our favorite.",
"Go to <a href='https://dash.generalassemb.ly/projects/annas-website-1' target='_blank'>https://dash.generalassemb.ly/projects/annas-website-1</a> and get started with your first project."]
},
{
"link": "modify-and-redeploy-your-website",
"name": "Modify and Redeploy Your Website",
"name": "Build a Responsive Blog Theme",
"time": 60,
"video": "114578441",
"challengeNumber": 4,
"video": "110753791",
"time": "5 minutes",
"steps": ["Open up the template you downloaded from <a href='http://startbootstrap.com' target='_blank'>http://startbootstrap.com</a> in your file manager (Finder on Mac and Windows Explorer on Windows).", "Open up the index.html file with Atom", "Find the title tag in the HTML and change it.", "Go to <a href='http://bitballoon.com' target='_blank'>http://bitballoon.com</a>", "Drag the entire template directory onto BitBalloon to deploy it", "Verify that the title has indeed changed."]
"steps": [
"Next, let's learn about Responsive web design and continue learning about HTML and CSS.",
"A responsive website will automatically adapt to changes in your browser's width. This means that you can make one version of a website that will look good on desktop, tablet and phone.",
"Later, we'll use Twitter's Bootstrap CSS framework to build responsive websites.",
"You can check it out here: <a href='http://getbootstrap.com/' target='_blank'>http://getbootstrap.com/</a>.",
"Go to <a href='https://dash.generalassemb.ly/projects/jeffs-blog-1' target='_blank'>https://dash.generalassemb.ly/projects/jeffs-blog-1</a> and complete the second project."
]
},
{
"link": "start-a-pair-programming-session",
"name": "Start Your First Pair Programming Session",
"name": "Build a Small Business Website",
"time": 60,
"video": "114578438",
"challengeNumber": 5,
"video": "111077664",
"time": "20 minutes",
"steps": ["Go to <a href='http://www.teamviewer.com/en/index.aspx' target='_blank'>http://www.teamviewer.com/en/index.aspx</a> and download Team Viewer", "Install it and launch it", "Go to the chat room and ask if anyone wants to pair program with you on your current challenge.", "If someone is interested, they will be your \"pair\" - the person you pair programming with.", "<strong>First, you will pair program on your computer.</strong> Copy your Team Viewer ID and paste it into the private chat, so that your pair can use it to connect with you.", "You will need to share your randomly generated password with your pair as well.", "Once your pair connects, you will see a Team Viewer side menu. ", "Click the audio button that drops down.", "Click the headset icon and choose Voice over IP", "Click the microphone button to unmute your microphone. Once your pair does the same, you two will have an open voice channel.", "When you are finished pair programming, click the X to end the session.", "<strong>Next, you will pair program on your pair's computer.</strong> Ask your pair for his or her Team Viewer ID and password", "Enter it to start the session.", "Once the Team Viewer session starts, look at the the top of the screen, you will see 6 buttons. If you hover your cursor over audio/video.", "When you are finished pair programming, click the X to end the session."]
"steps": ["Ready for some more HTML and CSS fundamentals?",
"Go to <a href='https://dash.generalassemb.ly/projects/eshas-restaurant-1' target='_blank'>https://dash.generalassemb.ly/projects/eshas-restaurant-1</a> and complete the third project."]
},
{
"link": "add-dynamic-content-to-your-website",
"name": "Add Dynamic Content to your Website",
"challengeNumber": 6,
"video": "110753641",
"time": "10 minutes",
"steps": ["Go to <a href='http://www.powr.io' target='_blank'>http://www.powr.io</a>", "From the dropdown menus, choose 'Contact Form' and 'HTML'", "Find the template you downloaded from <a href='http://startbootstrap.com' target='_blank'>http://startbootstrap.com</a> in your file manager (Finder on Mac and Windows Explorer on Windows).", "Drag the file to Atom", "Copy the lines of HTML from the POWr tutorial to your index.html file, being careful to put them where they belong.", "Drag the entire template directory onto BitBalloon to deploy it", "Go to <a href='http://bitballoon.com' target='_blank'>http://bitballoon.com</a>", "Verify that the form works by filling it out and submitting it. You can then go back to POWr.io and view the new database record that the form created.", "Now add a the POWr.io Twitter feed to your portfolio website, then redeploy it to BitBalloon."]
},
{
"link": "codecademy-html-and-css-track",
"name": "Codecademy's HTML & CSS Track",
"challengeNumber": 7,
"video": "110753640",
"time": "7 hours",
"steps": ["Go to <a href='http://www.codecademy.com/tracks/web' target='_blank'>http://www.codecademy.com/tracks/web</a> and complete the course."]
},
{
"link": "experiment-with-html-and-css-in-codepen",
"name": "Experiment with HTML and CSS in CodePen",
"challengeNumber": 8,
"name": "Tweak HTML and CSS in CodePen",
"time": 10,
"video": "110752744",
"time": "10 minutes",
"steps": ["Go to <a href='http://www.newsweek.com/' target='_blank'>http://www.newsweek.com/</a>", "Change the window size. Note that Newsweek.com is using <strong>Responsive Design</strong>.", "Right-click an area of the page that doesn't have any HTML elements on it, then choose 'view page source'.", "Select all the text, then copy it.", "Go to <a href='http://codepen.io/pen/' target='_blank'>http://codepen.io/pen/</a>", "Paste the HTML you copied from Newsweek.com into the HTML field of Codepen.", "You now have your own customizable version of the Newsweek.com webpage. See if you can change some of the text and images."]
"challengeNumber": 6,
"steps": [
"Now we're going to learn how to use a tool called CodePen, which lets you experiment with HTML and CSS, and even create single-page web applications, right in your browser!",
"Go to <a href='http://www.newsweek.com/' target='_blank'>http://www.newsweek.com/</a>",
"Change the window size. Note that Newsweek.com is using <strong>Responsive Design</strong>.",
"Right-click an area of the page that doesn't have any HTML elements on it, then choose 'view page source'.",
"Select all the text, then copy it.",
"Go to <a href='http://codepen.io/pen/' target='_blank'>http://codepen.io/pen/</a>",
"Paste the HTML you copied from Newsweek.com into the HTML field of Codepen.",
"You now have your own customizable version of the Newsweek.com website. See if you can change some of the text and images."
]
},
{
"link": "code-school-try-jquery-course",
"name": "Code School's Try jQuery Course",
"name": "Build a CSS Robot",
"time": 60,
"video": "114578436",
"challengeNumber": 7,
"steps": ["Now let's learn some more CSS, and a small amount of a JavaScript-based tool called jQuery.",
"Go to <a href='https://dash.generalassemb.ly/projects/cotbots-1' target='_blank'>https://dash.generalassemb.ly/projects/cotbots-1</a> and complete the fourth project."]
},
{
"name": "Get Started with jQuery",
"time": 30,
"video": "114578435",
"challengeNumber": 8,
"steps": [
"jQuery is a powerful tool for manipulating HTML elements.",
"It's a lot easier to use than JavaScript itself, so we'll learn it first.",
"It's also extremely popular with employers, so we're going to learn it well.",
"Code School has an excellent free course that will walk us through the basics of jQuery.",
"Go to <a href='http://try.jquery.com/levels/1/challenges/1' target='_blank'>http://try.jquery.com/levels/1/challenges/1</a> and complete the first section."
]
},
{
"name": "Traverse the DOM",
"time": 30,
"video": "114591805",
"challengeNumber": 9,
"time": "4 hours",
"video": "110753638",
"steps": ["Go to <a href='https://www.codeschool.com/courses/try-jquery' target='_blank'>https://www.codeschool.com/courses/try-jquery</a> and complete the course."]
"steps": [
"Now let's learn more about DOM traversal - that is, moving from one HTML element to the next.",
"Go to <a href='http://try.jquery.com/levels/2/challenges/1' target='_blank'>http://try.jquery.com/levels/2/challenges/1</a> and complete the second section."
]
},
{
"link": "jquery-exercises",
"name": "jQuery Exercises",
"name": "Work with the DOM",
"time": 30,
"video": "114591804",
"challengeNumber": 10,
"time": "3 hours",
"video": "110752745",
"steps": ["Go to <a href='http://jqexercise.droppages.com/' target='_blank'>http://jqexercise.droppages.com/</a> and complete all of the exercises.", "The person who created it was not a native English speaker, so please excuse the spelling and grammar mistakes.", "This will be a lot more fun if you pair program with someone from the Free Code Camp chat room."]
"steps": [
"Let's learn some more advanced ways to use jQuery to manipulate the DOM.",
"Go to <a href='http://try.jquery.com/levels/3/challenges/1' target='_blank'>http://try.jquery.com/levels/3/challenges/1</a> and complete the third section."
]
},
{
"link": "code-school-discover-devtools-course",
"name": "Code School's Discover DevTools",
"name": "Listen for DOM Events",
"time": 30,
"video": "114591802",
"challengeNumber": 11,
"time": "2 hours",
"video": "110752743",
"steps": ["Go to <a href='http://discover-devtools.codeschool.com/' target='_blank'>http://discover-devtools.codeschool.com/</a> and complete the course."]
"steps": [
"Now let's learn how to use jQuery Listeners. These will \"listen\" for something to happen, and then trigger a subsequent event",
"Go to <a href='http://try.jquery.com/levels/4/challenges/1' target='_blank'>http://try.jquery.com/levels/4/challenges/1</a> and complete the fourth section."
]
},
{
"link": "customize-bootstrap-with-bootswatch",
"name": "Customize Bootstrap with Bootswatch",
"name": "Use jQuery for Styling",
"time": 30,
"video": "114591801",
"challengeNumber": 12,
"time": "10 minutes",
"video": "110752741",
"steps": ["Go to <a href='http://getbootstrap.com/components/' target='_blank'>http://getbootstrap.com/components/</a>", "Right-click an area of the page that doesn't have any HTML elements on it, then choose 'view page source'.", "Select all the text, then copy it.", "Go to <a href='http://codepen.io/pen/' target='_blank'>http://codepen.io/pen/</a>", "Paste the HTML you copied from GetBootStrap.com into the HTML field of Codepen.","Go to <a href='http://bootswatch.com/' target='_blank'>http://bootswatch.com/</a>", "Decide which theme you want to use.", "Click the down arrow next to the download button and choose 'bootstrap.css'", "Select all the text, then copy it.", "Go back to CodePen and paste the CSS you copied from Bootswatch.com into the CSS field of Codepen.", "Your Bootswatch CSS should now be applied to the HTML from the GetBootStrap page.", "This page is currently using a two-column layout, with the main content on the left and additional navigation on the right. See if you can make it a one-column layout."]
"steps": [
"Finally, let's use jQuery to manipulate the way websites look, by changing the CSS of elements.",
"Go to <a href='http://try.jquery.com/levels/5/challenges/1' target='_blank'>http://try.jquery.com/levels/5/challenges/1</a> and complete the fifth section."
]
},
{
"link": "",
"name": "Inject Life with CSS Transformations",
"name": "Build a MadLibs Game",
"time": 60,
"video": "114591799",
"challengeNumber": 13,
"time": "15 minutes",
"video": "110752740",
"steps": ["Go to <a href='http://daneden.github.io/animate.css/' target='_blank'>http://daneden.github.io/animate.css/</a> and try out some of the CSS animations.", "Go to <a href='http://codepen.io/ossia/pen/bGegt' target='_blank'>http://codepen.io/ossia/pen/bGegt</a>.", "Press the \"Fork\" button. This will fork, meaning create a copy of, the CodePen.", "Click the gear in the CSS column.", "Click \"Add another resource\" and start typing \"animate.css\". Click on the dropdown results to autocomplete it.", "Now that you have Animate.css enabled, use jQuery and the \"toggleClass\" method to add an animated class to all h1 elements when you click the \"Press Me\" button."]
"steps": [
"Now that we've built a foundation in jQuery, let's go back to Dash and do it's last challenge.",
"If you aren't familiar with Mad Libs, they basically involve inserting random nouns, adjectives and verbs in to stories. The stories that result are often hilarious.",
"Go to <a href='https://dash.generalassemb.ly/projects/mad-libs-1' target='_blank'>https://dash.generalassemb.ly/projects/mad-libs-1</a> and complete the fifth project."
]
},
{
"link": "inject-life-with-css-transformations",
"name": "Codecademy JavaScript Track",
"name": "Discover Chrome's DevTools",
"time": 90,
"video": "110752743",
"challengeNumber": 14,
"time": "10 hours",
"video": "110795564",
"steps": ["Go to <a href='http://www.codecademy.com/en/tracks/javascript-combined' target='_blank'>http://www.codecademy.com/en/tracks/javascript-combined</a> and complete the course."]
"steps": [
"It's time to learn the most powerful tool your browser has - the Development Tools!",
"If you aren't already using Chrome, you'll want to download it here. While it's true that Firefox has a tool called Firebug that is very similar to Chrome's DevTools, we will use Chrome for this challenge.",
"Note that this course, jointly produced by Google and Code School, is technologically impressive, but occasionally buggy. If you encounter a bug, just ignore it and keep going.",
"Go to <a href='http://discover-devtools.codeschool.com' target='_blank'>http://discover-devtools.codeschool.com</a> and complete this short course."
]
},
{
"link": "codecademy-javascript-track",
"name": "Get Help the Hacker Way with RSAP",
"name": "Tackle jQuery Exercises",
"time": 60,
"video": "113173612",
"challengeNumber": 15,
"video": "",
"time": "30 minutes",
"steps": ["Watch the video to learn the RSAP (Read, Search, Ask, Post) methodology for getting help.", "Try an intelligent Google query that involves JavaScript and filters for this year (since JavaScript changes)", "Go to <a href='http://stackoverflow.com/' target='_blank'>http://stackoverflow.com/</a> and view the recent questions.", "Go to <a href='http://webchat.freenode.net/' target='_blank'>http://webchat.freenode.net/</a> and create an IRC account.", "Join the #JavaScript chat room and introduce yourself as a Free Code Camp student.", "Now you have several ways of getting help when you're stuck."]
"steps": [
"We've built some special jQuery challenges to help you reinforce your knowledge of this fundamental skill.",
"There are many correct ways to solve each of these exercises. After you complete the challenge, you can compare your solution with our solution by pressing the \"#solution-button\" button.",
"Go to <a href='http://freecodecamp.com/jquery-exercises' target='_blank'>http://freecodecamp.com/jquery-exercises</a> and complete the exercises."
]
},
{
"link": "easy-algorthim-scripting-challenges-on-coderbyte",
"name": "Easy Algorithm Scripting Challenges on Coderbyte",
"name": "Customize Bootstrap with Bootswatch",
"time": 10,
"video": "110752741",
"challengeNumber": 16,
"video": "",
"time": "15 hours",
"steps": ["Create a CoderByte account at <a href='http://coderbyte.com/sl/' target='_blank'>http://coderbyte.com/sl/</a>", "Now go to <a href='http://coderbyte.com/CodingArea/Challenges/#easyChals' target='_blank'>http://coderbyte.com/CodingArea/Challenges/#easyChals</a> and start working through Coderbyte's easy algorithm scripting challenges using JavaScript.", "Be sure to pair programming on these challenges, and remember to apply the RSAP methodology."]
"steps": [
"Let's learn a little more about Twitter's responsive CSS framework, Bootstrap, and how we can add some custom themes to it.",
"Go to <a href='http://getbootstrap.com/components/' target='_blank'>http://getbootstrap.com/components/</a>",
"Right-click an area of the page that doesn't have any HTML elements on it, then choose 'view page source'.",
"Select all the text, then copy it.",
"Go to <a href='http://codepen.io/pen/' target='_blank'>http://codepen.io/pen/</a>",
"Paste the HTML you copied from GetBootStrap.com into the HTML field of Codepen.",
"Go to <a href='http://bootswatch.com/' target='_blank'>http://bootswatch.com/</a>",
"Decide which theme you want to use.",
"Click the down arrow next to the download button and choose 'bootstrap.css'",
"Select all the text, then copy it.",
"Go back to CodePen and paste the CSS you copied from Bootswatch.com into the CSS field of Codepen.",
"Your Bootswatch CSS should now be applied to the HTML from the GetBootStrap page.",
"This page is currently using a two-column layout, with the main content on the left and additional navigation on the right. See if you can make it a one-column layout."
]
},
{
"link": "harvard-introduction-to-computer-science-cs50-course",
"name": "Introduction to Computer Science",
"name": "Inject Animation into CSS",
"time": 15,
"video": "110752740",
"challengeNumber": 17,
"video": "",
"time": "150 hours",
"steps": ["Harvard's CS50 course is one of the most popular online courses of all time. It will give you a solid programming foundation. It will introduce you to important concepts in computer science like algorithms, databases, data structures.", "Go to <a href='https://www.edx.org/course/harvardx/harvardx-cs50x-introduction-computer-1022#.VDWSfSldWpQ' target='_blank'>https://www.edx.org/course/harvardx/harvardx-cs50x-introduction-computer-1022#.VDWSfSldWpQ</a> and register for the course."]
"steps": [
"You may have noticed some sites have cool animations. Actually, animating DOM elements is pretty straightforward if you use a CSS library called Animate.css.",
"Go to <a href='http://daneden.github.io/animate.css/' target='_blank'>http://daneden.github.io/animate.css/</a> and try out some of the CSS animations.",
"Go to <a href='http://codepen.io/ossia/pen/bGegt' target='_blank'>http://codepen.io/ossia/pen/bGegt</a>.",
"Press the \"Fork\" button. This will fork, meaning create a copy of, the CodePen.",
"Click the gear in the CSS column.",
"Click \"Add another resource\" and start typing \"animate.css\". Click on the dropdown results to autocomplete it.",
"Now that you have Animate.css enabled, use jQuery and the \"toggleClass\" method to add an animated class to all h1 elements when you click the \"Press Me\" button."
]
},
{
"link": "medium-algorthim-scripting-challenges-on-coderbyte",
"name": "Medium Algorithm Scripting Challenges on Coderbyte",
"name": "Learn Basic Computer Science",
"time": 120,
"video": "114628241",
"challengeNumber": 18,
"video": "",
"time": "15 hours",
"steps": ["Go to <a href='http://coderbyte.com/CodingArea/Challenges/#medChals' target='_blank'>http://coderbyte.com/CodingArea/Challenges/#medChals</a> and start working through Coderbyte's medium algorithm scripting challenges using JavaScript.", "Be sure to pair programming on these challenges, and remember to apply the RSAP methodology."]
"steps": [
"Stanford has an excellent free online Computer Science curriculum. This interactive course uses a modified version of JavaScript. It will cover a lot of concepts quickly.",
"Note that Harvard also has an excellent introduction to computer science course called CS50, but it takes more than 100 hours to complete, and doesn't use JavaScript.",
"Despite being completely self-paced, Stanford's CS101 course is broken up into weeks. Each of the following challenges will address one of those weeks.",
"Go to <a href='https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z54/z1/' target='_blank'>https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z54/z1/</a> and complete the first week's course work."
]
},
{
"name": "Learn Loops",
"time": 120,
"video": "114597348",
"challengeNumber": 19,
"link": "medium-algorthim-scripting-challenges-on-coderbyte",
"name": "Stanford's Relational Databases Mini-course",
"video": "",
"time": "10 hours",
"steps": ["Go to <a href='https://class.stanford.edu/courses/DB/RDB/SelfPaced/about' target='_blank'>https://class.stanford.edu/courses/DB/RDB/SelfPaced/about</a> and register for this course.", "Be sure to watch the videos, in addition to doing the exercises, because they have embedded challenges."]
"steps": [
"Now let's tackle week 2 of Stanford's Intro to Computer Science course.",
"This will introduce us to loops, a fundamental feature of every programming language.",
"Go to <a href='https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z100/a7a70ce6e4724c58862ee6007284face/' target='_blank'>https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z100/a7a70ce6e4724c58862ee6007284face/</a> and complete Week 2."]
},
{
"name": "Learn Computer Hardware",
"time": 120,
"video": "114597347",
"challengeNumber": 20,
"link": "stanfords-relational-databases-mini-course",
"name": "Stanford's JSON Mini-course",
"video": "",
"time": "2 hours",
"steps": ["Go to <a href='https://class.stanford.edu/courses/DB/JSON/SelfPaced/about' target='_blank'>https://class.stanford.edu/courses/DB/JSON/SelfPaced/about</a> and register for this course.", "Be sure to watch the videos, in addition to doing the exercises, because they have embedded challenges."]
"steps": [
"Week 3 of Stanford's Intro to Computer Science covers computer hardware and explains Moore's law of exponential growth in the price-performance of processors.",
"This challenge will also give you an understanding of how bits and bytes work.",
"Go to <a href='https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z143/z101/' target='_blank'>https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z143/z101/</a> and complete Week 3."
]
},
{
"link": "build-a-text-based-adventure",
"name": "Build a Text-based Adventure",
"name": "Learn Computer Networking",
"time": 120,
"video": "114604811",
"challengeNumber": 21,
"video": "",
"time": "5 hours",
"steps": ["Go to <a href='http://www.amctv.com/shows/halt-and-catch-fire/colossal-cave-adventure' target='_blank'>http://www.amctv.com/shows/halt-and-catch-fire/colossal-cave-adventure</a> and play the original text-based adventure (known simply as \"Adventure\".", "Using CodePen, create a text based adventure, using buttons instead of text input.", "Create a player object, and give the player an inventory of items.", "Create a definite beginning, end, and at least 10 different locations a player can go to and interact with"]
"steps": [
"Now that you've learned about computer hardware, it's time to learn about the software that runs on top of it.",
"Particularly important, you will learn about networks and TCP/IP - the protocol that powers the internet.",
"Go to <a href='https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z187/z144/' target='_blank'>https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z187/z144/</a> and complete Week 4."]
},
{
"link": "hard-algorthim-scripting-challenges-on-coderbyte",
"name": "Hard Algorithm Scripting Challenges on Coderbyte",
"name": "Learn Boolean Logic",
"time": 120,
"video": "114604812",
"challengeNumber": 22,
"video": "",
"time": "15 hours",
"steps": ["Go to <a href='http://coderbyte.com/CodingArea/Challenges/#hardChals' target='_blank'>http://coderbyte.com/CodingArea/Challenges/#medChals</a> and start working through Coderbyte's hard algorithm scripting challenges using JavaScript.", "Be sure to pair programming on these challenges, and remember to apply the RSAP methodology."]
"steps": [
"Now we'll do some more table exercises and learn boolean logic.",
"We'll also learn the difference between digital data and analog data.",
"Go to <a href='https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z208/z188/' target='_blank'>https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z208/z188/</a> and complete Week 5."]
},
{
"link": "stanfords-sql-mini-course",
"name": "Stanford's SQL Mini-course",
"name": "Learn Computer Security",
"time": 120,
"video": "114604813",
"challengeNumber": 23,
"video": "",
"time": "10 hours",
"steps": ["Go to <a href='https://class.stanford.edu/courses/DB/SQL/SelfPaced/about' target='_blank'>https://class.stanford.edu/courses/DB/SQL/SelfPaced/about</a> and register for this course.", "Be sure to watch the videos, in addition to doing the exercises, because they have embedded challenges."]
"steps": [
"We're almost done with Stanford's Introduction to Computer Science course!",
"We'll learn about one of the most important inventions of the 20th century - spreadsheets.",
"We'll also learn about Computer Security and some of the more common vulnerabilities software systems have.",
"Go to <a href='https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z229/z213/' target='_blank'>https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z229/z213/</a> and complete Week 6, the final week of the course."]
},
{
"link": "build-an-interview-question-machine",
"name": "Build an Interview Question Machine",
"name": "Build an Adventure Game",
"time": 60,
"video": "114604814",
"challengeNumber": 24,
"video": "",
"time": "5 hours",
"steps": ["Using CodePen, create an interview question machine that will show an interview question, count down from 5, then shows the answer.", "Create a button the user can press to see the next question.", "Go to <a href='https://gist.github.com/QuincyLarson/b18d7366440af0f37054' target='_blank'>https://gist.github.com/QuincyLarson/b18d7366440af0f37054</a> to see an example list of interview questions (dealing with the time complexity of algorthims and duration of common computational tasks).", "Add the ability for users to say they got it right or wrong. If they got it right, don't show them that question any more."]
"steps": [
"Now that you understand some Computer Science fundamentals, let's focus on programming JavaScript!",
"We're going to work through Codecademy's famous interactive JavaScript course.",
"This course will teach us some JavaScript fundamentals while guiding us through the process of building interesting web apps, all within Codecademy's learner-friendly environment!",
"Go to <a href='http://www.codecademy.com/courses/getting-started-v2/0/1' target='_blank'>http://www.codecademy.com/courses/getting-started-v2/0/1</a> and complete the section.",
"Be sure to also complete this section: <a href='http://www.codecademy.com/courses/javascript-beginner-en-x9DnD/0/1' target='_blank'>http://www.codecademy.com/courses/javascript-beginner-en-x9DnD/0/1</a>."
]
},
{
"link": "code-school-try-git-course",
"name": "Code School's Try Git Course",
"name": "Build Rock Paper Scissors",
"time": 60,
"video": "114604815",
"challengeNumber": 25,
"video": "",
"time": "15 minutes",
"steps": ["Go to <a href='https://www.codeschool.com/courses/try-git' target='_blank'>https://www.codeschool.com/courses/try-git</a> and complete this short interactive course."]
"steps": [
"Now we'll learn how JavaScript functions work, and use them to build a simple Rock Paper Scissors game.",
"Go to <a href='http://www.codecademy.com/courses/javascript-beginner-en-6LzGd/0/1' target='_blank'>http://www.codecademy.com/courses/javascript-beginner-en-6LzGd/0/1</a> and complete the section.",
"Be sure to also complete this section: <a href='http://www.codecademy.com/courses/javascript-beginner-en-Bthev-mskY8/0/1' target='_blank'>http://www.codecademy.com/courses/javascript-beginner-en-Bthev-mskY8/0/1</a>."
]
},
{
"link": "install-node-js",
"name": "Install Node.js",
"name": "Learn JavaScript For Loops",
"time": 60,
"video": "114614220",
"challengeNumber": 26,
"time": "15 minutes",
"video": "",
"steps": []
"steps": [
"Let's learn more about the loops that make virtually all programs possible - the \"For Loop\" and \"While Loop\". First, we'll learn the For Loop.",
"Go to <a href='http://www.codecademy.com/courses/javascript-beginner-en-NhsaT/0/1' target='_blank'>http://www.codecademy.com/courses/javascript-beginner-en-NhsaT/0/1web</a> and complete both the both For and While loop section.",
"Be sure to also complete this section: <a href='http://www.codecademy.com/courses/javascript-beginner-en-XEDZA/0/1' target='_blank'>http://www.codecademy.com/courses/javascript-beginner-en-XEDZA/0/1</a>."
]
},
{
"link": "clone-a-github-repo",
"name": "Clone a Github Repo",
"name": "Learn JavaScript While Loops",
"time": 60,
"video": "114612889",
"challengeNumber": 27,
"video": "",
"time": "15 minutes",
"steps": []
"steps": [
"Go to <a href='http://www.codecademy.com/courses/javascript-beginner-en-ASGIv/0/1' target='_blank'>http://www.codecademy.com/courses/javascript-beginner-en-ASGIv/0/1</a> and complete the section.",
"Be sure to also complete this section: <a href='http://www.codecademy.com/courses/javascript-beginner-en-mrTNH-6VIZ9/0/1' target='_blank'>http://www.codecademy.com/courses/javascript-beginner-en-mrTNH-6VIZ9/0/1</a>."
]
},
{
"link": "deploy-an-app-to-heroku",
"name": "Deploy an app to Heroku",
"name": "Learn Control Flow",
"time": 60,
"video": "114612888",
"challengeNumber": 28,
"video": "",
"time": "15 minutes",
"steps": []
"steps": [
"Much of human reasoning can be broken down into what we call Boolean Logic. Lucky for us, computers can think the same way! Let's learn how to instruct our computers by writing \"If Statements\" and \"Else Statements\".",
"We'll also learn some advanced \"Control Flow\" principals, such as ways we can exit loops early.",
"Go to <a href='http://www.codecademy.com/courses/javascript-beginner-en-qDwp0/0/1' target='_blank'>http://www.codecademy.com/courses/javascript-beginner-en-qDwp0/0/1</a> and complete the section.",
"Be sure to also complete this section: <a href='http://www.codecademy.com/courses/javascript-beginner-en-ZA2rb/0/1' target='_blank'>http://www.codecademy.com/courses/javascript-beginner-en-ZA2rb/0/1</a>."
]
},
{
"link": "code-school-real-time-with-node-js-course",
"name": "Code School's Real-time web with Node.JS",
"name": "Build a Contact List",
"time": 60,
"video": "114612887",
"challengeNumber": 29,
"video": "",
"time": "5 hours",
"steps": ["Go to <a href='https://www.codeschool.com/courses/real-time-web-with-node-js' target='_blank'>https://www.codeschool.com/courses/real-time-web-with-node-js</a> and work through the course.", "Note that this course is a paid course, but that if you can find time to finish the course within two consecutive days, you can use Code School's free two-day hall pass to complete it for free here: <a href='https://www.codeschool.com/hall_passes/213f3fedb6b9/claim_shared' target='_blank'>https://www.codeschool.com/hall_passes/213f3fedb6b9/claim_shared</a>"]
"steps": [
"Up to this point, you've been working mostly with strings and numbers. Now we're going to learn more complicated data structures, like \"Arrays\" and \"Objects\".",
"Go to <a href='http://www.codecademy.com/courses/javascript-beginner-en-9Sgpi/0/1' target='_blank'>http://www.codecademy.com/courses/javascript-beginner-en-9Sgpi/0/1</a> and complete the section.",
"Be sure to also complete this section: <a href='' target='_blank'></a>."
]
},
{
"link": "try-mongodb",
"name": "Try MongoDB",
"name": "Build an Address Book",
"time": 60,
"video": "114612885",
"challengeNumber": 30,
"video": "",
"time": "30 minutes",
"steps": ["Go to <a href='http://try.mongodb.org/' target='_blank'>http://try.mongodb.org/</a> and work through their interactive MongoDB tutorial"]
"steps": [
"Let's learn more about objects.",
"Go to <a href='http://www.codecademy.com/courses/spencer-sandbox/0/1' target='_blank'>http://www.codecademy.com/courses/spencer-sandbox/0/1</a> and complete the section.",
"Be sure to also complete this section: <a href='http://www.codecademy.com/courses/javascript-beginner-en-3bmfN/0/1' target='_blank'>http://www.codecademy.com/courses/javascript-beginner-en-3bmfN/0/1</a>."
]
},
{
"link": "explore-your-network-with-the-linkedin-api",
"name": "Explore Your Network with the LinkedIn API",
"name": "Build a Cash Register",
"time": 60,
"video": "114612882",
"challengeNumber": 31,
"video": "",
"time": "2 hours",
"steps": ["Go to <a href='http://developers.linkedin.com/' target='_blank'>http://developers.linkedin.com/</a> and register a LinkedIn app.", "Using the API keys provided by LinkedIn, write a script that pulls your LinkedIn profile and and connections."]
"steps": [
"In this final CodeCademy section, we'll learn even more about JavaScript objects.",
"Go to <a href='http://www.codecademy.com/courses/objects-ii/0/1' target='_blank'>http://www.codecademy.com/courses/objects-ii/0/1</a> and complete this section.",
"Be sure to also complete the final section: <a href='http://www.codecademy.com/courses/close-the-super-makert/0/1' target='_blank'>http://www.codecademy.com/courses/close-the-super-makert/0/1</a>."
]
},
{
"link": "build-your-first-api",
"name": "Build Your First API",
"name": "Get Help The Hacker Way",
"time": 30,
"video": "111500801",
"challengeNumber": 32,
"video": "",
"time": "5 hours",
"steps": []
"steps": [
"Watch the video to learn the RSAP (Read, Search, Ask, Post) methodology for getting help.",
"Try an intelligent Google query that involves JavaScript and filters for this year (since JavaScript changes)",
"Go to <a href='http://stackoverflow.com/' target='_blank'>http://stackoverflow.com/</a> and view the recent questions.",
"Go to <a href='http://webchat.freenode.net/' target='_blank'>http://webchat.freenode.net/</a> and create an IRC account.",
"Join the #JavaScript chat room and introduce yourself as a Free Code Camp student.",
"Now you have several ways of getting help when you're stuck."
]
},
{
"link": "aggregate-data-with-chron-jobs-and-screen-scraping",
"name": "Aggregate Data with Chron Jobs and Screen Scraping",
"name": "Learn Regular Expressions",
"time": 60,
"video": "112547802",
"challengeNumber": 33,
"video": "",
"time": "5 hours",
"steps": []
"steps": [
"You can use a Regular Expression, or \"Regex\", to select specific types of characters in text.",
"Check out <a href='http://www.regexr.com' target='_blank'>http://www.regexr.com</a>. It's a Regular Expression Sandbox.",
"Now go to <a href='http://www.regexone.com' target='_blank'>http://www.regexone.com</a> and complete the tutorial and exercises 1 - 6.",
"Note that you can click \"continue\" to move on to the next step as soon as all the tasks have green checkmarks beside them. You can often do this just by using the wildcard \"dot\" operator, but try to use the techniques that each lesson recommends."
]
},
{
"link": "code-school-shaping-up-with-angular-js-course",
"name": "Codeschool's Shaping up with Angular.js",
"name": "Pair Program on CoderByte",
"time": 60,
"video": "112547802",
"challengeNumber": 34,
"video": "",
"time": "5 hours",
"steps": ["Go to <a href='https://www.codeschool.com//courses/shaping-up-with-angular-js' target='_blank'>hhttps://www.codeschool.com//courses/shaping-up-with-angular-js</a> and complete this free course."]
"steps": [
"OK, we're finally ready to start pair programming!",
"Many people use Skype or Google Hangouts to pair program, but if you talk with professional software engineers, they will tell you that it's not really pair programming unless both people have the ability to use the keyboard and mouse.",
"The most popular tool for pair programming is Screen Hero. Both programmers get their own mouse cursor. Note that Screen Hero isn't free, and isn't yet available for Linux. Screen Hero does come with a 14 day free trial, is free for students, and you can also use it for free if your pair has a 14-day trial or a paid subscription to it. Download Screen Hero here: <a href='https://screenhero.com/download.html' target='_blank'>https://screenhero.com/download.html</a>.",
"If you are using Linux, or if your 14 day free trial for Screen Hero has expired and you don't want to pay $10 per month for it, go to <a href='http://www.freecodecamp.com/pair-program-with-team-viewer.html' target='_blank'>https://www.freecodecamp.com/pair-program-with-team-viewer.html</a> to learn how to use an alternative (but inferior) tool called Team Viewer.",
"Go to the chat room and ask if anyone wants to pair program with you on a CoderByte challenge.",
"If someone is interested, they will be your \"pair\" - the person you pair programming with.",
"Private message your pair and ask for the email address he or she used to register Screen Hero.",
"Add them as a new contact in Screen Hero, then click the monitor-looking button to attempt to share your screen with them.",
"Once the Screen Hero session starts, your screen's margins will glow orange. You are now sharing your screen.",
"Your pair will have his or her own cursor, and will be able to type text on his or her and keyboard.",
"Now it's time to tackle CoderByte.",
"Create a CoderByte account at <a href='http://coderbyte.com/sl/' target='_blank'>http://coderbyte.com/sl/</a>",
"Now go to <a href='http://coderbyte.com/CodingArea/Challenges/#easyChals' target='_blank'>http://coderbyte.com/CodingArea/Challenges/#easyChals</a> and start working through Coderbyte's easy algorithm scripting challenges using JavaScript.",
"When you are finished pair programming, end the session in Screen Hero session.",
"Congratulations! You have completed your first pair programming session.",
"You should pair program with different Code Campers until you've completed all the Easy, Medium and Hard CoderByte challenges. This is a big time investment, but the JavaScript practice you'll get, along with the scripting and algorithm experience, are well worth it!",
"You can complete CoderByte problems while you continue to work through Free Code Camp's challenges.",
"Be sure to pair program on these challenges, and remember to apply the RSAP methodology.",
"Mark this challenge as complete and move on."
]
},
{
"link": "reverse-engineer-snapchat",
"name": "Reverse Engineer Snapchat",
"name": "Learn Relational Database Theory",
"time": 30,
"video": "114629033",
"challengeNumber": 35,
"video": "",
"time": "50 hours",
"steps": []
"steps": [
"Before we learn SQL - and ultimately MongoDB - we need to establish a foundational knowledge of relational database theory. Stanford's Jennifer Widom has put together a short lecture series that does this.",
"Note that these lectures are non-interactive. Don't worry if you don't understand them very well - you will understand these concepts much better once you apply them in the SQL challenge.",
"Go to <a href='https://class.stanford.edu/courses/DB/RDB/SelfPaced/courseware/ch-introduction/seq-vid-introduction/' target='_blank'>https://class.stanford.edu/courses/DB/RDB/SelfPaced/courseware/ch-introduction/seq-vid-introduction/</a> and watch the videos."]
},
{
"link": "reverse-engineer-reddit",
"name": "Reverse Engineer Reddit",
"name": "Pair Program to Query SQL pt 1",
"time": 90,
"video": "114621182",
"challengeNumber": 36,
"video": "",
"time": "50 hours",
"steps": []
"steps": [
"With Stanford's SQL course, you can do SQL queries, right in your browser.",
"Go to <a href='https://class.stanford.edu/courses/DB/SQL/SelfPaced/courseware/ch-sql/seq-exercise-sql_movie_query_core/' target='_blank'>https://class.stanford.edu/courses/DB/SQL/SelfPaced/courseware/ch-sql/seq-exercise-sql_movie_query_core/</a> and all nine of these queries.",
"You may find it helpful to watch the lectures or read the annotated slides.",
"If possible, you should pair program on these."
]
},
{
"link": "reverse-engineer-pintrest",
"name": "Reverse Engineer Pintrest",
"name": "Pair Program to Query SQL pt 2",
"time": 60,
"video": "114621180",
"challengeNumber": 37,
"video": "",
"time": "50 hours",
"steps": []
"steps": [
"Now let's do some additional SQL queries to further cement these concepts in your mind.",
"Go to <a href='https://class.stanford.edu/courses/DB/SQL/SelfPaced/courseware/ch-sql/seq-exercise-sql_social_query_core/' target='_blank'>https://class.stanford.edu/courses/DB/SQL/SelfPaced/courseware/ch-sql/seq-exercise-sql_social_query_core/</a> and answer all 9 of the SQL query questions.",
"You may find it helpful to watch the lectures or read the annotated slides.",
"If possible, you should pair program on these."
]
},
{
"link": "help-a-nonprofit-team-project",
"name": "Help a Nonprofit Team Project",
"name": "Pair Program to Modify SQL pt 1",
"time": 90,
"video": "114621179",
"challengeNumber": 38,
"video": "",
"time": "200 hours",
"steps": []
"steps": [
"Now that you're able to use SQL to query a database, it's time to practice using SQL to modify the database itself.",
"Go to <a href='https://class.stanford.edu/courses/DB/SQL/SelfPaced/courseware/ch-sql/seq-exercise-sql_movie_mod/' target='_blank'>https://class.stanford.edu/courses/DB/SQL/SelfPaced/courseware/ch-sql/seq-exercise-sql_movie_mod/web</a> and answer all 4 of the SQL modification questions.",
"You may find it helpful to watch the lectures or read the annotated slides.",
"If possible, you should pair program on these."
]
},
{
"link": "help-a-nonprofit-solo-project",
"name": "Help a Nonprofit Solo Project",
"name": "Pair Program to Modify SQL pt 2",
"time": 60,
"video": "114621178",
"challengeNumber": 39,
"video": "",
"time": "200 hours",
"steps": []
"steps": [
"Let's answer a couple more SQL modification questions to further practice these concepts.",
"Go to <a href='https://class.stanford.edu/courses/DB/SQL/SelfPaced/courseware/ch-sql/seq-exercise-sql_social_mod/' target='_blank'>https://class.stanford.edu/courses/DB/SQL/SelfPaced/courseware/ch-sql/seq-exercise-sql_social_mod/</a> and answer the first 2 SQL modification questions. You can optionally try to answer the third one, but even Jennifer Widom admitted that it is quite difficult.",
"You may find it helpful to watch the lectures or read the annotated slides.",
"If possible, you should pair program on these."
]
},
{
"link": "crack-the-coding-interview",
"name": "Crack the Coding Interview",
"name": "Learn JSON",
"time": 30,
"video": "114621177",
"challengeNumber": 40,
"video": "",
"time": "20 hours",
"steps": []
"steps": [
"Now that you know a little about how databases store data, let's learn how computers usually share data back and forth over the web. Most modern Application Programming Interfaces (APIs) on the web use JavaScript Object Notation, or JSON.",
"JSON is simple and easy to read. And hey, it's literally how you'd write an object in JavaScript!",
"Go to <a href='https://class.stanford.edu/courses/DB/JSON/SelfPaced/courseware/ch-json_data/seq-quiz-json/' target='_blank'>https://class.stanford.edu/courses/DB/JSON/SelfPaced/courseware/ch-json_data/seq-quiz-json/</a> and er for this course.",
"You may find it helpful to watch the lectures or read the annotated slides."
]
},
{
"name": "Manage Source Code with Git",
"time": 30,
"video": "114635309",
"challengeNumber": 41,
"steps": [
"Revision Control Systems like Git ensure that, no matter how you experiment with your code, you can always roll back your app to a stable previous state.",
"Git is also a great way to share and contribute to open source software.",
"Go to <a href='https://www.codeschool.com/courses/try-git' target='_blank'>https://www.codeschool.com/courses/try-git</a> and complete this short interactive course."
]
},
{
"name": "Get Started with Node.js",
"time": 45,
"video": "114686471",
"challengeNumber": 42,
"steps": [
"Now that we understand some Computer Science, JavaScript programming, and how Databases work, you're ready to move on to Full-stack JavaScript!",
"The first step is to familiarize ourselves Node.js, the JavaScript-based web server that most full-stack JavaScript apps use.",
"Code School has an excellent course on Node.js. Note that this course requires a Code School subscription, but that you can get a free two-day membership to Code School by going to <a href='https://www.codeschool.com/hall_passes/213f3fedb6b9/claim_shared' target='_blank'>https://www.codeschool.com/hall_passes/213f3fedb6b9/claim_shared</a>. The challenges immediately following these Node.js challenges also require a Code School course, so you may want to try to complete all these challenges in one two-day period. Alternatively, you could subscribe to Code School for one month, then take your time in completing these challenges.",
"When you're ready, go to <a href='http://campus.codeschool.com/courses/real-time-web-with-node-js/level/1/video/1' target='_blank'>http://campus.codeschool.com/courses/real-time-web-with-node-js/level/1/video/1</a> and complete the first chapter."
]
},
{
"name": "Try Node.js Events",
"time": 45,
"video": "114684206",
"challengeNumber": 43,
"steps": [
"One of the reasons Node.js is so fast is that it is \"evented\" - it processes events in an asynchronous manner.",
"As a result, Node.js relies on asynchronous callbacks.",
"We'll learn more about how events and callbacks work in this exciting Code School lesson.",
"Go to <a href='http://campus.codeschool.com/courses/real-time-web-with-node-js/level/2/video/1' target='_blank'>http://campus.codeschool.com/courses/real-time-web-with-node-js/level/2/video/1</a> and complete the section."
]
},
{
"name": "Try Node.js Streams",
"time": 45,
"video": "114684209",
"challengeNumber": 44,
"steps": [
"In this Code School lesson, we'll learn about streaming data back and forth between the client to the server.",
"We'll also learn about FS, or File System, an important Node.js module for streaming data.",
"Go to <a href='http://campus.codeschool.com/courses/real-time-web-with-node-js/level/3/video/1' target='_blank'>http://campus.codeschool.com/courses/real-time-web-with-node-js/level/3/video/1</a> and complete the section."
]
},
{
"name": "Learn how Node.js Modules Work",
"time": 45,
"video": "114684213",
"challengeNumber": 45,
"steps": [
"One of the most exciting features of Node.js is NPM - Node Package Manager",
"With NPM, you quickly install any of thousands of Node.js modules into your app, and it will automatically handle the other modules that each module dependends upon downstream.",
"In this lesson, we'll learn how to include these modules in our Node.js app by requiring them as variables.",
"Go to <a href='http://campus.codeschool.com/courses/real-time-web-with-node-js/level/4/video/1' target='_blank'>http://campus.codeschool.com/courses/real-time-web-with-node-js/level/4/video/1</a> and complete the section."]
},
{
"name": "Start an Express.js Server",
"time": 45,
"video": "114684247",
"challengeNumber": 46,
"steps": [
"We'll complete Code School's Express.js course shortly after completing this course, but this challenge will give you a quick tour of the Express.js framework.",
"Go to <a href='http://campus.codeschool.com/courses/real-time-web-with-node-js/level/5/video/1' target='_blank'>http://campus.codeschool.com/courses/real-time-web-with-node-js/level/5/video/1</a> and complete the section."]
},
{
"name": "Use Socket.IO",
"time": 45,
"video": "114684530",
"challengeNumber": 47,
"steps": ["Go to <a href='http://campus.codeschool.com/courses/real-time-web-with-node-js/level/6/video/1' target='_blank'>http://campus.codeschool.com/courses/real-time-web-with-node-js/level/6/video/1</a> and complete the section."]
},
{
"name": "Use Redis to Persist Data",
"time": 45,
"video": "114684532",
"challengeNumber": 48,
"steps": [
"Redis is a key-value store, which is a type of non-relational database. It's one of the fastest and easiest ways to persist data.",
"Even though we'll ultimately use MongoDB and other technologies to persist data, Redis is quite easy to learn and is still worth learning.",
"Go to <a href='http://campus.codeschool.com/courses/real-time-web-with-node-js/level/7/video/1' target='_blank'>http://campus.codeschool.com/courses/real-time-web-with-node-js/level/7/video/1</a> and complete the section."]
},
{
"name": "Dive Deeper into Express.js",
"time": 45,
"video": "114684533",
"challengeNumber": 49,
"steps": [
"Code School has one of the first comprehensive courses on Express.js. Note that this course requires a Code School subscription, but that you can get a free two-day membership to Code School by going to <a href='https://www.codeschool.com/hall_passes/213f3fedb6b9/claim_shared' target='_blank'>https://www.codeschool.com/hall_passes/213f3fedb6b9/claim_shared</a>. If you've already used your Code School two-day membership, go to the Free Code Camp main chat room and ask how you can get some extra time to work through this course. Alternatively, you could subscribe to Code School for one month, then take your time in completing these challenges.",
"Go to <a href='http://campus.codeschool.com/courses/building-blocks-of-express-js/level/1/video/1' target='_blank'>http://campus.codeschool.com/courses/building-blocks-of-express-js/level/1/video/1</a> and complete the section."]
},
{
"name": "Setup Express.js Middleware",
"time": 45,
"video": "114684535",
"challengeNumber": 50,
"steps": [
"Express.js makes extensive use of middleware - a stack of functions that run sequentially in response to a specific event.",
"Let's learn how to incorporate modules and middleware into our Express.js app.",
"Go to <a href='http://campus.codeschool.com/courses/building-blocks-of-express-js/level/2/video/1' target='_blank'>http://campus.codeschool.com/courses/building-blocks-of-express-js/level/2/video/1</a> and complete the section."
]
},
{
"name": "Take Advantage of Parameters",
"time": 45,
"video": "114684537",
"challengeNumber": 51,
"steps": [
"Have you've ever noticed a question mark in your browser's address bar, followed by a series of string? Those are parameters. Parameters are an efficient way to pass information to the server between page loads.",
"We'll learn about parameters, along with a powerful Express.js feature called Dynamic Routing, in this exciting Code School lesson.",
"Go to <a href='http://campus.codeschool.com/courses/building-blocks-of-express-js/level/3/video/1' target='_blank'>http://campus.codeschool.com/courses/building-blocks-of-express-js/level/3/video/1</a> and complete the section."
]
},
{
"name": "Add the Body Parser",
"time": 45,
"video": "114684720",
"challengeNumber": 52,
"steps": [
"Now we'll add the Body Parser module to Express.js. Body Parser is a powerful middleware that helps with routing.",
"We'll also learn more about HTTP Requests, such as Post and Delete.",
"Go to <a href='http://campus.codeschool.com/courses/building-blocks-of-express-js/level/4/video/1' target='_blank'>http://campus.codeschool.com/courses/building-blocks-of-express-js/level/4/video/1</a> and complete the section."
]
},
{
"name": "Configure Routes in Express.js",
"time": 45,
"video": "114684724",
"challengeNumber": 53,
"steps": [
"For this last Code School Express.js challenge, we'll refactor our routes.",
"Go to <a href='http://campus.codeschool.com/courses/building-blocks-of-express-js/level/5/video/1' target='_blank'>http://campus.codeschool.com/courses/building-blocks-of-express-js/level/5/video/1</a> and complete the section."
]
},
{
"name": "Try MongoDB",
"time": 30,
"video": "114685061",
"challengeNumber": 54,
"steps": [
"MongoDB is a popular NoSQL (Not Only SQL) database used by many JavaScript apps.",
"Go to <a href='http://try.mongodb.org/' target='_blank'>http://try.mongodb.org/</a> and work through their interactive MongoDB tutorial."
]
},
{
"name": "Get Started with Angular.js",
"time": 45,
"video": "114684726",
"challengeNumber": 55,
"steps": [
"Code School has a short, free Angular.js course. This will give us a quick tour of Angular.js's mechanics and features.",
"In this course, we'll build a virtual shop entirely in Angular.js.",
"Go to <a href='http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/1/section/1/video/1' target='_blank'>http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/1/section/1/video/1</a> and complete the section."]
},
{
"name": "Apply Angular.js Directives",
"time": 45,
"video": "114684727",
"challengeNumber": 56,
"steps": [
"Directives serve as markers in your HTML. When Angular.js compiles your HTML, it will can alter the behavior of DOM elements based on the directives you've used.",
"Let's learn how these powerful directives work, and how to use them to make your web apps more dynamic",
"Go to <a href='http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/2/section/1/video/1' target='_blank'>http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/2/section/1/video/1</a> and complete the section."
]
},
{
"name": "Power Forms with Angular.js",
"time": 45,
"video": "114684729",
"challengeNumber": 57,
"steps": [
"One area where Angular.js really shines is its powerful web forms.",
"Learn how to create reactive Angular.js forms, including real-time form validation.",
"Go to <a href='http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/3/section/1/video/1' target='_blank'>http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/3/section/1/video/1</a> and complete the section."]
},
{
"name": "Customize Angular.js Directives",
"time": 45,
"video": "114685062",
"challengeNumber": 58,
"steps": [
"Now we'll learn how to modify existing Angular.js directives, and even build directives of your own.",
"Go to <a href='http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/4/section/1/video/1' target='_blank'>http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/4/section/1/video/1</a> and complete the section."]
},
{
"name": "Create Angular.js Services",
"time": 45,
"video": "114685060",
"challengeNumber": 59,
"steps": [
"Services are functions that you can use and reuse throughout your Angular.js app to get things done.",
"We'll learn how to use services in this final Code School Angular.js challenge.",
"Go to <a href='http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/5/section/1/video/1' target='_blank'>http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/5/section/1/video/1</a> and complete the section."]
}
]

View File

@ -4,8 +4,12 @@ var secrets = require('../config/secrets');
var challenges = require('./challenges.json');
mongoose.connect(secrets.db);
Challenge.remove({}, function(err, data){
if (err) console.log(err);
else console.log('Deleted ', data );
Challenge.create(challenges, function(err, data) {
if (err) console.log(err);
else console.log('Saved ', data );
process.exit(0);
});
});

View File

@ -1,4 +1,5 @@
extends layout
block content
h1 About Free Code Camp
h2 this is a placeholder page. Our about us page is coming soon.
include partials/about-us
br
include partials/faq

View File

@ -5,12 +5,12 @@ block content
a.btn.btn-lg.btn-block.btn-google-plus.btn-social(href='/auth/google')
i.fa.fa-google-plus
| Sign in with Google
//a.btn.btn-lg.btn-block.btn-github.btn-social(href='/auth/github')
// i.fa.fa-github
// | Sign in with GitHub
a.btn.btn-lg.btn-block.btn-facebook.btn-social(href='/auth/facebook')
i.fa.fa-facebook
| Sign in with Facebook
//a.btn.btn-lg.btn-block.btn-github.btn-social(href='/auth/github')
// i.fa.fa-github
// | Sign in with GitHub
a.btn.btn-lg.btn-block.btn-linkedin.btn-social(href='/auth/linkedin')
i.fa.fa-linkedin
| Sign in with LinkedIn

View File

@ -33,6 +33,253 @@ block content
span.ion-edit
| Update my profile
h1 Completed Challenges
.col-xs-12
table.table.table-striped
thead
tr
th Challenge
th Date Finished
if cc[0] > 0
tr
td Learn how Free Code Camp Works
td=moment(cc[0], 'X').format("MMM DD, YYYY")
if cc[1] > 0
tr
td Join Our Chat Room
td=moment(cc[1], 'X').format("MMM DD, YYYY")
if cc[2] > 0
tr
td Subscribe to Our Subreddit
td=moment(cc[2], 'X').format("MMM DD, YYYY")
if cc[3] > 0
tr
td Build a Personal Website
td=moment(cc[3], 'X').format("MMM DD, YYYY")
if cc[4] > 0
tr
td Build a Responsive Blog Theme
td=moment(cc[4], 'X').format("MMM DD, YYYY")
if cc[5] > 0
tr
td Build a Small Business Website
td=moment(cc[5], 'X').format("MMM DD, YYYY")
if cc[6] > 0
tr
td Tweak HTML and CSS in CodePen
td=moment(cc[6], 'X').format("MMM DD, YYYY")
if cc[7] > 0
tr
td Build a CSS Robot
td=moment(cc[7], 'X').format("MMM DD, YYYY")
if cc[8] > 0
tr
td Get Started with jQuery
td=moment(cc[8], 'X').format("MMM DD, YYYY")
if cc[9] > 0
tr
td Traverse the DOM
td=moment(cc[9], 'X').format("MMM DD, YYYY")
if cc[10] > 0
tr
td Work with the DOM
td=moment(cc[10], 'X').format("MMM DD, YYYY")
if cc[11] > 0
tr
td Listen for DOM Events
td=moment(cc[11], 'X').format("MMM DD, YYYY")
if cc[12] > 0
tr
td Use jQuery for Styling
td=moment(cc[12], 'X').format("MMM DD, YYYY")
if cc[13] > 0
tr
td Build a MadLibs Game
td=moment(cc[13], 'X').format("MMM DD, YYYY")
if cc[14] > 0
tr
td Discover Chrome's DevTools
td=moment(cc[14], 'X').format("MMM DD, YYYY")
if cc[15] > 0
tr
td Tackle jQuery Exercises
td=moment(cc[15], 'X').format("MMM DD, YYYY")
if cc[16] > 0
tr
td Customize Bootstrap
td=moment(cc[16], 'X').format("MMM DD, YYYY")
if cc[17] > 0
tr
td Inject Animation into CSS
td=moment(cc[17], 'X').format("MMM DD, YYYY")
if cc[18] > 0
tr
td Learn Basic Computer Science
td=moment(cc[18], 'X').format("MMM DD, YYYY")
if cc[19] > 0
tr
td Learn Loops
td=moment(cc[19], 'X').format("MMM DD, YYYY")
if cc[20] > 0
tr
td Learn Computer Hardware
td=moment(cc[20], 'X').format("MMM DD, YYYY")
if cc[21] > 0
tr
td Learn Computer Networking
td=moment(cc[21], 'X').format("MMM DD, YYYY")
if cc[22] > 0
tr
td Learn Boolean Logic
td=moment(cc[22], 'X').format("MMM DD, YYYY")
if cc[23] > 0
tr
td Learn Computer Security
td=moment(cc[23], 'X').format("MMM DD, YYYY")
if cc[24] > 0
tr
td Build an Adventure Game
td=moment(cc[24], 'X').format("MMM DD, YYYY")
if cc[25] > 0
tr
td Build Rock Paper Scissors
td=moment(cc[25], 'X').format("MMM DD, YYYY")
if cc[26] > 0
tr
td Learn JavaScript For Loops
td=moment(cc[26], 'X').format("MMM DD, YYYY")
if cc[27] > 0
tr
td Learn JavaScript While Loops
td=moment(cc[27], 'X').format("MMM DD, YYYY")
if cc[28] > 0
tr
td Learn Control Flow
td=moment(cc[28], 'X').format("MMM DD, YYYY")
if cc[29] > 0
tr
td Build a Contact List
td=moment(cc[29], 'X').format("MMM DD, YYYY")
if cc[30] > 0
tr
td Build an Address Book
td=moment(cc[30], 'X').format("MMM DD, YYYY")
if cc[31] > 0
tr
td Build a Cash Register
td=moment(cc[31], 'X').format("MMM DD, YYYY")
if cc[32] > 0
tr
td Get Help the Hacker Way
td=moment(cc[32], 'X').format("MMM DD, YYYY")
if cc[33] > 0
tr
td Learn Regular Expressions
td=moment(cc[33], 'X').format("MMM DD, YYYY")
if cc[34] > 0
tr
td Pair Program on CoderByte
td=moment(cc[34], 'X').format("MMM DD, YYYY")
if cc[35] > 0
tr
td Learn Relational Database Theory
td=moment(cc[35], 'X').format("MMM DD, YYYY")
if cc[36] > 0
tr
td Pair Program to Query SQL pt 1
td=moment(cc[36], 'X').format("MMM DD, YYYY")
if cc[37] > 0
tr
td Pair Program to Query SQL pt 2
td=moment(cc[37], 'X').format("MMM DD, YYYY")
if cc[38] > 0
tr
td Pair Program to modify SQL pt 1
td=moment(cc[38], 'X').format("MMM DD, YYYY")
if cc[39] > 0
tr
td Pair Program to modify SQL pt 2
td=moment(cc[39], 'X').format("MMM DD, YYYY")
if cc[40] > 0
tr
td Learn JSON
td=moment(cc[40], 'X').format("MMM DD, YYYY")
if cc[41] > 0
tr
td Manage Source Code with Git
td=moment(cc[41], 'X').format("MMM DD, YYYY")
if cc[42] > 0
tr
td Get Started with Node.js
td=moment(cc[42], 'X').format("MMM DD, YYYY")
if cc[43] > 0
tr
td Try Node.js Events
td=moment(cc[43], 'X').format("MMM DD, YYYY")
if cc[44] > 0
tr
td Try Node.js Streams
td=moment(cc[44], 'X').format("MMM DD, YYYY")
if cc[45] > 0
tr
td Learn how Node.js Modules Work
td=moment(cc[45], 'X').format("MMM DD, YYYY")
if cc[46] > 0
tr
td Start an Express.js Server
td=moment(cc[46], 'X').format("MMM DD, YYYY")
if cc[47] > 0
tr
td Use Socket.io
td=moment(cc[47], 'X').format("MMM DD, YYYY")
if cc[48] > 0
tr
td Use Redis to Persist Data
td=moment(cc[48], 'X').format("MMM DD, YYYY")
if cc[49] > 0
tr
td Dive Deeper into Express.js
td=moment(cc[49], 'X').format("MMM DD, YYYY")
if cc[50] > 0
tr
td Set up Express.js Middleware
td=moment(cc[50], 'X').format("MMM DD, YYYY")
if cc[51] > 0
tr
td Take Advantage of Parameters
td=moment(cc[51], 'X').format("MMM DD, YYYY")
if cc[52] > 0
tr
td Add the Body Parser
td=moment(cc[52], 'X').format("MMM DD, YYYY")
if cc[53] > 0
tr
td Configure Routes in Express.js
td=moment(cc[53], 'X').format("MMM DD, YYYY")
if cc[54] > 0
tr
td Try MongoDB
td=moment(cc[54], 'X').format("MMM DD, YYYY")
if cc[55] > 0
tr
td Get Started with Angular.js
td=moment(cc[55], 'X').format("MMM DD, YYYY")
if cc[56] > 0
tr
td Apply Angular.js Directives
td=moment(cc[56], 'X').format("MMM DD, YYYY")
if cc[57] > 0
tr
td Power Forms with Angular.js
td=moment(cc[57], 'X').format("MMM DD, YYYY")
if cc[58] > 0
tr
td Customize Angular.js Directives
td=moment(cc[58], 'X').format("MMM DD, YYYY")
if cc[59] > 0
tr
td Create Angular.js Services
td=moment(cc[59], 'X').format("MMM DD, YYYY")
h3 Danger Zone
button.btn.btn-danger.confirm-deletion
span.ion-trash-b

View File

@ -3,33 +3,26 @@ block content
.row
.col-sm-12.col-md-8.col-xs-12
.panel.panel-primary
.panel-heading Challenge: #{name}
.panel-heading #{name} (takes #{time} minutes)
.panel.panel-body
.challenge-brief
h3.text-center
span.ion-android-clock
span Takes about #{time}
.btn.btn-primary.btn-large.btn-block.start-challenge Start the challenge
.challenge-content.hidden-element
.responsive-container
iframe(src='//player.vimeo.com/video/#{video}', frameborder='0', webkitallowfullscreen='', mozallowfullscreen='', allowfullscreen='')
.embed-responsive.embed-responsive-16by9
iframe.embed-responsive-item(src='//player.vimeo.com/video/#{video}')
h3 Steps:
h4
ol
for step in steps
li!= step
.btn.btn-primary.btn-large.btn-block.completed-challenge I've completed this challenge
.btn.btn-primary.btn-big.btn-block.completed-challenge I've completed this challenge
.ten-pixel-break
.btn.btn-success.btn-large.btn-block.skip-challenge I want to skip this challenge for now
- if (cc[2] > 0)
.panel-footer.text-center
span Need a break? Check out our:&nbsp;
a(href="https://gitter.im/FreeCodeCamp/FreeCodeCamp", target="_blank") Chat Room
| &nbsp;,&nbsp;
a(href="http://blog.freecodecamp.com", target="_blank") Blog
| &nbsp;,&nbsp;
a(href="https://twitter.com/freecodecamp", target="_blank") Twitter Feed
| &nbsp;,&nbsp;or&nbsp;
a(href="https://reddit.com/r/freecodecamp", target="_blank") Subreddit
a(href="http://forum.freecodecamp.com", target="_blank") Forum
| .
#complete-dialog.modal
.modal-dialog.animated.zoomIn.fast-animation

13
views/chromebook.jade Normal file
View File

@ -0,0 +1,13 @@
extends layout
block content
.jumbotron.negative-15.text-center
h1.hug-top Win a Chromebook
h2 Quincy won a Chromebook at a San Francisco HTML5 meetup at Google.
h3 He wants to give it to someone who needs it.
img.image-responsive(src="https://s3.amazonaws.com/freecodecamp/chromebook.jpg" alt="HP Chromebook 11")
script(src='//widget-prime.rafflecopter.com/launch.js')
a#rcwidget_a7khonhd.rcptr(href='http://www.rafflecopter.com/rafl/display/d70901b10/', rel='nofollow', data-raflid='d70901b10', data-theme='classic', data-template='') a Rafflecopter giveaway
.animated.zoomInDown.delay-10
p Finished signing up for the giveaway?
a.btn.btn-cta.signup-btn.btn-primary(href="/login") Start learning to code (it's free)
br

View File

@ -1,18 +1,18 @@
extends layout
block content
.jumbotron
h1.animated.lightSpeedIn.text-center We'll code software solutions for your nonprofit, for free!
.jumbotron.negative-15
h1.animated.lightSpeedIn.text-center.hug-top We'll code software solutions for your nonprofit, for free!
.animated.fadeIn.delay-2.landing-panel-body
h3 Our students will help you build that donor tracking system, community message board, or whatever your organization needs,&nbsp;
strong at no cost.
h3 In exchange, we ask only that you:
h4
ul
li &#8226 meet with them regularly to provide direction and answer questions.
li &#8226 clearly communicate your project's goals: what will this project solve, and for whom?
li &#8226 understand that they will build your project using JavaScript frameworks (as opposed to older or proprietary tools)
li &#8226 keep your expectations high. Our students' goal is to produce work that's up to your standards.
li &#8226 Meet with them regularly to provide direction and answer questions
li &#8226 Clearly communicate your project's goals: what will this project solve, and for whom?
li &#8226 Understand that they will build your project using JavaScript frameworks (as opposed to older or proprietary tools)
li &#8226 Keep your expectations high. Our students' goal is to produce work that's up to your standards
h3 If you're OK with these terms, great! We'd love to help you! Fill in this form and we'll get right back to you.
form.form-horizontal(role='form', method='POST')
input(type='hidden', name='_csrf', value=_csrf)

View File

@ -0,0 +1,6 @@
extends layout
block content
.jumbotron.negative-15.text-center
h1.hug-top Congratulations on finishing the first 100 hours of Free Code Camp!
h2 Now you're ready to continue your learning by building solutions for nonprofits!
h3 Private message Quincy Larson in the Free Code Camp Chatroom and he'll help you get started on your first project.

View File

@ -1,30 +1,30 @@
extends layout
block content
.jumbotron
.jumbotron.negative-15
.text-center
h1.hug-top Code with Us
h2 Let's learn to code by building projects for nonprofits
.row
.col-xs-12.col-sm-12.col-md-3
h3 Get Connected
h3.nowrap Get Connected
.negative-45
span.landing-icon.ion-network.text-primary(title='Get great references and connections to help you get a job')
.negative-45
p.landing-p Join a community of motivated professionals learning to code.
.col-xs-12.col-sm-12.col-md-3
h3 Learn JavaScript
h3.nowrap Learn JavaScript
.negative-45
span.landing-icon.ion-settings.text-primary(title='Learn to code')
.negative-45
p.landing-p Work together on Full Stack JavaScript coding challenges.
.col-xs-12.col-sm-12.col-md-3
h3 Build your Portfolio
h3.nowrap Build your Portfolio
.negative-45
span.landing-icon.ion-social-github.text-primary(title='Build a portfolio of apps for nonprofits')
.negative-45
p.landing-p Build apps that solve real problems for real people.
.col-xs-12.col-sm-12.col-md-3
h3 Help Nonprofits
h3.nowrap Help Nonprofits
.negative-45
span.landing-icon.ion-ios7-people.text-primary(title='Help nonprofits')
.negative-45
@ -38,10 +38,3 @@ block content
include partials/about-us
br
include partials/faq
br
.jumbotron
.text-center
a.btn.btn-cta.signup-btn.cta.btn-primary(href="/login") Start learning to code (it's free)
br
br
a.btn.nonprofit-cta.btn-success(href="/nonprofits") I'm with a nonprofit and want help coding something

View File

@ -0,0 +1,12 @@
extends layout
block content
.jumbotron.negative-15.text-center
h1.hug-top Win a Chromebook
h2 Sign up for Inbox.js - JavaScript challenges in your inbox - and enter to win a Chromebook!
img.image-responsive(src="https://s3.amazonaws.com/freecodecamp/chromebook.jpg" alt="HP Chromebook 11")
script(src='//widget-prime.rafflecopter.com/launch.js')
a#rcwidget_a7khonhd.rcptr(href='http://www.rafflecopter.com/rafl/display/d70901b10/', rel='nofollow', data-raflid='d70901b10', data-theme='classic', data-template='') a Rafflecopter giveaway
.animated.zoomInDown.delay-10
p Finished signing up for the giveaway?
a.btn.btn-cta.signup-btn.btn-primary(href="/login") Start learning to code (it's free)
br

View File

@ -9,7 +9,6 @@ html
meta(http-equiv='X-UA-Compatible', content='IE=edge')
meta(name='viewport', content='width=device-width, initial-scale=1.0')
meta(name='csrf-token', content=_csrf)
title #{title} - Hackathon Starter
!= css('main')
body

View File

@ -0,0 +1,11 @@
extends layout
block content
.jumbotron.negative-15.text-center
h1.hug-top Live Pair Programming
h2 We live pair program every Tuesday from 6 p.m. to 7 p.m. (Pacific Time). Our next session is December 30th.
br
a.btn.btn-cta.signup-btn.btn-primary(href="http://www.crowdcast.io/e/freecodecamp-live_2" target='_blank') Watch our most recent pair programming video
p Got 3 minutes? Start learning to code with us!
br
a.btn.btn-cta.signup-btn.btn-primary(href="/login") Start learning to code (it's free)
br

View File

@ -0,0 +1,27 @@
extends ./layout
block content
.row
.col-sm-12.col-md-8.col-xs-12
.panel.panel-primary
.panel-heading #{name} (takes #{time} minutes)
.panel.panel-body
//.embed-responsive.embed-responsive-16by9
// iframe.embed-responsive-item(src='//player.vimeo.com/video/#{video}')
h3 Steps:
h4
ol
for step in steps
li!= step
a.btn.btn-primary.btn-big.btn-block.completed-challenge(href='/challenges/34') Take me back to the Pair Programming Challenge
.panel-footer.text-center
span Need a break? Check out our:&nbsp;
a(href="https://gitter.im/FreeCodeCamp/FreeCodeCamp", target="_blank") Chat Room
| &nbsp;,&nbsp;
a(href="http://blog.freecodecamp.com", target="_blank") Blog
| &nbsp;,&nbsp;
a(href="https://twitter.com/freecodecamp", target="_blank") Twitter Feed
| &nbsp;,&nbsp;or&nbsp;
a(href="https://reddit.com/r/freecodecamp", target="_blank") Subreddit
| .
.col-sm-12.col-md-4.col-xs-12
include ./partials/challenges

View File

@ -1,99 +1,30 @@
.panel.panel-primary
.panel-heading.landing-panel-heading.text-center We are Free Code Camp
.panel-heading.landing-panel-heading.text-center What Our Code Campers are Saying
.panel-body
.landing-panel-body.text-center
.col-xs-12
h2.text-center Our team
.fifteen-pixel-break
script.
$(function () {
var parent = $("#shuffle");
var divs = parent.children();
while (divs.length) {
parent.append(divs.splice(Math.floor(Math.random() * divs.length), 1)[0]);
}
});
#shuffle
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Nique Devereaux
h4.negative-10.text-nowrap Alliance Builder
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/nique-devereaux.jpg' alt="Nique Devereaux's picture")
h4.text-nowrap Tempe, Arizona
p.negative-10 "Gamer ever since Pong. Coder ever since I discovered how much I enjoy telling machines what to do."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Berkeley Martinez
h4.negative-10.text-nowrap JavaScript Engineer
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/berkeley-martinez.jpg' alt="Berkeley Martinez's picture")
h4.text-nowrap San Francisco, California
p.negative-10 "Former mechanical engineer. Coding is pure creation. I can fly, but only once."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Mychael Zuniga
h4.negative-10.text-nowrap JavaScript Engineer
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/mychael-zuniga.jpg' alt="Mychael Zuniga's picture")
h4.text-nowrap San Diego, California
p.negative-10 "I'm a college student who turned to code as an avenue for creative expression. I love political science and economics."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Brian Ball
h4.negative-10.text-nowrap Product Manager
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/brian-ball.jpg' alt="Brian Ball's picture")
h4.text-nowrap San Francisco, California
p.negative-10 "I build products people use. I'm fascinated by how fast the internet is changing the world."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Darryl Dixon
h4.negative-10.text-nowrap Community Builder
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/darryl-dixon.jpg' alt="Darryl Dixon's picture")
h4.text-nowrap Newport News, Virginia
p.negative-10 "I'm a self-taught graphic designer. I'm learning web development here and want you to learn with me."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Kathy O'Driscoll
h4.negative-10.text-nowrap Community Builder
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/kathy-odriscoll.jpg' alt="Kathy O'Driscoll's picture")
h4.text-nowrap Los Angeles, California
p.negative-10 "Mother and grandmother. All my life I've dabbled in getting machines to do my bidding. Now it's becoming my career."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Ryan Malm
h4.negative-10.text-nowrap Visual Designer
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/ryan-malm.jpg' alt="Ryan Malm's picture")
h4.text-nowrap Omaha, Nebraska
p.negative-10 "I love origami, piano, and playing minecraft with my kids. My JavaScript grows stronger every day."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Charles Watson
h4.negative-10.text-nowrap iOS Engineer
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/charles-watson.jpg' alt="Charles Watson's picture")
h4.text-nowrap Minneapolis, Minnesota
p.negative-10 "I skipped college. I build iOS apps. I love the obstacles and puzzles that coding presents me."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Quincy Larson
h4.negative-10.text-nowrap Instructional Designer
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/quincy-larson.jpg' alt="Quincy Larson's picture")
h4.text-nowrap San Francisco, California
p.negative-10 "I worked as a school director in China before learning to code. It's clear that everyone can - and should - learn to code."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Mark Howard
h4.negative-10.text-nowrap Digital Marketer
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/mark-howard.jpg' alt="Mark Howard's picture")
h4.text-nowrap San Diego, California
p.negative-10 "I enjoy helping people, at scale. Code is the best way to do that."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Nathan Leniz
h4.negative-10.text-nowrap Community Builder
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/nathan-leniz.jpg' alt="Nathan Leniz's picture")
h4.text-nowrap Seoul, South Korea
p.negative-10 "I learned to code for the games, and stayed for the algorithms."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Jason Rueckert
h4.negative-10.text-nowrap Live Content Manager
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/jason-rueckert.jpg' alt="Jason Rueckert's picture")
h4.text-nowrap Seattle, Washington
p.negative-10 "My high school job was testing basketball shoes for Nike. I learned code to work smarter, not harder. I have no thyroid."
.col-xs-12
h2.text-center Our chat room
.embed-responsive.embed-responsive-4by3
iframe(style="display: none;" onload="this.style.display='block';" src="https://gitter.im/FreeCodeCamp/FreeCodeCamp")
.col-xs-12
h2.text-center What our students are saying
.col-xs-12
.masonry-row
.masonry-block
.masonry-relative
blockquote.twitter-tweet(lang='en')
p
| My boss was impressed by the troubleshooting I learned through
a(href='https://twitter.com/FreeCodeCamp') @FreeCodeCamp
| and I just got a raise! Sweet!
a(href='http://t.co/om7DqQoyAr') http://t.co/om7DqQoyAr
| &mdash; Alec Hansen (@AlecMHansen)
a(href='https://twitter.com/AlecMHansen/status/544975882771648512') December 16, 2014
script(async='', src='//platform.twitter.com/widgets.js', charset='utf-8')
.masonry-block
.masonry-relative
blockquote.twitter-tweet(lang='en')
p
a(href='https://twitter.com/DrivenByTatiana') @DrivenByTatiana
a(href='https://twitter.com/FreeCodeCamp') @FreeCodeCamp
| - Cool. I&apos;m currently working thru it to improve my JavaScript. The community is very welcoming! &#x1F604;
| &mdash; a touch of curar&eacute; (@cynthialanel)
a(href='https://twitter.com/cynthialanel/status/544768565467807744') December 16, 2014
script(async='', src='//platform.twitter.com/widgets.js', charset='utf-8')
.masonry-block
.masonry-relative
blockquote.twitter-tweet(lang='en')
@ -220,21 +151,6 @@
| &mdash; Angel Jose (@ajose01)
a(href='https://twitter.com/ajose01/status/532729251754033152') November 13, 2014
script(async='', src='//platform.twitter.com/widgets.js', charset='utf-8')
.masonry-block
.masonry-relative
blockquote.twitter-tweet(lang='en')
p
| no school today: with
a(href='https://twitter.com/BlueninjaSF') @blueninjaSF
| at
a(href='https://twitter.com/AWSloft') @awsloft
| working on
a(href='https://twitter.com/FreeCodeCamp') @freecodecamp
| - first website. check!
a(href='http://t.co/yJ8ycEti9B') pic.twitter.com/yJ8ycEti9B
| &mdash; brian ball (@brianball)
a(href='https://twitter.com/brianball/status/532243325290827777') November 11, 2014
script(async='', src='//platform.twitter.com/widgets.js', charset='utf-8')
.masonry-block
.masonry-relative
blockquote.twitter-tweet(lang='en')
@ -250,3 +166,91 @@
| &mdash; Deb Simon-Heinfeld (@debBlufftonAGS)
a(href='https://twitter.com/debBlufftonAGS/status/532198725129867265') November 11, 2014
script(async='', src='//platform.twitter.com/widgets.js', charset='utf-8')
.panel.panel-primary
.panel-heading.landing-panel-heading.text-center Our Team of Volunteers
.panel-body
.landing-panel-body.text-center
.col-xs-12
script.
$(function () {
var parent = $("#shuffle");
var divs = parent.children();
while (divs.length) {
parent.append(divs.splice(Math.floor(Math.random() * divs.length), 1)[0]);
}
});
#shuffle
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Nique Devereaux
h4.negative-10.text-nowrap Alliance Builder
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/nique-devereaux.jpg' alt="Nique Devereaux's picture")
h4.text-nowrap Tempe, Arizona
p.negative-10 "Gamer ever since Pong. Coder ever since I discovered how much I enjoy telling machines what to do."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Berkeley Martinez
h4.negative-10.text-nowrap JavaScript Engineer
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/berkeley-martinez.jpg' alt="Berkeley Martinez's picture")
h4.text-nowrap San Francisco, California
p.negative-10 "Former mechanical engineer. Coding is pure creation. I can fly, but only once."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Mychael Zuniga
h4.negative-10.text-nowrap JavaScript Engineer
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/mychael-zuniga.jpg' alt="Mychael Zuniga's picture")
h4.text-nowrap San Diego, California
p.negative-10 "I'm a college student who turned to code as an avenue for creative expression. I love political science and economics."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Brian Ball
h4.negative-10.text-nowrap Product Manager
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/brian-ball.jpg' alt="Brian Ball's picture")
h4.text-nowrap San Francisco, California
p.negative-10 "I build products people use. I'm fascinated by how fast the internet is changing the world."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Darryl Dixon
h4.negative-10.text-nowrap Community Builder
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/darryl-dixon.jpg' alt="Darryl Dixon's picture")
h4.text-nowrap Newport News, Virginia
p.negative-10 "I'm a self-taught graphic designer. I'm learning web development here and want you to learn with me."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Kathy O'Driscoll
h4.negative-10.text-nowrap Community Builder
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/kathy-odriscoll.jpg' alt="Kathy O'Driscoll's picture")
h4.text-nowrap Los Angeles, California
p.negative-10 "Mother and grandmother. All my life I've dabbled in getting machines to do my bidding. Now it's becoming my career."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Ryan Malm
h4.negative-10.text-nowrap Visual Designer
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/ryan-malm.jpg' alt="Ryan Malm's picture")
h4.text-nowrap Omaha, Nebraska
p.negative-10 "I love origami, piano, and playing minecraft with my kids. My JavaScript grows stronger every day."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Charles Watson
h4.negative-10.text-nowrap iOS Engineer
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/charles-watson.jpg' alt="Charles Watson's picture")
h4.text-nowrap Minneapolis, Minnesota
p.negative-10 "I skipped college. I build iOS apps. I love the obstacles and puzzles that coding presents me."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Quincy Larson
h4.negative-10.text-nowrap Instructional Designer
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/quincy-larson.jpg' alt="Quincy Larson's picture")
h4.text-nowrap San Francisco, California
p.negative-10 "I worked as a school director in China before learning to code. It's clear that everyone can - and should - learn to code."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Mark Howard
h4.negative-10.text-nowrap Digital Marketer
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/mark-howard.jpg' alt="Mark Howard's picture")
h4.text-nowrap San Diego, California
p.negative-10 "I enjoy helping people, at scale. Code is the best way to do that."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Nathan Leniz
h4.negative-10.text-nowrap Community Builder
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/nathan-leniz.jpg' alt="Nathan Leniz's picture")
h4.text-nowrap Seoul, South Korea
p.negative-10 "I learned to code for the games, and stayed for the algorithms."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Jason Rueckert
h4.negative-10.text-nowrap Live Content Manager
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/jason-rueckert.jpg' alt="Jason Rueckert's picture")
h4.text-nowrap Seattle, Washington
p.negative-10 "My high school job was testing basketball shoes for Nike. I learned code to work smarter, not harder. I have no thyroid."

View File

@ -2,135 +2,185 @@
.panel-heading Challenges
.panel-body
ol(start='0')
h4 Web Design
li
a(href="/challenges/0", class="#{ cc.indexOf(0) > -1 ? 'strikethrough' : '' }") A One-minute Introduction to Free Code Camp
| &nbsp; (1 min)
a(href="/challenges/0", class="#{ cc[0] > 0 ? 'strikethrough' : '' }") Learn how Free Code Camp Works
| &nbsp; (2 minutes)
li
a(href="/challenges/1", class="#{ cc.indexOf(1) > -1 ? 'strikethrough' : '' }") Enter the Free Code Camp Chat Room
| &nbsp; (10 mins)
a(href="/challenges/1", class="#{ cc[1] > 0 ? 'strikethrough' : '' }") Join Our Chat Room
| &nbsp; (5 minutes)
li
a(href="/challenges/2", class="#{ cc.indexOf(2) > -1 ? 'strikethrough' : '' }") Create a Website and Deploy it to the Internet
| &nbsp; (5 mins)
a(href="/challenges/2", class="#{ cc[2] > 0 ? 'strikethrough' : '' }") Subscribe to Our Subreddit
| &nbsp; (5 minutes)
li
a(href="/challenges/3", class="#{ cc.indexOf(3) > -1 ? 'strikethrough' : '' }") Install Github's Atom Text Editor
| &nbsp; (5 mins)
a(href="/challenges/3", class="#{ cc[3] > 0 ? 'strikethrough' : '' }") Build a Personal Website
| &nbsp; (60 minutes)
li
a(href="/challenges/4", class="#{ cc.indexOf(4) > -1 ? 'strikethrough' : '' }") Modify and Redeploy Your Website
| &nbsp; (5 mins)
a(href="/challenges/4", class="#{ cc[4] > 0 ? 'strikethrough' : '' }") Build a Responsive Blog Theme
| &nbsp; (60 minutes)
li
a(href="/challenges/5", class="#{ cc.indexOf(5) > -1 ? 'strikethrough' : '' }") Add Dynamic Content to your Website
| &nbsp; (10 mins)
a(href="/challenges/5", class="#{ cc[5] > 0 ? 'strikethrough' : '' }") Build a Small Business Website
| &nbsp; (60 minutes)
li
a(href="/challenges/6", class="#{ cc.indexOf(6) > -1 ? 'strikethrough' : '' }") Codecademy's HTML & CSS track
| &nbsp; (7 hrs)
a(href="/challenges/6", class="#{ cc[6] > 0 ? 'strikethrough' : '' }") Tweak HTML and CSS in CodePen
| &nbsp; (10 minutes)
li
a(href="/challenges/7", class="#{ cc.indexOf(7) > -1 ? 'strikethrough' : '' }") Experiment with HTML and CSS in CodePen
| &nbsp; (10 mins)
a(href="/challenges/7", class="#{ cc[7] > 0 ? 'strikethrough' : '' }") Build a CSS Robot
| &nbsp; (60 minutes)
li
a(href="/challenges/8", class="#{ cc.indexOf(8) > -1 ? 'strikethrough' : '' }") Codecademy's jQuery track
| &nbsp; (3 hrs)
a(href="/challenges/8", class="#{ cc[8] > 0 ? 'strikethrough' : '' }") Get Started with jQuery
| &nbsp; (30 minutes)
li
a(href="/challenges/9", class="#{ cc.indexOf(9) > -1 ? 'strikethrough' : '' }") Code School's Try jQuery
| &nbsp; (4 hrs)
a(href="/challenges/9", class="#{ cc[9] > 0 ? 'strikethrough' : '' }") Traverse the DOM
| &nbsp; (30 minutes)
li
a(href="/challenges/10", class="#{ cc.indexOf(10) > -1 ? 'strikethrough' : '' }") Code School's Discover DevTools
| &nbsp; (2 hrs)
a(href="/challenges/10", class="#{ cc[10] > 0 ? 'strikethrough' : '' }") Work with the DOM
| &nbsp; (30 minutes)
li
a(href="/challenges/11", class="#{ cc.indexOf(11) > -1 ? 'strikethrough' : '' }") jQuery Exercises
| &nbsp; (1 hr)
a(href="/challenges/11", class="#{ cc[11] > 0 ? 'strikethrough' : '' }") Listen for DOM Events
| &nbsp; (30 minutes)
li
a(href="/challenges/12", class="#{ cc.indexOf(12) > -1 ? 'strikethrough' : '' }") Customize Bootstrap with Bootswatch
| &nbsp; (10 mins)
a(href="/challenges/12", class="#{ cc[12] > 0 ? 'strikethrough' : '' }") Use jQuery for Styling
| &nbsp; (30 minutes)
li
a(href="/challenges/13", class="#{ cc.indexOf(13) > -1 ? 'strikethrough' : '' }") Inject Life with CSS Transformations
| &nbsp; (15 mins)
h4 Computer Science and JavaScript
a(href="/challenges/13", class="#{ cc[13] > 0 ? 'strikethrough' : '' }") Build a MadLibs Game
| &nbsp; (60 minutes)
li
a(href="/challenges/14", class="#{ cc.indexOf(14) > -1 ? 'strikethrough' : '' }") Codecademy's JavaScript track
| &nbsp; (10 hrs)
a(href="/challenges/14", class="#{ cc[14] > 0 ? 'strikethrough' : '' }") Discover Chrome's DevTools
| &nbsp; (90 minutes)
li
a(href="/challenges/15", class="#{ cc.indexOf(15) > -1 ? 'strikethrough' : '' }") Stanford's Introduction to Computer Science
| &nbsp; (24 hrs)
a(href="/challenges/15", class="#{ cc[15] > 0 ? 'strikethrough' : '' }") Tackle jQuery Exercises
| &nbsp; (60 minutes)
li
a(href="/challenges/16", class="#{ cc.indexOf(16) > -1 ? 'strikethrough' : '' }") Get Help The Hacker Way with RSAP
| &nbsp; (30 mins)
a(href="/challenges/16", class="#{ cc[16] > 0 ? 'strikethrough' : '' }") Customize Bootstrap
| &nbsp; (10 minutes)
li
a(href="/challenges/17", class="#{ cc.indexOf(17) > -1 ? 'strikethrough' : '' }") Learn Regular Expressions
| &nbsp; (1 hr)
a(href="/challenges/17", class="#{ cc[17] > 0 ? 'strikethrough' : '' }") Inject Animation into CSS
| &nbsp; (15 minutes)
li
a(href="/challenges/18", class="#{ cc.indexOf(18) > -1 ? 'strikethrough' : '' }") Start Your First Pair Programming Session
| &nbsp; (30 mins | Pair)
a(href="/challenges/18", class="#{ cc[18] > 0 ? 'strikethrough' : '' }") Learn Basic Computer Science
| &nbsp; (120 minutes)
li
a(href="/challenges/19", class="#{ cc.indexOf(19) > -1 ? 'strikethrough' : '' }") Easy Algorithm Scripting Challenges on Coderbyte
| &nbsp; (15 hrs | Pair)
a(href="/challenges/19", class="#{ cc[19] > 0 ? 'strikethrough' : '' }") Learn Loops
| &nbsp; (120 minutes)
li
a(href="/challenges/20", class="#{ cc.indexOf(20) > -1 ? 'strikethrough' : '' }") Stanford's Relational Databases Mini-course
| &nbsp; (1 hr)
a(href="/challenges/20", class="#{ cc[20] > 0 ? 'strikethrough' : '' }") Learn Computer Hardware
| &nbsp; (120 minutes)
li
a(href="/challenges/21", class="#{ cc.indexOf(21) > -1 ? 'strikethrough' : '' }") Stanford's SQL Mini-course
| &nbsp; (4 hrs | Pair)
a(href="/challenges/21", class="#{ cc[21] > 0 ? 'strikethrough' : '' }") Learn Computer Networking
| &nbsp; (120 minutes)
li
a(href="/challenges/22", class="#{ cc.indexOf(22) > -1 ? 'strikethrough' : '' }") Stanford's JSON Mini-course
| &nbsp; (1 hrs | Pair)
a(href="/challenges/22", class="#{ cc[22] > 0 ? 'strikethrough' : '' }") Learn Boolean Logic
| &nbsp; (120 minutes)
li
a(href="/challenges/23", class="#{ cc.indexOf(23) > -1 ? 'strikethrough' : '' }") Medium Algorithm Scripting Challenges on Coderbyte
| &nbsp; (15 hrs | Pair)
a(href="/challenges/23", class="#{ cc[23] > 0 ? 'strikethrough' : '' }") Learn Computer Security
| &nbsp; (120 minutes)
li
a.disabled(href="/challenges/24", class="#{ cc.indexOf(24) > -1 ? 'strikethrough' : '' }") Build an Interview Question Machine
| &nbsp; (5 hrs | Pair)
a(href="/challenges/24", class="#{ cc[24] > 0 ? 'strikethrough' : '' }") Build an Adventure Game
| &nbsp; (60 minutes)
li
a.disabled(href="/challenges/25", class="#{ cc.indexOf(25) > -1 ? 'strikethrough' : '' }") Build a Text-based Adventure
| &nbsp; (5 hrs | Pair)
a(href="/challenges/25", class="#{ cc[25] > 0 ? 'strikethrough' : '' }") Build Rock Paper Scissors
| &nbsp; (60 minutes)
li
a.disabled(href="/challenges/26", class="#{ cc.indexOf(26) > -1 ? 'strikethrough' : '' }") Hard Algorithm Scripting Challenges on Coderbyte
| &nbsp; (15 hrs | Pair)
h4 Full Stack JavaScript Development
a(href="/challenges/26", class="#{ cc[26] > 0 ? 'strikethrough' : '' }") Learn JavaScript For Loops
| &nbsp; (60 minutes)
li
a.disabled(href="/challenges/27", class="#{ cc.indexOf(27) > -1 ? 'strikethrough' : '' }") Code School's Try Git
| &nbsp; (30 mins)
a(href="/challenges/27", class="#{ cc[27] > 0 ? 'strikethrough' : '' }") Learn JavaScript While Loops
| &nbsp; (60 minutes)
li
a.disabled(href="/challenges/28", class="#{ cc.indexOf(28) > -1 ? 'strikethrough' : '' }") Install Node.js
| &nbsp; (1 hr)
a(href="/challenges/28", class="#{ cc[28] > 0 ? 'strikethrough' : '' }") Learn Control Flow
| &nbsp; (60 minutes)
li
a.disabled(href="/challenges/29", class="#{ cc.indexOf(29) > -1 ? 'strikethrough' : '' }") Clone a Github Repo
| &nbsp; (15 mins)
a(href="/challenges/29", class="#{ cc[29] > 0 ? 'strikethrough' : '' }") Build a Contact List
| &nbsp; (60 minutes)
li
a.disabled(href="/challenges/30", class="#{ cc.indexOf(30) > -1 ? 'strikethrough' : '' }") Deploy an app to Heroku
| &nbsp; (15 mins)
a(href="/challenges/30", class="#{ cc[30] > 0 ? 'strikethrough' : '' }") Build an Address Book
| &nbsp; (60 minutes)
li
a.disabled(href="/challenges/31", class="#{ cc.indexOf(31) > -1 ? 'strikethrough' : '' }") Code School's Real-time web with Node.JS
| &nbsp; (5 hrs)
a(href="/challenges/31", class="#{ cc[31] > 0 ? 'strikethrough' : '' }") Build a Cash Register
| &nbsp; (60 minutes)
li
a.disabled(href="/challenges/32", class="#{ cc.indexOf(32) > -1 ? 'strikethrough' : '' }") Try MongoDB
| &nbsp; (30 mins)
a(href="/challenges/32", class="#{ cc[32] > 0 ? 'strikethrough' : '' }") Get Help the Hacker Way
| &nbsp; (30 minutes)
li
a.disabled(href="/challenges/33", class="#{ cc.indexOf(33) > -1 ? 'strikethrough' : '' }") Explore your Network with the LinkedIn API
| &nbsp; (1 hr)
a(href="/challenges/33", class="#{ cc[33] > 0 ? 'strikethrough' : '' }") Learn Regular Expressions
| &nbsp; (60 minutes)
li
a.disabled(href="/challenges/34", class="#{ cc.indexOf(34) > -1 ? 'strikethrough' : '' }") Build your first API
| &nbsp; (10 hrs | Pair)
a(href="/challenges/34", class="#{ cc[34] > 0 ? 'strikethrough' : '' }") Pair Program on CoderByte
| &nbsp; (60 minutes)
li
a.disabled(href="/challenges/35", class="#{ cc.indexOf(35) > -1 ? 'strikethrough' : '' }") Aggregate Data with Chron Jobs and Screen Scraping
| &nbsp; (10 hrs | Pair)
a(href="/challenges/35", class="#{ cc[35] > 0 ? 'strikethrough' : '' }") Learn Relational Database Theory
| &nbsp; (30 minutes)
li
a.disabled(href="/challenges/36", class="#{ cc.indexOf(36) > -1 ? 'strikethrough' : '' }") Code School's Shaping up with Angular.JS
| &nbsp; (5 hrs)
a(href="/challenges/36", class="#{ cc[36] > 0 ? 'strikethrough' : '' }") Pair Program to Query SQL pt 1
| &nbsp; (90 minutes)
li
a.disabled(href="/challenges/37", class="#{ cc.indexOf(37) > -1 ? 'strikethrough' : '' }") Reverse Engineer SnapChat
| &nbsp; (50 hrs | Pair)
a(href="/challenges/37", class="#{ cc[37] > 0 ? 'strikethrough' : '' }") Pair Program to Query SQL pt 2
| &nbsp; (60 minutes)
li
a.disabled(href="/challenges/38", class="#{ cc.indexOf(38) > -1 ? 'strikethrough' : '' }") Reverse Engineer Reddit
| &nbsp; (50 hrs | Pair)
a(href="/challenges/38", class="#{ cc[38] > 0 ? 'strikethrough' : '' }") Pair Program to modify SQL pt 1
| &nbsp; (90 minutes)
li
a.disabled(href="/challenges/39", class="#{ cc.indexOf(39) > -1 ? 'strikethrough' : '' }") Reverse Engineer Pintrest
| &nbsp; (50 hrs | Pair)
a(href="/challenges/39", class="#{ cc[39] > 0 ? 'strikethrough' : '' }") Pair Program to modify SQL pt 2
| &nbsp; (60 minutes)
li
a.disabled(href="/challenges/40", class="#{ cc.indexOf(40) > -1 ? 'strikethrough' : '' }") Help a Nonprofit: Team Project
| &nbsp; (150 hrs | Pair)
a(href="/challenges/40", class="#{ cc[40] > 0 ? 'strikethrough' : '' }") Learn JSON
| &nbsp; (30 minutes)
li
a.disabled(href="/challenges/41", class="#{ cc.indexOf(41) > -1 ? 'strikethrough' : '' }") Help a Nonprofit: Solo Project
| &nbsp; (150 hrs | Pair)
a(href="/challenges/41", class="#{ cc[41] > 0 ? 'strikethrough' : '' }") Manage Source Code with Git
| &nbsp; (30 minutes)
li
a.disabled(href="/challenges/42", class="#{ cc.indexOf(42) > -1 ? 'strikethrough' : '' }") Crack the Coding Interview
| &nbsp; (5 hrs)
a(href="/challenges/42", class="#{ cc[42] > 0 ? 'strikethrough' : '' }") Get Started with Node.js
| &nbsp; (45 minutes)
li
a(href="/challenges/43", class="#{ cc[43] > 0 ? 'strikethrough' : '' }") Try Node.js Events
| &nbsp; (45 minutes)
li
a(href="/challenges/44", class="#{ cc[44] > 0 ? 'strikethrough' : '' }") Try Node.js Streams
| &nbsp; (45 minutes)
li
a(href="/challenges/45", class="#{ cc[45] > 0 ? 'strikethrough' : '' }") Learn how Node.js Modules Work
| &nbsp; (45 minutes)
li
a(href="/challenges/46", class="#{ cc[46] > 0 ? 'strikethrough' : '' }") Start an Express.js Server
| &nbsp; (45 minutes)
li
a(href="/challenges/47", class="#{ cc[47] > 0 ? 'strikethrough' : '' }") Use Socket.io
| &nbsp; (45 minutes)
li
a(href="/challenges/48", class="#{ cc[48] > 0 ? 'strikethrough' : '' }") Use Redis to Persist Data
| &nbsp; (45 minutes)
li
a(href="/challenges/49", class="#{ cc[49] > 0 ? 'strikethrough' : '' }") Dive Deeper into Express.js
| &nbsp; (45 minutes)
li
a(href="/challenges/50", class="#{ cc[50] > 0 ? 'strikethrough' : '' }") Set up Express.js Middleware
| &nbsp; (45 minutes)
li
a(href="/challenges/51", class="#{ cc[51] > 0 ? 'strikethrough' : '' }") Take Advantage of Parameters
| &nbsp; (45 minutes)
li
a(href="/challenges/52", class="#{ cc[52] > 0 ? 'strikethrough' : '' }") Add the Body Parser
| &nbsp; (45 minutes)
li
a(href="/challenges/53", class="#{ cc[53] > 0 ? 'strikethrough' : '' }") Configure Routes in Express.js
| &nbsp; (45 minutes)
li
a(href="/challenges/54", class="#{ cc[54] > 0 ? 'strikethrough' : '' }") Try MongoDB
| &nbsp; (30 minutes)
li
a(href="/challenges/55", class="#{ cc[55] > 0 ? 'strikethrough' : '' }") Get Started with Angular.js
| &nbsp; (45 minutes)
li
a(href="/challenges/56", class="#{ cc[56] > 0 ? 'strikethrough' : '' }") Apply Angular.js Directives
| &nbsp; (45 minutes)
li
a(href="/challenges/57", class="#{ cc[57] > 0 ? 'strikethrough' : '' }") Power Forms with Angular.js
| &nbsp; (45 minutes)
li
a(href="/challenges/58", class="#{ cc[58] > 0 ? 'strikethrough' : '' }") Customize Angular.js Directives
| &nbsp; (45 minutes)
li
a(href="/challenges/59", class="#{ cc[59] > 0 ? 'strikethrough' : '' }") Create Angular.js Services
| &nbsp; (45 minutes)
a.btn.btn-primary(href="/done-with-first-100-hours", class="#{ cc[59] > 0 ? '' : 'disabled' }") I've finished all Free Code Camp challenges and all the Easy and Medium CoderByte Challenges

View File

@ -34,6 +34,7 @@
ul
p.landing-p It takes about 1,000 hours of coding to develop the skills you'll need to get an entry level software engineering job. Many in-person coding bootcamps jam all this into 12 weeks of intensive study. Free Code Camp is fully online, and there will always be other people at your skill level that you can pair program with, so you can learn at your own pace. Here are some example coding schedules:
table.table
thead
th Time budgeted
th Hours per week
th Weeks to complete
@ -70,3 +71,12 @@
h2 Does Free Code Camp have an application process?
ul
p.landing-p Unlike most bootcamps, anyone can study at Free Code Camp. We're not going to tell you that you can't become a software engineer. We believe the only person who should be able to tell you that is you. If you perservere, and keep working through our challenges and nonprofits' projects, you will become an employable software engineer.
br
br
.text-center
a.btn.btn-cta.signup-btn.cta.btn-primary(href="/login") Start learning to code (it's free)
br
br
a.btn.nonprofit-cta.btn-success(href="/nonprofits") I'm with a nonprofit and want help coding something
br
br

View File

@ -3,25 +3,26 @@ meta(http-equiv='X-UA-Compatible', content='IE=edge')
meta(name='viewport', content='width=device-width, initial-scale=1.0')
meta(name='csrf-token', content=_csrf)
meta(name='keywords', content='learn to code, learn how to code, code, coding, software engineer, software developer, mean stack, pair programming, node.js, angular.js, express.js, mongoDB, coding bootcamp')
meta(content="Learn to code at freecodecamp.com. Free Code Camp is a free coding bootcamp for busy people. Learn JavaScript, build a portfolio, and get great references - all by helping nonprofits!", property="og:title")
meta(content="Free Code Camp is a community of busy people learning to code by collaborating on projects for nonprofits. Learn Full-stack JavaScript, build a portfolio, and get great references with our coding bootcamp.", property="og:title")
meta(content="FreeCodeCamp", property="og:site_name")
meta(name='twitter:widgets:csp', content='on')
meta(name='p:domain_verify', content='d0bc047a482c03c24f1168004c2a216a')
meta(content="http://www.freecodecamp.com", property="og:url")
meta(content="Learn to code at freecodecamp.com. Free Code Camp is a free coding bootcamp for busy people. Learn JavaScript, build a portfolio, and get great references - all by helping nonprofits!", property="og:description")
meta(content="Free Code Camp is a community of busy people learning to code by collaborating on projects for nonprofits. Learn Full-stack JavaScript, build a portfolio, and get great references with our coding bootcamp.", property="og:description")
meta(content="https://pbs.twimg.com/profile_images/522961310212833280/XE6vGAaO.jpeg", property="og:image")
meta(content="article", property="og:type")
meta(content="https://www.facebook.com/freecodecamp", property="article:publisher")
meta(content="Responsive", property="article:section")
//meta(content="44011818", property="fb:admins")
//Google
meta(content="Learn to code at freecodecamp.com. Free Code Camp is a free coding bootcamp for busy people. Learn JavaScript, build a portfolio, and get great references - all by helping nonprofits!", name="description")
meta(content="Free Code Camp is a community of busy people learning to code by collaborating on projects for nonprofits. Learn Full-stack JavaScript, build a portfolio, and get great references with our coding bootcamp.", name="description")
link(href="https://plus.google.com/114148836969274586544", rel="author")
//Twitter
meta(content="freecodecamp", name="twitter:creator")
meta(content="http://www.freecodecamp.com", name="twitter:url")
meta(content="freecodecamp", name="twitter:site")
//meta(content="summary_large_image", name="twitter:card")
meta(content="Learn to code at freecodecamp.com. Free Code Camp is a free coding bootcamp for busy people. Learn JavaScript, build a portfolio, and get great references - all by helping nonprofits!", name="twitter:title")
meta(content="Free Code Camp is a community of busy people learning to code by collaborating on projects for nonprofits. Learn Full-stack JavaScript, build a portfolio, and get great references with our coding bootcamp.", name="twitter:title")
meta(content="https://pbs.twimg.com/profile_images/522961310212833280/XE6vGAaO.jpeg", name="twitter:image:src")
meta(content="Learn to code at freecodecamp.com. Free Code Camp is a free coding bootcamp for busy people. Learn JavaScript, build a portfolio, and get great references - all by helping nonprofits!", name="twitter:description")
meta(content="Free Code Camp is a community of busy people learning to code by collaborating on projects for nonprofits. Learn Full-stack JavaScript, build a portfolio, and get great references with our coding bootcamp.", name="twitter:description")
meta(content="a40ee5d5dba3bb091ad783ebd2b1383f", name="p:domain_verify")

View File

@ -8,30 +8,50 @@
span.icon-bar
span.icon-bar
a.navbar-brand(href='/')
img.nav-logo(src='https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg')
img.img-responsive.nav-logo(src='https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg')
.collapse.navbar-collapse
ul.nav.navbar-nav.navbar-right
if !user
a.btn.btn-primary.btn-nav.btn-sm(href='/login') Sign in
else
li.dropdown(class=title=='Account Management'?'active':undefined)
a.dropdown-toggle(href='#', data-toggle='dropdown')
a.dropdown-toggle.text-center(href='#', data-toggle='dropdown')
if user.profile.picture
img(src='#{user.profile.picture}')
else
img(src='#{user.gravatar(60)}')
| #{user.profile.name || user.email || user.id}&nbsp;[&nbsp;#{user.challengesCompleted.length}&nbsp;]&nbsp;
| #{user.profile.name || user.email || user.id}&nbsp;[&nbsp;#{user.points}&nbsp;]
i.caret
ul.dropdown-menu
li
ul.dropdown-menu.text-right
li.hamburger
a(href='/')
span.ion-map
| My Challenges
li
- if (cc[1] > 0)
li.hamburger
a(href='https://gitter.im/FreeCodeCamp/FreeCodeCamp', target='_blank')
span.ion-coffee
| Chat Room
- else
li.hamburger.disabled
a(href='https://gitter.im/FreeCodeCamp/FreeCodeCamp', target='_blank')
span.ion-coffee
| Chat Room (do Challenge 1 first)
- if (cc[2] > 0)
li.hamburger
a(href='http://forum.freecodecamp.com/', target='_blank')
span.ion-planet
| Forum
- else
li.hamburger.disabled
a(href='http://forum.freecodecamp.com/', target='_blank')
span.ion-planet
| Forum (do Challenge 2 first)
li.hamburger
a(href='/account')
span.ion-person
| My Account
li
li.hamburger
a(href='/logout')
span.ion-log-out
| Logout

View File

@ -1,202 +0,0 @@
extends layout
block content
script.
$(document).ready(function () {
var directions = {
0: "To get started, open your Chrome DevTools. The #next-exercise button is disabled below. Try using jQuery's .attr() method to turn the disabled attribute to false.",
1: "Move the .target element from #location1 to #location2.",
2: "Change the background color of .target to red.",
3: "Change the background color of the even-numbered targets to red.",
4: "Change the background color of the target4 to red.",
5: "Clone the target2 in #location1 so that it also exists in #location2.",
6: "Remove the target3 from element from #location1.",
7: "Check the following checkboxes using jQuery.",
8: "Make the text input field read-only.",
9: "Select the target2 option in the select box.",
10: "Add the following css classes to .target: 'animated' and 'hinge'.",
11: "Use jQuery to read the data of .target.",
12: "Use 'length' to count the number of child elements in #location1, then display that value in #location2.",
13: "There's an element hidden in #location1. Show it using jQuery, and then click on it."
};
var hint = {
0: "$('#next-exercise').attr('disabled', false);",
1: "$('.target').appendTo('#location2');",
2: "$('.target').css('background', 'red');",
3: "$('.target:even').css('background', 'red');",
4: "$('.target:nth-child(4)').css('background', 'red');",
5: "$('.target:nth-child(2)').clone().appendTo($('#location2'));",
6: "$('.target:nth-child(3)').remove();",
7: "$('#location1 input').attr('checked', 'true')",
8: "$('#location1 input').attr('readonly', 'true')",
9: "$('#location1 select').val('target2');",
10: "$('.target').addClass('animated hinge');",
11: "$('.target').data();",
12: "$('#location2').text($('#location1').children().length)",
13: "$('#finished-button').show().click();"
};
var elements = {
0: "",
1: "<div class='btn btn-default target'>.target</div>",
2: "<div class='btn btn-default target'>.target</div>",
3: "<div class='btn btn-default target'>target0</div><div class='btn btn-default target'>target1</div><div class='btn btn-default target'>target2</div><div class='btn btn-default target'>target3</div><div class='btn btn-default target'>target4</div>",
4: "<div class='btn btn-default target'>target1</div><div class='btn btn-default target'>target2</div><div class='btn btn-default target'>target3</div><div class='btn btn-default target'>target4</div><div class='btn btn-default target'>target5</div>",
5: "<div class='btn btn-default target'>target1</div><div class='btn btn-default target'>target2</div><div class='btn btn-default target'>target3</div><div class='btn btn-default target'>target4</div><div class='btn btn-default target'>target5</div>",
6: "<div class='btn btn-default target'>target1</div><div class='btn btn-default target'>target2</div><div class='btn btn-default target'>target3</div><div class='btn btn-default target'>target4</div><div class='btn btn-default target'>target5</div>",
7: "<input type='checkbox'>checkbox1</input><br><input type='checkbox'>checkbox2</input>",
8: "<input type='text' value='target'>",
9: "<select><option value='target0'>target0</option><option value='target1'>target1</option><option value='target2'>target2</option><option value='target3'>target3</option></select>",
10: "<div class='btn btn-default target'>.target</div>",
11: "<div class='btn btn-default target' data-lookAtMe='This is some super secret data hidden in the DOM!'>.target</div>",
12: "<div class='btn btn-default target'>target1</div><div class='btn btn-default target'>target2</div><div class='btn btn-default target'>target3</div><div class='btn btn-default target'>target4</div><div class='btn btn-default target'>target5</div>",
13: "<div class='btn btn-default target' id='finished-button'>Finish!</div>"
};
function refreshEverything() {
$('#directions').text("Exercise " + currentExercise + ": " + directions[currentExercise]);
$('#location1').html(elements[currentExercise]);
$('#hint').text(hint[currentExercise]);
handleExerciseTransition();
}
$('#exercise-directory').on('click', 'li', event, function () {
currentExercise = $(this).index();
event.preventDefault();
refreshEverything(event);
});
$('#next-exercise').on('click', event, function () {
++currentExercise;
event.preventDefault();
refreshEverything(event);
});
$('#solution-button').on('click', function () {
$('#hint-modal').modal({backdrop: "static"});
});
$('#location1').on('click', '#finished-button', function () {
$('#finished-modal').modal({backdrop: "static"});
});
function handleExerciseTransition() {
if (currentExercise === 0) {
$('#next-exercise').attr('disabled', true);
} else {
$('#next-exercise').attr('disabled', false);
}
if (currentExercise === 2 || currentExercise === 6) {
$('#location2 .target').remove();
}
if (currentExercise === 13) {
$('#location2').text('');
$('#finished-button').hide();
$('#next-exercise').attr('disabled', true);
}
}
var currentExercise = 0;
refreshEverything(currentExercise);
});
style.
#directions {
text-align: left;
font-size: 15px;
}
.well {
text-align: left;
height: 200px;
}
#exercise-directory {
font-size: 20px;
}
#current-exercise {
text-size: 250px;
}
html.
<div class="container">
<div class="row">
<div class=" col-xs-12 col-sm-8">
<div class="jumbotron">
<div class="row">
<div class="col-xs-12 text-center">
<img src="http://3.bp.blogspot.com/-vgd3mMqeBzk/VGzEmodGqmI/AAAAAAAAAZY/OCcbFvYKzF0/s780/logo4.0LG.png" alt="free code learning at freecodecamp.com" class="img-responsive">
<h1>jQuery Exercises</h1>
</div>
</div>
<br>
<div class="text-primary" id="directions">
</div>
<br>
<div class="row">
<div class="col-xs-6">#location1</div>
<div class="col-xs-6">#location2</div>
</div>
<div class="row">
<div class="col-xs-6 well" id="location1"></div>
<div class="col-xs-6 well" id="location2"></div>
</div>
<div class="btn btn-primary btn-lg btn-block" id="next-exercise">
#next-exercise
</div>
<br>
<button class="btn btn-block btn-lg btn-info" id="solution-button">
#solution-button
</button>
</br>
<div class="text-center">
Created for <a href="http://www.FreeCodeCamp.com">Free Code Camp</a><br/>by <a href="https://twitter.com/ossia">Quincy Larson</a>,
<a href="https://www.twitter.com/terakilobyte">Nathan Leniz</a>, <a href="https://twitter.com/iheartkode"> Mark Howard</a> and <a href="https://twitter.com/ryanmalm">Ryan Malm</a>. Please <a href="http://codepen.io/ossia/pen/raVEgN">fork this.</a>
</div>
</div>
</div>
<div class="col-xs-12 col-sm-4" id="exercise-directory">
<div class="panel panel-primary">
<div class="panel panel-heading">List of Exercises</div>
<div class="panel-body">
<ol start="0">
<li> <a href='#'>Re-enable an element</a></li>
<li> <a href='#'>Change an element's parent</a></li>
<li> <a href='#'>Change an element's CSS</a></li>
<li> <a href='#'>Use jQuery filters to modify even elements</a></li>
<li> <a href='#'>Change nth child</a></li>
<li> <a href='#'>Clone an element</a></li>
<li> <a href='#'>Remove an element</a></li>
<li> <a href='#'>Check checkboxes</a></li>
<li> <a href='#'>Make text read-only</a></li>
<li> <a href='#'>Select an option in a select box</a></li>
<li> <a href='#'>Add a CSS class to an element</a></li>
<li> <a href='#'>Lookup an element's data attribute</a></li>
<li> <a href='#'>Count child elements</a></li>
<li> <a href='#'>Show an element and click on it</a></li>
</ol>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="hint-modal" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
<h4 class="modal-title" id="myModalLabel">Your hint</h4>
</div>
<div class="modal-body">
<div id="hint">
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="finished-modal" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
<h4 class="modal-title" id="myModalLabel">Congratulations! You've finished our jQuery exercises! <a href="http://www.freecodecamp.com/">Go back to Free Code Camp </a> and mark this challenge complete.</h4>
</div>
<div class="modal-body">
<div id="hint"></div>
</div>
</div>
</div>
</div>