From b3542862b011a0b734a213f1afc04c89fa729dbd Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Mon, 3 Nov 2014 13:24:30 -0800 Subject: [PATCH] finish initial coding and copy. doing a quick qa cycle --- controllers/challenges.js | 43 +++++++++++++++++++++++- views/challenges/partials/challenge.jade | 4 +-- views/home.jade | 17 +++++----- views/partials/challenges.jade | 38 ++++++++++----------- 4 files changed, 71 insertions(+), 31 deletions(-) diff --git a/controllers/challenges.js b/controllers/challenges.js index c2f261c5a3..41e269853a 100644 --- a/controllers/challenges.js +++ b/controllers/challenges.js @@ -9,6 +9,7 @@ exports.aOneMinuteIntroToFreeCodeCamp = function(req, res) { name: 'A one-minute introduction to Free Code Camp', video: "110729062", time: "1 minute", + next: '/challenges/enter-the-free-code-camp-chat-room', steps: ["Watch this video.", "When you're done, click the \"I've completed this challenge\" button to move on to your next challenge."] }); }; @@ -18,6 +19,7 @@ exports.enterTheFreeCodeCampChatRoom = function(req, res) { name: 'Enter the Free Code Camp Chat Room', video: "110753794", time: "5 minutes", + next: '/challenges/create-and-deploy-a-website', steps: ["Register for the Free Code Camp chat room at https://www.hipchat.com/invite/178107/cc2f6ea4dfac9e48b9a88b305adae48a", "Introduce yourself to our chat room by typing: \"hello world!\""] }); }; @@ -27,6 +29,7 @@ exports.createAndDeployAWebsite = function(req, res) { name: 'Create a Website and Deploy it to the Internet', video: "110753793", time: "5 minutes", + next: '/challenges/install-github-atom-text-editor', steps: ["Download a template from http://startbootstrap.com", "Go to http://bitballoon.com", "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."] }); }; @@ -36,6 +39,7 @@ exports.installGithubAtomTextEditor = function(req, res) { name: "Install Github's Atom Text Editor", video: "", time: "5 minutes", + next: '/challenges/modify-and-redeploy-your-website', steps: ["Download the Atom editor at http://atom.io", "Unzip it and install Atom.", "Open up Atom.", "Now you have a dedicated text editor!"] }); }; @@ -45,6 +49,7 @@ exports.modifyAndRedeployYourWebsite = function(req, res) { name: 'Modify and Redeploy Your Website', video: "110753792", time: "5 minutes", + next: '/challenges/start-a-pair-programming-session', steps: ["Open up the template you downloaded from http://startbootstrap.com 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 http://bitballoon.com", "Drag the entire template directory onto BitBalloon to deploy it", "Verify that the title has indeed changed."] }); }; @@ -54,6 +59,7 @@ exports.startAPairProgrammingSession = function(req, res) { name: "Start Your First Pair Programming Session", video: "110753642", time: "5 minutes", + next: '/challenges/add-dynamic-content-to-your-website', steps: [ "Download Screen Hero, the popular pair programming tool, here: https://screenhero.com/download.html", "Register your account with the same email address you used when you registered for the Free Code Camp chat room.", "Go to the Free Code Camp chat room.", "Say hi to somebody, and ask if they can pair program with you real quick.", "Type '/hero @' and their name to start a Screen Hero session with them.", "Once you've \"paired\" with someone, they become your \"pair\". Show your new pair the website your just created." ] @@ -65,6 +71,7 @@ exports.addDynamicContentToYourWebsite = function(req, res) { name: "Add Dynamic Content to your Website", video: "", time: "10 minutes", + next: '/challenges/codecademy-html-and-css-track', steps: ["Go to http://www.powr.io", "From the dropdown menus, choose 'Contact Form' and 'HTML'", "Find the template you downloaded from http://startbootstrap.com 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 http://bitballoon.com", "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."] }); }; @@ -74,6 +81,7 @@ exports.codecademyHtmlAndCssTrack = function(req, res) { name: "Codecademy's HTML & CSS Track", video: "110753641", time: "7 hours", + next: '/challenges/experiment-with-html-and-css-in-codepen', steps: [ "Go to http://www.codecademy.com/tracks/web and complete the course." ] @@ -85,6 +93,7 @@ exports.experimentWithHtmlAndCssInCodepen = function(req, res) { name: "Experiment with HTML and CSS in CodePen", video: "110752744", time: "10 minutes", + next: '/challenges/code-school-try-jquery-course', steps: [ "Go to http://www.newsweek.com/", "Change the window size. Note that Newsweek.com is using Responsive Design.", "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 http://codepen.io/pen/", "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." ] @@ -95,6 +104,7 @@ exports.codeSchoolTryJqueryCourse = function(req, res) { res.render('challenges/code-school-try-jquery-course', { name: "Code School's Try jQuery Course", time: "4 hours", + next: '/challenges/jquery-exercises', video: "110753638", steps: [ "Go to https://www.codeschool.com/courses/try-jquery and complete the course." @@ -106,6 +116,7 @@ exports.jqueryExercises = function(req, res) { res.render('challenges/jquery-exercises', { name: "jQuery Exercises", time: "3 hours", + next: '/challenges/code-school-discover-devtools-course', video: "110752745", steps: [ "Go to http://jqexercise.droppages.com/ 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." @@ -117,6 +128,7 @@ exports.codeSchoolDiscoverDevtoolsCourse = function(req, res) { res.render('challenges/code-school-discover-devtools-course', { name: "Code School's Discover DevTools", time: "2 hours", + next: '/challenges/customize-bootstrap-with-bootswatch', video: "110752743", steps: [ "Go to http://discover-devtools.codeschool.com/ and complete the course." @@ -128,6 +140,7 @@ exports.customizeBootstrapWithBootswatch = function(req, res) { res.render('challenges/customize-bootstrap-with-bootswatch', { name: "Customize Bootstrap with Bootswatch", time: "10 minutes", + next: '/challenges/inject-life-with-css-transformations', video: "110752741", steps: ["Go to http://getbootstrap.com/components/", "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 http://codepen.io/pen/", "Paste the HTML you copied from GetBootStrap.com into the HTML field of Codepen.","Go to http://bootswatch.com/", "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."] }); @@ -137,6 +150,7 @@ exports.injectLifeWithCssTransformations = function(req, res) { res.render('challenges/inject-life-with-css-transformations', { name: "Inject Life with CSS Transformations", time: "15 minutes", + next: '/challenges/codecademy-javascript-track', video: "110752740", steps: [ "Go to http://daneden.github.io/animate.css/ and try out some of the CSS animations.", "Go to http://codepen.io/ossia/pen/bGegt.", "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." @@ -148,6 +162,7 @@ exports.codecademyJavascriptTrack = function(req, res) { res.render('challenges/codecademy-javascript-track', { name: "Codecademy JavaScript Track", time: "10 hours", + next: 'challenges/get-help-the-hacker-way-with-rsap', video: "110795564", steps: [ "Go to http://www.codecademy.com/en/tracks/javascript-combined and complete the course." @@ -156,10 +171,11 @@ exports.codecademyJavascriptTrack = function(req, res) { }; exports.getHelpTheHackerWayWithRsap = function(req, res) { - res.render("challenges/get-help-the-hacker-way-with-rsap", { + res.render('challenges/get-help-the-hacker-way-with-rsap', { name: "Get Help the Hacker Way with RSAP", video: "", time: "30 minutes", + next: '/challenges/easy-algorthim-scripting-challenges-on-coderbyte', 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)", @@ -176,6 +192,7 @@ exports.easyAlgorithmScriptingChallengesOnCoderbyte = function(req, res) { name: "Easy Algorithm Scripting Challenges on Coderbyte", video: "", time: "15 hours", + next: '/challenges/harvard-introduction-to-computer-science-cs50-course', steps: [ "Create a CoderByte account at http://coderbyte.com/sl/", "Now go to http://coderbyte.com/CodingArea/Challenges/#easyChals and start working through Coderbyte's easy algorithm scripting challenges using JavaScript.", @@ -189,6 +206,7 @@ exports.harvardIntroductionToComputerScienceCs50Course = function(req, res) { name: "Introduction to Computer Science", video: "", time: "150 hours", + next: '/challenges/medium-algorthim-scripting-challenges-on-coderbyte', 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 https://www.edx.org/course/harvardx/harvardx-cs50x-introduction-computer-1022#.VDWSfSldWpQ and register for the course." @@ -201,6 +219,7 @@ exports.mediumAlgorithmScriptingChallengesOnCoderbyte = function(req, res) { name: "Medium Algorithm Scripting Challenges on Coderbyte", video: "", time: "15 hours", + next: '/challenges/stanfords-relational-databases-mini-course', steps: [ "Go to http://coderbyte.com/CodingArea/Challenges/#medChals 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." @@ -213,6 +232,7 @@ exports.stanfordsRelationalDatabasesMiniCourse = function(req, res) { name: "Stanford's Relational Databases Mini-course", video: "", time: "10 hours", + next: '/challenges/stanfords-json-mini-course', steps: [ "Go to https://class.stanford.edu/courses/DB/RDB/SelfPaced/about and register for this course.", "Be sure to watch the videos, in addition to doing the exercises, because they have embedded challenges." @@ -225,6 +245,7 @@ exports.stanfordsJsonMiniCourse = function(req, res) { name: "Stanford's JSON Mini-course", video: "", time: "2 hours", + next: '/challenges/build-a-text-based-adventure', steps: [ "Go to https://class.stanford.edu/courses/DB/JSON/SelfPaced/about and register for this course.", "Be sure to watch the videos, in addition to doing the exercises, because they have embedded challenges." @@ -237,6 +258,7 @@ exports.buildATextBasedAdventure = function(req, res) { name: "Build a Text-based Adventure", video: "", time: "5 hours", + next: '/challenges/hard-algorthim-scripting-challenges-on-coderbyte', steps: [ "Go to http://www.amctv.com/shows/halt-and-catch-fire/colossal-cave-adventure and play the original text-based adventure (known simply as \"Adventure\".", "Using CodePen, create a text based adventure, using buttons instead of text input.", @@ -251,6 +273,7 @@ exports.hardAlgorithmScriptingChallengesOnCoderbyte = function(req, res) { name: "Hard Algorithm Scripting Challenges on Coderbyte", video: "", time: "15 hours", + next: '/challenges/stanfords-sql-mini-course', steps: [ "Go to http://coderbyte.com/CodingArea/Challenges/#medChals 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." @@ -262,6 +285,7 @@ exports.stanfordsSqlMiniCourse = function(req, res) { res.render('challenges/stanfords-sql-mini-course', { name: "Stanford's SQL Mini-course", time: "10 hours", + next: '/challenges/build-an-interview-question-machine', steps: [ "Go to https://class.stanford.edu/courses/DB/SQL/SelfPaced/about and register for this course.", "Be sure to watch the videos, in addition to doing the exercises, because they have embedded challenges." @@ -274,6 +298,7 @@ exports.buildAnInterviewQuestionMachine = function(req, res) { name: "Build an Interview Question Machine", video: "", time: "5 hours", + next: '/challenges/code-school-try-git-course', 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.", @@ -288,6 +313,7 @@ exports.codeSchoolTryGitCourse = function(req, res) { name: "Code School's Try Git Course", video: "", time: "15 minutes", + next: '/challenges/install-node-js', steps: [ "Go to https://www.codeschool.com/courses/try-git and complete this short interactive course." ] @@ -298,6 +324,7 @@ exports.installNodeJs = function(req, res) { res.render('challenges/install-node-js', { name: "Install Node.js", time: "15 minutes", + next: '/challenges/clone-a-github-repo', video: "", steps: [ ] @@ -309,6 +336,7 @@ exports.cloneAGithubRepo = function(req, res) { name: "Clone a Github Repo", video: "", time: "15 minutes", + next: '/challenges/deploy-an-app-to-heroku', steps: [ ] }); @@ -319,6 +347,7 @@ exports.deployAnAppToHeroku = function(req, res) { name: "Deploy an app to Heroku", video: "", time: "15 minutes", + next: '/challenges/code-school-real-time-with-node-js-course', steps: [ ] }); @@ -329,6 +358,7 @@ exports.codeSchoolRealTimeWithNodeJsCourse = function(req, res) { name: "Code School's Real-time web with Node.JS", video: "", time: "5 hours", + next: '/challenges/try-mongodb', steps: [ "Go to https://www.codeschool.com/courses/real-time-web-with-node-js 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: https://www.codeschool.com/hall_passes/213f3fedb6b9/claim_shared" @@ -341,6 +371,7 @@ exports.tryMongoDb = function(req, res) { name: "Try MongoDB", video: "", time: "30 minutes", + next: '/challenges/explore-your-network-with-the-linkedin-api', steps: [ "Go to http://try.mongodb.org/ and work through their interactive MongoDB tutorial" ] @@ -352,6 +383,7 @@ exports.exploreYourNetworkWithTheLinkedInApi = function(req, res) { name: "Explore Your Network with the LinkedIn API", video: "", time: "2 hours", + next: '/challenges/build-your-first-api', steps: [ "Go to http://developers.linkedin.com/ and register a LinkedIn app.", "Using the API keys provided by LinkedIn, write a script that pulls your LinkedIn profile and and connections." @@ -364,6 +396,7 @@ exports.buildYourFirstApi = function(req, res) { name: "Build Your First API", video: "", time: "5 hours", + next: '/challenges/aggregate-data-with-chron-jobs-and-screen-scraping', steps: [ ] }); @@ -374,6 +407,7 @@ exports.aggregateDataWithChronJobsAndScreenScraping = function(req, res) { name: "Aggregate Data with Chron Jobs and Screen Scraping", video: "", time: "5 hours", + next: '/challenges/code-school-shaping-up-with-angular-js-course', steps: [ ] }); @@ -384,6 +418,7 @@ exports.codeSchoolShapingUpWithAngularJsCourse = function(req, res) { name: "Codeschool's Shaping up with Angular.js", video: "", time: "5 hours", + next: '/challenges/reverse-engineer-snapchat', steps: [ "Go to hhttps://www.codeschool.com//courses/shaping-up-with-angular-js and complete this free course." ] @@ -395,6 +430,7 @@ exports.reverseEngineerSnapchat = function(req, res) { name: "Reverse Engineer Snapchat", video: "", time: "50 hours", + next: '/challenges/reverse-engineer-reddit', steps: [ ] }); @@ -405,6 +441,7 @@ exports.reverseEngineerReddit = function(req, res) { name: "Reverse Engineer Reddit", video: "", time: "50 hours", + next: '/challenges/reverse-engineer-pintrest', steps: [ ] }); @@ -415,6 +452,7 @@ exports.reverseEngineerPintrest = function(req, res) { name: "Reverse Engineer Pintrest", video: "", time: "50 hours", + next: '/challenges/help-a-nonprofit-team-project', steps: [ ] }); @@ -425,6 +463,7 @@ exports.helpANonprofitTeamProject = function(req, res) { name: "Help a Nonprofit Team Project", video: "", time: "200 hours", + next: '/challenges/help-a-nonprofit-solo-project', steps: [ ] }); @@ -435,6 +474,7 @@ exports.helpANonprofitSoloProject = function(req, res) { name: "Help a Nonprofit Solo Project", video: "", time: "200 hours", + next: '/challenges/crack-the-coding-interview', steps: [ ] }); @@ -445,6 +485,7 @@ exports.crackTheCodingInterview = function(req, res) { name: "Crack the Coding Interview", video: "", time: "20 hours", + next: "", steps: [ ] }); diff --git a/views/challenges/partials/challenge.jade b/views/challenges/partials/challenge.jade index a1b2a46f2c..009ffa41c9 100644 --- a/views/challenges/partials/challenge.jade +++ b/views/challenges/partials/challenge.jade @@ -33,7 +33,7 @@ h1.animated.zoomInDown Nicely done! .animated.zoomInUp.delay-1 span.landing-icon.ion-checkmark-circled.text-success - a.animated.fadeIn.delay-2.btn.btn-primary.btn-block(href='/curriculum', aria-hidden='true') Take me to my next challenge + a.animated.fadeIn.delay-2.btn.btn-primary.btn-block(href=next, aria-hidden='true') Take me to my next challenge #skip-dialog.modal .modal-dialog.animated.zoomIn.fast-animation .modal-content @@ -44,4 +44,4 @@ h2.animated.zoomInDown You can retry this challenge any time. .animated.zoomInUp.delay-1 span.landing-icon.ion-skip-forward.text-primary - a.animated.fadeIn.delay-2.btn.btn-primary.btn-block(href='/curriculum', aria-hidden='true') Take me to my next challenge \ No newline at end of file + a.animated.fadeIn.delay-2.btn.btn-primary.btn-block(href=next, aria-hidden='true') Take me to my next challenge \ No newline at end of file diff --git a/views/home.jade b/views/home.jade index 0dd1e4b048..49276e9754 100644 --- a/views/home.jade +++ b/views/home.jade @@ -39,27 +39,26 @@ block content p First, you'll learn basic web design tools like: ul li • HTML - the structure of web pages - li • CSS - the design of web pages + li • CSS - the visual style of web pages li • Bootstrap - a "responsive design" tool that helps your websites look great on tablets and phones li • jQuery - an easy tool for controlling content in the browser - li • Chrome DevTools - a way to experiment with your websites and debug them, right in your browser + li • Chrome DevTools - a tool for understanding and debuging websites, right in your browser p Then you'll learn computer science and the art of programming: ul - li • JavaScript - the programming language that all web browsers use - li • Linux - the most popular operating system for servers (but you don't need to learn desktop Linux) - li • Git - the best way to save and share your projects - li • Databases - SQL is like a giant spread sheet that stores and retrieves your data - li • Algorithms - these are basically step-by-step recipies for getting things done + li • JavaScript - the one programming language that all web browsers use + li • Git - a version control system for saving and sharing your projects + li • SQL - a popular language for pulling data out of spreadsheet-like relational databases + li • Algorithms - step-by-step recipies for getting things done p You'll spend the last half of Free Code Camp using Agile Methodologies and Full Stack JavaScript to build projects for nonprofits: ul - li • Agile - a set of software development principles that focus the design and production of a project on the needs of its users. + li • Agile - a set of software development principles that focus the design and production of a project on the needs of its users li • MongoDB - a popular non-relational database li • AngularJS - a tool for making exciting web interfaces li • ExpressJS - a powerful web development framework li • NodeJS - a JavaScript-based web server h2 How will I learn all this? ul - p By pair programming with other Free Code Camp students on our coding challenges. We've also built an optional curriculum of the best free courses on the web. Eventually, you'll work with people at nonprofits to build real-life software solutions. + p By pair programming with other Free Code Camp students on our coding challenges. Eventually, you'll work with people at nonprofits to build real-life software solutions. h2 What is 'pair programming', and what's so special about it? ul p Pair programming is where two people code together on one computer. You discuss different approaches to solving problems, and keep each other motivated. The result is better code than either of you could have written by yourselves. Because of its benefits, many engineers pair program full time. And it's the best way to learn coding. Thanks to tools like Screen Hero, you can pair program online without needing to be in the same room. diff --git a/views/partials/challenges.jade b/views/partials/challenges.jade index 03e6675c4e..63e959a845 100644 --- a/views/partials/challenges.jade +++ b/views/partials/challenges.jade @@ -33,43 +33,43 @@ li a(href="/challenges/codecademy-javascript-track") Codecademy's JavaScript track li - a(href="/challenges/get-help-the-hacker-way-with-rsap") Get Help The Hacker Way with RSAP + a.disabled(href="/challenges/get-help-the-hacker-way-with-rsap") Get Help The Hacker Way with RSAP li - a(href="/challenges/easy-algorthim-scripting-challenges-on-coderbyte") Easy Algorithm Scripting Challenges on Coderbyte + a.disabled(href="/challenges/easy-algorthim-scripting-challenges-on-coderbyte") Easy Algorithm Scripting Challenges on Coderbyte li - a(href="/challenges/harvard-introduction-to-computer-science-cs50-course") Harvard's CS50: Introduction to Computer Science + a.disabled(href="/challenges/harvard-introduction-to-computer-science-cs50-course") Harvard's CS50: Introduction to Computer Science li - a(href="/challenges/medium-algorthim-scripting-challenges-on-coderbyte") Medium Algorithm Scripting Challenges on Coderbyte + a.disabled(href="/challenges/medium-algorthim-scripting-challenges-on-coderbyte") Medium Algorithm Scripting Challenges on Coderbyte li - a(href="/challenges/stanfords-json-mini-course") Stanford's JSON Mini-course + a.disabled(href="/challenges/stanfords-json-mini-course") Stanford's JSON Mini-course li - a(href="/challenges/build-a-text-based-adventure") Build a Text-based Adventure + a.disabled(href="/challenges/build-a-text-based-adventure") Build a Text-based Adventure li - a(href="/challenges/hard-algorthim-scripting-challenges-on-coderbyte") Hard Algorithm Scripting Challenges on Coderbyte + a.disabled(href="/challenges/hard-algorthim-scripting-challenges-on-coderbyte") Hard Algorithm Scripting Challenges on Coderbyte li - a(href="/challenges/stanfords-sql-mini-course") Stanford's SQL Mini-course + a.disabled(href="/challenges/stanfords-sql-mini-course") Stanford's SQL Mini-course li - a(href="/challenges/build-an-interview-question-machine") Build an Interview Question Machine + a.disabled(href="/challenges/build-an-interview-question-machine") Build an Interview Question Machine li - a(href="/challenges/code-school-try-git-course") Code School's Try Git + a.disabled(href="/challenges/code-school-try-git-course") Code School's Try Git li - a(href="/challenges/install-node-js") Install Node.js + a.disabled(href="/challenges/install-node-js") Install Node.js li - a(href="/challenges/clone-a-github-repo") Clone a Github Repo + a.disabled(href="/challenges/clone-a-github-repo") Clone a Github Repo li - a(href="/challenges/deploy-an-app-to-heroku") Deploy an app to Heroku + a.disabled(href="/challenges/deploy-an-app-to-heroku") Deploy an app to Heroku li - a(href="/challenges/code-school-real-time-with-node-js-course") Code School's Real-time web with Node.JS + a.disabled(href="/challenges/code-school-real-time-with-node-js-course") Code School's Real-time web with Node.JS li - a(href="/challenges/try-mongodb") Try MongoDB + a.disabled(href="/challenges/try-mongodb") Try MongoDB li - a(href="/challenges/explore-your-network-with-the-linkedin-api") Explore your Network with the LinkedIn API + a.disabled(href="/challenges/explore-your-network-with-the-linkedin-api") Explore your Network with the LinkedIn API li - a(href="/challenges/build-your-first-api") Build your first API + a.disabled(href="/challenges/build-your-first-api") Build your first API li - a(href="/challenges/aggregate-data-with-chron-jobs-and-screen-scraping") Aggregate Data with Chron Jobs and Screen Scraping + a.disabled(href="/challenges/aggregate-data-with-chron-jobs-and-screen-scraping") Aggregate Data with Chron Jobs and Screen Scraping li - a(href="/challenges/code-school-shaping-up-with-angular-js-course") Code School's Shaping up with Angular.JS + a.disabled(href="/challenges/code-school-shaping-up-with-angular-js-course") Code School's Shaping up with Angular.JS li a.disabled(href="/challenges/reverse-engineer-snapchat") Reverse Engineer SnapChat li