From 389ea7529c5f911a795d9ee2e89f18a62c4c3435 Mon Sep 17 00:00:00 2001
From: Quincy Larson <michaelqlarson@gmail.com>
Date: Fri, 19 Feb 2016 17:36:03 -0800
Subject: [PATCH 01/33] add an explanation of how our nonprofit projects work

---
 server/boot/randomAPIs.js                          |  7 ++++
 server/views/resources/about.jade                  |  5 +++
 .../resources/how-nonprofit-projects-work.jade     | 47 ++++++++++++++++++++++
 3 files changed, 59 insertions(+)
 create mode 100644 server/views/resources/how-nonprofit-projects-work.jade

diff --git a/server/boot/randomAPIs.js b/server/boot/randomAPIs.js
index 8daa663..2ec974e 100644
--- a/server/boot/randomAPIs.js
+++ b/server/boot/randomAPIs.js
@@ -38,6 +38,7 @@ module.exports = function(app) {
   router.get('/all-stories', showAllTestimonials);
   router.get('/terms', terms);
   router.get('/privacy', privacy);
+  router.get('/how-nonprofit-projects-work', howNonprofitProjectsWork);
   router.get('/code-of-conduct', codeOfConduct);
   router.get('/academic-honesty', academicHonesty);
 
@@ -183,6 +184,12 @@ module.exports = function(app) {
       });
   }
 
+  function howNonprofitProjectsWork(req, res) {
+      res.render('resources/how-nonprofit-projects-work', {
+          title: 'How our nonprofit projects work'
+      });
+  }
+
   function codeOfConduct(req, res) {
       res.render('resources/code-of-conduct', {
           title: 'Code of Conduct'
diff --git a/server/views/resources/about.jade b/server/views/resources/about.jade
index 8f5bdbd..b993dc4 100644
--- a/server/views/resources/about.jade
+++ b/server/views/resources/about.jade
@@ -84,6 +84,11 @@ block content
                         a(href="/terms") Our terms of service
                 tr
                     td.text-center
+                        i.fa.fa-heart
+                    td
+                        a(href="/how-nonprofit-projects-work") How our nonprofit projects work
+                tr
+                    td.text-center
                         i.fa.fa-flask
                     td
                         a(href="/labs") Extra-curricular apps built by campers
diff --git a/server/views/resources/how-nonprofit-projects-work.jade b/server/views/resources/how-nonprofit-projects-work.jade
new file mode 100644
index 0000000..e781072
--- /dev/null
+++ b/server/views/resources/how-nonprofit-projects-work.jade
@@ -0,0 +1,47 @@
+extends ../layout
+block content
+    .col-xs-12.col-sm-8.col-sm-offset-2.col-md-6.col-md-offset-3
+        html.
+            <h2 class='text-center'>How our Nonprofit Projects Work</h2>
+            <hr>
+            <p>Building nonprofit projects is the main way that our campers learn full stack JavaScript and agile software development. You’ll begin this process once you’ve earned your Front End Development, Data Visualization, and Back End Development Certifications.</p>
+            <h3>Starting with the end in mind</h3>
+            <p>Our goal at Free Code Camp is to help you land a job as a junior software developer (or, if you prefer, a ‘pivot job’ that leads your current career in a more technical direction).</p>
+            <p>You’ll continue to work on nonprofit projects until you’ve built a sufficiently impressive portfolio and references to start your job search. Your portfolio will ultimately have four nonprofit projects. We estimate that the 800 hours of nonprofit projects and 80 hours of interview prep you’re going to complete, in addition to the 1200 hours of challenges you’ve already completed by this point, will be more than enough to qualify you for your first coding job.</p>
+            <h3>Your first Nonprofit Project</h3>
+            <p>We generally scope Nonprofit Projects to 200 hours, or about 10 weeks at 20 hours per week of development per camper. These are only rough estimates. You’ll only work on one project at a time.</p>
+            <p>You will choose another camper to partner with on this projects. You should choose your pair based on:</p>
+            <p>Your estimated time commitments (10, 20 or 40 hours per week) Your time zones (Will you be able to pair program together?) Prior coding experience (we’d like both campers to be able to contribute equally) Do not take age or gender into account. This will provide you with valuable experience in meshing with diverse teams, which is a reality of the contemporary workplace.</p>
+            <p>Then, you’ll email <a href="mailto:team@freecodecamp.com">team@freecodecamp.com</a> with:</p>
+            <ol>
+                  <li>Names</li>
+                  <li>Contact information</li>
+                  <li>Links to each of your Code Portfolios</li>
+                  <li>Timezones</li>
+                  <li>Hours pledged per week</li>
+            </ol>
+            <p>We’ll send you a list of 3 nonprofit projects that need your help, and together you will choose one to begin work on. While you do this, our team will code review each of your Code Portfolios to ensure all user stories have been completed, and that there are no signs of academic dishonesty.</p>
+            <h3>Beginning the Project</h3>
+            <p>We’ll set an initial meeting with representatives from Free Code Camp, the two campers, and the stakeholder. If the stakeholder and both campers shows up promptly, and seem enthusiastic and professional, we’ll start the project. This lengthy process serves an important purpose: it reduces the likelihood that any of our campers or stakeholders will waste their precious time.</p>
+            <h3>Nonprofit Stakeholders</h3>
+            <p>Each nonprofit project was submitted by a nonprofit. A representative from this nonprofit has agreed to serve as a “stakeholder” - an authorative person who understands the organization and its needs for this particular project.</p>
+            <p>Stakeholders have a deep understanding of their organizations’ needs. Campers will work with them to figure out the best solutions to these needs.</p>
+            <p>When you and your pair partner first speak with your nonprofit stakeholder, you’ll:</p>
+            <p>talk at length to better understand their needs. create a new Trello board and use it to prioritize what needs to be built. and establish deadlines based on your weekly time commitment, and how long you think each task will take. Ideally, we’ll scope each project to be completed in 10 sprints. It’s notoriously difficult to estimate how long building software projects will take, so feel free to ask our volunteer team for help.</p>
+            <p>You’ll continue to meet with your stakeholder weekly using the conference software GoToMeeting. You will also correspond with the team on the project’s Trello board.</p>
+            <p>Getting “blocked” on a task can take away your sense of forward momentum, so be sure to proactively seek answers to any ambiguities you encounter.</p>
+            <p>Ultimately, the project will be considered complete once both the stakeholder’s needs have been met, and you and your pair are happy with the project. Then you can add it to your portfolio!</p>
+            <h3>Working with your Pair</h3>
+            <p>You and your pair will pair program (code together on the same computer virtually) about half of the time, and work independently the other half of the time.</p>
+            <p>Here are our recommended ways of collaborating:</p>
+            <p>Gitter has robust private messaging functionality. It’s the main way our team communicates, and we recommend it over email. Trello is great for managing projects. Work with your stakeholder to create Trello cards, and update these cards regularly as you make progress on them. Screen Hero or Team Viewer - These are the ideal way to pair program. Tools like TMUX are good, but difficult to use. We discourage you from using screen sharing tools where only one person has control of the keyboard and mouse - that isn’t real pair programming. Write clear and readable code, commit messages, branch names, and pull request messages.</p>
+            <h3>Hosting Apps</h3>
+            <p>Unless your stakeholder has an existing modern host (AWS, Digital Ocean), you’ll need to transition them over to a new platform. We believe Heroku is the best choice for a vast majority of web projects. It’s free, easy to use, and has both browser and command line interfaces. It’s owned by Salesforce and used by a ton of companies, so it’s accountable and unlikely to go away.</p>
+            <p>If you need help convincing your stakeholder that Heroku is the ideal platform, we’ll be happy to talk with them.</p>
+            <h3>Maintaining Apps</h3>
+            <p>Once you complete a nonprofit project, your obligation to its stakeholder is finished. Your goal is to leave behind a well documented solution that can be easily maintained by a contract JavaScript developer (or even a less-technical “super user”).</p>
+            <p>While you will no longer need to help with feature development, we encourage you to consider helping your stakeholder with occasional patches down the road. After all, this project will be an important piece of your portfolio, and you’ll want it to remain in good shape for curious future employers.</p>
+            <h3>Pledging to Finish the Project</h3>
+            <p>Your nonprofit stakeholder, your pair partner, and our volunteer team are all counting on you to finish your nonprofit project. If you walk away from an unfinished nonprofit project, you’ll become ineligible to ever be assigned another one.</p>
+            <p>To confirm that you understand the seriousness of this commitment, we require that all campers sign this pledge before starting on their nonprofit projects.</p>
+            <p>There will likely be times of confusion or frustration. This is normal in software development. The most important thing is that you do not give up and instead persevere through these setbacks. As Steve Jobs famously said, “Real artists ship.” And you are going to ship one successful nonprofit project after another until you feel ready to take the next step in your promising career.</p>

From 9d0cadb7231a26e554f7d7b25e6073a700f56dde Mon Sep 17 00:00:00 2001
From: SaintPeter <rex.schrader@gmail.com>
Date: Fri, 11 Mar 2016 20:35:55 -0800
Subject: [PATCH 02/33] Add solution to Exact Change

---
 .../01-front-end-development-certification/advanced-bonfires.json      | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/seed/challenges/01-front-end-development-certification/advanced-bonfires.json b/seed/challenges/01-front-end-development-certification/advanced-bonfires.json
index f997f84..9ff609a 100644
--- a/seed/challenges/01-front-end-development-certification/advanced-bonfires.json
+++ b/seed/challenges/01-front-end-development-certification/advanced-bonfires.json
@@ -140,6 +140,9 @@
         "",
         "checkCashRegister(19.50, 20.00, [[\"PENNY\", 1.01], [\"NICKEL\", 2.05], [\"DIME\", 3.10], [\"QUARTER\", 4.25], [\"ONE\", 90.00], [\"FIVE\", 55.00], [\"TEN\", 20.00], [\"TWENTY\", 60.00], [\"ONE HUNDRED\", 100.00]]);"
       ],
+      "solutions": [
+        "var denom = [\n\t{ name: 'ONE HUNDRED', val: 100.00},\n\t{ name: 'TWENTY', val: 20.00},\n\t{ name: 'TEN', val: 10.00},\n\t{ name: 'FIVE', val: 5.00},\n\t{ name: 'ONE', val: 1.00},\n\t{ name: 'QUARTER', val: 0.25},\n\t{ name: 'DIME', val: 0.10},\n\t{ name: 'NICKEL', val: 0.05},\n\t{ name: 'PENNY', val: 0.01}\n];\n\nfunction checkCashRegister(price, cash, cid) {\n    var change = cash - price;\n    var register = cid.reduce(function(acc, curr) {\n        acc.total += curr[1];\n        acc[curr[0]] = curr[1];\n        return acc;\n    }, {total: 0});\n    if(register.total === change) {\n        return 'Closed';\n    }\n    if(register.total < change) {\n        return 'Insufficient Funds';\n    }\n    var change_arr = denom.reduce(function(acc, curr) {\n        var value = 0;\n        while(register[curr.name] > 0 && change >= curr.val) {\n           change -= curr.val;\n           register[curr.name] -= curr.val;\n           value += curr.val;\n           change = Math.round(change * 100) / 100;\n        }\n        if(value > 0) {\n            acc.push([ curr.name, value ]);\n        }\n        return acc;\n    }, []);\n  if(change_arr.length < 1 || change > 0) {\n    return \"Insufficient Funds\";\n  }\n  return change_arr;\n}"
+      ],
       "tests": [
         "assert.isArray(checkCashRegister(19.50, 20.00, [[\"PENNY\", 1.01], [\"NICKEL\", 2.05], [\"DIME\", 3.10], [\"QUARTER\", 4.25], [\"ONE\", 90.00], [\"FIVE\", 55.00], [\"TEN\", 20.00], [\"TWENTY\", 60.00], [\"ONE HUNDRED\", 100.00]]), 'message: <code>checkCashRegister(19.50, 20.00, [[\"PENNY\", 1.01], [\"NICKEL\", 2.05], [\"DIME\", 3.10], [\"QUARTER\", 4.25], [\"ONE\", 90.00], [\"FIVE\", 55.00], [\"TEN\", 20.00], [\"TWENTY\", 60.00], [\"ONE HUNDRED\", 100.00]])</code> should return an array.');",
         "assert.isString(checkCashRegister(19.50, 20.00, [[\"PENNY\", 0.01], [\"NICKEL\", 0], [\"DIME\", 0], [\"QUARTER\", 0], [\"ONE\", 0], [\"FIVE\", 0], [\"TEN\", 0], [\"TWENTY\", 0], [\"ONE HUNDRED\", 0]]), 'message: <code>checkCashRegister(19.50, 20.00, [[\"PENNY\", 0.01], [\"NICKEL\", 0], [\"DIME\", 0], [\"QUARTER\", 0], [\"ONE\", 0], [\"FIVE\", 0], [\"TEN\", 0], [\"TWENTY\", 0], [\"ONE HUNDRED\", 0]])</code> should return a string.');",

From 6e7d5db741f5e113f931045e5d9609adf4e3bc6b Mon Sep 17 00:00:00 2001
From: Rex Schrader <rex.schrader@gmail.com>
Date: Fri, 11 Mar 2016 15:17:34 -0800
Subject: [PATCH 03/33] Change nameXX properties to title XX properties

---
 .../00-getting-started/getting-started.json        |  340 ++--
 .../advanced-bonfires.json                         |   18 +-
 .../advanced-ziplines.json                         |   22 +-
 .../basic-bonfires.json                            |  164 +-
 .../basic-javascript.json                          |  280 +--
 .../basic-ziplines.json                            |   98 +-
 .../bootstrap.json                                 |   62 +-
 .../front-end-development-certificate.json         |    4 +-
 .../gear-up-for-success.json                       |   18 +-
 .../html5-and-css.json                             | 2055 ++++++++++----------
 .../intermediate-bonfires.json                     |  210 +-
 .../intermediate-ziplines.json                     |   27 +-
 .../jquery.json                                    |   36 +-
 .../json-apis-and-ajax.json                        |   28 +-
 ...object-oriented-and-functional-programming.json |   26 +-
 .../02-data-visualization-certification/d3.json    |    4 +-
 .../data-visualization-certificate.json            |    4 +-
 .../data-visualization-projects.json               |   40 +-
 .../react-projects.json                            |   40 +-
 .../02-data-visualization-certification/react.json |    3 +-
 .../02-data-visualization-certification/sass.json  |    3 +-
 .../api-projects.json                              |   33 +-
 .../automated-testing-and-debugging.json           |    4 +-
 .../back-end-development-certificate.json          |    4 +-
 .../dynamic-web-applications.json                  |   20 +-
 .../03-back-end-development-certification/git.json |    2 +-
 .../mongodb.json                                   |    2 +-
 .../nodejs-and-expressjs.json                      |   10 +-
 .../04-video-challenges/bigonotation.json          |    8 +-
 .../04-video-challenges/chromedevtools.json        |   39 +-
 .../04-video-challenges/computer-basics.json       |   86 +-
 seed/challenges/04-video-challenges/dom.json       |    8 +-
 seed/challenges/04-video-challenges/jslingo.json   |   37 +-
 33 files changed, 1862 insertions(+), 1873 deletions(-)

diff --git a/seed/challenges/00-getting-started/getting-started.json b/seed/challenges/00-getting-started/getting-started.json
index dfceda0..54fc8d4 100644
--- a/seed/challenges/00-getting-started/getting-started.json
+++ b/seed/challenges/00-getting-started/getting-started.json
@@ -85,279 +85,276 @@
       "tests": [],
       "type": "Waypoint",
       "challengeType": 7,
-      "nameEs": "Aprende como funciona Free Code Camp",
-      "descriptionEs": [
+      "titleFr": "Apprenez comment FreeCodeCamp fonctionne",
+      "descriptionFr": [
         [
           "http://i.imgur.com/6ibIavQ.jpg",
-          "Una imagen de los 4 beneficios de Free Code Camp: Conéctate, Aprende JavaScript, Construye tu  Portafolio, Ayuda organizaciones sin ánimo de lucro",
-          "Bienvenido a Free Code Camp. Somos una comunidad de código abierto formada por personas ocupadas quienes aprenden a programar y ayudan a organizaciones sin ánimo de lucro.",
+          "Une idée des avantages de Free Code Camp: restez connecté , apprenez le JavaScript , construisez votre portfolio , Aidez les organismes sans but lucratif",
+          "Bienvenue sur Free Code Camp . Nous sommes une communauté opensource de gens passionnés qui apprend à coder et aide les organisations à but non lucratif.",
           ""
         ],
         [
           "http://i.imgur.com/Elb3dfj.jpg",
-          "Una imagen de algunos de nuestros campistas programando juntos en Toronto.",
-          "<bold>Aprender a programar es difícil.</bold> Para tener éxito, necesitarás mucha práctica y apoyo. Por eso es que hemos creado un riguroso currículo y una comunidad de apoyo.",
+          "Une capture d'écran de certains de nos développeurs réunis à Toronto.",
+          "<bold>Apprendre à code est dur.</bold> Pour réussir, vous aurez besoin de beaucoup de pratique et de soutien. Voilà pourquoi nous avons créé un programme rigoureux et une communauté de soutien.",
           ""
         ],
         [
           "http://i.imgur.com/D7Y5luw.jpg",
-          "Una gráfica del crecimiento de trabajos en comparación con los graduados en un pregrado de ciencias de la computación. Hay 1.4 millones de empleos y solo 400 mil personas para ocuparlos.",
-          "Actualmente, hay miles de trabajos de programación sin ocupar, y la demanda de programadores crece cada año.",
+          "Un graphique de la vitesse de croissance de l'emploi face à la croissance du nombre de diplômés en études d'informatique . Il y a 1,4 million d'emplois et seulement 400 000 personnes pour les occuper.",
+          "Il y a des milliers d'emplois de développeurs actuellement vacants, et la demande pour les développeurs augmente chaque année.",
           ""
         ],
         [
           "http://i.imgur.com/WD3STY6.jpg",
-          "Fotos de tres campistas quienes obtuvieron trabajos después de aprender a programar en Free Code Camp.",
-          "Free Code Camp es un camino probado para que obtengas tu primer trabajo de programación. De hecho, nadie actualmente ha completado nuestro programa entero, porque los campistas obtienen trabajos antes de poder hacerlo.",
+          "Photos de trois développeurs qui ont obtenu un emploi après l'apprentissage de code au Free Code Camp.",
+          "Free Code Camp est une voie éprouvée pour obtenir votre premier job de développeur. En fait , personne n'a jamais accompli l'ensemble de notre programme , car nos développeurs ont trouvé un emploi avant qu'ils ne soient en mesure de le finir notre parcours.",
           ""
         ],
         [
           "http://i.imgur.com/vLNso6h.jpg",
-          "Una ilustración mostrando que aprenderás HTML5, CSS3, JavaScript, Bases de Datos, Git, Node.js, react y D3.",
-          "Tenemos cientos de desafíos de programación opcionales que te enseñarán las tecnologías fundamentales para el desarrollo web como HTML5, Node.js y bases de datos.",
+          "Une illustration montrant que vous allez apprendre HTML5 , CSS3 , JavaScript , bases de données , Git , Node.js , React et D3.",
+          "Nous avons des centaines de défis de codage optionnels qui vous apprendront les fondamentaux du développement web comme HTML5 , Node.js et les bases de données.",
           ""
         ],
         [
           "http://i.imgur.com/UVB9hxp.jpg",
-          "Una foto de un campista en un café construyendo proyectos con Free Code Camp.",
-          "Creemos que los humanos aprender mejor haciendo.  Así que en realidad emplearás la mayoría de tu tiempo construyendo proyectos.  Te daremos una lista de especificaciones (historias de usuario ágiles), y te las ingeniarás para construir aplicaciones que cumplan esas especificaciones.",
+          "Une image d'un développeur dans un café projets sur Camp Code Free.",
+          "Nous croyons que les êtres humains apprennent mieux par la pratique . De sorte que vous passerez la plupart de votre temps à construire efficacement des projets. Nous allons vous donner une liste de spécifications ( des témoignages d'utilisateurs agiles ) , et vous allez comprendre comment construire des applications qui répondent à ces spécifications.",
           ""
         ],
-         [
-          "http://i.imgur.com/pbW7K5S.jpgk",
-          "Una imagen de los tiempos de nuestras certificaciones para desarrollo de interfaces, desarrollo al lado del servidor y visualización de datos (400 horas cada uno), para nuestros proyectos sin ánimo de lucro (800 horas) y preparación para entrevistas (80 horas) que dan un total de 2,080 horas e experiencia programando.",
-          "Nuestro currículo se divide en 4 certificaciones.  Estas certificaciones están estandarizadas, y son verificables al instante por sus clientes como trabajador independiente y por sus futuros empleadores.  Tal como todo lo demás en Free Code Camp, estas certificaciones son gratuitas.  Recomendamos hacerlas en orden, pero usted es libre de saltar de una a otra.  Las primeras tres certificaciones requieren 400 horas cada una, y la certificación final requiere 800 horas, e involucra construir proyectos de la vida real para organizaciones sin ánimo de lucro.",
+        [
+          "http://i.imgur.com/pbW7K5S.jpg",
+          "Une image pour montrer notre front-end, back end, et data visualisation certificat ( 400 heures chacun) , nos projets à but non lucratif (800 heures) , et l'interview de préparation ( 80 heures ) pour un total de 2080 heures d'expérience de codage.",
+          "Notre programme est divisé en 4 certifications . Ces certifications sont standardisés , et immédiatement vérifiable par vos clients indépendants et les futurs employeurs . Comme tout le reste au Code Camp gratuit, ces certifications sont gratuits. Nous vous recommandons de les faire dans l'ordre, mais vous êtes libre d'en sauter . Les trois premièrs certifications prennent 400 heures chacune , et la certification finale prend 800 heures , et implique la construction de projets concrets pour les organisations caritatives.",
           ""
         ],
         [
           "http://i.imgur.com/k8btNUB.jpg",
-          "Una imagen de nuestro Certificado de Desarrollo de Interfaces",
-          "Para obtener nuestra certificación verificada de Desarrollo de Interfaces, construirás 10 proyectos usando HTML, CSS, jQuery y JavaScript.",
+          "Une capture d'écran de notre certificat développeur Front-End",
+          "Pour réussir notre certificat Front-End vérifié, vous allez construire 10 projets utilisant HTML , CSS , jQuery et JavaScript.",
           ""
         ],
         [
           "http://i.imgur.com/Et3iD74.jpg",
-          "Una imagen de nuestro Certificado de Visualización de Datos",
-          "Para obtener nuestra certificación en Visualización de Datos, construirás 10 proyectos usando React, Sass y D3.js.",
+          "Une capture d'écran de notre certificat de visualisation de données",
+          "Pour gagner notre certification de visualisation de données , vous allez construire 10 projets utilisant Réagir, Sass et D3.js.",
           ""
         ],
         [
           "http://i.imgur.com/8v3t84p.jpg",
-          "Una imagen de nuestro Certificado de Desarrollo al Lado del Servidor",
-          "Para obtener nuestro Certificado de Desarrollo al Lado del Servidor, construirás 10 proyectos empleando Node.js, Express y MongoDB. Usarás Git y Heroku para desplegarlos en la nube.",
+          "Une capture d'écran de notre certificat Back-End",
+          "Pour gagner notre certification de développeur Back-End, vous allez construire 10 projets utilisant Node.js , Express, et MongoDB . Vous allez utiliser Git et Heroku de les déployer dans le cloud.",
           ""
         ],
         [
           "http://i.imgur.com/yXyxbDd.jpg",
-          "Una imagen de nuestro directorio de organizaciones sin ánimo de lucro.",
-          "Después de completar todos los tres certificados, harás equipo con otro campista y usarás metodologías de desarrollo ágil para construir dos proyectos de la vida real para organizaciones sin ánimo de lucro. También añadirás funcionalidad a dos proyectos de fuentes legadas de organizaciones sin ánimo de lucro.  Cuando termines esto, tendrás un portafolio de aplicaciones reales que la gente usa a diario. ",
+          "Une capture d'écran de notre répertoire de projet à but non lucratif.",
+          "Après avoir effectué tous les trois de ces certificats , vous faites équipe avec un autre développeur et utilisez agiles méthodologies de développement de logiciel pour construire deux projets de la vie réelle pour les organismes sans but lucratif . Vous aurez également d'ajouter des fonctionnalités à deux projets à but non lucratif de code hérité. Au moment où vous avez terminé, vous aurez un portefeuille de véritables applications que les gens utilisent tous les jours.",
           ""
         ],
         [
           "http://i.imgur.com/PDGQ9ZM.jpg",
-          "Una imagen de nuestros campistas construyendo proyectos juntos en un café en Seoul.",
-          "Si completas todas las 2,080 horas de desafíos y proyectos, obtendrás un Certificado de Desarrollo de Pila Completa.  Te ofreceremos gratuitamente una práctica en entrevistas para desarrolladores. Incluso ofrecemos un directorio de trabajos donde los empleadores contratan específicamente campistas que han recibido certificaciones de Free Code Camp.",
+          "Une image de campeurs construction des projets ensemble dans un café de Séoul ",
+          "Si vous finissez les 2.080 heures de défis et projets, vous gagnerez notre certification complète Stack développement . Nous vous offrons gratuitement la pratique d'entrevue de codage . Nous offrons même un accès à notre si d'emploi où les employeurs embauchent spécifiquement les développeurs qui ont obtenu des certificats de Free Code Camp.",
           ""
         ]
       ],
-      "nameFr": "Apprenez comment FreeCodeCamp fonctionne",
-      "descriptionFr": [
+      "titleEs": "Aprende como funciona Free Code Camp",
+      "descriptionEs": [
         [
           "http://i.imgur.com/6ibIavQ.jpg",
-          "Une idée des avantages de Free Code Camp: restez connecté , apprenez le JavaScript , construisez votre portfolio , Aidez les organismes sans but lucratif",
-          "Bienvenue sur Free Code Camp . Nous sommes une communauté opensource de gens passionnés qui apprend à coder et aide les organisations à but non lucratif.",
+          "Una imagen de los 4 beneficios de Free Code Camp: Conéctate, Aprende JavaScript, Construye tu  Portafolio, Ayuda organizaciones sin ánimo de lucro",
+          "Bienvenido a Free Code Camp. Somos una comunidad de código abierto formada por personas ocupadas quienes aprenden a programar y ayudan a organizaciones sin ánimo de lucro.",
           ""
         ],
         [
           "http://i.imgur.com/Elb3dfj.jpg",
-          "Une capture d'écran de certains de nos développeurs réunis à Toronto.",
-          "<bold>Apprendre à code est dur.</bold> Pour réussir, vous aurez besoin de beaucoup de pratique et de soutien. Voilà pourquoi nous avons créé un programme rigoureux et une communauté de soutien.",
+          "Una imagen de algunos de nuestros campistas programando juntos en Toronto.",
+          "<bold>Aprender a programar es difícil.</bold> Para tener éxito, necesitarás mucha práctica y apoyo. Por eso es que hemos creado un riguroso currículo y una comunidad de apoyo.",
           ""
         ],
         [
           "http://i.imgur.com/D7Y5luw.jpg",
-          "Un graphique de la vitesse de croissance de l'emploi face à la croissance du nombre de diplômés en études d'informatique . Il y a 1,4 million d'emplois et seulement 400 000 personnes pour les occuper.",
-          "Il y a des milliers d'emplois de développeurs actuellement vacants, et la demande pour les développeurs augmente chaque année.",
+          "Una gráfica del crecimiento de trabajos en comparación con los graduados en un pregrado de ciencias de la computación. Hay 1.4 millones de empleos y solo 400 mil personas para ocuparlos.",
+          "Actualmente, hay miles de trabajos de programación sin ocupar, y la demanda de programadores crece cada año.",
           ""
         ],
         [
           "http://i.imgur.com/WD3STY6.jpg",
-          "Photos de trois développeurs qui ont obtenu un emploi après l'apprentissage de code au Free Code Camp.",
-          "Free Code Camp est une voie éprouvée pour obtenir votre premier job de développeur. En fait , personne n'a jamais accompli l'ensemble de notre programme , car nos développeurs ont trouvé un emploi avant qu'ils ne soient en mesure de le finir notre parcours.",
+          "Fotos de tres campistas quienes obtuvieron trabajos después de aprender a programar en Free Code Camp.",
+          "Free Code Camp es un camino probado para que obtengas tu primer trabajo de programación. De hecho, nadie actualmente ha completado nuestro programa entero, porque los campistas obtienen trabajos antes de poder hacerlo.",
           ""
         ],
         [
           "http://i.imgur.com/vLNso6h.jpg",
-          "Une illustration montrant que vous allez apprendre HTML5 , CSS3 , JavaScript , bases de données , Git , Node.js , React et D3.",
-          "Nous avons des centaines de défis de codage optionnels qui vous apprendront les fondamentaux du développement web comme HTML5 , Node.js et les bases de données.",
+          "Una ilustración mostrando que aprenderás HTML5, CSS3, JavaScript, Bases de Datos, Git, Node.js, react y D3.",
+          "Tenemos cientos de desafíos de programación opcionales que te enseñarán las tecnologías fundamentales para el desarrollo web como HTML5, Node.js y bases de datos.",
           ""
         ],
         [
           "http://i.imgur.com/UVB9hxp.jpg",
-          "Une image d'un développeur dans un café projets sur Camp Code Free.",
-          "Nous croyons que les êtres humains apprennent mieux par la pratique . De sorte que vous passerez la plupart de votre temps à construire efficacement des projets. Nous allons vous donner une liste de spécifications ( des témoignages d'utilisateurs agiles ) , et vous allez comprendre comment construire des applications qui répondent à ces spécifications.",
+          "Una foto de un campista en un café construyendo proyectos con Free Code Camp.",
+          "Creemos que los humanos aprender mejor haciendo.  Así que en realidad emplearás la mayoría de tu tiempo construyendo proyectos.  Te daremos una lista de especificaciones (historias de usuario ágiles), y te las ingeniarás para construir aplicaciones que cumplan esas especificaciones.",
           ""
         ],
         [
-          "http://i.imgur.com/pbW7K5S.jpg",
-          "Une image pour montrer notre front-end, back end, et data visualisation certificat ( 400 heures chacun) , nos projets à but non lucratif (800 heures) , et l'interview de préparation ( 80 heures ) pour un total de 2080 heures d'expérience de codage.",
-          "Notre programme est divisé en 4 certifications . Ces certifications sont standardisés , et immédiatement vérifiable par vos clients indépendants et les futurs employeurs . Comme tout le reste au Code Camp gratuit, ces certifications sont gratuits. Nous vous recommandons de les faire dans l'ordre, mais vous êtes libre d'en sauter . Les trois premièrs certifications prennent 400 heures chacune , et la certification finale prend 800 heures , et implique la construction de projets concrets pour les organisations caritatives.",
+          "http://i.imgur.com/pbW7K5S.jpgk",
+          "Una imagen de los tiempos de nuestras certificaciones para desarrollo de interfaces, desarrollo al lado del servidor y visualización de datos (400 horas cada uno), para nuestros proyectos sin ánimo de lucro (800 horas) y preparación para entrevistas (80 horas) que dan un total de 2,080 horas e experiencia programando.",
+          "Nuestro currículo se divide en 4 certificaciones.  Estas certificaciones están estandarizadas, y son verificables al instante por sus clientes como trabajador independiente y por sus futuros empleadores.  Tal como todo lo demás en Free Code Camp, estas certificaciones son gratuitas.  Recomendamos hacerlas en orden, pero usted es libre de saltar de una a otra.  Las primeras tres certificaciones requieren 400 horas cada una, y la certificación final requiere 800 horas, e involucra construir proyectos de la vida real para organizaciones sin ánimo de lucro.",
           ""
         ],
         [
           "http://i.imgur.com/k8btNUB.jpg",
-          "Une capture d'écran de notre certificat développeur Front-End",
-          "Pour réussir notre certificat Front-End vérifié, vous allez construire 10 projets utilisant HTML , CSS , jQuery et JavaScript.",
+          "Una imagen de nuestro Certificado de Desarrollo de Interfaces",
+          "Para obtener nuestra certificación verificada de Desarrollo de Interfaces, construirás 10 proyectos usando HTML, CSS, jQuery y JavaScript.",
           ""
         ],
         [
           "http://i.imgur.com/Et3iD74.jpg",
-          "Une capture d'écran de notre certificat de visualisation de données",
-          "Pour gagner notre certification de visualisation de données , vous allez construire 10 projets utilisant Réagir, Sass et D3.js.",
+          "Una imagen de nuestro Certificado de Visualización de Datos",
+          "Para obtener nuestra certificación en Visualización de Datos, construirás 10 proyectos usando React, Sass y D3.js.",
           ""
         ],
         [
           "http://i.imgur.com/8v3t84p.jpg",
-          "Une capture d'écran de notre certificat Back-End",
-          "Pour gagner notre certification de développeur Back-End, vous allez construire 10 projets utilisant Node.js , Express, et MongoDB . Vous allez utiliser Git et Heroku de les déployer dans le cloud.",
+          "Una imagen de nuestro Certificado de Desarrollo al Lado del Servidor",
+          "Para obtener nuestro Certificado de Desarrollo al Lado del Servidor, construirás 10 proyectos empleando Node.js, Express y MongoDB. Usarás Git y Heroku para desplegarlos en la nube.",
           ""
         ],
         [
           "http://i.imgur.com/yXyxbDd.jpg",
-          "Une capture d'écran de notre répertoire de projet à but non lucratif.",
-          "Après avoir effectué tous les trois de ces certificats , vous faites équipe avec un autre développeur et utilisez agiles méthodologies de développement de logiciel pour construire deux projets de la vie réelle pour les organismes sans but lucratif . Vous aurez également d'ajouter des fonctionnalités à deux projets à but non lucratif de code hérité. Au moment où vous avez terminé, vous aurez un portefeuille de véritables applications que les gens utilisent tous les jours.",
+          "Una imagen de nuestro directorio de organizaciones sin ánimo de lucro.",
+          "Después de completar todos los tres certificados, harás equipo con otro campista y usarás metodologías de desarrollo ágil para construir dos proyectos de la vida real para organizaciones sin ánimo de lucro. También añadirás funcionalidad a dos proyectos de fuentes legadas de organizaciones sin ánimo de lucro.  Cuando termines esto, tendrás un portafolio de aplicaciones reales que la gente usa a diario. ",
           ""
         ],
         [
           "http://i.imgur.com/PDGQ9ZM.jpg",
-          "Une image de campeurs construction des projets ensemble dans un café de Séoul ",
-          "Si vous finissez les 2.080 heures de défis et projets, vous gagnerez notre certification complète Stack développement . Nous vous offrons gratuitement la pratique d'entrevue de codage . Nous offrons même un accès à notre si d'emploi où les employeurs embauchent spécifiquement les développeurs qui ont obtenu des certificats de Free Code Camp.",
+          "Una imagen de nuestros campistas construyendo proyectos juntos en un café en Seoul.",
+          "Si completas todas las 2,080 horas de desafíos y proyectos, obtendrás un Certificado de Desarrollo de Pila Completa.  Te ofreceremos gratuitamente una práctica en entrevistas para desarrolladores. Incluso ofrecemos un directorio de trabajos donde los empleadores contratan específicamente campistas que han recibido certificaciones de Free Code Camp.",
           ""
         ]
       ]
     },
     {
       "id": "560add37cb82ac38a17513bf",
-      "title": "Create a GitHub Account and Join our Chat Rooms",
-      "description": [
+      "descriptionJa": [
         [
           "http://i.imgur.com/EAR7Lvh.jpg",
-          "A screenshot of our one of our Gitter chat rooms.",
-          "Before we start coding, let's join Free Code Camp's chat rooms. You can come here any time of day to hang out, ask questions, or find another camper to pair program with. First you'll need a GitHub account.",
+          "Gitterチャットルームの一場面です。",
+          "コーディングを始める前に、Free Code Camp のチャットルームに参加してください。いつでも、雑談や質問ができたりペアプログラミングをするための仲間を見つけ流ことができます。最初に Github アカウントが必要です。",
           ""
         ],
         [
           "http://i.imgur.com/n6GeSEm.gif",
-          "A gif showing you to click the link below to go to GitHub. Fill in the necessary fields and click submit. Then check your email inbox for an email from GitHub so you can verify your account.",
-          "Click the \"Open link in new tab\" button below to open up GitHub. Create a GitHub account by filling in the form. Be sure to use your real email address - GitHub will keep this private. Then check your email inbox for an email from GitHub. Open it and click the \"verify email address\" button inside it. <br><div class=\"small\">Note: If you already have a GitHub account, you can skip this step by clicking \"Open link in new tab\", closing the new tab that opens, then clicking \"go to my next step\". We removed our \"skip step\" button because many people would just click it repeatedly without doing these important steps.</div>",
+          "この gif は Github を開始するまでの流れを表しています。必要な欄に情報を入れて登録をしてください。そして Github からあなたのメールアドレス宛にメールが届きますのでアカウントを承認してください。",
+          "\"Open link in new tab\"をクリックして Github を開いてください。 必要な欄に情報を入力して GitHub アカウントを作ってください。実際に使われている email アドレスかを確認してください( GitHub にはこの情報が保存されます )。メールアドレス宛に GitHub からメールが来たことを確認してください。 メールにある\"verify email address\"をクリックして開いてください。<br><div class=\"small\">注意： もしすでに GitHub アカウントを持っていたら、あなたは \"Open link in new tab\" をクリックすることでこのステップを飛ばすことができます、新しく開かれたタブを閉じて \"go to my next step\" をクリックしてください。私たちはこの大事なステップが飛ばされてしまうのを防ぐために \"このステップを飛ばす\" ボタンは削除してあります。</div>",
           "https://github.com/join"
         ],
         [
           "http://i.imgur.com/hFqAEr8.gif",
-          "A gif showing you how to click the profile image in the upper right hand corner of GitHub. Upload a photo of yourself or you will continue to use the automatically generated pixel art. Then fill in the remaining form fields and click submit.",
-          "Click the pixel art in the upper right hand corner of GitHub, then choose settings. Upload a picture of yourself. A picture of your face works best. This is how your fellow campers will see you in our chat rooms, so look your best. You can add your city and your name if you want.",
+          "この gif は Github の右上にあるプロフィール画像をクリックする方法です。あなたの写真をアップロードするか、自動で生成されるピクセルアートを利用してください。そして、残りの欄に情報を入力し submit ボタンを押してください。",
+          "GitHub の右上に表示されているピクセルアートをクリックしてください、そして settings を選んでください。あなたの画像をアップロードしてください。画像はあなたの顔が写っていると良いです。他のキャンパーズの仲間たちがチャットルームであなたを見かけるようになります。住んでいる場所や名前を登録することもできます",
           "https://github.com/settings/profile"
         ],
         [
           "http://i.imgur.com/pYk0wOk.gif",
-          "A gif showing how you can star a GitHub repo.",
-          "Open Free Code Camp's open-source repository. This is where our volunteer team collaborates on building Free Code Camp. You can \"star\" our repository. \"Starring\" is the GitHub equivalent of \"liking\" something.",
+          "この gif は GitHub のレポジトリへのスターをつける方法です。",
+          "オープンソースの Free Code Camp のレポジトリを開いてください。これは私たちボランティアチームの協力者が Free Code Camp で作っているものです。あなたは \"star\" を私たちのリポジトリに付けることができます。\"star を付けること\"は GitHub での \"いいね\" と一緒です。",
           "https://github.com/freecodecamp/freecodecamp"
         ],
         [
           "http://i.imgur.com/OmRmLB4.gif",
-          "A gif showing you how to click the link below to go to our chat room and click the \"sign in with GitHub\" button. Then you can click into the text input field and type a message to your fellow campers.",
-          "Now that you have a GitHub account, you can join our main chat room by logging in with GitHub. Introduce yourself by saying \"Hello world!\" Tell your fellow campers how you found Free Code Camp. Also tell us why you want to learn to code.",
+          "この git は私たちのチャットルームへのリンクをクリックして、\"sign in with GitHub\" ボタンをクリックしています。そして、テキストを入力してキャンパーズの仲間へメッセージを送る方法を表しています。",
+          "あなたは Github のアカウントを持っているので、私たちのチャットルームへ GitHub を利用してログインできます。\"Hellow world!\" と言って自己紹介をし、あなたがどうやって Free Code Camp を見つけたかや何故プログラミングを学びたいのかを私たちに話してください。",
           "https://gitter.im/FreeCodeCamp/FreeCodeCamp"
         ],
         [
           "http://i.imgur.com/Ecs5XAd.gif",
-          "A gif showing you how you can click the settings button in the upper right hand corner and modify your notification settings.",
-          "Our chat rooms are extremely active. You should change your settings so you're only notified if someone mentions you.",
+          "この gif は右上の settings ボタンを押すことで、通知の設定を変更する方法を表しています。",
+          "私たちのチャットルームはとても活発です。あなたは誰かがあなたに対してメンションを送った時にだけ通知してもらうように設定を変更した方が良いでしょう。",
           ""
         ],
         [
           "http://i.imgur.com/T0bGJPe.gif",
-          "A gif showing how you can click on a user profile image to initiate a private message with that user.",
-          "Please note that all of our chat rooms are visible to the public. If you need to share sensitive information, such as an email address or phone number, do it in a private message.",
+          "この gif はどうやって該当するユーザに向けて個人的なメーッセージを送れるようにするかを表しています。",
+          "私たちのチャットルームは全て公開されているので、もしあなたが個人的な情報(メールアドレスや電話番号)を共有したい場合には、プライベートメッセージを利用してください。",
           ""
         ],
         [
           "http://i.imgur.com/vDTMJSh.gif",
-          "A gif showing that you can tab back and forth between challenges and our chat rooms.",
-          "Keep our chat room open while you work through our challenges. That way, you can ask for help if you get stuck. You can also socialize with other campers when you feel like taking a break.",
+          "この gif はチャレンジとチャットルームへの行き来がタブを戻すことでできることを表しています。",
+          "私たちのチャレンジを通して作業をしている間はチャットルームを開いておくと良いでしょう。そうすることで、必要な時に助けを求めることができます。あなたは休憩をしているかのように他のキャンパーズと関わりを持てるでしょう。",
           ""
         ],
         [
           "http://i.imgur.com/WvQvNGN.gif",
-          "A gif showing how you can click the link below to download a native chat room app for your computer.",
-          "You can also download the chat room app to your computer or phone.",
+          "この gif は、チャットルームアプリをあなたのコンピュータに直接インストールするためにダウンロードする方法を表しています。",
+          "チャットルームのアプリをスマホや自分のパソコンにダウンロードして使うことができます。",
           "https://gitter.im/apps"
         ]
       ],
-      "challengeSeed": [],
-      "tests": [],
-      "type": "Waypoint",
-      "challengeType": 7,
-      "nameEs": "Crea una Cuenta de GitHub y Únete a nuestras Salas de Chat",
-      "descriptionEs": [
+      "title": "Create a GitHub Account and Join our Chat Rooms",
+      "description": [
         [
           "http://i.imgur.com/EAR7Lvh.jpg",
-          "Una imagen de una de nuestras salas de chat en Gitter.",
-          "Ahora únete a las salas de chat de Free Code Camp. Puedes venir aquí en cualquier momento para charlar, hacer preguntas, o encontrar otro campista para programar juntos. Primero necesitarás una cuenta de GitHub.",
+          "A screenshot of our one of our Gitter chat rooms.",
+          "Before we start coding, let's join Free Code Camp's chat rooms. You can come here any time of day to hang out, ask questions, or find another camper to pair program with. First you'll need a GitHub account.",
           ""
         ],
         [
           "http://i.imgur.com/n6GeSEm.gif",
-          "Una imagen mostrándote como pulsar en el enlace inferior para ir a GitHub, llenar los campos necesarios y enviarlos.",
-          "Crea una cuenta en GitHub. Asegúrate de usar tu dirección de correo real - GitHub mantendrá esto en privado.",
+          "A gif showing you to click the link below to go to GitHub. Fill in the necessary fields and click submit. Then check your email inbox for an email from GitHub so you can verify your account.",
+          "Click the \"Open link in new tab\" button below to open up GitHub. Create a GitHub account by filling in the form. Be sure to use your real email address - GitHub will keep this private. Then check your email inbox for an email from GitHub. Open it and click the \"verify email address\" button inside it. <br><div class=\"small\">Note: If you already have a GitHub account, you can skip this step by clicking \"Open link in new tab\", closing the new tab that opens, then clicking \"go to my next step\". We removed our \"skip step\" button because many people would just click it repeatedly without doing these important steps.</div>",
           "https://github.com/join"
         ],
         [
           "http://i.imgur.com/hFqAEr8.gif",
-          "Un gif mostrándote como pulsar en la imagen de perfil en la esquina superior derecha de GitHub. Sube una foto tuya o continuaras usando la imagen de píxeles generada automáticamente. Entonces llena los campos restantes y haz clic en enviar.",
-          "En la esquina superior derecha pulsa sobre la imagen de píxeles, entonces selecciona configuraciones. Sube una imagen tuya. Una foto de tu cara es mejor. Así es como tus compañeros campistas te verán en nuestras salas de chat, así que toma tu mejor ángulo. Puedes añadir tu ciudad y tu nombre si lo deseas.",
+          "A gif showing you how to click the profile image in the upper right hand corner of GitHub. Upload a photo of yourself or you will continue to use the automatically generated pixel art. Then fill in the remaining form fields and click submit.",
+          "Click the pixel art in the upper right hand corner of GitHub, then choose settings. Upload a picture of yourself. A picture of your face works best. This is how your fellow campers will see you in our chat rooms, so look your best. You can add your city and your name if you want.",
           "https://github.com/settings/profile"
         ],
         [
           "http://i.imgur.com/pYk0wOk.gif",
-          "Un gif mostrándote como puedes dar una estrella a un repositorio de GitHub.",
-          "Ve al repositorio de código libre de Free Code Camp y dale una \"estrella\". Las \"estrellas\" son el equivalente en GitHub de los \"me gusta\".",
-          "Si quieres, ve al repositorio de código libre de Free Code Camp y dale una \"estrella\". Las \"estrellas\" son el equivalente en GitHub de los \"me gusta\".",
+          "A gif showing how you can star a GitHub repo.",
+          "Open Free Code Camp's open-source repository. This is where our volunteer team collaborates on building Free Code Camp. You can \"star\" our repository. \"Starring\" is the GitHub equivalent of \"liking\" something.",
           "https://github.com/freecodecamp/freecodecamp"
         ],
         [
           "http://i.imgur.com/OmRmLB4.gif",
-          "Un gif mostrándote como pulsar en el enlace inferior para ir a nuestra sala de chat y pulsar en el botón de \"iniciar sesión con GitHub\". Entonces puedes pulsar en el próximo campo de texto y escribir un mensaje a tus compañeros campistas.",
-          "Ahora que tienes una cuenta de GitHub, puedes unirte a nuestro chat principal al iniciar sesión con GitHub. Preséntate diciendo \"Hello world!\" Cuéntales a los tus compañeros campistas como encontraste Free Code Camp. Además cuéntanos porque deseas aprender a programar.",
+          "A gif showing you how to click the link below to go to our chat room and click the \"sign in with GitHub\" button. Then you can click into the text input field and type a message to your fellow campers.",
+          "Now that you have a GitHub account, you can join our main chat room by logging in with GitHub. Introduce yourself by saying \"Hello world!\" Tell your fellow campers how you found Free Code Camp. Also tell us why you want to learn to code.",
           "https://gitter.im/FreeCodeCamp/FreeCodeCamp"
         ],
         [
           "http://i.imgur.com/Ecs5XAd.gif",
-          "Un gif mostrándote como puedes pulsar en el botón de configuraciones en la esquina superior derecha y modificar tus configuraciones de notificaciones.",
-          "Nuestras salas de chat son extremadamente activas. Deberías cambiar tus configuraciones para ser notificado únicamente si alguien te menciona.",
+          "A gif showing you how you can click the settings button in the upper right hand corner and modify your notification settings.",
+          "Our chat rooms are extremely active. You should change your settings so you're only notified if someone mentions you.",
           ""
         ],
         [
           "http://i.imgur.com/T0bGJPe.gif",
-          "Un gif mostrándote como puedes pulsar en la imagen de perfil de un usuario para iniciar una conversación privada con ese usuario.",
-          "Por favor nota que todas nuestras salas de chat son visibles para el público. Si necesitas compartir información privada, como una dirección de correo o un número de teléfono, hazlo en un mensaje privado.",
+          "A gif showing how you can click on a user profile image to initiate a private message with that user.",
+          "Please note that all of our chat rooms are visible to the public. If you need to share sensitive information, such as an email address or phone number, do it in a private message.",
           ""
         ],
         [
           "http://i.imgur.com/vDTMJSh.gif",
-          "Un gif mostrándote que puedes cambiar entre desafíos y nuestras salas de chat.",
-          "Mantén nuestra sala de chat abierta mientras trabajas en nuestros desafíos. De esta manera, puedes pedir ayuda si quedas atascado. Además puedes socializar con otros campistas cuando quieras tomar un descanso.",
+          "A gif showing that you can tab back and forth between challenges and our chat rooms.",
+          "Keep our chat room open while you work through our challenges. That way, you can ask for help if you get stuck. You can also socialize with other campers when you feel like taking a break.",
           ""
         ],
         [
           "http://i.imgur.com/WvQvNGN.gif",
-          "Un gif mostrándote como puedes pulsar abajo para descargar una aplicación de chat nativa para tu computadora.",
-          "También puedes descargar la aplicación de chat para tu computadora o teléfono móvil.",
+          "A gif showing how you can click the link below to download a native chat room app for your computer.",
+          "You can also download the chat room app to your computer or phone.",
           "https://gitter.im/apps"
         ]
       ],
-      "nameFr": "Créer un compte GitHub et rejoignez nos Salons de chat",
+      "challengeSeed": [],
+      "tests": [],
+      "type": "Waypoint",
+      "titleFr": "Créer un compte GitHub et rejoignez nos Salons de chat",
       "descriptionFr": [
         [
           "http://i.imgur.com/EAR7Lvh.jpg",
@@ -414,63 +411,66 @@
           "https://gitter.im/apps"
         ]
       ],
-      "nameJa": "Githubアカウントを作成し、チャットに参加しましょう",
-      "descriptionJa": [
+      "titleEs": "Crea una Cuenta de GitHub y Únete a nuestras Salas de Chat",
+      "descriptionEs": [
         [
           "http://i.imgur.com/EAR7Lvh.jpg",
-          "Gitterチャットルームの一場面です。",
-          "コーディングを始める前に、Free Code Camp のチャットルームに参加してください。いつでも、雑談や質問ができたりペアプログラミングをするための仲間を見つけ流ことができます。最初に Github アカウントが必要です。",
+          "Una imagen de una de nuestras salas de chat en Gitter.",
+          "Ahora únete a las salas de chat de Free Code Camp. Puedes venir aquí en cualquier momento para charlar, hacer preguntas, o encontrar otro campista para programar juntos. Primero necesitarás una cuenta de GitHub.",
           ""
         ],
         [
           "http://i.imgur.com/n6GeSEm.gif",
-          "この gif は Github を開始するまでの流れを表しています。必要な欄に情報を入れて登録をしてください。そして Github からあなたのメールアドレス宛にメールが届きますのでアカウントを承認してください。",
-          "\"Open link in new tab\"をクリックして Github を開いてください。 必要な欄に情報を入力して GitHub アカウントを作ってください。実際に使われている email アドレスかを確認してください( GitHub にはこの情報が保存されます )。メールアドレス宛に GitHub からメールが来たことを確認してください。 メールにある\"verify email address\"をクリックして開いてください。<br><div class=\"small\">注意： もしすでに GitHub アカウントを持っていたら、あなたは \"Open link in new tab\" をクリックすることでこのステップを飛ばすことができます、新しく開かれたタブを閉じて \"go to my next step\" をクリックしてください。私たちはこの大事なステップが飛ばされてしまうのを防ぐために \"このステップを飛ばす\" ボタンは削除してあります。</div>",
+          "Una imagen mostrándote como pulsar en el enlace inferior para ir a GitHub, llenar los campos necesarios y enviarlos.",
+          "Crea una cuenta en GitHub. Asegúrate de usar tu dirección de correo real - GitHub mantendrá esto en privado.",
           "https://github.com/join"
         ],
         [
           "http://i.imgur.com/hFqAEr8.gif",
-          "この gif は Github の右上にあるプロフィール画像をクリックする方法です。あなたの写真をアップロードするか、自動で生成されるピクセルアートを利用してください。そして、残りの欄に情報を入力し submit ボタンを押してください。",
-          "GitHub の右上に表示されているピクセルアートをクリックしてください、そして settings を選んでください。あなたの画像をアップロードしてください。画像はあなたの顔が写っていると良いです。他のキャンパーズの仲間たちがチャットルームであなたを見かけるようになります。住んでいる場所や名前を登録することもできます",
+          "Un gif mostrándote como pulsar en la imagen de perfil en la esquina superior derecha de GitHub. Sube una foto tuya o continuaras usando la imagen de píxeles generada automáticamente. Entonces llena los campos restantes y haz clic en enviar.",
+          "En la esquina superior derecha pulsa sobre la imagen de píxeles, entonces selecciona configuraciones. Sube una imagen tuya. Una foto de tu cara es mejor. Así es como tus compañeros campistas te verán en nuestras salas de chat, así que toma tu mejor ángulo. Puedes añadir tu ciudad y tu nombre si lo deseas.",
           "https://github.com/settings/profile"
         ],
         [
           "http://i.imgur.com/pYk0wOk.gif",
-          "この gif は GitHub のレポジトリへのスターをつける方法です。",
-          "オープンソースの Free Code Camp のレポジトリを開いてください。これは私たちボランティアチームの協力者が Free Code Camp で作っているものです。あなたは \"star\" を私たちのリポジトリに付けることができます。\"star を付けること\"は GitHub での \"いいね\" と一緒です。",
+          "Un gif mostrándote como puedes dar una estrella a un repositorio de GitHub.",
+          "Ve al repositorio de código libre de Free Code Camp y dale una \"estrella\". Las \"estrellas\" son el equivalente en GitHub de los \"me gusta\".",
+          "Si quieres, ve al repositorio de código libre de Free Code Camp y dale una \"estrella\". Las \"estrellas\" son el equivalente en GitHub de los \"me gusta\".",
           "https://github.com/freecodecamp/freecodecamp"
         ],
         [
           "http://i.imgur.com/OmRmLB4.gif",
-          "この git は私たちのチャットルームへのリンクをクリックして、\"sign in with GitHub\" ボタンをクリックしています。そして、テキストを入力してキャンパーズの仲間へメッセージを送る方法を表しています。",
-          "あなたは Github のアカウントを持っているので、私たちのチャットルームへ GitHub を利用してログインできます。\"Hellow world!\" と言って自己紹介をし、あなたがどうやって Free Code Camp を見つけたかや何故プログラミングを学びたいのかを私たちに話してください。",
+          "Un gif mostrándote como pulsar en el enlace inferior para ir a nuestra sala de chat y pulsar en el botón de \"iniciar sesión con GitHub\". Entonces puedes pulsar en el próximo campo de texto y escribir un mensaje a tus compañeros campistas.",
+          "Ahora que tienes una cuenta de GitHub, puedes unirte a nuestro chat principal al iniciar sesión con GitHub. Preséntate diciendo \"Hello world!\" Cuéntales a los tus compañeros campistas como encontraste Free Code Camp. Además cuéntanos porque deseas aprender a programar.",
           "https://gitter.im/FreeCodeCamp/FreeCodeCamp"
         ],
         [
           "http://i.imgur.com/Ecs5XAd.gif",
-          "この gif は右上の settings ボタンを押すことで、通知の設定を変更する方法を表しています。",
-          "私たちのチャットルームはとても活発です。あなたは誰かがあなたに対してメンションを送った時にだけ通知してもらうように設定を変更した方が良いでしょう。",
+          "Un gif mostrándote como puedes pulsar en el botón de configuraciones en la esquina superior derecha y modificar tus configuraciones de notificaciones.",
+          "Nuestras salas de chat son extremadamente activas. Deberías cambiar tus configuraciones para ser notificado únicamente si alguien te menciona.",
           ""
         ],
         [
           "http://i.imgur.com/T0bGJPe.gif",
-          "この gif はどうやって該当するユーザに向けて個人的なメーッセージを送れるようにするかを表しています。",
-          "私たちのチャットルームは全て公開されているので、もしあなたが個人的な情報(メールアドレスや電話番号)を共有したい場合には、プライベートメッセージを利用してください。",
+          "Un gif mostrándote como puedes pulsar en la imagen de perfil de un usuario para iniciar una conversación privada con ese usuario.",
+          "Por favor nota que todas nuestras salas de chat son visibles para el público. Si necesitas compartir información privada, como una dirección de correo o un número de teléfono, hazlo en un mensaje privado.",
           ""
         ],
         [
           "http://i.imgur.com/vDTMJSh.gif",
-          "この gif はチャレンジとチャットルームへの行き来がタブを戻すことでできることを表しています。",
-          "私たちのチャレンジを通して作業をしている間はチャットルームを開いておくと良いでしょう。そうすることで、必要な時に助けを求めることができます。あなたは休憩をしているかのように他のキャンパーズと関わりを持てるでしょう。",
+          "Un gif mostrándote que puedes cambiar entre desafíos y nuestras salas de chat.",
+          "Mantén nuestra sala de chat abierta mientras trabajas en nuestros desafíos. De esta manera, puedes pedir ayuda si quedas atascado. Además puedes socializar con otros campistas cuando quieras tomar un descanso.",
           ""
         ],
         [
           "http://i.imgur.com/WvQvNGN.gif",
-          "この gif は、チャットルームアプリをあなたのコンピュータに直接インストールするためにダウンロードする方法を表しています。",
-          "チャットルームのアプリをスマホや自分のパソコンにダウンロードして使うことができます。",
+          "Un gif mostrándote como puedes pulsar abajo para descargar una aplicación de chat nativa para tu computadora.",
+          "También puedes descargar la aplicación de chat para tu computadora o teléfono móvil.",
           "https://gitter.im/apps"
         ]
-      ]
+      ],
+      "titleJa": "Githubアカウントを作成し、チャットに参加しましょう",
+      "challengeType": 7
     },
     {
       "id": "560add56cb82ac38a17513c0",
@@ -487,7 +487,7 @@
       "tests": [],
       "type": "Waypoint",
       "challengeType": 7,
-      "nameEs": "Configura tu portafolio de código",
+      "titleEs": "Configura tu portafolio de código",
       "descriptionEs": [
         [
           "http://i.imgur.com/tP2ccTE.gif",
@@ -518,7 +518,16 @@
       "tests": [],
       "type": "Waypoint",
       "challengeType": 7,
-      "nameEs": "Únete a un Campamento en Tu Ciudad",
+      "titleFr": "Configurer votre code portefeuille",
+      "descriptionFr": [
+        [
+          "http://i.imgur.com/tP2ccTE.gif",
+          "Un gif montrant comment vous pouvez cliquez sur l'image de votre profil dans votre coin supérieur droit à votre code portefeuille et connectez GitHub.",
+          "Vérifiez votre code portefeuille. Cliquez sur votre photo dans votre coin supérieur droit. Pour activer votre code portefeuille, vous'll nécessité de lier votre compte avec code sans GitHub Camp. Votre code portefeuille affiche votre progression et combien de bons points vous avez. Vous pouvez obtenir de bons points par remplir les défis et en aidant d'autres campeurs dans nos salles de chat. Si vous obtenez Brownie Points sur plusieurs jours d'affilée, vous'll obtenez une rayure.",
+          ""
+        ]
+      ],
+      "titleEs": "Únete a un Campamento en Tu Ciudad",
       "descriptionEs": [
         [
           "http://i.imgur.com/NAOFJWN.jpg",
@@ -532,15 +541,6 @@
           "Encuentra tu ciudad en esta lista y haz clic en esta. Esto te llevara al grupo de Facebook del Campamento de tu ciudad. Da clic en el botón de \"Unirse al grupo\" para unirte a el grupo. Alguien del mismo campamento debería aprobarte en breve. Si tu ciudad no esta en esta lista, ve al final del articulo de la wiki para ver instrucciones de como crear un campamento para tu ciudad.",
           "https://github.com/FreeCodeCamp/freecodecamp/wiki/List-of-Free-Code-Camp-city-based-Campsites"
         ]
-      ],
-      "nameFr": "Configurer votre code portefeuille",
-      "descriptionFr": [
-        [
-          "http://i.imgur.com/tP2ccTE.gif",
-          "Un gif montrant comment vous pouvez cliquez sur l'image de votre profil dans votre coin supérieur droit à votre code portefeuille et connectez GitHub.",
-          "Vérifiez votre code portefeuille. Cliquez sur votre photo dans votre coin supérieur droit. Pour activer votre code portefeuille, vous'll nécessité de lier votre compte avec code sans GitHub Camp. Votre code portefeuille affiche votre progression et combien de bons points vous avez. Vous pouvez obtenir de bons points par remplir les défis et en aidant d'autres campeurs dans nos salles de chat. Si vous obtenez Brownie Points sur plusieurs jours d'affilée, vous'll obtenez une rayure.",
-          ""
-        ]
       ]
     },
     {
@@ -600,105 +600,105 @@
       "tests": [],
       "type": "Waypoint",
       "challengeType": 7,
-      "nameEs": "Aprende que hacer si te quedas atascado",
-      "descriptionEs": [
+      "titleFr": "Apprenez quoi faire quand vous êtes bloqué ?",
+      "descriptionFr": [
         [
           "http://i.imgur.com/lzKvwU2.jpg",
-          "El texto \"Programar es difícil.\"",
-          "Programar es difícil. Quedarás atascado. Incluso programadores experimentados quedan atascados. La clave es saber como desatascarse.",
+          "Le texte \"Coder est difficile.\"",
+          "Coder est difficile. Vous serez bloqué un jour ou l'autre. Même les développeurs expérimentés peuvent être bloqués. La solution est de savoir comment se débloquer.",
           ""
         ],
         [
           "http://i.imgur.com/sfsidp6.jpg",
-          "El texto \"Volverse bueno programando requiere tiempo.\"",
-          "Volverse bueno programando requiere tiempo. No esperarías derrotar a un maestro del ajedrez después de jugar por 3 meses. No esperes crear el próximo Facebook después de programar 3 meses.",
+          "Le texte \"Etre un bon développeur prend du temps.\"",
+          "Etre un bon développeur prend du temps. Vous ne pouvez pas vous attendre à battre un maitre des echecs aprés 3 mois d'apprentissage. Ne vous attendez pas de construire le prochain Facebook aprés 3 mois de coding.",
           ""
         ],
         [
           "http://i.imgur.com/EoTfOyC.jpg",
-          "Una imagen de algunos de nuestros campistas programando juntos en Montreal.",
-          "Sigue practicando programación cada día y sal con otras personas que programen, y te volverás un programador listo para un trabajo.",
+          "Une image de quelques uns de nos développeurs codant ensemble à Montreal.",
+          "Continuez de développer tous les jours et fréquentez d'autres développeurs et vous deviendrez un développeur prêt à l'emploi.",
           ""
         ],
         [
           "http://i.imgur.com/EWWZBag.jpg",
-          "Una imagen con el texto \"1. Lee el error 2. Busca en Google 3. Pide ayuda.",
-          "En cualquier momento en el que te quedes atascado o no sepas que hacer a continuación: Lee-Busca-Pregunta.",
+          "Une image avec le texte \"1. Lisez l'erreur 2. Cherchez sur Google 3. Demandez de l'aide.",
+          "Chaque fois que vous êtes bloqué ou que vous ne savez pas quoi faire : Lisez-Cherchez-Demandez.",
           ""
         ],
         [
           "http://i.imgur.com/99BfAcK.jpg",
-          "Una imagen mostrando la documentación de jQuery",
-          "Primero, lee la documentación o el mensaje de error. Una habilidad clave que los buenos programadores poseen es el poder interpretar y seguir instrucciones.",
+          "Une image montrant la document jQuery",
+          "Lisez d'abord la documentation ou les messages d'erreurs. Le principal atout que les bon développeurs ont est la capacité d'interpréter et ensuite de suivre les instructions.",
           ""
         ],
         [
           "http://i.imgur.com/GxvrsFb.gif",
-          "Un gif mostrándote como hacer una búsqueda avanzada en Google. Primero, escribimos la consulta \"jquery no corre cuando mi página carga\". Entonces damos clic en el botón de herramientas y cambiamos la selección de \"En cualquier momento\" a \"en el último año\". Entonces hacemos clic en un resultado o leemos a través del artículo y encontramos nuestra respuesta.",
-          "Si eso no ayudo, busca en Google. Realizar buenas búsquedas en Google requiere mucha práctica. Cuando buscas en Google, usualmente querrás incluir el lenguaje o entorno (framework) que estás usando. También querrás limitar los resultados a un período reciente.",
+          "Une image vous montrant comment fiare des recherches avancées sur Google. On commence par rentrer la requète \"jquery ne fonctionne pas lors du chargement de ma page\". Puis nous cliquons sur la barre de recherche et changeons la case à cocher \"Any time\" cochons la case \"au cours de l'année précédente\". Puis nous cliquons sur le résultat et lisons l'article et trouvons notre réponse.",
+          "Si cela ne vous aide pas, recherchez sur Google. De bonnes recherches sur Google demande pas mal de pratique. Quand vous recherchez sur Google, vous devez inclure le langage ou le framework que vous utilisez. Vous voulez aussi limiter vos résultats a une période récente.",
           ""
         ],
         [
           "http://i.imgur.com/LZYU7p2.gif",
-          "Un gif mostrándonos como seguir el enlace inferior para ir a nuestra sala de chat de ayuda y preguntar \"jquery no corre cuando mi página carga\".",
-          "Si eso no te ayudó, pregúntale a tus amigos. Si tienes problemas, puedes preguntar a tus compañeros campistas en nuestra sala de chat.",
+          "Une image vous montrant le lien ci-dessous pour rejoindre le char et demander \"jquery ne fonctionne pas lors du chargement de ma page\".",
+          "Si cela ne vous aide pas, demande à vos amis. Si vous avez des difficultés, vous pouvez demander aux autres développeurs sur le chat.",
           "https://gitter.im/FreeCodeCamp/Help"
         ],
         [
           "http://i.imgur.com/ZRgXraT.gif",
-          "Un gif mostrándonos nuestro mapa de desafíos.",
-          "Ahora estas listo para empezar a programar. El botón de  \"Mapa\" en tu esquina superior derecha te mostrará nuestro mapa de desafíos. Te recomendaos que completes los desafíos de arriba hacía abajo, a un ritmo sostenible. Nuestra comunidad de código abierto esta constantemente mejorando nuestros desafíos, así que no te sorprendas si cambian o se mueven alrededor. No te preocupes por volver hacia atrás - solo continúa avanzando. Siempre puedes ir a tu desafío más reciente pulsando el botón de \"Aprender\".",
+          "Une image vous montrant le cursus de notre carte des défis.",
+          "Maintenant vous être prêt pour commencer à coder. Le boutton \"Map\" situé en haut à droite de votre écran vous montrera notre carte des défis. Nous vous recommandons de les completer du début jusqu'à la fin, régulièrement. Notre communauté open source continue de d'améliorer nos défis, ne soyez donc pas surpris si ils changent ou évoluent. Ce n'est pas la peine de revenir en arrière, continuez à progresser. Vous pouvez toujours accéder à nos derniers défis juste en cliquant sur le boutton \"Learn\".",
           ""
         ]
       ],
-      "nameFr": "Apprenez quoi faire quand vous êtes bloqué ?",
-      "descriptionFr": [
+      "titleEs": "Aprende que hacer si te quedas atascado",
+      "descriptionEs": [
         [
           "http://i.imgur.com/lzKvwU2.jpg",
-          "Le texte \"Coder est difficile.\"",
-          "Coder est difficile. Vous serez bloqué un jour ou l'autre. Même les développeurs expérimentés peuvent être bloqués. La solution est de savoir comment se débloquer.",
+          "El texto \"Programar es difícil.\"",
+          "Programar es difícil. Quedarás atascado. Incluso programadores experimentados quedan atascados. La clave es saber como desatascarse.",
           ""
         ],
         [
           "http://i.imgur.com/sfsidp6.jpg",
-          "Le texte \"Etre un bon développeur prend du temps.\"",
-          "Etre un bon développeur prend du temps. Vous ne pouvez pas vous attendre à battre un maitre des echecs aprés 3 mois d'apprentissage. Ne vous attendez pas de construire le prochain Facebook aprés 3 mois de coding.",
+          "El texto \"Volverse bueno programando requiere tiempo.\"",
+          "Volverse bueno programando requiere tiempo. No esperarías derrotar a un maestro del ajedrez después de jugar por 3 meses. No esperes crear el próximo Facebook después de programar 3 meses.",
           ""
         ],
         [
           "http://i.imgur.com/EoTfOyC.jpg",
-          "Une image de quelques uns de nos développeurs codant ensemble à Montreal.",
-          "Continuez de développer tous les jours et fréquentez d'autres développeurs et vous deviendrez un développeur prêt à l'emploi.",
+          "Una imagen de algunos de nuestros campistas programando juntos en Montreal.",
+          "Sigue practicando programación cada día y sal con otras personas que programen, y te volverás un programador listo para un trabajo.",
           ""
         ],
         [
           "http://i.imgur.com/EWWZBag.jpg",
-          "Une image avec le texte \"1. Lisez l'erreur 2. Cherchez sur Google 3. Demandez de l'aide.",
-          "Chaque fois que vous êtes bloqué ou que vous ne savez pas quoi faire : Lisez-Cherchez-Demandez.",
+          "Una imagen con el texto \"1. Lee el error 2. Busca en Google 3. Pide ayuda.",
+          "En cualquier momento en el que te quedes atascado o no sepas que hacer a continuación: Lee-Busca-Pregunta.",
           ""
         ],
         [
           "http://i.imgur.com/99BfAcK.jpg",
-          "Une image montrant la document jQuery",
-          "Lisez d'abord la documentation ou les messages d'erreurs. Le principal atout que les bon développeurs ont est la capacité d'interpréter et ensuite de suivre les instructions.",
+          "Una imagen mostrando la documentación de jQuery",
+          "Primero, lee la documentación o el mensaje de error. Una habilidad clave que los buenos programadores poseen es el poder interpretar y seguir instrucciones.",
           ""
         ],
         [
           "http://i.imgur.com/GxvrsFb.gif",
-          "Une image vous montrant comment fiare des recherches avancées sur Google. On commence par rentrer la requète \"jquery ne fonctionne pas lors du chargement de ma page\". Puis nous cliquons sur la barre de recherche et changeons la case à cocher \"Any time\" cochons la case \"au cours de l'année précédente\". Puis nous cliquons sur le résultat et lisons l'article et trouvons notre réponse.",
-          "Si cela ne vous aide pas, recherchez sur Google. De bonnes recherches sur Google demande pas mal de pratique. Quand vous recherchez sur Google, vous devez inclure le langage ou le framework que vous utilisez. Vous voulez aussi limiter vos résultats a une période récente.",
+          "Un gif mostrándote como hacer una búsqueda avanzada en Google. Primero, escribimos la consulta \"jquery no corre cuando mi página carga\". Entonces damos clic en el botón de herramientas y cambiamos la selección de \"En cualquier momento\" a \"en el último año\". Entonces hacemos clic en un resultado o leemos a través del artículo y encontramos nuestra respuesta.",
+          "Si eso no ayudo, busca en Google. Realizar buenas búsquedas en Google requiere mucha práctica. Cuando buscas en Google, usualmente querrás incluir el lenguaje o entorno (framework) que estás usando. También querrás limitar los resultados a un período reciente.",
           ""
         ],
-          [
+        [
           "http://i.imgur.com/LZYU7p2.gif",
-          "Une image vous montrant le lien ci-dessous pour rejoindre le char et demander \"jquery ne fonctionne pas lors du chargement de ma page\".",
-          "Si cela ne vous aide pas, demande à vos amis. Si vous avez des difficultés, vous pouvez demander aux autres développeurs sur le chat.",
+          "Un gif mostrándonos como seguir el enlace inferior para ir a nuestra sala de chat de ayuda y preguntar \"jquery no corre cuando mi página carga\".",
+          "Si eso no te ayudó, pregúntale a tus amigos. Si tienes problemas, puedes preguntar a tus compañeros campistas en nuestra sala de chat.",
           "https://gitter.im/FreeCodeCamp/Help"
         ],
         [
           "http://i.imgur.com/ZRgXraT.gif",
-          "Une image vous montrant le cursus de notre carte des défis.",
-          "Maintenant vous être prêt pour commencer à coder. Le boutton \"Map\" situé en haut à droite de votre écran vous montrera notre carte des défis. Nous vous recommandons de les completer du début jusqu'à la fin, régulièrement. Notre communauté open source continue de d'améliorer nos défis, ne soyez donc pas surpris si ils changent ou évoluent. Ce n'est pas la peine de revenir en arrière, continuez à progresser. Vous pouvez toujours accéder à nos derniers défis juste en cliquant sur le boutton \"Learn\".",
+          "Un gif mostrándonos nuestro mapa de desafíos.",
+          "Ahora estas listo para empezar a programar. El botón de  \"Mapa\" en tu esquina superior derecha te mostrará nuestro mapa de desafíos. Te recomendaos que completes los desafíos de arriba hacía abajo, a un ritmo sostenible. Nuestra comunidad de código abierto esta constantemente mejorando nuestros desafíos, así que no te sorprendas si cambian o se mueven alrededor. No te preocupes por volver hacia atrás - solo continúa avanzando. Siempre puedes ir a tu desafío más reciente pulsando el botón de \"Aprender\".",
           ""
         ]
       ]
diff --git a/seed/challenges/01-front-end-development-certification/advanced-bonfires.json b/seed/challenges/01-front-end-development-certification/advanced-bonfires.json
index 5fb09d2..71b516a 100644
--- a/seed/challenges/01-front-end-development-certification/advanced-bonfires.json
+++ b/seed/challenges/01-front-end-development-certification/advanced-bonfires.json
@@ -58,7 +58,7 @@
         "RegExp"
       ],
       "challengeType": 5,
-      "nameEs": "Valida Números Telefónicos de los EEUU",
+      "titleEs": "Valida Números Telefónicos de los EEUU",
       "descriptionEs": [
         "Haz que la función devuelva true (verdadero) si el texto introducido es un número válido en los EEUU.",
         "El usuario debe llenar el campo del formulario de la forma que desee siempre y cuando sea un número válido en los EEUU. Los números mostrados a continuación tienen formatos válidos en los EEUU:",
@@ -103,7 +103,7 @@
         "Symmetric Difference"
       ],
       "challengeType": 5,
-      "nameEs": "Diferencia simétrica",
+      "titleEs": "Diferencia simétrica",
       "descriptionEs": [
         "Crea una función que acepte dos o más arreglos y que devuelva un arreglo conteniendo la diferenia simétrica entre ambos",
         "En Matemáticas, el término 'diferencia simétrica' se refiere a los elementos en dos conjuntos que están en el primer conjunto o en el segundo, pero no en ambos.",
@@ -155,7 +155,7 @@
         "Global Object"
       ],
       "challengeType": 5,
-      "nameEs": "Cambio exacto",
+      "titleEs": "Cambio exacto",
       "descriptionEs": [
         "Crea una función que simule una caja registradora que acepte el precio de compra como el primer argumento, la cantidad recibida como el segundo argumento, y la cantidad de dinero disponible en la registradora (cid) como tercer argumento",
         "cid es un arreglo bidimensional que lista la cantidad de dinero disponible",
@@ -210,7 +210,7 @@
         "Global Array Object"
       ],
       "challengeType": 5,
-      "nameEs": "Actualizando el inventario",
+      "titleEs": "Actualizando el inventario",
       "descriptionEs": [
         "Compara y actualiza el inventario actual, almacenado en un arreglo bidimensional, contra otro arreglo bidimensional de inventario nuevo. Actualiza las cantidades en el inventario actual y, en caso de recibir una nueva mercancía, añade su nombre y la cantidad recibida al arreglo del inventario en orden alfabético.",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
@@ -249,7 +249,7 @@
         "RegExp"
       ],
       "challengeType": 5,
-      "nameEs": "Sin repeticiones, por favor",
+      "titleEs": "Sin repeticiones, por favor",
       "descriptionEs": [
         "Crea una función que devuelva el número total de permutaciones de las letras en la cadena de texto provista, en las cuales no haya letras consecutivas repetidas",
         "Por ejemplo, 'aab' debe retornar 2 porque, del total de 6 permutaciones posibles, solo 2 de ellas no tienen repetida la misma letra (en este caso 'a').",
@@ -295,7 +295,7 @@
         "parseInt()"
       ],
       "challengeType": 5,
-      "nameEs": "Rangos de fechas amigables",
+      "titleEs": "Rangos de fechas amigables",
       "descriptionEs": [
         "Convierte un rango de fecha que conste de dos fechas en formato AAAA-MM-DD a un formato más legible",
         "",
@@ -345,7 +345,7 @@
         "Details of the Object Model"
       ],
       "challengeType": 5,
-      "nameEs": "Crea una Persona",
+      "titleEs": "Crea una Persona",
       "descriptionEs": [
         "Completa el constructor de objetos con los métodos especificados en las pruebas.",
         "Los métodos son: getFirstName(), getLastName(), getFullName(), setFirstName(first), setLastName(last), y setFullName(firstAndLast). ",
@@ -386,7 +386,7 @@
         "Math.pow()"
       ],
       "challengeType": 5,
-      "nameEs": "Ubica los escombros",
+      "titleEs": "Ubica los escombros",
       "descriptionEs": [
         "Crea una función que devuelva un nuevo arreglo que transforme la altitud promedio del elemento en su período orbital.",
         "El arreglo debe contener objetos en el formato <code>{name: 'name', avgAlt: avgAlt}</code>.",
@@ -427,7 +427,7 @@
         "Array.reduce()"
       ],
       "challengeType": 5,
-      "nameEs": "En parejas",
+      "titleEs": "En parejas",
       "descriptionEs": [
         "Crea una función que devuelva la suma de todos los índices de los elementos de 'arr' que pueden ser emparejados con otro elemento de tal forma que la suma de ambos equivalga al valor del segundo argumento, 'arg'. Si varias combinaciones son posibles, devuelve la menor suma de índices. Una vez un elemento ha sido usado, no puede ser usado de nuevo para emparejarlo con otro elemento.",
         "Por ejemplo, pairwise([1, 4, 2, 3, 0, 5], 7) debe devolver 11 porque 4, 2, 3 y 5 pueden ser emparejados para obtener una suma de 7",
diff --git a/seed/challenges/01-front-end-development-certification/advanced-ziplines.json b/seed/challenges/01-front-end-development-certification/advanced-ziplines.json
index 1ca5dea..d845ac5 100644
--- a/seed/challenges/01-front-end-development-certification/advanced-ziplines.json
+++ b/seed/challenges/01-front-end-development-certification/advanced-ziplines.json
@@ -24,7 +24,6 @@
       "tests": [],
       "type": "zipline",
       "challengeType": 3,
-      "nameEs": "Crea una calculadora JavaScript",
       "descriptionEs": [
         "<span class='text-info'>Objetivo:</span> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a esta: <a href='http://codepen.io/FreeCodeCamp/full/zrRzMR' target='_blank'>http://codepen.io/FreeCodeCamp/full/zrRzMR</a>.",
         "<span class='text-info'>Regla #1:</span> No veas el código del proyecto de ejemplo en CodePen. Encuentra la forma de hacerlo por tu cuenta.",
@@ -36,7 +35,8 @@
         "Cuando hayas terminado, pulsa el botón de \"I've completed this challenge\" e incluye un enlace a tu CodePen. ",
         "Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiéndolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
       ],
-      "isRequired": true
+      "isRequired": true,
+      "titleEs": "Crea una calculadora JavaScript"
     },
     {
       "id": "bd7158d8c442eddfaeb5bd0f",
@@ -57,7 +57,9 @@
       ],
       "tests": [],
       "type": "zipline",
-      "nameRu": "Создайте таймер Pomodoro",
+      "isRequired": true,
+      "challengeType": 3,
+      "titleRu": "Создайте таймер Pomodoro",
       "descriptionRu": [
         "<span class='text-info'>Задание:</span> Создайте <a href='http://codepen.io' target='_blank'>CodePen.io</a> который успешно копирует вот этот: <a href='http://codepen.io/FreeCodeCamp/full/VemPZX' target='_blank'>http://codepen.io/FreeCodeCamp/full/VemPZX</a>.",
         "<span class='text-info'>Правило #1:</span> Не подсматривайте код приведенного на CodePen примера. Напишите его самостоятельно.",
@@ -71,7 +73,7 @@
         "Когда выполните задание кликните кнопку \"I've completed this challenge\" и добавьте ссылку на ваш CodePen. Если вы программировали с кем-то в паре, также добавьте имя вашего напарника.",
         "Если вы хотите получить немедленную оценку вашего проекта, нажмите эту кнопку и добавьте ссылку на ваш CodePen. В противном случае мы проверим его перед тем как вы приступите к проектам для некоммерческих организаций.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
       ],
-      "nameEs": "Crea un reloj pomodoro",
+      "titleEs": "Crea un reloj pomodoro",
       "descriptionEs": [
         "<span class='text-info'>Objetivo:</span> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a la de esta: <a href='http://codepen.io/FreeCodeCamp/full/VemPZX' target='_blank'>http://codepen.io/FreeCodeCamp/full/VemPZX</a>.",
         "<span class='text-info'>Regla #1:</span> No veas el código del proyecto de ejemplo en CodePen. Encuentra la forma de hacerlo por tu cuenta.",
@@ -82,9 +84,7 @@
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado.",
         "Cuando hayas terminado, pulsa el botón de \"I've completed this challenge\" e incluye un enlace a tu CodePen.",
         "Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiéndolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
-      ],
-      "isRequired": true,
-      "challengeType": 3
+      ]
     },
     {
       "id": "bd7158d8c442eedfaeb5bd1c",
@@ -106,7 +106,6 @@
       "tests": [],
       "type": "zipline",
       "challengeType": 3,
-      "nameEs": "Crea un juego de Tic Tac Toe",
       "descriptionEs": [
         "<span class='text-info'>Objetivo:</span> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a la de esta: <a href='http://codepen.io/FreeCodeCamp/full/adBpvw' target='_blank'>http://codepen.io/FreeCodeCamp/full/adBpvw</a>.",
         "<span class='text-info'>Regla #1:</span> No veas el código del proyecto de ejemplo en CodePen. Encuentra la forma de hacerlo por tu cuenta.",
@@ -118,7 +117,8 @@
         "Cuando hayas terminado, pulsa el botón de \"I've completed this challenge\" e incluye un enlace a tu CodePen.",
         "Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiéndolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
       ],
-      "isRequired": true
+      "isRequired": true,
+      "titleEs": "Crea un juego de Tic Tac Toe"
     },
     {
       "id": "bd7158d8c442eddfaeb5bd1c",
@@ -146,7 +146,6 @@
       "tests": [],
       "type": "zipline",
       "challengeType": 3,
-      "nameEs": "Construye un juego de Simon",
       "descriptionEs": [
         "<span class='text-info'>Objetivo:</span> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a la de esta: <a href='http://codepen.io/Em-Ant/full/QbRyqq/' target='_blank'>http://codepen.io/Em-Ant/full/QbRyqq/</a>.",
         "<span class='text-info'>Regla #1:</span> No veas el código del proyecto de ejemplo en CodePen. Encuentra la forma de hacerlo por tu cuenta.",
@@ -164,7 +163,8 @@
         "Cuando hayas terminado, pulsa el botón de \"I've completed this challenge\" e incluye un enlace a tu CodePen.",
         "Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiéndolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
       ],
-      "isRequired": true
+      "isRequired": true,
+      "titleEs": "Construye un juego de Simon"
     }
   ]
 }
diff --git a/seed/challenges/01-front-end-development-certification/basic-bonfires.json b/seed/challenges/01-front-end-development-certification/basic-bonfires.json
index 47cf69c..eb11c40 100644
--- a/seed/challenges/01-front-end-development-certification/basic-bonfires.json
+++ b/seed/challenges/01-front-end-development-certification/basic-bonfires.json
@@ -37,8 +37,7 @@
       "tests": [],
       "type": "Waypoint",
       "challengeType": 7,
-      "nameEs": "Prepárate para nuestros Desafíos sobre Algoritmos",
-      "descriptionEs":  [
+      "descriptionEs": [
         [
           "http://i.imgur.com/sJkp30a.png",
           "Una imagen de un desafio sobre algoritmos que presenta instrucciones, pruebas y el editor de código.",
@@ -64,7 +63,8 @@
           ""
         ]
       ],
-      "isRequired": false
+      "isRequired": false,
+      "titleEs": "Prepárate para nuestros Desafíos sobre Algoritmos"
     },
     {
       "id": "a202eed8fc186c8434cb6d61",
@@ -82,10 +82,6 @@
         "",
         "reverseString(\"hello\");"
       ],
-      "isRequired": true,
-      "solutions": [
-        "function reverseString(str) {\n  return str.split('').reverse().join(\"\");\n}\n\nreverseString('hello');\n"
-      ],
       "tests": [
         "assert(typeof reverseString(\"hello\") === \"string\", 'message: <code>reverseString(\"hello\")</code> should return a string.');",
         "assert(reverseString(\"hello\") === \"olleh\", 'message: <code>reverseString(\"hello\")</code> should become <code>\"olleh\"</code>.');",
@@ -93,6 +89,10 @@
         "assert(reverseString(\"Greetings from Earth\") === \"htraE morf sgniteerG\", 'message: <code>reverseString(\"Greetings from Earth\")</code> should return <code>\"htraE morf sgniteerG\"</code>.');"
       ],
       "type": "bonfire",
+      "isRequired": true,
+      "solutions": [
+        "function reverseString(str) {\n  return str.split('').reverse().join(\"\");\n}\n\nreverseString('hello');\n"
+      ],
       "MDNlinks": [
         "Global String Object",
         "String.split()",
@@ -100,7 +100,7 @@
         "Array.join()"
       ],
       "challengeType": 5,
-      "nameEs": "Invierte el texto",
+      "titleEs": "Invierte el texto",
       "descriptionEs": [
         "Invierte la cadena de texto que se te provee",
         "Puede que necesites convertir la cadena de texto en un arreglo antes de que puedas invertirla",
@@ -125,10 +125,6 @@
         "",
         "factorialize(5);"
       ],
-      "isRequired": true,
-      "solutions": [
-        "function factorialize(num) {\n  return num < 1 ? 1 : num * factorialize(num-1);\n}\n\nfactorialize(5);\n"
-      ],
       "tests": [
         "assert(typeof factorialize(5) === 'number', 'message: <code>factorialize(5)</code> should return a number.');",
         "assert(factorialize(5) === 120, 'message: <code>factorialize(5)</code> should return 120.');",
@@ -137,11 +133,15 @@
         "assert(factorialize(0) === 1, 'message: <code>factorialize(0)</code> should return 1.');"
       ],
       "type": "bonfire",
+      "isRequired": true,
+      "solutions": [
+        "function factorialize(num) {\n  return num < 1 ? 1 : num * factorialize(num-1);\n}\n\nfactorialize(5);\n"
+      ],
       "MDNlinks": [
         "Arithmetic Operators"
       ],
       "challengeType": 5,
-      "nameEs": "Factoriza un número",
+      "titleEs": "Factoriza un número",
       "descriptionEs": [
         "Crea una función que devuelva el factorial del número entero que se te provee",
         "El factorial de un número entero positivo n es la multiplicación de todos los enteros positivos menores o iguales a n",
@@ -170,10 +170,6 @@
         "",
         "palindrome(\"eye\");"
       ],
-      "isRequired": true,
-      "solutions": [
-        "function palindrome(str) {\n  var string = str.toLowerCase().split(/[^A-Za-z0-9]/gi).join('');\n  var aux = string.split('');\n  if (aux.join('') === aux.reverse().join('')){\n    return true;\n  }\n\n  return false;\n}"
-      ],
       "tests": [
         "assert(typeof palindrome(\"eye\") === \"boolean\", 'message: <code>palindrome(\"eye\")</code> should return a boolean.');",
         "assert(palindrome(\"eye\") === true, 'message: <code>palindrome(\"eye\")</code> should return true.');",
@@ -188,12 +184,16 @@
         "assert(palindrome(\"0_0 (: /-\\ :) 0-0\") === true, 'message: <code>palindrome(\"0_0 (: /-\\ :) 0-0\")</code> should return true.');"
       ],
       "type": "bonfire",
+      "isRequired": true,
+      "solutions": [
+        "function palindrome(str) {\n  var string = str.toLowerCase().split(/[^A-Za-z0-9]/gi).join('');\n  var aux = string.split('');\n  if (aux.join('') === aux.reverse().join('')){\n    return true;\n  }\n\n  return false;\n}"
+      ],
       "MDNlinks": [
         "String.replace()",
         "String.toLowerCase()"
       ],
       "challengeType": 5,
-      "nameEs": "Verifica si es palíndromo",
+      "titleEs": "Verifica si es palíndromo",
       "descriptionEs": [
         "Crea una función que devuelva <code>true</code> si una cadena de texto dada es un palíndromo, y que devuelva <code>false</code> en caso contrario",
         "Un palíndromo es una palabra u oración que se escribe de la misma forma en ambos sentidos, sin tomar en cuenta signos de puntuación, espacios y sin distinguir entre mayúsculas y minúsculas.",
@@ -217,10 +217,6 @@
         "",
         "findLongestWord(\"The quick brown fox jumped over the lazy dog\");"
       ],
-      "isRequired": true,
-      "solutions": [
-        "function findLongestWord(str) {\n  return str.split(' ').sort(function(a, b) { return b.length - a.length;})[0].length;\n}\n\nfindLongestWord('The quick brown fox jumped over the lazy dog');\n"
-      ],
       "tests": [
         "assert(typeof findLongestWord(\"The quick brown fox jumped over the lazy dog\") === \"number\", 'message: <code>findLongestWord(\"The quick brown fox jumped over the lazy dog\")</code> should return a number.');",
         "assert(findLongestWord(\"The quick brown fox jumped over the lazy dog\") === 6, 'message: <code>findLongestWord(\"The quick brown fox jumped over the lazy dog\")</code> should return 6.');",
@@ -230,12 +226,16 @@
         "assert(findLongestWord(\"What if we try a super-long word such as otorhinolaryngology\") === 19, 'message: <code>findLongestWord(\"What if we try a super-long word such as otorhinolaryngology\")</code> should return 19.');"
       ],
       "type": "bonfire",
+      "isRequired": true,
+      "solutions": [
+        "function findLongestWord(str) {\n  return str.split(' ').sort(function(a, b) { return b.length - a.length;})[0].length;\n}\n\nfindLongestWord('The quick brown fox jumped over the lazy dog');\n"
+      ],
       "MDNlinks": [
         "String.split()",
         "String.length"
       ],
       "challengeType": 5,
-      "nameEs": "Encuentra la palabra más larga",
+      "titleEs": "Encuentra la palabra más larga",
       "descriptionEs": [
         "Crea una función que devuelva la longitud de la palabra más larga en una frase dada",
         "El resultado debe ser un número",
@@ -257,10 +257,6 @@
         "",
         "titleCase(\"I'm a little tea pot\");"
       ],
-      "isRequired": true,
-      "solutions": [
-        "function titleCase(str) {\n  return str.split(' ').map(function(word) {\n    return word.charAt(0).toUpperCase() + word.substring(1).toLowerCase();\n  }).join(' ');\n}\n\ntitleCase(\"I'm a little tea pot\");\n"
-      ],
       "tests": [
         "assert(typeof titleCase(\"I'm a little tea pot\") === \"string\", 'message: <code>titleCase(\"I&#39;m a little tea pot\")</code> should return a string.');",
         "assert(titleCase(\"I'm a little tea pot\") === \"I'm A Little Tea Pot\", 'message: <code>titleCase(\"I&#39;m a little tea pot\")</code> should return \"I&#39;m A Little Tea Pot\".');",
@@ -268,11 +264,15 @@
         "assert(titleCase(\"HERE IS MY HANDLE HERE IS MY SPOUT\") === \"Here Is My Handle Here Is My Spout\", 'message: <code>titleCase(\"HERE IS MY HANDLE HERE IS MY SPOUT\")</code> should return \"Here Is My Handle Here Is My Spout\".');"
       ],
       "type": "bonfire",
+      "isRequired": true,
+      "solutions": [
+        "function titleCase(str) {\n  return str.split(' ').map(function(word) {\n    return word.charAt(0).toUpperCase() + word.substring(1).toLowerCase();\n  }).join(' ');\n}\n\ntitleCase(\"I'm a little tea pot\");\n"
+      ],
       "MDNlinks": [
         "String.split()"
       ],
       "challengeType": 5,
-      "nameEs": "Aplica formato de título",
+      "titleEs": "Aplica formato de título",
       "descriptionEs": [
         "Crea una función que devuelva la cadena de texto que recibe con la primera letra de cada palabra en mayúscula. Asegúrate de que el resto de las letras sean minúsculas",
         "Para este ejercicio, también debes poner en mayúscula conectores como \"the\" y \"of\".",
@@ -295,21 +295,21 @@
         "",
         "largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);"
       ],
-      "isRequired": true,
-      "solutions": [
-        "function largestOfFour(arr) {\n  return arr.map(function(subArr) {\n    return Math.max.apply(null, subArr);\n  });\n}\n\nlargestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);\n"
-      ],
       "tests": [
         "assert(largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]).constructor === Array, 'message: <code>largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]])</code> should return an array.');",
         "assert.deepEqual(largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]), [27,5,39,1001], 'message: <code>largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]])</code> should return <code>[27,5,39,1001]</code>.');",
         "assert.deepEqual(largestOfFour([[4, 9, 1, 3], [13, 35, 18, 26], [32, 35, 97, 39], [1000000, 1001, 857, 1]]), [9,35,97,1000000], 'message: <code>largestOfFour([[4, 9, 1, 3], [13, 35, 18, 26], [32, 35, 97, 39], [1000000, 1001, 857, 1]])</code> should return <code>[9, 35, 97, 1000000]</code>.');"
       ],
       "type": "bonfire",
+      "isRequired": true,
+      "solutions": [
+        "function largestOfFour(arr) {\n  return arr.map(function(subArr) {\n    return Math.max.apply(null, subArr);\n  });\n}\n\nlargestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);\n"
+      ],
       "MDNlinks": [
         "Comparison Operators"
       ],
       "challengeType": 5,
-      "nameEs": "Devuelve el mayor entero de cada arreglo",
+      "titleEs": "Devuelve el mayor entero de cada arreglo",
       "descriptionEs": [
         "Crea una función que devuelva un arreglo que contenga el mayor de los números de cada sub-arreglo que recibe. Para simplificar las cosas, el arreglo que recibirá tendrá exactamente 4 sub-arreglos",
         "Recuerda que puedes iterar a través de un arreglo con un búcle simple, y acceder a cada miembro utilizando la sintaxis arr[i].",
@@ -333,10 +333,6 @@
         "",
         "end(\"Bastian\", \"n\");"
       ],
-      "isRequired": true,
-      "solutions": [
-        "function end(str, target) {\n  return str.substring(str.length-target.length) === target;\n};\n"
-      ],
       "tests": [
         "assert(end(\"Bastian\", \"n\") === true, 'message: <code>end(\"Bastian\", \"n\")</code> should return true.');",
         "assert(end(\"Connor\", \"n\") === false, 'message: <code>end(\"Connor\", \"n\")</code> should return false.');",
@@ -347,11 +343,15 @@
         "assert(end(\"If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing\", \"mountain\") === false, 'message: <code>end(\"If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing\", \"mountain\")</code> should return false.');"
       ],
       "type": "bonfire",
+      "isRequired": true,
+      "solutions": [
+        "function end(str, target) {\n  return str.substring(str.length-target.length) === target;\n};\n"
+      ],
       "MDNlinks": [
         "String.substr()"
       ],
       "challengeType": 5,
-      "nameEs": "Confirma la terminación",
+      "titleEs": "Confirma la terminación",
       "descriptionEs": [
         "Verifica si una cadena de texto (primer argumento) termina con otra cadena de texto (segundo argumento).",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
@@ -372,10 +372,6 @@
         "",
         "repeat(\"abc\", 3);"
       ],
-      "isRequired": true,
-      "solutions": [
-        "function repeat(str, num) {\n  if (num < 0) return '';\n  return num === 1 ? str : str + repeat(str, num-1);\n}\n\nrepeat('abc', 3);\n"
-      ],
       "tests": [
         "assert(repeat(\"*\", 3) === \"***\", 'message: <code>repeat(\"*\", 3)</code> should return <code>\"***\"</code>.');",
         "assert(repeat(\"abc\", 3) === \"abcabcabc\", 'message: <code>repeat(\"abc\", 3)</code> should return <code>\"abcabcabc\"</code>.');",
@@ -385,11 +381,15 @@
         "assert(repeat(\"abc\", -2) === \"\", 'message: <code>repeat(\"abc\", -2)</code> should return <code>\"\"</code>.');"
       ],
       "type": "bonfire",
+      "isRequired": true,
+      "solutions": [
+        "function repeat(str, num) {\n  if (num < 0) return '';\n  return num === 1 ? str : str + repeat(str, num-1);\n}\n\nrepeat('abc', 3);\n"
+      ],
       "MDNlinks": [
         "Global String Object"
       ],
       "challengeType": 5,
-      "nameEs": "Repite el texto Repite el texto",
+      "titleEs": "Repite el texto Repite el texto",
       "descriptionEs": [
         "Repite una cadena de texto dada (primer argumento) <code>num</code> veces (segundo argumento). Retorna una cadena de texto vacía si <code>num</code> es un número negativo.",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
@@ -412,10 +412,6 @@
         "",
         "truncate(\"A-tisket a-tasket A green and yellow basket\", 11);"
       ],
-      "isRequired": true,
-      "solutions": [
-        "function truncate(str, num) {\n  if(str.length > num ) {\n    if(num > 3) {\n      return str.slice(0, num - 3) + '...';\n    } else {\n      return str.slice(0,num) + '...';\n    }\n  } \n  return str;\n}"
-      ],
       "tests": [
         "assert(truncate(\"A-tisket a-tasket A green and yellow basket\", 11) === \"A-tisket...\", 'message: <code>truncate(\"A-tisket a-tasket A green and yellow basket\", 11)</code> should return \"A-tisket...\".');",
         "assert(truncate(\"Peter Piper picked a peck of pickled peppers\", 14) === \"Peter Piper...\", 'message: <code>truncate(\"Peter Piper picked a peck of pickled peppers\", 14)</code> should return \"Peter Piper...\".');",
@@ -425,11 +421,15 @@
         "assert(truncate(\"Absolutely Longer\", 2) === \"Ab...\", 'message: <code>truncate(\"Absolutely Longer\", 2)</code> should return \"Ab...\".');"
       ],
       "type": "bonfire",
+      "isRequired": true,
+      "solutions": [
+        "function truncate(str, num) {\n  if(str.length > num ) {\n    if(num > 3) {\n      return str.slice(0, num - 3) + '...';\n    } else {\n      return str.slice(0,num) + '...';\n    }\n  } \n  return str;\n}"
+      ],
       "MDNlinks": [
         "String.slice()"
       ],
       "challengeType": 5,
-      "nameEs": "Trunca una cadena de texto",
+      "titleEs": "Trunca una cadena de texto",
       "descriptionEs": [
         "Trunca una cadena de texto (primer argumento) si su longitud es mayor que un máximo de caracteres dado (segundo argumento). Devuelve la cadena de texto truncada con una terminación \"...\".",
         "Ten en cuenta que los tres puntos al final también se cuentan dentro de la longitud de la cadena de texto.",
@@ -452,10 +452,6 @@
         "",
         "chunk([\"a\", \"b\", \"c\", \"d\"], 2);"
       ],
-      "isRequired": true,
-      "solutions": [
-        "function chunk(arr, size) {\n  var out = [];\n  for (var i = 0; i < arr.length; i+=size) {\n    out.push(arr.slice(i,i+size));\n  }\n  return out;\n}\n\nchunk(['a', 'b', 'c', 'd'], 2);\n"
-      ],
       "tests": [
         "assert.deepEqual(chunk([\"a\", \"b\", \"c\", \"d\"], 2), [[\"a\", \"b\"], [\"c\", \"d\"]], 'message: <code>chunk([\"a\", \"b\", \"c\", \"d\"], 2)</code> should return <code>[[\"a\", \"b\"], [\"c\", \"d\"]]</code>.');",
         "assert.deepEqual(chunk([0, 1, 2, 3, 4, 5], 3), [[0, 1, 2], [3, 4, 5]], 'message: <code>chunk([0, 1, 2, 3, 4, 5], 3)</code> should return <code>[[0, 1, 2], [3, 4, 5]]</code>.');",
@@ -465,12 +461,16 @@
         "assert.deepEqual(chunk([0, 1, 2, 3, 4, 5, 6, 7, 8], 4), [[0, 1, 2, 3], [4, 5, 6, 7], [8]], 'message: <code>chunk([0, 1, 2, 3, 4, 5, 6, 7, 8], 4)</code> should return <code>[[0, 1, 2, 3], [4, 5, 6, 7], [8]]</code>.');"
       ],
       "type": "bonfire",
+      "isRequired": true,
+      "solutions": [
+        "function chunk(arr, size) {\n  var out = [];\n  for (var i = 0; i < arr.length; i+=size) {\n    out.push(arr.slice(i,i+size));\n  }\n  return out;\n}\n\nchunk(['a', 'b', 'c', 'd'], 2);\n"
+      ],
       "MDNlinks": [
         "Array.push()",
         "Array.slice()"
       ],
       "challengeType": 5,
-      "nameEs": "En mil pedazos",
+      "titleEs": "En mil pedazos",
       "descriptionEs": [
         "Escribe una función que parta un arreglo (primer argumento) en fragmentos de una longitud dada (segundo argumento) y los devuelva en forma de un arreglo bidimensional.",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
@@ -492,10 +492,6 @@
         "",
         "slasher([1, 2, 3], 2);"
       ],
-      "isRequired": true,
-      "solutions": [
-        "function slasher(arr, howMany) {\n  // it doesn't always pay to be first\n  return arr.slice(howMany);\n}\n\nslasher([1, 2, 3], 2);\n"
-      ],
       "tests": [
         "assert.deepEqual(slasher([1, 2, 3], 2), [3], 'message: <code>slasher([1, 2, 3], 2)</code> should return <code>[3]</code>.');",
         "assert.deepEqual(slasher([1, 2, 3], 0), [1, 2, 3], 'message: <code>slasher([1, 2, 3], 0)</code> should return <code>[1, 2, 3]</code>.');",
@@ -505,12 +501,16 @@
         "assert.deepEqual(slasher([1, 2, 'chicken', 3, 'potatoes', 'cheese', 4], 5), ['cheese', 4], 'message: <code>slasher([1, 2, \"chicken\", 3, \"potatoes\", \"cheese\", 4], 5)</code> should return <code>[\"cheese\", 4]</code>.');"
       ],
       "type": "bonfire",
+      "isRequired": true,
+      "solutions": [
+        "function slasher(arr, howMany) {\n  // it doesn't always pay to be first\n  return arr.slice(howMany);\n}\n\nslasher([1, 2, 3], 2);\n"
+      ],
       "MDNlinks": [
         "Array.slice()",
         "Array.splice()"
       ],
       "challengeType": 5,
-      "nameEs": "Vuélale la cabeza",
+      "titleEs": "Vuélale la cabeza",
       "descriptionEs": [
         "Crea una función que devuelva los elementos restantes de un arreglo después de eliminar <code>n</code> elementos de la cabeza.",
         "Por cabeza nos referimos al inicio de un arreglo, comenzando por el índice 0.",
@@ -534,10 +534,6 @@
         "",
         "mutation([\"hello\", \"hey\"]);"
       ],
-      "isRequired": true,
-      "solutions": [
-        "function mutation(arr) {\n  var hash = Object.create(null);\n  arr[0].toLowerCase().split('').forEach(function(c) {\n    hash[c] = true;\n  });\n  return !arr[1].toLowerCase().split('').filter(function(c) {\n    return !hash[c];\n  }).length;\n}\n\nmutation(['hello', 'hey']);\n"
-      ],
       "tests": [
         "assert(mutation([\"hello\", \"hey\"]) === false, 'message: <code>mutation([\"hello\", \"hey\"])</code> should return false.');",
         "assert(mutation([\"hello\", \"Hello\"]) === true, 'message: <code>mutation([\"hello\", \"Hello\"])</code> should return true.');",
@@ -549,11 +545,15 @@
         "assert(mutation([\"hello\", \"neo\"]) === false, 'message: <code>mutation([\"hello\", \"neo\"])</code> should return false.');"
       ],
       "type": "bonfire",
+      "isRequired": true,
+      "solutions": [
+        "function mutation(arr) {\n  var hash = Object.create(null);\n  arr[0].toLowerCase().split('').forEach(function(c) {\n    hash[c] = true;\n  });\n  return !arr[1].toLowerCase().split('').filter(function(c) {\n    return !hash[c];\n  }).length;\n}\n\nmutation(['hello', 'hey']);\n"
+      ],
       "MDNlinks": [
         "String.indexOf()"
       ],
       "challengeType": 5,
-      "nameEs": "Mutaciones",
+      "titleEs": "Mutaciones",
       "descriptionEs": [
         "Crea una función que devuelva <code>true</code> si la cadena de texto del primer elemento de un arreglo contiene todas las letras de la cadena de texto del segundo elemento del arreglo.",
         "Por ejemplo, <code>[\"hello\", \"Hello\"]</code>, debe devolver <code>true</code> porque todas las letras en la segunda cadena de texto están presentes en la primera, sin distinguir entre mayúsculas y minúsculas.",
@@ -578,10 +578,6 @@
         "",
         "bouncer([7, \"ate\", \"\", false, 9]);"
       ],
-      "isRequired": true,
-      "solutions": [
-        "function bouncer(arr) {\n  // Don't show a false ID to this bouncer.\n  return arr.filter(function(e) {return e;});\n}\n\nbouncer([7, 'ate', '', false, 9]);\n"
-      ],
       "tests": [
         "assert.deepEqual(bouncer([7, \"ate\", \"\", false, 9]), [7, \"ate\", 9], 'message: <code>bouncer([7, \"ate\", \"\", false, 9])</code> should return <code>[7, \"ate\", 9]</code>.');",
         "assert.deepEqual(bouncer([\"a\", \"b\", \"c\"]), [\"a\", \"b\", \"c\"], 'message: <code>bouncer([\"a\", \"b\", \"c\"])</code> should return <code>[\"a\", \"b\", \"c\"]</code>.');",
@@ -589,12 +585,16 @@
         "assert.deepEqual(bouncer([1, null, NaN, 2, undefined]), [1, 2], 'message: <code>bouncer([1, null, NaN, 2, undefined])</code> should return <code>[1, 2]</code>.');"
       ],
       "type": "bonfire",
+      "isRequired": true,
+      "solutions": [
+        "function bouncer(arr) {\n  // Don't show a false ID to this bouncer.\n  return arr.filter(function(e) {return e;});\n}\n\nbouncer([7, 'ate', '', false, 9]);\n"
+      ],
       "MDNlinks": [
         "Boolean Objects",
         "Array.filter()"
       ],
       "challengeType": 5,
-      "nameEs": "Detector de mentiras",
+      "titleEs": "Detector de mentiras",
       "descriptionEs": [
         "Remueve todos los valores falsy de un arreglo dado",
         "En javascript, los valores falsy son los siguientes: <code>false</code>, <code>null</code>, <code>0</code>, <code>\"\"</code>, <code>undefined</code>, y <code>NaN</code>.",
@@ -616,10 +616,6 @@
         "",
         "destroyer([1, 2, 3, 1, 2, 3], 2, 3);"
       ],
-      "isRequired": true,
-      "solutions": [
-        "function destroyer(arr) {\n  var hash = Object.create(null);\n  [].slice.call(arguments, 1).forEach(function(e) {\n    hash[e] = true;\n  });\n  // Remove all the values\n  return arr.filter(function(e) { return !(e in hash);});\n}\n\ndestroyer([1, 2, 3, 1, 2, 3], 2, 3);\n"
-      ],
       "tests": [
         "assert.deepEqual(destroyer([1, 2, 3, 1, 2, 3], 2, 3), [1, 1], 'message: <code>destroyer([1, 2, 3, 1, 2, 3], 2, 3)</code> should return <code>[1, 1]</code>.');",
         "assert.deepEqual(destroyer([1, 2, 3, 5, 1, 2, 3], 2, 3), [1, 5, 1], 'message: <code>destroyer([1, 2, 3, 5, 1, 2, 3], 2, 3)</code> should return <code>[1, 5, 1]</code>.');",
@@ -628,12 +624,16 @@
         "assert.deepEqual(destroyer([\"tree\", \"hamburger\", 53], \"tree\", 53), [\"hamburger\"], 'message: <code>destroyer([\"tree\", \"hamburger\", 53], \"tree\", 53)</code> should return <code>[\"hamburger\"]</code>.');"
       ],
       "type": "bonfire",
+      "isRequired": true,
+      "solutions": [
+        "function destroyer(arr) {\n  var hash = Object.create(null);\n  [].slice.call(arguments, 1).forEach(function(e) {\n    hash[e] = true;\n  });\n  // Remove all the values\n  return arr.filter(function(e) { return !(e in hash);});\n}\n\ndestroyer([1, 2, 3, 1, 2, 3], 2, 3);\n"
+      ],
       "MDNlinks": [
         "Arguments object",
         "Array.filter()"
       ],
       "challengeType": 5,
-      "nameEs": "Buscar y destruir",
+      "titleEs": "Buscar y destruir",
       "descriptionEs": [
         "Se te proveerá un arreglo inicial (el primer argumento en la función <code>destroyer</code>), seguido por uno o más argumentos. Elimina todos los elementos del arreglo inicial que tengan el mismo valor que el resto de argumentos.",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
@@ -656,10 +656,6 @@
         "",
         "where([40, 60], 50);"
       ],
-      "isRequired": true,
-      "solutions": [
-        "function where(arr, num) {\n  arr = arr.sort(function(a, b){return a-b;});\n  for (var i = 0; i < arr.length; i++) {\n    if (arr[i] >= num)\n      {\n        return i;\n      }\n  }\n  return arr.length;\n}"
-      ],
       "tests": [
         "assert(where([10, 20, 30, 40, 50], 35) === 3, 'message: <code>where([10, 20, 30, 40, 50], 35)</code> should return <code>3</code>.');",
         "assert(where([10, 20, 30, 40, 50], 30) === 2, 'message: <code>where([10, 20, 30, 40, 50], 30)</code> should return <code>2</code>.');",
@@ -670,11 +666,15 @@
         "assert(where([2, 5, 10], 15) === 3, 'message: <code>where([2, 5, 10], 15)</code> should return <code>3</code>.');"
       ],
       "type": "bonfire",
+      "isRequired": true,
+      "solutions": [
+        "function where(arr, num) {\n  arr = arr.sort(function(a, b){return a-b;});\n  for (var i = 0; i < arr.length; i++) {\n    if (arr[i] >= num)\n      {\n        return i;\n      }\n  }\n  return arr.length;\n}"
+      ],
       "MDNlinks": [
         "Array.sort()"
       ],
       "challengeType": 5,
-      "nameEs": "¿Cuál es mi asiento?",
+      "titleEs": "¿Cuál es mi asiento?",
       "descriptionEs": [
         "Devuelve el menor índice en el que un valor (segundo argumento) debe ser insertado en un arreglo (primer argumento) una vez ha sido ordenado.",
         "Por ejemplo, where([1,2,3,4], 1.5) debe devolver 1 porque el segundo argumento de la función (1.5) es mayor que 1 (con índice 0 en el arreglo), pero menor que 2 (con índice 1).",
@@ -692,8 +692,6 @@
         "All letters will be uppercase. Do not transform any non-alphabetic character (i.e. spaces, punctuation), but do pass them on.",
         "Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> if you get stuck. Try to pair program. Write your own code."
       ],
-      "isRequired": true,
-      "releasedOn": "January 1, 2016",
       "challengeSeed": [
         "function rot13(str) { // LBH QVQ VG!",
         "  ",
@@ -721,14 +719,16 @@
         "String.fromCharCode()"
       ],
       "challengeType": 5,
-       "nameEs": "Cifrado César",
+      "titleEs": "Cifrado César",
       "descriptionEs": [
         "Uno de los <dfn>cifrados</dfn> más simples y ampliamente conocidos es el <code>cifrado César</code>, también llamado <code>cifrado por desplazamiento</code>. En un <code>cifrado por desplazamiento</code> los significados de las letras se desplazan por una cierta cantidad.",
         "Un uso moderno común es el cifrado <a href=\"https://en.wikipedia.org/wiki/ROT13\" target='_blank'>ROT13</a> , donde los valores de las letras se desplazan 13 espacios. De esta forma 'A' &harr; 'N', 'B' &harr;  'O' y así.",
         "Crea una función que tome una cadena de texto cifrada en <a href=\"https://en.wikipedia.org/wiki/ROT13\" target='_blank'>ROT13</a> como argumento y que devuelva la cadena de texto decodificada.",
         "Todas las letras que se te pasen van a estar en mayúsculas. No transformes ningún caracter no-alfabético (por ejemplo: espacios, puntuación). Simplemente pásalos intactos.",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
-      ]
+      ],
+      "isRequired": true,
+      "releasedOn": "January 1, 2016"
     }
   ]
 }
diff --git a/seed/challenges/01-front-end-development-certification/basic-javascript.json b/seed/challenges/01-front-end-development-certification/basic-javascript.json
index fac504c..30e3948 100644
--- a/seed/challenges/01-front-end-development-certification/basic-javascript.json
+++ b/seed/challenges/01-front-end-development-certification/basic-javascript.json
@@ -31,7 +31,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Agrega comentarios a tu código JavaScript",
+      "titleEs": "Agrega comentarios a tu código JavaScript",
       "descriptionEs": [
         "Los comentarios son líneas de código que el computador ignorará intencionalmente. Los comentarios son una gran forma de dejarte notas a ti mismo y a otras personas que luego tendrán que averiguar lo que hace que el código. ",
         "Vamos a echar un vistazo a las dos maneras en las que puedes agregar tus comentarios en JavaScript.",
@@ -76,7 +76,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Declara variables en JavaScript",
+      "titleEs": "Declara variables en JavaScript",
       "descriptionEs": [
         "Cuando almacenamos datos en una <code>estructura de datos</code>, la llamamos una <code>variable</code>. Estas variables no son diferentes de las variables x e y que utilizas en matemáticas. ",
         "Vamos a crear nuestra primera variable y a llamarla \"myName\".",
@@ -122,7 +122,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Almacenar valores con el operador igual",
+      "titleEs": "Almacenar valores con el operador igual",
       "descriptionEs": [
         "En JavaScript, puedes almacenar un valor en una variable con la <dfn>asignación</dfn> o con el operador <code>igual</code> (<code>=</code>).",
         "<code>miVariable = 5;</code>",
@@ -164,7 +164,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Inicializar variables con el operador igual",
+      "titleEs": "Inicializar variables con el operador igual",
       "descriptionEs": [
         "Es común <dfn>inicializar</dfn> una variable a un valor inicial en la misma línea que es declarada.",
         "<code>var miVar = 0;</code>",
@@ -209,7 +209,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Entendiendo variables sin inicializar",
+      "titleEs": "Entendiendo variables sin inicializar",
       "descriptionEs": [
         "Cuando las variables de JavaScript son declaradas, ellas tienen un valor inicial de <code>undefined</code>. Si tu haces una operación matematica sobre una variable <code>undefined</code> tu resultado sera <code>NaN</code> el cual significa <dfn>\"Not a Number\"</dfn> es decir \"No es un número\". Si tu concatenas una cadena con una variable <code>undefined</code>, vas a obtener una <dfn>cadena</dfn> literal de <code>\"undefined\"</code>.",
         "<h4>Instrucciones</h4>",
@@ -254,7 +254,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Entendiendo la distinción en variables",
+      "titleEs": "Entendiendo la distinción en variables",
       "descriptionEs": [
         "En JavaScript todas las variables y nombres de funciones distinguen entre mayúsculas y minúsculas. Esto significa que la capitalización importa.",
         "<code>MIVAR</code> no es lo mismo que <code>MiVar</code> o <code>mivar</code>. Esto hace posible tener múltiples variables distintas con el mismo nombre pero de diferente manera. Es fuertemente recomendado por el bien de la claridad, que tu <em>no</em> uses esta característica del lenguaje.",
@@ -296,7 +296,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Suma dos números con JavaScript",
+      "titleEs": "Suma dos números con JavaScript",
       "descriptionEs": [
         "Intentemos sumar dos números con JavaScript.",
         "JavaScript utiliza el símbolo <code>+</code> para la adición.",
@@ -334,7 +334,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Resta un número de otro con JavaScript",
+      "titleEs": "Resta un número de otro con JavaScript",
       "descriptionEs": [
         "También podemos restar un número de otro.",
         "JavaScript utiliza el símbolo <code>-</code> de sustracción",
@@ -371,7 +371,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Multiplica dos números con JavaScript",
+      "titleEs": "Multiplica dos números con JavaScript",
       "descriptionEs": [
         "También podemos multiplicar un número por otro.",
         "JavaScript utiliza el símbolo <code>*</code> de la multiplicación.",
@@ -408,7 +408,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Divide un número por otro con JavaScript",
+      "titleEs": "Divide un número por otro con JavaScript",
       "descriptionEs": [
         "También podemos dividir un número por otro.",
         "JavaScript utiliza el símbolo <code>/</code> para dividir.",
@@ -448,7 +448,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Incrementa un número con JavaScript",
+      "titleEs": "Incrementa un número con JavaScript",
       "descriptionEs": [
         "Tu puedes fácilmente <dfn>incrementar</dfn> o agregar uno a una variable con el operador <code>++</code>.",
         "<code>i++</code>",
@@ -492,7 +492,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Decrementar un número con JavaScript",
+      "titleEs": "Decrementar un número con JavaScript",
       "descriptionEs": [
         "Fácilmente puedes <dfn>decrementar</dfn> o disminuir una variable por uno con el operador <code>--</code>.",
         "<code>i--;</code>",
@@ -531,7 +531,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Crea números decimales con JavaScript",
+      "titleEs": "Crea números decimales con JavaScript",
       "descriptionEs": [
         "Podemos almacenar números decimales en variables también. Los números decimales a veces son referidos como números de <dfn>punto flotante</dfn> o <dfn>flotantes</dfn>.",
         "<strong>Nota</strong><br>No todos los números reales pueden ser exactamente representados en <dfn>punto flotante</dfn>. Esto puede conducir a errores de redondeo. <a href=\"https://en.wikipedia.org/wiki/Floating_point#Accuracy_problems\" target=\"_blank\">Detalles aquí</a>.",
@@ -565,7 +565,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Multiplicar dos decimales con JavaScript",
+      "titleEs": "Multiplicar dos decimales con JavaScript",
       "descriptionEs": [
         "En JavaScript, también puedes realizar cálculos con números decimales, al igual que con números enteros.",
         "Vamos a multiplicar dos números decimales para obtener su producto.",
@@ -598,7 +598,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Divide un número decimal por otro con JavaScript",
+      "titleEs": "Divide un número decimal por otro con JavaScript",
       "descriptionEs": [
         "Ahora vamos a dividir un decimal por otro.",
         "<h4>Instrucciones</h4>",
@@ -637,7 +637,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Encontrar un cociente en JavaScript",
+      "titleEs": "Encontrar un cociente en JavaScript",
       "descriptionEs": [
         "El operador <dfn>residuo</dfn> <code>%</code> da el residuo de la división de dos números.",
         "<strong>Ejemplo</strong>",
@@ -689,7 +689,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Asignación con más",
+      "titleEs": "Asignación con más",
       "descriptionEs": [
         "En programación, es común usar asignaciones para modificar el contenido de una variable. Recuerda que todo lo de la derecha del signo igual es evaluado primero, así podemos decir que:",
         "<code>miVar = miVar + 5;</code>",
@@ -740,7 +740,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Asignación con menos",
+      "titleEs": "Asignación con menos",
       "descriptionEs": [
         "Al igual que el operador <code>+=</code>, <code>-=</code> substrae un número de una variable.",
         "<code>miVar = miVar - 5;</code>",
@@ -790,7 +790,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Asignación con veces igual",
+      "titleEs": "Asignación con veces igual",
       "descriptionEs": [
         "El operador <code>*=</code> multiplica una variable por un número.",
         "<code>miVar = miVar * 5;</code>",
@@ -839,7 +839,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Asignación con división",
+      "titleEs": "Asignación con división",
       "descriptionEs": [
         "El operador <code>/=</code> divide una variable por otro número.",
         "<code>miVar = miVar / 5;</code>",
@@ -887,7 +887,7 @@
       ],
       "type": "checkpoint",
       "challengeType": 1,
-      "nameEs": "Convierte celsius a fahrenheit",
+      "titleEs": "Convierte celsius a fahrenheit",
       "descriptionEs": [
         "Para probar tu aprendizaje, crearás una solucion \"desde cero\". Coloca tu código entre las líneas indicadas y este será probado contra multiples casos de prueba.",
         "El algoritmo para convertir de Celsius a Fahrenheit consiste en multiplicar la temperatura en grados Celsius por 9/5 y al resultado agregarle 32.",
@@ -926,7 +926,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Declara variables tipo cadena",
+      "titleEs": "Declara variables tipo cadena",
       "descriptionEs": [
         "En el reto anterior, se utilizó el código <code>myName var = \"su nombre\"</code>. Esto es lo que llamamos una variable tipo <code>cadena</code>. No es nada más que una \"cadena\" de caracteres. Las cadenas en JavaScript siempre se encierran entre comillas. ",
         "Ahora vamos a crear dos nuevas variables tipo cadena: <code>myFirstName</code> y <code>myLastName</code> y asignarles los valores de tu nombre y tu apellido, respectivamente."
@@ -969,7 +969,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Escapar comillas en cadenas de texto",
+      "titleEs": "Escapar comillas en cadenas de texto",
       "descriptionEs": [
         "Cuando estás definiendo una cadena debes iniciar y terminar con apóstrofes o comillas. ¿Qué pasa cuando necesitas una comilla: <code>\"</code> o <code>'</code> dentro de tu cadena?",
         "En JavaScript, tu puedes <dfn>escapar</dfn> unas comillas para diferenciarlas de las comillas del final de la cadena colocando una <dfn>barra invertida</dfn> (<code>\\</code>) antes de la cita.",
@@ -1011,7 +1011,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Citando cadenas con comillas simples",
+      "titleEs": "Citando cadenas con comillas simples",
       "descriptionEs": [
         "Los valores de <dfn>Cadenas</dfn> en JavaScript pueden ser escritos con comillas o apóstrofes, siempre y cuando inicien y terminen con el mismo tipo de cita. A diferencia de algunos lenguajes, apóstrofes y comillas son funcionalmente identicas en JavaScript.",
         "<code>\"Esta cadena tiene \\\"comillas\\\" en esta\"</code>",
@@ -1051,7 +1051,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Secuencias de escape en cadenas",
+      "titleEs": "Secuencias de escape en cadenas",
       "descriptionEs": [
         "Las comillas no son el único caracter que puede ser <dfn>escapado</dfn> dentro de una cadena. Aquí ahí una tabla de secuencias de escape comunes:",
         "<table class=\"table table-striped\"><thead><tr><th>Código</th><th>Salida</th></tr></thead><tbody><tr><td>\\'</td><td>apostrofe</td></tr><tr><td>\\\"</td><td>comilla</td></tr><tr><td>\\\\</td><td>barra invertida</td></tr><tr><td>\\n</td><td>nueva línea</td></tr><tr><td>\\r</td><td>retorno de carro</td></tr><tr><td>\\t</td><td>tabulación</td></tr><tr><td>\\b</td><td>retroceso</td></tr><tr><td>\\f</td><td>salto de página</td></tr></tbody></table>",
@@ -1102,7 +1102,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Concatenar cadenas con el operador más",
+      "titleEs": "Concatenar cadenas con el operador más",
       "descriptionEs": [
         "En JavaScript, cuando el operador <code>+</code> es usado con un valor de <code>Cadena</code>, este es llamado el operador <dfn>concatenación</dfn>. Tu puedes construir una nueva cadena de otras cadenas <dfn>concatenandolas</dfn> juntas.",
         "<strong>Ejemplo</strong>",
@@ -1151,7 +1151,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Concatenar cadenas con el operador mas igual",
+      "titleEs": "Concatenar cadenas con el operador mas igual",
       "descriptionEs": [
         "Nosotros también podemos usar el operador <code>+=</code> para <dfn>concatenar</dfn> una cadena al final de una variable de cadena existente. Esto puede ser muy útil para romper una cadena larga sobre varias líneas.",
         "<strong>Nota</strong><br>Cuidado con los espacios. La concatenación no agrega espacios entre cadenas concatenadas, así que necesitarás añadirlos tu mismo.",
@@ -1204,7 +1204,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Construir cadenas con variables",
+      "titleEs": "Construir cadenas con variables",
       "descriptionEs": [
         "A veces necesitarás construir una cadena, al estilo <a href=\"https://en.wikipedia.org/wiki/Mad_Libs\" target=\"_blank\">Mad Libs</a>. Mediante el uso del operador concatenación (<code>+</code>), puedes insertar una o más variables dentro de una cadena que estés construyendo.",
         "<h4>Instrucciones</h4>",
@@ -1257,7 +1257,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Anexando variables a cadenas",
+      "titleEs": "Anexando variables a cadenas",
       "descriptionEs": [
         "Al igual que podemos construir una cadena en múltiples líneas a partir de cadenas <dfn>literales</dfn>, nosotros podemos ademas anexar variables a una cadena usando el operador más igual (<code>+=</code>).",
         "<h4>Instructiones</h4>",
@@ -1303,7 +1303,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Comprueba la propiedad longitud (length) de una variable tipo cadena",
+      "titleEs": "Comprueba la propiedad longitud (length) de una variable tipo cadena",
       "descriptionEs": [
         "Las <code>estructuras de datos</code> tienen <code>propiedades</code>. Por ejemplo, las <code>cadenas</code> tienen una propiedad llamada <code>.length </code> que te dirá cuántos caracteres hay en la cadena.",
         "Por ejemplo, si creamos una variable <code>var firstName=\"Charles\"</code>, podemos averiguar la longitud de la cadena \"Charles\" usando la propiedad <code>firstName.length</code>. ",
@@ -1348,7 +1348,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Usa la notación de corchetes para encontrar el primer carácter de una cadena",
+      "titleEs": "Usa la notación de corchetes para encontrar el primer carácter de una cadena",
       "descriptionEs": [
         "La <code>notación de corchetes</code> es una forma de obtener el caracter en un <code>índice</code> específico de una cadena.",
         "Los computadoras no empiezan a contar desde 1 como hacen los humanos. Comienzan en 0 ",
@@ -1392,7 +1392,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Comprender la inmutabilidad de cadenas",
+      "titleEs": "Comprender la inmutabilidad de cadenas",
       "descriptionEs": [
         "En JavaScript, los valores de las <code>Cadenas</code> son <dfn>inmutables</dfn>, lo cual significa que ellos no pueden ser alterados una vez creados.",
         "Por ejemplo, el siguiente código:",
@@ -1438,7 +1438,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Usar la notación de corchetes para encontrar el n-ésimo caracter en una cadena",
+      "titleEs": "Usar la notación de corchetes para encontrar el n-ésimo caracter en una cadena",
       "descriptionEs": [
         "También puede usar <code>notación de corchetes</code> para obtener el caracter en otras posiciones dentro de una cadena.",
         "Recuerda que los computadores empiezan a contar a 0, por lo que el primer caracter es en realidad el caracter cero.",
@@ -1482,7 +1482,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Usa notación de corchetes para encontrar el último caracter de una cadena",
+      "titleEs": "Usa notación de corchetes para encontrar el último caracter de una cadena",
       "descriptionEs": [
         "Con el fin de conseguir la última letra de una cadena, puedes restar uno a la longitud de la cadena.",
         "Por ejemplo, si <code>var firstName = \"Charles\"</code>, se puede obtener la última letra usando <code>firstName[firstName.length - 1]</code>. ",
@@ -1526,7 +1526,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Usa notación de corchetes para encontrar el n-ésimo último caracter de una cadena",
+      "titleEs": "Usa notación de corchetes para encontrar el n-ésimo último caracter de una cadena",
       "descriptionEs": [
         "Puede utilizar el mismo principio utilizamos para recuperar el último caracter de una cadena para recuperar el n-ésimo último caracter.",
         "Por ejemplo, se puede obtener el valor de la tercera última letra de la cadena <code>var firstName = \"Charles\"</code> utilizando <code>firstName[firstName.length - 3]</code> ",
@@ -1572,7 +1572,7 @@
       ],
       "type": "checkpoint",
       "challengeType": 1,
-      "nameEs": "Espacios en blanco de palabras",
+      "titleEs": "Espacios en blanco de palabras",
       "descriptionEs": [
         "Ahora usaremos nuestro conocimiento de cadenas para construir un juego de palabras estilo \"<a href='https://en.wikipedia.org/wiki/Mad_Libs' target='_blank'>Mad Libs</a>\" que llamaremos \"Espacios en Blanco de Palabras\". Vas a crear unas oraciones estilo (opcionalmente graciosa) \"Llena los espacios en blanco\".",
         "Necesitarás usar operadores de cadenas para construir una nueva cadena <code>result</code>, usando las variables previstas: <code>myNoun</code>, <code>myAdjective</code>, <code>myVerb</code> y <code>myAdverb</code>.",
@@ -1611,7 +1611,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Almacena múltiples valores en una variable utilizando vectores en JavaScript",
+      "titleEs": "Almacena múltiples valores en una variable utilizando vectores en JavaScript",
       "descriptionEs": [
         "Con las variables tipo <code>vector</code> (o en inglés <code>array</code>) podemos almacenar diversos datos en un solo lugar.",
         "Empiezas la declaración de un vector con un corchete de apertura, y terminas con un corchete de cierre, y pones una coma entre cada entrada, así: <code>var sandwich = [\"mantequilla de maní\", \"jalea\" , \"pan\"]</code>. ",
@@ -1647,7 +1647,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Anida un vector dentro de otro vector",
+      "titleEs": "Anida un vector dentro de otro vector",
       "descriptionEs": [
         "También puedes anidar vectores dentro de otros vectores, como este: <code>[[\"Bulls\", 23], [\"White Sox\", 45]]</code>.",
         "<h4>Instrucciones</h4>",
@@ -1687,7 +1687,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Accede a los datos de un vector mediante índices",
+      "titleEs": "Accede a los datos de un vector mediante índices",
       "descriptionEs": [
         "Podemos acceder a los datos dentro de los vectores usando <code>índices</code>.",
         "Los índices del vector se escriben en la misma notación con corchetes usado con cadenas, excepto que en lugar de especificar un caracter, especifican un elemento del vector.",
@@ -1733,7 +1733,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Modifica datos de un vector usando índices",
+      "titleEs": "Modifica datos de un vector usando índices",
       "descriptionEs": [
         "También podemos modificar los datos almacenados en vectores usando índices.",
         "Por ejemplo:",
@@ -1774,7 +1774,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Acceder a vectores multi-dimensionales con índices",
+      "titleEs": "Acceder a vectores multi-dimensionales con índices",
       "descriptionEs": [
         "Una manera de pensar un vector <dfn>multi-dimensional</dfn>, es como un <em>vector de vectores</em>. Cuando usas corchetes para acceder a tu vector, el primer conjunto de brackets se refiere a las entradas en el vector más externo y cada nivel subsecuente de brackets se refiere al siguiente nivel de vectores internos.",
         "<strong>Ejemplo</strong>",
@@ -1817,7 +1817,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Manipula vectores con push()",
+      "titleEs": "Manipula vectores con push()",
       "descriptionEs": [
         "No sólo se pueden sacar datos del final de un vector con <code>pop()</code>, también puedes empujar (<code>push()</code>) datos al final del vector.",
         "<h4>Instrucciones</h4>",
@@ -1861,7 +1861,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Manipula vectores con pop()",
+      "titleEs": "Manipula vectores con pop()",
       "descriptionEs": [
         "Otra forma de cambiar los datos en un vector es con la función <code>.pop()</code>.",
         "<code>.pop()</code> se utiliza para \"sacar\" el valor final de un vector. Podemos almacenar el valor \"sacado\" asignando <code>pop</code> a una variable por ejemplo durante su declaración.",
@@ -1905,7 +1905,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Manipula vectores con shift()",
+      "titleEs": "Manipula vectores con shift()",
       "descriptionEs": [
         "<code>pop()</code> siempre elimina el último elemento de un vector. ¿Qué pasa si quieres quitar el primero?",
         "Ahí es donde entra <code>.shift()</code>. Funciona igual que <code>.pop ()</code>, excepto que elimina el primer elemento en lugar del pasado. ",
@@ -1948,7 +1948,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Manipula vectores con unshift()",
+      "titleEs": "Manipula vectores con unshift()",
       "descriptionEs": [
         "No sólo se puedes <code>correr</code> (shift) elementos del comienzo de un vector, también puedes <code>descorrerlos</code> (unshift) al comienzo.",
         "<code>unshift()</code> funciona exactamente igual que <code>push()</code>, pero en lugar de añadir el elemento al final del vector, <code>unshift()</code> añade el elemento al comienzo del vector. ",
@@ -2010,7 +2010,7 @@
       ],
       "type": "checkpoint",
       "challengeType": 1,
-      "nameEs": "Lista de compras",
+      "titleEs": "Lista de compras",
       "descriptionEs": [
         "Crea una lista de compras en la variable <code>myList</code>. La lista tiene que ser un vector multidimensional conteniendo varios sub-vectores.",
         "El primer elemento en cada sub-vector debe contener una cadena con el nombre del elemento. El segundo elemento debe ser un número representando la cantidad i. e.",
@@ -2082,7 +2082,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Escribe código JavaScript reutilizable con funciones",
+      "titleEs": "Escribe código JavaScript reutilizable con funciones",
       "descriptionEs": [
         "En JavaScript, podemos dividir nuestro código en partes reutilizables llamadas funciones.",
         "He aquí un ejemplo de una función:",
@@ -2162,7 +2162,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Pasando valores a funciones con argumentos",
+      "titleEs": "Pasando valores a funciones con argumentos",
       "descriptionEs": [
         "Los <dfn>parámetros</dfn> son variables que actúan como marcadores de lugar para los valores que han de ser entrada para una función cuando esta es llamada. Cuando una función es definida, es típicamente definida con uno o más parámetros. Los valores actuales que son entrada (or <dfn>\"pasados\"</dfn>) dentro de una función cuando esta es llamada son concidos como <dfn>argumentos</dfn>.",
         "Aquí hay una función con dos parámetros, <code>param1</code> y <code>param2</code>:",
@@ -2246,7 +2246,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Alcance global y funciones",
+      "titleEs": "Alcance global y funciones",
       "descriptionEs": [
         "En JavaScript, <dfn>alcance</dfn> se referiere a la visibilidad de variables. Las variables que definas fuera de un bloque de una función tienen alcance <dfn>Global</dfn>. Esto significa que ellas pueden ser vistas en todas partes en tu código JavaScript.",
         "Las variables que pueden ser usadas sin la palabra clave <code>var</code> son automáticamente creadas en el alcance <code>global</code>. Esto puede tener consecuencias no deseadas en otras partes de tu código o cuando se ejecuta una función de nuevo. Tu siempre deberías declarar tus variables con <code>var</code>.",
@@ -2317,7 +2317,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Alcance local y funciones",
+      "titleEs": "Alcance local y funciones",
       "descriptionEs": [
         "Las variables que son declaradas dentro de una función, así como los parámetros de la función tienen alcance <dfn>local</dfn>. Eso significa que solo son visibles dentro de esa función.",
         "Aquí está una función <code>myTest</code> con una variable local llamada <code>loc</code>.",
@@ -2364,7 +2364,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Alcance global vs. local en funciones",
+      "titleEs": "Alcance global vs. local en funciones",
       "descriptionEs": [
         "Es posible tener variables <dfn>locales</dfn> y <dfn>globales</dfn> con el mismo nombre. Cuando tu haces esto, la variable <code>local</code> toma precedencia sobre la variable <code>global</code>.",
         "En este ejemplo:",
@@ -2410,7 +2410,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Retorna un valor desde una función con return",
+      "titleEs": "Retorna un valor desde una función con return",
       "descriptionEs": [
         "Podemos pasar valores a una función mediante los <dfn>argumentos</dfn>. Puedes usar una sentencia <code>return</code> para enviar un valor de vuelta de una función.",
         "<strong>Ejemplo</strong>",
@@ -2465,7 +2465,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Asignación con un valor retornado",
+      "titleEs": "Asignación con un valor retornado",
       "descriptionEs": [
         "Si recuerdas de nuestra discusión de <a href=\"waypoint-storing-values-with-the-equal-operator\" target=\"_blank\">Almacenar Valores con el Operador Igual</a>, todo a la derecha del signo igual es resuelto antes que el valor sea asignado. Esto significa que nosotros podemos tomar el valor de retorno de una función y asignarlo a una variable.",
         "Supongamos que tenemos una función pre-definida <code>suma</code> la cual suma dos números, entonces: ",
@@ -2536,7 +2536,7 @@
       ],
       "type": "checkpoint",
       "challengeType": 1,
-      "nameEs": "Hacer cola",
+      "titleEs": "Hacer cola",
       "descriptionEs": [
         "En Ciencias de la Computación una <dfn>cola</dfn> es una <dfn>Estructura de Datos</dfn> abstracta donde los elementos son mantenidos en orden. Nuevos elementos pueden ser agregados en la parte trasera de la <code>cola</code> y los elementos viejos son quitados desde el frente de la <code>cola</code>.",
         "Escribe una función <code>queue</code> la cual toma un vector (<code>arr</code>) y un número (<code>item</code>) como argumentos. Agrega el número al final del vector, entonces retira el primer elemento del vector. La función queue debe entonces devolver el elemento que se ha eliminado."
@@ -2573,7 +2573,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Entiende los valores booleanos",
+      "titleEs": "Entiende los valores booleanos",
       "descriptionEs": [
         "En informática las <code>estructuras de datos</code> son cosas que contienen datos. JavaScript tiene siete de estas. Por ejemplo, la estructura de datos <code>Número</code> contiene números. ",
         "Vamos a aprender acerca de la estructura de datos más básica de todas: el <code>Boolean</code>. Los booleanos sólo puede contener el valor verdadero o el valor falso. Son básicamente pequeños interruptores de encendido y apagado. ",
@@ -2630,7 +2630,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Usa lógica condicional con instrucciones if y else",
+      "titleEs": "Usa lógica condicional con instrucciones if y else",
       "descriptionEs": [
         "Podemos usar instrucciones <code>if</code> (\"if\" es \"si\" en español) en JavaScript para ejecutar código sólo cuando cierta condición se cumpla.",
         "Las instrucciones <code>if</code> requieren evaluar algún tipo de condición booleana.",
@@ -2682,7 +2682,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "La comparación con el operador de igualdad",
+      "titleEs": "La comparación con el operador de igualdad",
       "descriptionEs": [
         "Hay muchos <dfn>Operadores de Comparación</dfn> en JavaScript. Todos estos operadores retornan un valor booleano <code>true</code>(verdadero) o <code>false</code>(falso).",
         "El operador más básico es el operador de igualdad <code>==</code>. El operador de igualdad compara dos valores y retorna <code>true</code> si son equivalentes o <code>false</code> si no lo son. Nota que la igualdad es diferente de la asignación (<code>=</code>), la cual asigna el valor a la derecha del operador a la variable en la izquierda.",
@@ -2729,7 +2729,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "La comparación con el operador de estricta igualdad",
+      "titleEs": "La comparación con el operador de estricta igualdad",
       "descriptionEs": [
         "Igualdad estricta (<code>===</code>) es la contraparte del operador de igualdad (<code>==</code>). Diferente al operador de igualdad, igualdad estricta prueba los <code>tipos de datos</code> y el valor de los elementos comparados.",
         "<strong>Ejemplos</strong>",
@@ -2775,7 +2775,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "La comparación con el operador de desigualdad",
+      "titleEs": "La comparación con el operador de desigualdad",
       "descriptionEs": [
         "El operador de desigualdad (<code>!=</code>) es el opuesto al operador de igualdad. Esto significa \"No Igual a\" y retorna <code>false</code> cuando igualdad retornaría <code>true</code> y <em>viceversa</em>. Como el operador de igualdad, el operador de desigualdad convertirá tipos de datos mientras compara.",
         "<strong>Ejemplos</strong>",
@@ -2824,9 +2824,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "La comparación con el operador de estricta desigualdad",
+      "titleEs": "La comparación con el operador de estricta desigualdad",
       "descriptionEs": [
-      	"El operador de estricta desigualdad (<code>!==</code>) es el opuesto al operador de estricta igualdad. Esto significa \"Estrictamente no Igual\" y retorna <code>false</code>(falso) donde igualdad estricta retornaría <code>true</code>(verdadero) y <em>viceversa</em>. Estricta desigualdad no convertirá tipos de datos.",
+        "El operador de estricta desigualdad (<code>!==</code>) es el opuesto al operador de estricta igualdad. Esto significa \"Estrictamente no Igual\" y retorna <code>false</code>(falso) donde igualdad estricta retornaría <code>true</code>(verdadero) y <em>viceversa</em>. Estricta desigualdad no convertirá tipos de datos.",
         "<strong>Ejemplos</strong>",
         "<blockquote>3 !== 3   // false<br>3 !== '3' // true<br>4 !== 3   // true</blockquote>",
         "<h4>Instrucciones</h4>",
@@ -2876,9 +2876,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "La comparación con el operador mayor que",
+      "titleEs": "La comparación con el operador mayor que",
       "descriptionEs": [
-      	"El operador mayor que (<code>&gt;</code>) compara los valores de dos números. Si el número a la izquierda es mayor que el número a la derecha, este returna <code>true</code>(verdadero). De otra manera, este retorna <code>false</code>(falso).",
+        "El operador mayor que (<code>&gt;</code>) compara los valores de dos números. Si el número a la izquierda es mayor que el número a la derecha, este returna <code>true</code>(verdadero). De otra manera, este retorna <code>false</code>(falso).",
         "Al igual que el operador de igualdad, el operador mayor que convertirá tipos de datos de valores mientras los compara.",
         "<strong>Ejemplos</strong>",
         "<blockquote> 5 > 3   // true<br> 7 > '3' // true<br> 2 > 3   // false<br>'1' > 9  // false</blockquote>",
@@ -2929,9 +2929,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "La comparación con el operador mayor o ogual",
+      "titleEs": "La comparación con el operador mayor o ogual",
       "descriptionEs": [
-      	"El operador <code>mayor o igual </code> (<code>&gt;=</code>) compara los valores de dos números. Si el número de la izquierda es mayor o igual a el número de la derecha, este retorna <code>true</code>(verdadero). De otra manera, este retorna <code>false</code>(falso).",
+        "El operador <code>mayor o igual </code> (<code>&gt;=</code>) compara los valores de dos números. Si el número de la izquierda es mayor o igual a el número de la derecha, este retorna <code>true</code>(verdadero). De otra manera, este retorna <code>false</code>(falso).",
         "Como el operador de igualdad, el operador <code>mayor o igual</code> convertirá tipos de datos mientras está comparando.",
         "<strong>Ejemplos</strong>",
         "<blockquote> 6  >=  6  // true<br> 7  >= '3' // true<br> 2  >=  3  // false<br>'7' >=  9  // false</blockquote>",
@@ -2980,9 +2980,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "La comparación con el operador menor que",
+      "titleEs": "La comparación con el operador menor que",
       "descriptionEs": [
-      	"El operador <dfn>menor que</dfn> (<code>&lt;</code>) compara los valores de dos números. Si el número a la izquierda es menor que el número de la derecha, este retorna <code>true</code>(verdadero). De otra manera, este retorna <code>false</code>(falso). Como el operador de igualdad, el operador <dfn>menor que</dfn> convierte tipos de datos mientra compara.",
+        "El operador <dfn>menor que</dfn> (<code>&lt;</code>) compara los valores de dos números. Si el número a la izquierda es menor que el número de la derecha, este retorna <code>true</code>(verdadero). De otra manera, este retorna <code>false</code>(falso). Como el operador de igualdad, el operador <dfn>menor que</dfn> convierte tipos de datos mientra compara.",
         "<strong>Ejemplos</strong>",
         "<blockquote>  2 &lt; 5  // true<br>'3' &lt; 7  // true<br>  5 &lt; 5  // false<br>  3 &lt; 2  // false<br>'8' &lt; 4  // false</blockquote>",
         "<h4>Instrucciones</h4>",
@@ -3032,9 +3032,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "La comparación con el operador menor o igual",
+      "titleEs": "La comparación con el operador menor o igual",
       "descriptionEs": [
-      	"El operador <code>menor o igual</code> (<code>&lt;=</code>) compara los valores de dos números. Si el número a la izquierda es menor o igual que el número de la derecha, este retorna <code>true</code>(verdadero). Si el número a la izquierda es mayor que el número de la derecha, este retorna <code>false</code>(falso). Al igual que el operador de igualdad, <code>menor o igual</code> convierte tipos de datos.",
+        "El operador <code>menor o igual</code> (<code>&lt;=</code>) compara los valores de dos números. Si el número a la izquierda es menor o igual que el número de la derecha, este retorna <code>true</code>(verdadero). Si el número a la izquierda es mayor que el número de la derecha, este retorna <code>false</code>(falso). Al igual que el operador de igualdad, <code>menor o igual</code> convierte tipos de datos.",
         "<strong>Ejemplos</strong>",
         "<blockquote>  4 &lt;= 5  // true<br>'7' &lt;= 7  // true<br>  5 &lt;= 5  // true<br>  3 &lt;= 2  // false<br>'8' &lt;= 4  // false</blockquote>",
         "<h4>Instrucciones</h4>",
@@ -3088,9 +3088,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "La comparación con el operador lógico y",
+      "titleEs": "La comparación con el operador lógico y",
       "descriptionEs": [
-      	"A veces necesitarás probar más de una cosa a la vez. El operador <dfn>lógico y</dfn> (<code>&&</code>) retorna <code>true</code>(verdadero) si y solo si los <dfn>operandos</dfn> a la izquierda y derecha de este son verdaderos.",
+        "A veces necesitarás probar más de una cosa a la vez. El operador <dfn>lógico y</dfn> (<code>&&</code>) retorna <code>true</code>(verdadero) si y solo si los <dfn>operandos</dfn> a la izquierda y derecha de este son verdaderos.",
         "El mismo efecto podría lograrse anidando una sentencia if dentro de otro if:",
         "<blockquote>if (num > 5) {<br>  if (num < 10) {<br>    return \"Yes\";<br>  }<br>}<br>return \"No\";</blockquote>",
         "solo retornará \"Yes\" si <code>num</code> está entre <code>6</code> y <code>9</code> (6 y 9 incluidos). La misma lógica puede ser escrita como:",
@@ -3148,9 +3148,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "La comparación con el operador lógico o",
+      "titleEs": "La comparación con el operador lógico o",
       "descriptionEs": [
-      	"El operador <dfn>lógico o</dfn> (<code>||</code>) retorna <code>true</code>(verdadero) si cualquiera de los <dfn>operandos</dfn> es <code>true</code>(verdadero). De otra manera, este retorna <code>false</code>(falso).",
+        "El operador <dfn>lógico o</dfn> (<code>||</code>) retorna <code>true</code>(verdadero) si cualquiera de los <dfn>operandos</dfn> es <code>true</code>(verdadero). De otra manera, este retorna <code>false</code>(falso).",
         "El patrón de abajo debería ser familiar de los puntos de referencia anteriores:",
         "<blockquote>if (num > 10) {<br>  return \"No\";<br>}<br>if (num < 5) {<br>  return \"No\";<br>}<br>return \"Yes\";</blockquote>",
         "retornará \"Yes\" solo si <code>num</code> está entre <code>5</code> y <code>10</code> (5 y 10 incluidos). La misma lógica puede ser escrita como:",
@@ -3204,9 +3204,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Introducción de las sentencias else",
+      "titleEs": "Introducción de las sentencias else",
       "descriptionEs": [
-      	"Cuando una condición de una sentencia <code>if</code> es verdadera, el siguiente bloque de código es ejecutado. ¿Y cuando esa condición es falsa? Normalmente nada pasaría. Con una sentencia <code>else</code>(además), un bloque alternativo de código puede ser ejecutado.",
+        "Cuando una condición de una sentencia <code>if</code> es verdadera, el siguiente bloque de código es ejecutado. ¿Y cuando esa condición es falsa? Normalmente nada pasaría. Con una sentencia <code>else</code>(además), un bloque alternativo de código puede ser ejecutado.",
         "<blockquote>if (num > 10) {<br>  return \"Más grande que 10\";<br>} else {<br>  return \"10 o Menos\";<br>}</blockquote>",
         "<h4>Instrucciones</h4>",
         "Combina las sentencias <code>if</code> dentro de una sola sentencia <code>if/else</code>."
@@ -3253,9 +3253,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Introducción de las sentencias else if",
+      "titleEs": "Introducción de las sentencias else if",
       "descriptionEs": [
-      	"Si tienes múltiples condiciones que deben abordarse, puedes encadenar sentencias <code>if</code> juntas con sentencias <code>else if</code>.",
+        "Si tienes múltiples condiciones que deben abordarse, puedes encadenar sentencias <code>if</code> juntas con sentencias <code>else if</code>.",
         "<blockquote>if (num > 15) {<br>  return \"Más grande que 15\";<br>} else if (num < 5) {<br>  return \"Más pequeño que 5\";<br>} else {<br>  return \"Entre 5 y 15\";<br>}</blockquote>",
         "<h4>Instrucciones</h4>",
         "Convierte la lógica para usar sentencias <code>else if</code>."
@@ -3301,9 +3301,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Orden lógico en sentencias else if",
+      "titleEs": "Orden lógico en sentencias else if",
       "descriptionEs": [
-      	"El orden es importante en las sentencia <code>if</code> y <code>else if</code>.",
+        "El orden es importante en las sentencia <code>if</code> y <code>else if</code>.",
         "El ciclo es ejecutado de arriba hacia abajo por lo que tendrás que ser cuidadoso de cual sentencia va primero.",
         "Toma estas dos funciones como ejemplo.",
         "Aquí está la primera:",
@@ -3359,9 +3359,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Encadenamiento de sentencias else if",
+      "titleEs": "Encadenamiento de sentencias else if",
       "descriptionEs": [
-      	"Las sentencias <code>if/else</code>(si/de lo contrario) pueden ser encadenadas juntas por una lógica compleja. Aquí está el <dfn>pseudocódigo</dfn> de múltiples sentencias <code>if</code> / <code>else if</code> encadenadas:",
+        "Las sentencias <code>if/else</code>(si/de lo contrario) pueden ser encadenadas juntas por una lógica compleja. Aquí está el <dfn>pseudocódigo</dfn> de múltiples sentencias <code>if</code> / <code>else if</code> encadenadas:",
         "<blockquote>if (<em>condicion1</em>) {<br>  <em>sentencias1</em><br>} else if (<em>condicion2</em>) {<br>  <em>sentencias2</em><br>} else if (<em>condicion3</em>) {<br>  <em>sentencias3</em><br>. . .<br>} else {<br>  <em>sentenciasN</em><br>}</blockquote>",
         "<h4>Instrucciones</h4>",
         "Escribe sentencias <code>if</code>/<code>else if</code> encadenadas para cumplir las siguientes condiciones:",
@@ -3408,9 +3408,9 @@
       ],
       "type": "checkpoint",
       "challengeType": 1,
-      "nameEs": "Código de golf",
+      "titleEs": "Código de golf",
       "descriptionEs": [
-      	"En el juego de <a href='https://en.wikipedia.org/wiki/Golf' target='_blank'>golf</a> cada hoyo tiene un <dfn>par</dfn> promedio para el número de <dfn>golpes</dfn> necesarios para meter la pelota. Dependiendo de que tan lejos por encima o por debajo del <code>par</code> estén tus <code>golpes</code>, habrá un sobrenombre diferente.",
+        "En el juego de <a href='https://en.wikipedia.org/wiki/Golf' target='_blank'>golf</a> cada hoyo tiene un <dfn>par</dfn> promedio para el número de <dfn>golpes</dfn> necesarios para meter la pelota. Dependiendo de que tan lejos por encima o por debajo del <code>par</code> estén tus <code>golpes</code>, habrá un sobrenombre diferente.",
         "Tu función pasará un <code>par</code> y el número de <code>golpes</code>, y retornará una cadena de acuerdo a esta tabla (basada en el orden de prioridad - arriba (lo más alto) hacia abajo (lo más bajo)):",
         "<table class=\"table table-striped\"><thead><tr><th>Golpes</th><th>Retorna</th></tr></thead><tbody><tr><td>1</td><td>\"Hole-in-one!\"</td></tr><tr><td>&lt;= par - 2</td><td>\"Eagle\"</td></tr><tr><td>par - 1</td><td>\"Birdie\"</td></tr><tr><td>par</td><td>\"Par\"</td></tr><tr><td>par + 1</td><td>\"Bogey\"</td></tr><tr><td>par + 2</td><td>\"Double Bogey\"</td></tr><tr><td>&gt;= par + 3</td><td>\"Go Home!\"</td></tr></tbody></table>",
         "Tanto <code>par</code> como <code>golpes</code> siempre serán numéricos y positivos."
@@ -3456,9 +3456,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Seleccionar desde diferentes opciones con la sentencia switch",
+      "titleEs": "Seleccionar desde diferentes opciones con la sentencia switch",
       "descriptionEs": [
-      	"Si tienes varias opciones para elegir, usa una sentencia <code>switch</code>. Una sentencia <code>switch</code> prueba un valor y puede tener varias sentencias <code>case</code> las cuales definen varios posibles valores. Las sentencias son ejecutadas desde el primer valor <code>case</code> igualado hasta que se encuentr un <code>break</code>.",
+        "Si tienes varias opciones para elegir, usa una sentencia <code>switch</code>. Una sentencia <code>switch</code> prueba un valor y puede tener varias sentencias <code>case</code> las cuales definen varios posibles valores. Las sentencias son ejecutadas desde el primer valor <code>case</code> igualado hasta que se encuentr un <code>break</code>.",
         "Aquí hay un <dfn>pseudocódigo</dfn> de ejemplo:",
         "<blockquote>switch (num) {<br>  case valor1:<br>    sentencia1;<br>    break;<br>  case valor2:<br>    sentencia2;<br>    break;<br>...<br>  case valorN:<br>    sentenciaN;<br>    break;<br>}</blockquote>",
         "Los valores <code>case</code> son probados con estricta igualdad (<code>===</code>). El <code>break</code> le dice a JavaScript que pare la ejecución del bloque de sentencias en el que está. Si se omite <code>break</code>, se ejecutará la siguiente sentencia.",
@@ -3506,9 +3506,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Agregar una opción por omisión (default) en una sentencia switch",
+      "titleEs": "Agregar una opción por omisión (default) en una sentencia switch",
       "descriptionEs": [
-      	"En una sentencia <code>switch</code> puede que no seas capaz de especificar todos los posibles valores en las sentencias <code>case</code>. En su lugar, puedes agregar la sentencia <code>default</code> la cual será ejecutada si no es encontrada ninguna coincidencia con alguna sentencia <code>case</code>. Piensa en esto como la última sentencia <code>else</code> en una cadena <code>if/else</code>.",
+        "En una sentencia <code>switch</code> puede que no seas capaz de especificar todos los posibles valores en las sentencias <code>case</code>. En su lugar, puedes agregar la sentencia <code>default</code> la cual será ejecutada si no es encontrada ninguna coincidencia con alguna sentencia <code>case</code>. Piensa en esto como la última sentencia <code>else</code> en una cadena <code>if/else</code>.",
         "Una sentencia <code>default</code> debería ser el último caso.",
         "<blockquote>switch (num) {<br>  case valor1:<br>    sentencia1;<br>    break;<br>  case valor2:<br>    sentencia2;<br>    break;<br>...<br>  default:<br>    sentenciaDefault;<br>}</blockquote>",
         "<h4>Instrucciones</h4>",
@@ -3560,9 +3560,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Múltiples opciones idénticas en una sentencias switch",
+      "titleEs": "Múltiples opciones idénticas en una sentencias switch",
       "descriptionEs": [
-      	"Si la sentencia <code>break</code> es omitida de una sentencia <code>case</code> de un <code>switch</code>, las siguientes sentencias <code>case</code> son ejecutadas hasta que sea encontrado un <code>break</code>. Si tienes multiples entradas con la misma salida, puede representarlas en una sentencia <code>switch</code> así:",
+        "Si la sentencia <code>break</code> es omitida de una sentencia <code>case</code> de un <code>switch</code>, las siguientes sentencias <code>case</code> son ejecutadas hasta que sea encontrado un <code>break</code>. Si tienes multiples entradas con la misma salida, puede representarlas en una sentencia <code>switch</code> así:",
         "<blockquote>switch(val) {<br>  case 1:<br>  case 2:<br>  case 3:<br>    result = \"1, 2, or 3\";<br>    break;<br>  case 4:<br>    result = \"4 alone\";<br>}</blockquote>",
         "Los casos 1, 2, y 3 producirán el mismo resultado.",
         "<h4>Instrucciones</h4>",
@@ -3624,9 +3624,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Reemplazar cadenas if else con switch",
+      "titleEs": "Reemplazar cadenas if else con switch",
       "descriptionEs": [
-      	"Si tienes varias opciones para elegir, una sentencia <code>switch</code> puede ser más fácil de escribir que varias sentencias <code>if</code>/<code>if else</code> anidadas. Lo siguiente:",
+        "Si tienes varias opciones para elegir, una sentencia <code>switch</code> puede ser más fácil de escribir que varias sentencias <code>if</code>/<code>if else</code> anidadas. Lo siguiente:",
         "<blockquote>if (val === 1) {<br>  respuesta = \"a\";<br>} else if (val === 2) {<br>  respuesta = \"b\";<br>} else {<br>  respuesta = \"c\";<br>}</blockquote>",
         "puede ser reemplazado con:",
         "<blockquote>switch (val) {<br>  case 1:<br>    respuesta = \"a\";<br>    break;<br>  case 2:<br>    respuesta = \"b\";<br>    break;<br>  default:<br>    respuesta = \"c\";<br>}</blockquote>",
@@ -3673,9 +3673,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Retornar valores booleanos desde funciones",
+      "titleEs": "Retornar valores booleanos desde funciones",
       "descriptionEs": [
-      	"Tal vez recuerdes de <a href=\"waypoint-comparison-with-the-equality-operator\" target=\"_blank\">La comparación con el operador de igualdad</a> que todos los operadores de comparación retornan un valor booleano <code>true</code> (verdadero) o <code>false</code> (falso).",
+        "Tal vez recuerdes de <a href=\"waypoint-comparison-with-the-equality-operator\" target=\"_blank\">La comparación con el operador de igualdad</a> que todos los operadores de comparación retornan un valor booleano <code>true</code> (verdadero) o <code>false</code> (falso).",
         "Un <dfn>anti-patrón</dfn> común es usar una sentencia <code>if/else</code> para hacer una comparación y entonces retornar <code>true</code> o <code>false</code>:",
         "<blockquote>function sonIguales(a,b) {<br>  if (a === b) {<br>    return true;<br>  } else {<br>    return false;<br>  }<br>}</blockquote>",
         "Ya que <code>===</code> returna <code>true</code> (verdadero) o <code>false</code> (falso), podemos simplemente retornar el resultado de la comparación:",
@@ -3728,9 +3728,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Retornar un patrón temprano para funciones",
+      "titleEs": "Retornar un patrón temprano para funciones",
       "descriptionEs": [
-      	"Cuando se alcanza una sentencia <code>return</code>, la ejecución de la presente función se detiene y el control la retorna a la ubicación de la llamada.",
+        "Cuando se alcanza una sentencia <code>return</code>, la ejecución de la presente función se detiene y el control la retorna a la ubicación de la llamada.",
         "<strong>Ejemplo</strong>",
         "<blockquote>function miFuncion() {<br>  console.log(\"Hola\");<br>  return \"Mundo\";<br>  console.log(\"chaochao\")<br>}<br>miFuncion();</blockquote>",
         "Esta presenta en consola \"Hola\", retorna \"Mundo\", pero <code>\"chaochao\"</code> nunca se presenta, porque la función sale con la sentencia <code>return</code>.",
@@ -3779,9 +3779,9 @@
       ],
       "type": "checkpoint",
       "challengeType": 1,
-      "nameEs": "Contar cartas",
+      "titleEs": "Contar cartas",
       "descriptionEs": [
-      	"En el juego de casino Blackjack, un jugador puede conseguir ventaja sobre la casa manteniendo un registro del número relativo de cartas altas y bajas restantes en la baraja. Esto es llamado <a href='https://en.wikipedia.org/wiki/Card_counting' target='_blank'>Conteo de Cartas</a>.",
+        "En el juego de casino Blackjack, un jugador puede conseguir ventaja sobre la casa manteniendo un registro del número relativo de cartas altas y bajas restantes en la baraja. Esto es llamado <a href='https://en.wikipedia.org/wiki/Card_counting' target='_blank'>Conteo de Cartas</a>.",
         "Tener más cartas altas restantes en la baraja favorece al jugador. A cada carta se le asigna un valor de acuerdo a la tabla de abajo. Cuando el conteo es positivo, el jugador debe apostar alto. Cuando el conteo es cero o negativo, el jugador debe apostar bajo.",
         "<table class=\"table table-striped\"><thead><tr><th>Valor</th><th>Cartas</th></tr></thead><tbody><tr><td>+1</td><td>2, 3, 4, 5, 6</td></tr><tr><td>0</td><td>7, 8, 9</td></tr><tr><td>-1</td><td>10, 'J', 'Q', 'K','A'</td></tr></tbody></table>",
         "Vas a escribir una función de conteo de cartas. Esta recibirá un parametro <code>card</code> (carta) e incrementa o decrementa la variable <code>count</code> (conteo) global de acuerdo al valor de la carta (ver tabla). La función retornará entonces una cadena con el presente conteo y la cadena <code>\"Bet\"</code> si el conteo es positivo o <code>\"Hold\"</code> si el conteo es cero o negativo. El presente conteo y la desición del jugador (<code>\"Bet\"</code> o <code>\"Hold\"</code>) deben quedar separada por un único espacio.",
@@ -3834,7 +3834,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Construye objetos en JavaScript",
+      "titleEs": "Construye objetos en JavaScript",
       "descriptionEs": [
         "Es posible que haya oído el término <code>objeto</code> antes.",
         "Los objetos son similares a los <code>vectores</code>, excepto que en lugar de utilizar los índices para acceder y modificar sus datos, pueden accederse mediante lo que se llama <code>propiedades</code>.",
@@ -3890,9 +3890,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Acceder a propiedades de objetos con el operador punto",
+      "titleEs": "Acceder a propiedades de objetos con el operador punto",
       "descriptionEs": [
-      	"Hay dos maneras de acceder a las propiedades de un objeto: con el operador punto (<code>.</code>) y con la notación corchete (<code>[]</code>), similar al caso de un vector.",
+        "Hay dos maneras de acceder a las propiedades de un objeto: con el operador punto (<code>.</code>) y con la notación corchete (<code>[]</code>), similar al caso de un vector.",
         "El operador punto es el que usas cuando de antemano sabes el nombre de la propiedad que estás intentando acceder.",
         "Aquí está un ejemplo del uso del operador punto (<code>.</code>) para leer una propiedad de un objeto:",
         "<blockquote>var miObj = {<br>  prop1: \"val1\",<br>  prop2: \"val2\"<br>};<br>var prop1val = miObj.prop1; // val1<br>var prop2val = miObj.prop2; // val2</blockquote>",
@@ -3940,9 +3940,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Acceder a las propiedades de objetos con la notación corchete",
+      "titleEs": "Acceder a las propiedades de objetos con la notación corchete",
       "descriptionEs": [
-      	"La segunda manera de acceder a las propiedades de un objeto es con la notación corchete (<code>[]</code>). Si el nombre de la propiedad del objeto que estás intentando acceder tiene un espacio, necesitarás usar la notación corchete.",
+        "La segunda manera de acceder a las propiedades de un objeto es con la notación corchete (<code>[]</code>). Si el nombre de la propiedad del objeto que estás intentando acceder tiene un espacio, necesitarás usar la notación corchete.",
         "Aquí está un ejemplo del uso de la notación corchete para leer una propiedad de un objeto:",
         "<blockquote>var miObj = {<br>  \"Nombre con espacio\": \"Kirk\",<br>  \"Mas espacio\": \"Spock\"<br>};<br>miObj[\"Nombre con espacio\"]; // Kirk<br>miObj['Mas espacio']; // Spock</blockquote>",
         "Nota que los nombres de propiedades con espacios tienen que estar entre comillas (apóstrofes o comillas).",
@@ -3991,9 +3991,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Acceder a propiedades de objetos con variables",
+      "titleEs": "Acceder a propiedades de objetos con variables",
       "descriptionEs": [
-      	"Otro uso de la notación corchete sobre objetos es usar una variable para acceder a una propiedad. Esto puede ser muy útil en iteraciones sobre la lista de propiedades de un objetos o para hacer operaciones de búsqueda.",
+        "Otro uso de la notación corchete sobre objetos es usar una variable para acceder a una propiedad. Esto puede ser muy útil en iteraciones sobre la lista de propiedades de un objetos o para hacer operaciones de búsqueda.",
         "Aquí está un ejemplo del uso de una variable para acceder a una propiedad:",
         "<blockquote>var algunaProp = \"propNombre\";<br>var miObj = {<br>  propNombre: \"Algún valor\"<br >}<br>miObj[algunaProp]; // \"Algún valor\"</blockquote>",
         "Aquí hay uno más:",
@@ -4052,7 +4052,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Actualiza las propiedades de un objeto en JavaScript",
+      "titleEs": "Actualiza las propiedades de un objeto en JavaScript",
       "descriptionEs": [
         "Después de que hayas creado un objeto de JavaScript, puedes actualizar sus propiedades en cualquier momento, tal y como harías con cualquier otra variable.",
         "Por ejemplo, echemos un vistazo a <code>ourDog</code>:",
@@ -4116,7 +4116,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Añade nuevas propiedades a un objeto JavaScript",
+      "titleEs": "Añade nuevas propiedades a un objeto JavaScript",
       "descriptionEs": [
         "Puedes añadir nuevas propiedades a objetos existente de la misma forma que usarías para modificarlos.",
         "Así es como añadimos una propiedad <code>\"bark\"</code> (ladra) a nuestro objeto <code>ourDog</code>:",
@@ -4172,7 +4172,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Elimina propiedades de un objeto JavaScript",
+      "titleEs": "Elimina propiedades de un objeto JavaScript",
       "descriptionEs": [
         "También podemos eliminar propiedades de los objetos de esta manera:",
         "<code>delete ourDog.bark;</code>",
@@ -4239,9 +4239,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Usar objetos para búsquedas",
+      "titleEs": "Usar objetos para búsquedas",
       "descriptionEs": [
-      	"Los objetos pueden ser considerados como un almacenamiento llave/valor, como un diccionario. Si tienes datos tabulados, puedes almacenarlos en un objeto para después \"buscar\" valores, en lugar de emplear una sentencia <code>switch</code> o una secuencia de <code>if/else</code>. Esto es más útil cuando sabes que tus datos de entrada son limitados a un cierto rango.",
+        "Los objetos pueden ser considerados como un almacenamiento llave/valor, como un diccionario. Si tienes datos tabulados, puedes almacenarlos en un objeto para después \"buscar\" valores, en lugar de emplear una sentencia <code>switch</code> o una secuencia de <code>if/else</code>. Esto es más útil cuando sabes que tus datos de entrada son limitados a un cierto rango.",
         "Aquí está un ejemplo de una simple búsqueda inversa de alfabeto:",
         "<blockquote>var alfa = {<br>  1:\"Z\",<br>  2:\"Y\",<br>  3:\"X\",<br>  4:\"W\",<br>  ...<br>  24:\"C\",<br>  25:\"B\",<br>  26:\"A\"<br>};<br>alfa[2]; // \"Y\"<br>alfa[24]; // \"C\"<br><br>var valor = 2;<br>alfa[valor]; // \"Y\"</blockquote>",
         "<h4>Instrucciones</h4>",
@@ -4289,9 +4289,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Probar si un objeto tiene cierta propiedad",
+      "titleEs": "Probar si un objeto tiene cierta propiedad",
       "descriptionEs": [
-      	"A veces es útil revisar si cierta propiedad existe o no en un objeto dado. Podemos usar el método de objetos <code>.hasOwnProperty(nomprop)</code> para determinar si un objeto tiene la propiedad <code>nomprop</code>. <code>.hasOwnProperty()</code> retorna <code>true</code> o <code>false</code> si la propiedad es encontrada o no.",
+        "A veces es útil revisar si cierta propiedad existe o no en un objeto dado. Podemos usar el método de objetos <code>.hasOwnProperty(nomprop)</code> para determinar si un objeto tiene la propiedad <code>nomprop</code>. <code>.hasOwnProperty()</code> retorna <code>true</code> o <code>false</code> si la propiedad es encontrada o no.",
         "<strong>Ejemplo</strong>",
         "<blockquote>var miObj = {<br>  arriba: \"sombrero\",<br>  abajo: \"pantalones\"<br>};<br>miObj.hasOwnProperty(\"arriba\");    // true<br>miObj.hasOwnProperty(\"medio\"); // false</blockquote>",
         "<h4>Instrucciones</h4>",
@@ -4346,9 +4346,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Introducción a la notación de objetos de JavaScript (JSON - JavaScript Object Notation)",
+      "titleEs": "Introducción a la notación de objetos de JavaScript (JSON - JavaScript Object Notation)",
       "descriptionEs": [
-      	"La notación de objetos de JavaScript o <code>JSON</code> usa el formato de objetos de JavaScript para almacenar datos. JSON es flexible porque permite <dfn>Estructuras de Datos</dfn> con combinaciones arbitrarias de <dfn>cadenas</dfn>, <dfn>números</dfn>, <dfn>booleanos</dfn>, <dfn>vectores</dfn> y <dfn>objetos</dfn>.",
+        "La notación de objetos de JavaScript o <code>JSON</code> usa el formato de objetos de JavaScript para almacenar datos. JSON es flexible porque permite <dfn>Estructuras de Datos</dfn> con combinaciones arbitrarias de <dfn>cadenas</dfn>, <dfn>números</dfn>, <dfn>booleanos</dfn>, <dfn>vectores</dfn> y <dfn>objetos</dfn>.",
         "Aquí está un ejemplo de un objeto JSON:",
         "<blockquote>var nuestraMusica = [<br>  {<br>    \"artista\": \"Daft Punk\",<br>    \"titulo\": \"Homework\",<br>    \"año_publicacion\": 1997,<br>    \"formatos\": [ <br>      \"CD\", <br>      \"Cassette\", <br>      \"LP\" ],<br>    \"oro\": true<br>  }<br>];</blockquote>",
         "Este es un vector de objetos con diversos <dfn>metadatos</dfn> acerca de un álbum musical. Además tiene anidado un vector <code>formatos</code>. En el vector de nivel superior, pueden añadirse otros registros del álbum.",
@@ -4404,9 +4404,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Acceder a objetos anidados en JSON",
+      "titleEs": "Acceder a objetos anidados en JSON",
       "descriptionEs": [
-      	"Las propiedades y sub-propiedades de los objetos JSON pueden ser accesadas mediante encadenamiento de la notación punto o corchete.",
+        "Las propiedades y sub-propiedades de los objetos JSON pueden ser accesadas mediante encadenamiento de la notación punto o corchete.",
         "Aquí está un objeto JSON anidado:",
         "<blockquote>var nuestroAlmacen = {<br>  \"escritorio\": {<br>    \"cajon\": \"grapadora\"<br>  },<br>  \"armario\": {<br>    \"cajón superior\": { <br>      \"legajador1\": \"un archivo\",<br>      \"legajador2\": \"secretos\"<br>    },<br>    \"cajón inferior\": \"gaseosa\"<br>  }<br>}<br>nuestroAlmacen.armario[\"cajón superior\"].legajador2;  // \"secretos\"<br>nuestroAlmacen.escritorio.cajon; // \"grapadora\"</blockquote>",
         "<h4>Instrucciones</h4>",
@@ -4467,9 +4467,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Acceder a vectores anidados en JSON",
+      "titleEs": "Acceder a vectores anidados en JSON",
       "descriptionEs": [
-      	"Como hemos visto en ejemplos anteriores, los objetos JSON pueden contener objetos anidados y vectores anidados. De forma similar a acceder a objetos anidados, la notación corchete en vectores puede ser encadenada para acceder a vectores anidados.",
+        "Como hemos visto en ejemplos anteriores, los objetos JSON pueden contener objetos anidados y vectores anidados. De forma similar a acceder a objetos anidados, la notación corchete en vectores puede ser encadenada para acceder a vectores anidados.",
         "Aquí está un ejemplo de como acceder a un vector anidado:",
         "<blockquote>var nuestrasMascotas = { <br>  \"gatos\": [<br>    \"Maullador\",<br>    \"Blandito\",<br>    \"Kit-Cat\"<br>  ],<br>  \"perros\": [<br>    \"Mancha\",<br>    \"Bowser\",<br>    \"Frankie\"<br>  ]<br>};<br>nuestrasMascotas.cats[1]; // \"Blandito\"<br>nuestrasMascotas.dogs[0]; // \"Mancha\"</blockquote>",
         "<h4>Instrucciones</h4>",
@@ -4545,9 +4545,9 @@
       ],
       "type": "checkpoint",
       "challengeType": 1,
-      "nameEs": "Colección de registros",
+      "titleEs": "Colección de registros",
       "descriptionEs": [
-      	"Se te da un objeto JSON que representa (una pequeña parte de) tu colección de grabaciones. Cada álbum es identificado por un número id único y tiene varias propiedades. No todos los álbumes tienen la información completa.",
+        "Se te da un objeto JSON que representa (una pequeña parte de) tu colección de grabaciones. Cada álbum es identificado por un número id único y tiene varias propiedades. No todos los álbumes tienen la información completa.",
         "Escribe una función que reciba un <code>id</code>, una propiedad (<code>prop</code>) y un valor (<code>value</code>).",
         "Para el <code>id</code> dado, en la colección <code>collection</code>:",
         "Si el valor <code>value</code> no está en blanco (<code>value !== \"\"</code>) y <code>prop</code> no es <code>\"tracks\"</code> entonces actualiza o establece el valor de la propiedad <code>prop</code>.",
@@ -4601,7 +4601,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Iterar en JavaScript con ciclos for",
+      "titleEs": "Iterar en JavaScript con ciclos for",
       "descriptionEs": [
         "Puede ejecutar el mismo código varias veces mediante el uso de un ciclo.",
         "El tipo más común de bucle de JavaScript se llama \"ciclo for\"porque se ejecuta \"por\" (for) un número específico de veces.",
@@ -4659,7 +4659,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Itera por los números pares con un ciclo for",
+      "titleEs": "Itera por los números pares con un ciclo for",
       "descriptionEs": [
         "Los ciclos <code>for</code> no siempre iteran incrementado de a uno. Cambiando nuestra <code>expresión final</code>, podemos contar los números pares.",
         "Vamos a empezar con <code>i = 0</code> e iterar mientras <code>i <10</code>.  Vamos a incrementar <code>i</code> de a 2 en cada iteración <code>i + = 2</code>. ",
@@ -4712,7 +4712,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Cuenta hacia atrás con un ciclo for",
+      "titleEs": "Cuenta hacia atrás con un ciclo for",
       "descriptionEs": [
         "Un ciclo también puede contar hacia atrás, siempre y cuando definamos las condiciones adecuadas.",
         "Para contar hacia atrás de dos en dos, tendremos que cambiar nuestra <code>inicialización</code>, la <code>condición</code> y la <code>última-expresión</code>.",
@@ -4768,9 +4768,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Iterar a través de un vector con un ciclo for",
+      "titleEs": "Iterar a través de un vector con un ciclo for",
       "descriptionEs": [
-      	"Una tarea común en JavaScript es iterar a traves del contenido de un vector. Una manera de hacerlo es con un ciclo <code>for</code>. Este código imprimirá cada elemento del vector <code>arr</code> en la consola:",
+        "Una tarea común en JavaScript es iterar a traves del contenido de un vector. Una manera de hacerlo es con un ciclo <code>for</code>. Este código imprimirá cada elemento del vector <code>arr</code> en la consola:",
         "<blockquote>var arr = [10,9,8,7,6];<br>for (var i=0; i < arr.length; i++) {<br>   console.log(arr[i]);<br>}</blockquote>",
         "Recuerda que los vectores tienen numeración que comienza en cero, la cual significa que el último índice del vector es su longitud - 1. Nuestra <dfn>condición</dfn> para este ciclo es <code>i < arr.length</code>, que lo detendrá cuando <code>i</code> sea la longitud - 1.",
         "<h4>Instrucciones</h4>",
@@ -4814,9 +4814,9 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Anidar ciclos for",
+      "titleEs": "Anidar ciclos for",
       "descriptionEs": [
-      	"Si tienes una matriz multi-dimensional, puedes usar la misma lógica del punto anterior para iterar a través de un vector y cualquier sub-vector. Aquí está un ejemplo:",
+        "Si tienes una matriz multi-dimensional, puedes usar la misma lógica del punto anterior para iterar a través de un vector y cualquier sub-vector. Aquí está un ejemplo:",
         "<blockquote>var arr = [<br>  [1,2], [3,4], [5,6]<br>];<br>for (var i=0; i &lt; arr.length; i++) {<br>  for (var j=0; j &lt; arr[i].length; j++) {<br>    console.log(arr[i][j]);<br>  }<br>}</blockquote>",
         "Esto imprime cada sub-elemento en <code>arr</code> uno a la vez. Nota que en el ciclo interior, estamos comprobando la longitud <code>.length</code> de <code>arr[i]</code>, ya que <code>arr[i]</code> es por si mismo un vector.",
         "<h4>Instrucciones</h4>",
@@ -4854,7 +4854,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Iterar con JavaScript con ciclos while",
+      "titleEs": "Iterar con JavaScript con ciclos while",
       "descriptionEs": [
         "Puede ejecutar el mismo código varias veces mediante el uso de un ciclo.",
         "Otro tipo de ciclo de JavaScript se llama un ciclo \"while\", ya que se ejecuta, \"mientras que\" algo sea cierto y se detiene una vez que ya no sea así.",
@@ -4933,9 +4933,9 @@
       ],
       "type": "checkpoint",
       "challengeType": 1,
-      "nameEs": "Búsqueda de perfiles",
+      "titleEs": "Búsqueda de perfiles",
       "descriptionEs": [
-      	"Tenemos un vector de objetos que representan diferentes personas en nuestra lista de contactos.",
+        "Tenemos un vector de objetos que representan diferentes personas en nuestra lista de contactos.",
         "Una función <code>lookUp</code> que recibe el nombre (<code>firstName</code>) y una propiedad (<code>prop</code>) como argumentos ya ha sido escrita previamente para ti.",
         "La función debe comprobar si <code>firstName</code> es un nombre (<code>firstName</code>) de algún contacto y si la propiedad dada (<code>prop</code>) es una propiedad de ese contacto.",
         "Si ambos son verdaderos, entonces retorna el valor (<code>value</code>) de esa propiedad.",
@@ -4977,7 +4977,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Generar fracciones al azar con JavaScript",
+      "titleEs": "Generar fracciones al azar con JavaScript",
       "descriptionEs": [
         "Los números aleatorios son útiles para crear un comportamiento aleatorio.",
         "JavaScript tiene una función <code>Math.random()</code> que genera un número decimal aleatorio.",
@@ -5023,7 +5023,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Genera números aleatorios enteros con JavaScript",
+      "titleEs": "Genera números aleatorios enteros con JavaScript",
       "descriptionEs": [
         "Es muy bueno que podamos generar números decimales al azar, pero es aún más útil si lo utilizamos para generar números enteros aleatorios.",
         "En primer lugar, vamos a usar <code>Math.random()</code> para generar un decimal aleatorio.",
@@ -5096,7 +5096,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Genera números aleatorios enteros dentro de un rango",
+      "titleEs": "Genera números aleatorios enteros dentro de un rango",
       "descriptionEs": [
         "En lugar de generar un número aleatorio entre cero y un número dado como lo hicimos antes, podemos generar un número aleatorio que caiga dentro de un rango de dos números específicos.",
         "Para ello, vamos a definir un número mínimo <code>min</code> y un número máximo <code>max</code>.",
@@ -5157,7 +5157,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Examina un texto con expresiones regulares",
+      "titleEs": "Examina un texto con expresiones regulares",
       "descriptionEs": [
         "Las <code>expresiones regulares</code> se utilizan para encontrar ciertas palabras o patrones dentro de <code>cadenas</code>.",
         "Por ejemplo, si quisiéramos encontrar la palabra <code>el</code> en la cadena <code>El perro persiguió al gato el lunes</code>, podríamos utilizar la siguiente <code>expresión regular</code>: <code>/el/gi</code> ",
@@ -5211,7 +5211,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Encuentra números con expresiones regulares",
+      "titleEs": "Encuentra números con expresiones regulares",
       "descriptionEs": [
         "Podemos usar selectores especiales en las <code>expresiones regulares</code> para seleccionar un determinado tipo de valor.",
         "Uno de estos selectores es el de dígitos <code>\\d</code> que se utiliza para hacer coincidir números en una cadena.",
@@ -5260,7 +5260,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Encuentra espacios en blanco con las expresiones regulares",
+      "titleEs": "Encuentra espacios en blanco con las expresiones regulares",
       "descriptionEs": [
         "También podemos utilizar selectores de expresiones regulares como <code>\\s</code> para encontrar un espacio en blanco en una cadena.",
         "Los espacios en blanco son <code>\" \"</code> (espacio), <code>\\r</code> (el retorno de carro), <code>\\n</code> (nueva línea), <code>\\t</code> (tabulador), y <code>\\f</code> (el avance de página). ",
@@ -5307,7 +5307,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Hacer coincidir con una expresión regular invertida",
+      "titleEs": "Hacer coincidir con una expresión regular invertida",
       "descriptionEs": [
         "Puedes invertir las coincidencias de un selector usando su versión en mayúsculas.",
         "Por ejemplo, <code>\\s</code> coincidirá con cualquier espacio en blanco, mientras que <code>\\S</code> coincidirá con todo lo que no sea espacio en blanco.",
@@ -5472,7 +5472,7 @@
       "type": "waypoint",
       "challengeType": 0,
       "isBeta": true,
-      "nameEs": "Crea una máquina tragamonedas en JavaScript",
+      "titleEs": "Crea una máquina tragamonedas en JavaScript",
       "descriptionEs": [
         "Ahora vamos a tratar de combinar algunas de las cosas que hemos aprendido para crear la lógica de una máquina tragamonedas.",
         "Para esto tendremos que generar tres números aleatorios entre <code>1</code> y <code>3</code> que representen los valores posibles de cada casilla.",
@@ -5643,7 +5643,7 @@
       "type": "waypoint",
       "challengeType": 0,
       "isBeta": true,
-      "nameEs": "Añade casillas a tu tragamonedas JavaScript",
+      "titleEs": "Añade casillas a tu tragamonedas JavaScript",
       "descriptionEs": [
         "Ahora que cada una de nuestras casillas genera números aleatorios, tenemos que comprobar si todos quedan con el mismo número.",
         "Si es así, debemos notificar a nuestros usuarios que han ganado y debemos retornar <code>null</code>.",
@@ -5824,7 +5824,7 @@
       "type": "waypoint",
       "challengeType": 0,
       "isBeta": true,
-      "nameEs": "Da vida a tu máquina tragamonedas en JavaScript",
+      "titleEs": "Da vida a tu máquina tragamonedas en JavaScript",
       "descriptionEs": [
         "Ahora podemos detectar una victoria. Logremos que la máquina tragamonedas funcione. ",
         "Usemos un <code>selector</code> de jQuery <code>$(\".slot\")</code> para seleccionar todas las casillas.",
@@ -6010,7 +6010,7 @@
       "type": "waypoint",
       "challengeType": 0,
       "isBeta": true,
-      "nameEs": "Dale a tu máquina tragamonedas JavaScript algunas imágenes con estilo",
+      "titleEs": "Dale a tu máquina tragamonedas JavaScript algunas imágenes con estilo",
       "descriptionEs": [
         "Ahora añadamos algunas imágenes en nuestras casillas.",
         "Ya hemos creado las imágenes por ti en una matriz llamada <code>images</code>. Podemos utilizar diferentes índices para tomara cada una de estas. ",
diff --git a/seed/challenges/01-front-end-development-certification/basic-ziplines.json b/seed/challenges/01-front-end-development-certification/basic-ziplines.json
index e8504ed..ad28416 100644
--- a/seed/challenges/01-front-end-development-certification/basic-ziplines.json
+++ b/seed/challenges/01-front-end-development-certification/basic-ziplines.json
@@ -48,91 +48,90 @@
       "challengeSeed": [],
       "tests": [],
       "type": "Waypoint",
+      "isRequired": false,
       "challengeType": 7,
-      "nameEs": "Prepárate para los Proyectos de Desarrollo de Interfaces",
-      "descriptionEs": [
+      "titleRu": "Приготовьтесь к разработке фронтенд проектов",
+      "descriptionRu": [
         [
           "http://i.imgur.com/OAD6SJz.png",
-          "Una imagen del juego Simón, uno de nuestros proyectos de interfaz.",
-          "Nuestros proyectos de desarrollo de interfaces te darán oportunidad de aplicar las habilidades con interfaces que has desarrollado hasta este momento.  Usaremos un editor de código basado en el navegador llamado CodePen.",
+          "Игра Саймона - один из фронтенд проектов.",
+          "Наши фронтенд проекты дадут вам шанс применить полученные к этому моменту знания по фронтенд разработке. Мы будем использовать популярный браузерный редактор кода - CodePen.",
           ""
         ],
         [
           "http://i.imgur.com/WBetuBa.jpg",
-          "Un programador frustado golpeando la pantalla de su computador.",
-          "Nuestros desafíos sobre algoritmos son difíciles.  Algunos pueden requerir muchas horas para resolverse.  Podrás frustarte, pero no te rindas. Se vuelve fácil con práctica.",
+          "Программист от отчаяния кулаком пробивает экран своего ноутбука.",
+          "Это трудные проекты. Разработка каждого занимает у большинства кэмперов несколько дней. У вас может возникнуть чувство отчаяния. Несмотря на это не сдавайтесь. С практикой этот процесс станет проще.",
           ""
         ],
         [
           "http://i.imgur.com/p2TpOQd.jpg",
-          "Un tierno perro que salta sobre un obstáculo, pica el ojo y te apunta con su pata.",
-          "Cuando te atasques, usa la metodología Leer-Buscar-Preguntar. No te preocupes -  lo tienes resuelto.",
+          "Милый пес, прыгающий через препятствие, указывает на вас лапой и подмигивает.",
+          "Если что-то не получается, воспользуйтесь Read-Search-Ask. Не волнуйтесь - вы сможете это сделать.",
           ""
         ],
         [
           "http://i.imgur.com/G1saeDt.gif",
-          "Un gif que muestra cómo crear una cuenta en Codepen.",
-          "Para nuestros desafíos de interfaces, usaremos un editor de código basado en el navegador que es muy famoso llamado Codepen. Pulsa en el botón de abajo \"Open link in new tab\" para abrir la página de registro de CodePen. Rellena el formulario y pulsa \"Sign up\". <br><div class=\"small\">Nota: Si ya tienes una cuenta de CodePen, puedes omitir este paso pulsando \"Open link in new tab\", cierra la nueva pestaña que se abre, entonces pulsa \"go to my next step\". Eliminamos nuestro botón \"skip step\" porque mucha gente solamente pulsa el botón sin realizar estos importantes pasos.</div>",
+          "Гифка показывающая как зарегистрироваться на CodePen.",
+          "Для заданий по фронтенд разработке, мы будем использовать популярный браузерный редактор кода под названием CodePen. Откройте страницу регистрации на сайте CodePen, нажав на расположенную чуть ниже кнопку \"Open link in new tab\". Заполните форму и нажмите \"Sign up\". <br><div class=\"small\">Замечание: Если у вас уже есть аккаунт CodePen, то этот шаг можно пропустить: нажмите на кнопку \"Open link in new tab\", закройте появившуюся вкладку и затем кликните \"go to my next step\". Мы убрали кнопку \"skip step\", ввиду того что большинство людей просто нажимали бы ее несколько раз подряд и пропускали бы эти важные инструкции.</div>",
           "http://codepen.io/signup/free"
         ],
         [
           "http://i.imgur.com/U4y9RJ1.gif",
-          "Un gif que muestra que puedes escribir \"hello world\" en el editor, lo cual escribirá \"hello world\" en la ventana de vista previa. También puedes mover las ventanas para cambiar su tamaño, y cambiar su orientación.",
-          "En la ventana de HTML, crea un elemento h1 con el texto \"Hola mundo\". Puedes arrastrar los bordes de las ventanas para cambiar su tamaño. También puedes pulsar el botón de \"Change View\" para cambiar la orientación de las ventanas.",
+          "Гифка показывающая набор в редакторе заголовка с текстом \"hello world\", который затем отображается в окошке предпросмотра. А также указывающая как изменить размер окон редактора или поменять их расположение.",
+          "В окошке HTML создайте элемент h1 с текстом \"Hello World\". Ухватив края окон можно изменить их размер. А нажав на кнопку \"Change View\" поменять их расположение.",
           ""
         ],
         [
           "http://i.imgur.com/G9KFQDL.gif",
-          "Un gif que muestra el proceso de agregar Bootstrap a tu proyecto.",
-          "Pulsa el engrane en la esquina superior izquierda de la ventana de CSS, luego ve hacia abajo hasta donde dice \"Quick add\" y elige Bootstrap. Ahora dale a tu elemento h1 la clase \"text-primary\" para cambiar su color y verificar que Bootstrap está activado.",
+          "Гифка показывающая как в CodePen добавить к проекту Bootstrap.",
+          "Нажмите на звездочку в левом верхнем углу окошка CSS, найдите внизу поле \"Quick add\" и выберите в нем Bootstrap. Добавьте к элементу h1 класс \"text-primary\", чтобы изменить его цвет и удостовериться, что Bootstrap подключен.",
           ""
         ]
       ],
-      "nameRu": "Приготовьтесь к разработке фронтенд проектов",
-      "descriptionRu": [
+      "titleEs": "Prepárate para los Proyectos de Desarrollo de Interfaces",
+      "descriptionEs": [
         [
           "http://i.imgur.com/OAD6SJz.png",
-          "Игра Саймона - один из фронтенд проектов.",
-          "Наши фронтенд проекты дадут вам шанс применить полученные к этому моменту знания по фронтенд разработке. Мы будем использовать популярный браузерный редактор кода - CodePen.",
+          "Una imagen del juego Simón, uno de nuestros proyectos de interfaz.",
+          "Nuestros proyectos de desarrollo de interfaces te darán oportunidad de aplicar las habilidades con interfaces que has desarrollado hasta este momento.  Usaremos un editor de código basado en el navegador llamado CodePen.",
           ""
         ],
         [
           "http://i.imgur.com/WBetuBa.jpg",
-          "Программист от отчаяния кулаком пробивает экран своего ноутбука.",
-          "Это трудные проекты. Разработка каждого занимает у большинства кэмперов несколько дней. У вас может возникнуть чувство отчаяния. Несмотря на это не сдавайтесь. С практикой этот процесс станет проще.",
+          "Un programador frustado golpeando la pantalla de su computador.",
+          "Nuestros desafíos sobre algoritmos son difíciles.  Algunos pueden requerir muchas horas para resolverse.  Podrás frustarte, pero no te rindas. Se vuelve fácil con práctica.",
           ""
         ],
         [
           "http://i.imgur.com/p2TpOQd.jpg",
-          "Милый пес, прыгающий через препятствие, указывает на вас лапой и подмигивает.",
-          "Если что-то не получается, воспользуйтесь Read-Search-Ask. Не волнуйтесь - вы сможете это сделать.",
+          "Un tierno perro que salta sobre un obstáculo, pica el ojo y te apunta con su pata.",
+          "Cuando te atasques, usa la metodología Leer-Buscar-Preguntar. No te preocupes -  lo tienes resuelto.",
           ""
         ],
         [
           "http://i.imgur.com/G1saeDt.gif",
-          "Гифка показывающая как зарегистрироваться на CodePen.",
-          "Для заданий по фронтенд разработке, мы будем использовать популярный браузерный редактор кода под названием CodePen. Откройте страницу регистрации на сайте CodePen, нажав на расположенную чуть ниже кнопку \"Open link in new tab\". Заполните форму и нажмите \"Sign up\". <br><div class=\"small\">Замечание: Если у вас уже есть аккаунт CodePen, то этот шаг можно пропустить: нажмите на кнопку \"Open link in new tab\", закройте появившуюся вкладку и затем кликните \"go to my next step\". Мы убрали кнопку \"skip step\", ввиду того что большинство людей просто нажимали бы ее несколько раз подряд и пропускали бы эти важные инструкции.</div>",
+          "Un gif que muestra cómo crear una cuenta en Codepen.",
+          "Para nuestros desafíos de interfaces, usaremos un editor de código basado en el navegador que es muy famoso llamado Codepen. Pulsa en el botón de abajo \"Open link in new tab\" para abrir la página de registro de CodePen. Rellena el formulario y pulsa \"Sign up\". <br><div class=\"small\">Nota: Si ya tienes una cuenta de CodePen, puedes omitir este paso pulsando \"Open link in new tab\", cierra la nueva pestaña que se abre, entonces pulsa \"go to my next step\". Eliminamos nuestro botón \"skip step\" porque mucha gente solamente pulsa el botón sin realizar estos importantes pasos.</div>",
           "http://codepen.io/signup/free"
         ],
         [
           "http://i.imgur.com/U4y9RJ1.gif",
-          "Гифка показывающая набор в редакторе заголовка с текстом \"hello world\", который затем отображается в окошке предпросмотра. А также указывающая как изменить размер окон редактора или поменять их расположение.",
-          "В окошке HTML создайте элемент h1 с текстом \"Hello World\". Ухватив края окон можно изменить их размер. А нажав на кнопку \"Change View\" поменять их расположение.",
+          "Un gif que muestra que puedes escribir \"hello world\" en el editor, lo cual escribirá \"hello world\" en la ventana de vista previa. También puedes mover las ventanas para cambiar su tamaño, y cambiar su orientación.",
+          "En la ventana de HTML, crea un elemento h1 con el texto \"Hola mundo\". Puedes arrastrar los bordes de las ventanas para cambiar su tamaño. También puedes pulsar el botón de \"Change View\" para cambiar la orientación de las ventanas.",
           ""
         ],
         [
           "http://i.imgur.com/G9KFQDL.gif",
-          "Гифка показывающая как в CodePen добавить к проекту Bootstrap.",
-          "Нажмите на звездочку в левом верхнем углу окошка CSS, найдите внизу поле \"Quick add\" и выберите в нем Bootstrap. Добавьте к элементу h1 класс \"text-primary\", чтобы изменить его цвет и удостовериться, что Bootstrap подключен.",
+          "Un gif que muestra el proceso de agregar Bootstrap a tu proyecto.",
+          "Pulsa el engrane en la esquina superior izquierda de la ventana de CSS, luego ve hacia abajo hasta donde dice \"Quick add\" y elige Bootstrap. Ahora dale a tu elemento h1 la clase \"text-primary\" para cambiar su color y verificar que Bootstrap está activado.",
           ""
         ]
-      ],
-      "isRequired": false
+      ]
     },
     {
       "id": "bd7158d8c442eddfaeb5bd18",
       "title": "Build a Tribute Page",
-      "releasedOn": "January 1, 2016",
       "description": [
         "<strong>Objective:</strong> Build a <a href='http://codepen.io' target='_blank'>CodePen.io</a> app that is functionally similar to this: <a href='http://codepen.io/FreeCodeCamp/full/wMQrXV' target='_blank'>http://codepen.io/FreeCodeCamp/full/wMQrXV</a>.",
         "<strong>Rule #1:</strong> Don't look at the example project's code. Figure it out for yourself.",
@@ -143,24 +142,15 @@
         "When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen.",
         "You can get feedback on your project from fellow campers by sharing it in our <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Code Review Chatroom</a>. You can also share it on Twitter and your city's Campsite (on Facebook)."
       ],
+      "releasedOn": "January 1, 2016",
       "challengeSeed": [
         "154927651"
       ],
       "tests": [],
       "type": "zipline",
+      "isRequired": true,
       "challengeType": 3,
-      "nameEs": "Construye una página Tributo",
-      "descriptionEs": [
-        "<strong>Objetivo:</strong> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcionalmente sea similar a esta: <a href='http://codepen.io/FreeCodeCamp/full/wMQrXV' target='_blank'>http://codepen.io/FreeCodeCamp/full/wMQrXV</a>",
-        "<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
-        "<strong>Regla #2:</strong> Satisface las siguientes <a href='http://en.wikipedia.org/wiki/User_story' target='_blank'>historias de usuario</a>. Usa cualquier librería que necesites. Dale tu estilo personal.",
-        "<strong>Historia de usuario:</strong> Puedo ver una página tributo con una imagen y texto.",
-        "<strong>Historia de usuario:</strong> Puedo pulsar en un enlace que me llevará a un sitio web externo con mayor información sobre el tema.",
-        "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado.",
-        "Cuando hayas terminado, pulsa el botón \"I've completed this challenge\" e incluye un link a tu CodePen. ",
-        "Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiéndolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
-      ],
-      "nameRu": "Создайте страницу посвященную тому что вас вдохновляет",
+      "titleRu": "Создайте страницу посвященную тому что вас вдохновляет",
       "descriptionRu": [
         "<strong>Задание:</strong> Создайте приложение <a href='http://codepen.io' target='_blank'>CodePen.io</a> которое функционально соответствует вот этому: <a href='http://codepen.io/FreeCodeCamp/full/wMQrXV' target='_blank'>http://codepen.io/FreeCodeCamp/full/wMQrXV</a>.",
         "<strong>Правило #1:</strong> Не подсматривайте код приведенного на CodePen примера. Напишите его самостоятельно.",
@@ -171,7 +161,17 @@
         "Когда выполните задание кликните кнопку \"I've completed this challenge\" и добавьте ссылку на ваш CodePen.",
         "Вы можете получить отзыв о вашем проекте от коллег, поделившись ссылкой на него в нашем <a href='//gitter.im/freecodecamp/codereview' target='_blank'>чате для рассмотрения кода</a>. Также вы можете поделиться ею через Twitter и на странице Free Code Camp вашего города на Facebook."
       ],
-      "isRequired": true
+      "titleEs": "Construye una página Tributo",
+      "descriptionEs": [
+        "<strong>Objetivo:</strong> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcionalmente sea similar a esta: <a href='http://codepen.io/FreeCodeCamp/full/wMQrXV' target='_blank'>http://codepen.io/FreeCodeCamp/full/wMQrXV</a>",
+        "<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
+        "<strong>Regla #2:</strong> Satisface las siguientes <a href='http://en.wikipedia.org/wiki/User_story' target='_blank'>historias de usuario</a>. Usa cualquier librería que necesites. Dale tu estilo personal.",
+        "<strong>Historia de usuario:</strong> Puedo ver una página tributo con una imagen y texto.",
+        "<strong>Historia de usuario:</strong> Puedo pulsar en un enlace que me llevará a un sitio web externo con mayor información sobre el tema.",
+        "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado.",
+        "Cuando hayas terminado, pulsa el botón \"I've completed this challenge\" e incluye un link a tu CodePen. ",
+        "Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiéndolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
+      ]
     },
     {
       "id": "bd7158d8c242eddfaeb5bd13",
@@ -196,7 +196,9 @@
       ],
       "tests": [],
       "type": "zipline",
-      "nameRu": "Создайте сайт-портфолио",
+      "isRequired": true,
+      "challengeType": 3,
+      "titleRu": "Создайте сайт-портфолио",
       "descriptionRu": [
         "<strong>Задание:</strong> Создайте приложение <a href='http://codepen.io' target='_blank'>CodePen.io</a> которое функционально соответствует вот этому: <a href='http://codepen.io/FreeCodeCamp/full/VemmoX/' target='_blank'>http://codepen.io/FreeCodeCamp/full/VemmoX/</a>.",
         "<strong>Правило #1:</strong> Не подсматривайте код приведенного на CodePen примера. Напишите его самостоятельно.",
@@ -212,7 +214,7 @@
         "Когда выполните задание кликните кнопку \"I've completed this challenge\" и добавьте ссылку на ваш CodePen.",
         "Вы можете получить отзыв о вашем проекте от коллег, поделившись ссылкой на него в нашем <a href='//gitter.im/freecodecamp/codereview' target='_blank'>чате для рассмотрения кода</a>. Также вы можете поделиться ею через Twitter и на странице Free Code Camp вашего города на Facebook."
       ],
-      "nameEs": "Construye una página web para tu portafolio",
+      "titleEs": "Construye una página web para tu portafolio",
       "descriptionEs": [
         "<strong>Objetivo:</strong> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a la de esta: <a href='http://codepen.io/FreeCodeCamp/full/VemmoX/' target='_blank'>http://codepen.io/FreeCodeCamp/full/VemmoX/</a>.",
         "<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
@@ -227,9 +229,7 @@
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado.",
         "Cuando hayas terminado, pulsa el botón \"I've completed this challenge\" e incluye un link a tu CodePen. ",
         "Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiéndolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
-      ],
-      "isRequired": true,
-      "challengeType": 3
+      ]
     }
   ]
 }
diff --git a/seed/challenges/01-front-end-development-certification/bootstrap.json b/seed/challenges/01-front-end-development-certification/bootstrap.json
index e5c56f5..673fa6f 100644
--- a/seed/challenges/01-front-end-development-certification/bootstrap.json
+++ b/seed/challenges/01-front-end-development-certification/bootstrap.json
@@ -79,7 +79,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Usa diseño adaptativo con los contenedores fluidos de Bootstrap",
+      "titleEs": "Usa diseño adaptativo con los contenedores fluidos de Bootstrap",
       "descriptionEs": [
         "Ahora vamos de vuelta a nuestra aplicación de fotos de gatos. Esta vez, vamos a darle estilo utilizando la infraestructura CSS del popular Bootstrap.",
         "Bootstrap determina qué tan ancha es la pantalla y adapta correspondientemente el tamaño de tus elementos HTML - por eso es que se llama <code>Diseño adaptativo</code> (responsive design).",
@@ -165,7 +165,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Haz que las imágenes sean adaptativas en dispositivos móviles",
+      "titleEs": "Haz que las imágenes sean adaptativas en dispositivos móviles",
       "descriptionEs": [
         "Primero, agrega una nueva imagen debajo que la que ya existe. Haz que su atributo <code>src</code> sea <code>http://bit.ly/fcc-running-cats</code>.",
         "Sería genial si esta imagen fuera exactamente del tamaño de la pantalla de nuestro teléfono.",
@@ -245,7 +245,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Centra el texto con Bootstrap",
+      "titleEs": "Centra el texto con Bootstrap",
       "descriptionEs": [
         "Ahora que estamos usando Bootstrap, podemos centrar nuestro elemento de encabezado para hacerlo verse mejor. Todo lo que necesitamos hacer es agregar la clase <code>text-center</code> a nuestro elemento <code>h2</code>.",
         "Recuerda que puedes agregar varias clases a un mismo elemento separando cada una de ellas con un espacio, de esta forma:",
@@ -326,7 +326,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Crea un botón con Bootstrap",
+      "titleEs": "Crea un botón con Bootstrap",
       "descriptionEs": [
         "Bootstrap tiene sus propios estilos para elementos <code>button</code>, los cuales se ven mejor que los estilos simples de HTML.",
         "Crea un nuevo elemento <code>button</code> debajo de tu foto grande del gatito. Dale la clase <code>btn</code> y el texto \"Like\"."
@@ -409,7 +409,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Crea un elemento botón de bloque con Bootstrap",
+      "titleEs": "Crea un elemento botón de bloque con Bootstrap",
       "descriptionEs": [
         "Normalmente, tus elementos <code>button</code> son sólo tan anchos como el texto que contienen. Al convertir un botón en elemento a nivel de bloque, este se estirará para llenar todo el espacio horizontal y cualquier elemento que lo siga se desplazará a una \"nueva línea\" debajo del bloque.",
         "Esta imagen es un ejemplo de la diferencia entre elementos en línea (<code>inline</code>) y elementos a nivel de bloque (<code>block-level</code>):",
@@ -493,7 +493,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Prueba el arcoíris de colores para botones que te ofrece Bootstrap",
+      "titleEs": "Prueba el arcoíris de colores para botones que te ofrece Bootstrap",
       "descriptionEs": [
         "La clase <code>btn-primary</code> es el color principal que utilizarás en tu aplicación. Es útil resaltar las acciones que quieres que tu usuario ejecute.",
         "Agrega la clase <code>btn-primary</code> de Bootstrap a tu botón.",
@@ -576,7 +576,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Señala acciones opcionales con botones informativos",
+      "titleEs": "Señala acciones opcionales con botones informativos",
       "descriptionEs": [
         "Bootstrap incluye varios colores pre-definidos para botones. La clase <code>btn-info</code> se utiliza para llamar la atención a acciones opcionales que el usuario puede tomar.",
         "Crea un nuevo botón a nivel de bloque de Bootstrap debajo de tu botón de \"Like\" con el texto \"Info\", y agrégale las clases de Bootstrap <code>btn-info</code> y <code>btn-block</code>.",
@@ -660,7 +660,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Advierte a tus usuarios sobre acciones peligrosas",
+      "titleEs": "Advierte a tus usuarios sobre acciones peligrosas",
       "descriptionEs": [
         "Bootstrap incluye varios colores pre-definidos para botones. La clase <code>btn-danger</code> es el color de botón que usarías para notificar a los usuarios que el botón ejecuta una acción destructiva, como por ejemplo eliminar la foto de un gato.",
         "Crea un botón con el texto \"Delete\" y dale la clase <code>btn-danger</code>.",
@@ -749,7 +749,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Usa la cuadrícula de Bootstrap para poner elementos lado a lado",
+      "titleEs": "Usa la cuadrícula de Bootstrap para poner elementos lado a lado",
       "descriptionEs": [
         "Bootstrap utiliza un sistema de cuadrícula adaptativa que facilita el poner elementos en fila y especificar la anchura relativa de cada elemento. La mayoría de las clases de Bootstrap pueden ser aplicadas a un elemento <code>div</code>.",
         "Aquí hay un diagrama del funcionamiento de la cuadrícula de 12 columnas Bootstrap:",
@@ -849,7 +849,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Reemplaza el CSS personalizado por Bootstrap",
+      "titleEs": "Reemplaza el CSS personalizado por Bootstrap",
       "descriptionEs": [
         "Podemos limpiar nuestro código y hacer que nuestra aplicación de fotos de gatos se vea más convencional, usando los estilos pre-construidos de Bootstrap, en lugar de los estilos personalizados que creamos antes.",
         "No te preocupes, luego habrá más tiempo para personalizar nuestro CSS.",
@@ -935,7 +935,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Usa span para elementos en línea",
+      "titleEs": "Usa span para elementos en línea",
       "descriptionEs": [
         "Puedes utilizar span para crear elementos en línea. ¿Recuerdas cuando usamos la clase <code>btn-block</code> para hacer que el botón llenara toda la línea?",
         "Esta imagen ilustra la diferencia entre elementos en línea (<code>inline</code>) y elementos a nivel de bloque (<code>block-level</code>):",
@@ -1023,7 +1023,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Crea un encabezado personalizado",
+      "titleEs": "Crea un encabezado personalizado",
       "descriptionEs": [
         "Crearemos un encabezado simple para nuestra aplicación de fotos de gatos poniendo el título y la relajante imagen del gato en la misma línea.",
         "Recuerda, Bootstrap usa un sistema de cuadrícula adaptativo, el cual facilita poner elementos en filas y especificar el ancho relativo de cada elemento. La mayoría de las clases de Bootstrap pueden aplicarse a un elemento <code>div</code>.",
@@ -1114,7 +1114,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Agrega iconos de Font Awesome a los botones",
+      "titleEs": "Agrega iconos de Font Awesome a los botones",
       "descriptionEs": [
         "Font Awesome es una librería de iconos muy conveniente. Estos iconos son imágenes vectoriales, almacenadas en formato <code>.svg</code>, y son tratados como si fueran fuentes. Puedes especificar su tamaño usando pixeles, y tomarán el tamaño de fuente de su elemento HTML padre.",
         "Puedes añadir Font Awesome a cualquier aplicación sólo incluyendo y agregando el siguiente código al comienzo de tu HTML:",
@@ -1198,7 +1198,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Agrega Font Awesome a todos los botones",
+      "titleEs": "Agrega Font Awesome a todos los botones",
       "descriptionEs": [
         "Font Awesome es una librería de iconos muy conveniente. Estos iconos son imágenes vectoriales, almacenadas en formato <code>.svg</code>, y son tratados como si fueran fuentes. Puedes especificar su tamaño usando pixeles, y tomarán el tamaño de fuente de su elemento HTML padre.",
         "Utiliza Font Awesome para agregar un icono <code>info-circle</code> a tu botón informativo y un icono <code>trash</code> a tu botón de eliminar."
@@ -1277,7 +1277,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Crea botones de opción con estilo adaptativo",
+      "titleEs": "Crea botones de opción con estilo adaptativo",
       "descriptionEs": [
         "¡Puedes utilizar las clases <code>col-xs-*</code> de Bootstrap en elementos <code>form</code> también! De esta forma, nuestros botones de opción estarán igualmente distribuidos en la página, sin importar qué tan ancha es la resolución de la pantalla.",
         "Anida todos los botones de opción dentro de un elemento <code>&#60;div class=\"row\"&#62;</code>. Luego, anida cada uno de ellos dentro de un elemento <code>&#60;div class=\"col-xs-6\"&#62;</code>."
@@ -1363,7 +1363,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Crea casillas de selección con estilo adaptativo",
+      "titleEs": "Crea casillas de selección con estilo adaptativo",
       "descriptionEs": [
         "¡Puedes utilizar las clases <code>col-xs-*</code> de Bootstrap en elementos <code>form</code> también! De esta forma, nuestros botones de opción estarán igualmente distribuidos en la página, sin importar qué tan ancha es la resolución de la pantalla.",
         "Anida todas las casillas de selección en un elemento <code>&#60;div class=\"row\"&#62;</code>. Luego, anida cada una de ellas en un elemento <code>&#60;div class=\"col-xs-4\"&#62;</code>."
@@ -1458,7 +1458,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Estiliza cajas de texto como controles de formulario",
+      "titleEs": "Estiliza cajas de texto como controles de formulario",
       "descriptionEs": [
         "Puedes agregar el icono <code>fa-paper-plane</code> de Font Awesome incluyendo <code>&#60;i class=\"fa fa-paper-plane\"&#62;&#60;/i&#62;</code> dentro de tu elemento <code>button</code> de envío.",
         "Dale a la entrada de texto de tu formulario la clase <code>form-control</code>. Dale al botón de envío de tu formulario las clases <code>btn btn-primary</code>. También, incluye en ese botón el icono <code>fa-paper-plane</code> de Font Awesome."
@@ -1554,7 +1554,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Alínea elementos de formulario de forma adaptativa con Bootstrap",
+      "titleEs": "Alínea elementos de formulario de forma adaptativa con Bootstrap",
       "descriptionEs": [
         "Ahora vamos a poner el elemento <code>input</code> y el elemento <code>button</code> que dice submit de tu formulario en la misma línea. Lo haremos de la misma forma que lo hicimos anteriormente: usando un elemento <code>div</code> con la clase <code>row</code>, y otros elementos <code>div</code> dentro de ese, usando la clase <code>col-xs-*</code>.",
         "Anida ambos, el elemento <code>input</code> y el elemento <code>button</code> que dice submit de tu formulario dentro de un <code>div</code> con la clase <code>row</code>. Anida el elemento <code>input</code> de tu formulario dentro de un div con cla clase <code>col-xs-7</code>. Anida el elemento <code>button</code> que dice submit de tu formulario en un elemento <code>div</code> con la clase <code>col-xs-5</code>.",
@@ -1584,7 +1584,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Crea un encabezado con Bootstrap",
+      "titleEs": "Crea un encabezado con Bootstrap",
       "descriptionEs": [
         "Ahora vamos a comenzar un proyecto desde cero para practicar nuestras habilidades con HTML, CSS y Bootstrap.",
         "Crearemos un área de juego con jQuery, el cual utilizaremos en nuestros desafíos con jQuery.",
@@ -1611,7 +1611,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Aloja la página dentro de un elemento Div contenedor fluido de Bootstrap",
+      "titleEs": "Aloja la página dentro de un elemento Div contenedor fluido de Bootstrap",
       "descriptionEs": [
         "Ahora asegurémonos de que todo el contenido en nuestra página pueda adaptarse a dispositivos móviles.",
         "Anida tu elemento <code>h3</code> dentro de un elemento <code>div</code> con la clase <code>container-fluid</code>."
@@ -1639,7 +1639,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Crea una fila en Bootstrap",
+      "titleEs": "Crea una fila en Bootstrap",
       "descriptionEs": [
         "Ahora crearemos una fila de Bootstrap con nuestros elementos en línea.",
         "Crea un elemento <code>div</code> debajo de la etiqueta <code>h3</code>, con la clase <code>row</code>."
@@ -1667,7 +1667,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Parte tu fila en Bootstrap",
+      "titleEs": "Parte tu fila en Bootstrap",
       "descriptionEs": [
         "Ahora que tenemos una fila en Bootstrap, vamos a partirla en dos columnas para alojar nuestros elementos.",
         "Crea dos elementos <code>div</code> dentro de tu fila, ambos con la clase <code>col-xs-6</code>."
@@ -1700,7 +1700,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Crea pozos en Bootstrap",
+      "titleEs": "Crea pozos en Bootstrap",
       "descriptionEs": [
         "Bootstrap tiene una clase llamada <code>well</code> que crea una sensación visual de profundidad para tus columnas.",
         "Anida un elemento <code>div</code> con la clase <code>well</code> dentro de cada uno de tus elementos <code>div</code> que tienen la clase <code>col-xs-6</code>."
@@ -1741,7 +1741,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Agrega elementos dentro de los pozos de Bootstrap",
+      "titleEs": "Agrega elementos dentro de los pozos de Bootstrap",
       "descriptionEs": [
         "Ahora estamos a una profundidad de varios elementos <code>div</code> dentro de cada columna de nuestra fila. No iremos más profundo que esto. Ahora podemos agregar nuestros elementos <code>button</code>.",
         "Anida tres elementos <code>button</code> dentro de cada uno de tus elementos <code>div</code> que tienen la clase <code>well</code>."
@@ -1781,7 +1781,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Aplica el estilo de botón predeterminado de Bootstrap",
+      "titleEs": "Aplica el estilo de botón predeterminado de Bootstrap",
       "descriptionEs": [
         "Bootstrap tiene otra clase de botón llamada <code>btn-default</code>.",
         "Aplica las clases <code>btn</code> y <code>btn-default</code> a cada uno de tus elementos <code>button</code>."
@@ -1820,7 +1820,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Crea una clase para usar con selectores de jQuery",
+      "titleEs": "Crea una clase para usar con selectores de jQuery",
       "descriptionEs": [
         "No todas las clases necesitan tener un código CSS correspondiente. A veces creamos clases sólo con el propósito de seleccionar esos elementos más fácilmente usando jQuery.",
         "Dale a cada uno de tus elementos <code>button</code> la clase <code>target</code>."
@@ -1864,7 +1864,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Asígnales atributos de identificación (id) a tus elementos de Bootstrap",
+      "titleEs": "Asígnales atributos de identificación (id) a tus elementos de Bootstrap",
       "descriptionEs": [
         "Recuerda que, además de los atributos de clase, también puedes darle a cada uno de tus elementos un atributo <code>id</code>.",
         "Cada id debe ser único para un elemento específico y ser usado solamente una vez por página.",
@@ -1913,7 +1913,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Etiqueta tus pozos de Bootstrap",
+      "titleEs": "Etiqueta tus pozos de Bootstrap",
       "descriptionEs": [
         "Para que todo esté más claro, vamos a ponerle a todos nuestros pozos una etiqueta que sea igual a su id.",
         "Sobre tu pozo de la izquierda, dentro de su elemento <code>div</code> que tiene la clase <code>col-xs-6</code>, agrega un elemento <code>h4</code> con el texto <code>#left-well</code>.",
@@ -1961,7 +1961,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Dale a cada elemento un ID único",
+      "titleEs": "Dale a cada elemento un ID único",
       "descriptionEs": [
         "También quisiéramos referirnos a cada botón por su id utilizando jQuery.",
         "Dale a cada uno de tus botones un id único, comenzando con <code>target1</code> y terminando con <code>target6</code>.",
@@ -2008,7 +2008,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Etiqueta los botones con Bootstrap",
+      "titleEs": "Etiqueta los botones con Bootstrap",
       "descriptionEs": [
         "De la misma forma en que etiquetamos nuestros pozos, ahora vamos a etiquetar nuestros botones.",
         "Dale a cada uno de tus elementos <code>button</code> un texto que corresponda con su <code>id</code>."
@@ -2054,7 +2054,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Usa elementos para explicar tu código",
+      "titleEs": "Usa elementos para explicar tu código",
       "descriptionEs": [
         "Cuando comencemos a usar jQuery, modificarmemos los elementos HTML sin necesidad de hacer cambios reales en el código HTML.",
         "Vamos a asegurar que cualquier persona sepa que no debe modificar nada en este código directamente.",
diff --git a/seed/challenges/01-front-end-development-certification/front-end-development-certificate.json b/seed/challenges/01-front-end-development-certification/front-end-development-certificate.json
index 6c11667..db4b8cd 100644
--- a/seed/challenges/01-front-end-development-certification/front-end-development-certificate.json
+++ b/seed/challenges/01-front-end-development-certification/front-end-development-certificate.json
@@ -240,7 +240,6 @@
       ],
       "type": "Waypoint",
       "challengeType": 7,
-      "nameEs": "Reclama tu certificado de Desarrollo de interfaces",
       "descriptionEs": [
         [
           "http://i.imgur.com/k8btNUB.jpg",
@@ -266,7 +265,8 @@
           "¡Felicitaciones! Hemos agregado tu certificado de Desarrollo de interfaces a tu portafolio. A menos que elijas no mostrar tus soluciones, este certificado será públicamente visible y verificable.",
           ""
         ]
-      ]
+      ],
+      "titleEs": "Reclama tu certificado de Desarrollo de interfaces"
     }
   ]
 }
diff --git a/seed/challenges/01-front-end-development-certification/gear-up-for-success.json b/seed/challenges/01-front-end-development-certification/gear-up-for-success.json
index cdf4b11..7b54b6f 100644
--- a/seed/challenges/01-front-end-development-certification/gear-up-for-success.json
+++ b/seed/challenges/01-front-end-development-certification/gear-up-for-success.json
@@ -18,7 +18,7 @@
       "tests": [],
       "type": "Waypoint",
       "challengeType": 7,
-      "nameEs": "Únete a nuestra red de alumnos en LinkedIn",
+      "titleEs": "Únete a nuestra red de alumnos en LinkedIn",
       "descriptionEs": [
         [
           "http://i.imgur.com/vJyiXzU.gif",
@@ -39,12 +39,12 @@
           "https://reddit.com/r/freecodecamp"
         ]
       ],
+      "releasedOn": "February 10, 2016",
       "challengeSeed": [],
       "tests": [],
-      "releasedOn": "February 10, 2016",
       "type": "Waypoint",
       "challengeType": 7,
-      "nameEs": "Unete a nuestro Subreddit",
+      "titleEs": "Unete a nuestro Subreddit",
       "descriptionEs": [
         [
           "http://i.imgur.com/DYjJuCG.gif",
@@ -71,12 +71,12 @@
           "https://medium.freecodecamp.com"
         ]
       ],
+      "releasedOn": "February 10, 2016",
       "challengeSeed": [],
       "tests": [],
       "type": "Waypoint",
       "challengeType": 7,
-      "releasedOn": "February 10, 2016",      
-      "nameEs": "Lee noticias de codificación en nuestros canal de publicaciones Medium",
+      "titleEs": "Lee noticias de codificación en nuestros canal de publicaciones Medium",
       "descriptionEs": [
         [
           "http://i.imgur.com/FxSOL4a.gif",
@@ -103,12 +103,12 @@
           "https://twitch.tv/freecodecamp"
         ]
       ],
+      "releasedOn": "February 10, 2016",
       "challengeSeed": [],
       "tests": [],
       "type": "Waypoint",
       "challengeType": 7,
-      "releasedOn": "February 10, 2016",      
-      "nameEs": "Miranos programar en vivo por Twitch.tv",
+      "titleEs": "Miranos programar en vivo por Twitch.tv",
       "descriptionEs": [
         [
           "http://i.imgur.com/8rtyRY1.gif",
@@ -133,7 +133,7 @@
       "tests": [],
       "type": "Waypoint",
       "challengeType": 7,
-      "nameEs": "Comprométete con una meta y con una organización sin fines de lucro",
+      "titleEs": "Comprométete con una meta y con una organización sin fines de lucro",
       "descriptionEs": [
         [
           "http://i.imgur.com/Og1ifsn.gif",
@@ -144,4 +144,4 @@
       ]
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/seed/challenges/01-front-end-development-certification/html5-and-css.json b/seed/challenges/01-front-end-development-certification/html5-and-css.json
index 2df303d..83152f1 100644
--- a/seed/challenges/01-front-end-development-certification/html5-and-css.json
+++ b/seed/challenges/01-front-end-development-certification/html5-and-css.json
@@ -6,6 +6,26 @@
   "challenges": [
     {
       "id": "bd7123c8c441eddfaeb5bdef",
+      "descriptionPtBR": [
+        "Seja bem vindo ao primeiro desafio de programação do Free Code Camp!",
+        "Você pode editar o seu <code>código</code> em seu <code>editor de texto</code>, que embutimos aqui nesta página da web.",
+        "Consegue ver o código que diz <code>&#60;h1&#62;Hello&#60;/h1&#62;</code> no seu editor de texto? Esse é um elemento HTML.",
+        "A maioria dos elementos HTML tem uma <code>tag de abertura</code> e uma <code>tag de fechamento</code>.",
+        "As tags de abertura são assim: <code>&#60;h1&#62;</code>. E as tags de fechamento são assim: <code>&#60;/h1&#62;</code>.",
+        "Note que a única diferença entre as tags de abertura e fechamento é que as de fechamento possuem uma barra (/) depois do sinal de abertura (<).",
+        "Cada desafio possui testes que você pode executar a qualquer momento ao clicar no botão \"Executar testes\". Quando você conseguir passar em todos os testes, poderá avançar para o próximo desafio.",
+        "Para passar nos testes deste desafio, mude o texto do elemento <code>h1</code> para que diga \"Hello World\" no lugar de \"Hello\". Depois, clique no botão \"Executar testes\"."
+      ],
+      "namePtBR": "Diga Olá aos Elementos HTML",
+      "descriptionDe": [
+        "Willkommen bei der ersten Programmier-Challenge von Free Code Camp! Klicke auf den folgenden Button für weitere Instruktionen.",
+        "Sehr gut. Jetzt kannst du den Rest der Instruktionen für diese Challenge lesen.",
+        "Mithilfe des eingebauten <code>Text Editors</code> kannst du den <code>Code</code> bearbeiten.",
+        "Siehst du den Code <code>&#60;h1&#62;Hallo&#60;/h1&#62;</code> im Editor? Das ist ein HTML <code>Element</code>",
+        "Die meisten HTML Elemente haben eine <code>öffnende Auszeichnung (Tag)</code> und eine <code>sich schließende</code>. Öffnende Tags sehen so aus: <code>&#60;h1&#62;</code>. Schließende Tags so: <code>&#60;/h1&#62;</code>. Beachte, dass der einzige Unterschied zwischen öffnenden und schließenden Tags in dem Slash besteht, das bei schließenden Tags auf die sich öffnende spitze Klammer folgt.",
+        "Sobald du eine Challenge abgeschlossen hast und alle Tests erfolgreich sind, wird der Button \"Go to my next challenge\" aktiv. Klicke auf diesen – oder drücke Steuerung (Control) und gleichzeitig Enter – um zur nächsten Challenge zu gehen.",
+        "Um den Button \"Go to my next challenge\" dieser Lektion zu aktivieren, ändere den Inhalt des <code>h1</code> Tags von \"Hello\" zu \"Hello World\"."
+      ],
       "title": "Say Hello to HTML Elements",
       "description": [
         "Welcome to Free Code Camp's first coding challenge.",
@@ -26,8 +46,8 @@
       "tests": [
         "assert.isTrue((/hello(\\s)+world/gi).test($('h1').text()), 'message: Your <code>h1</code> element should have the text \"Hello World\".');"
       ],
-      "challengeType": 0,
-      "nameEs": "Saluda a los Elementos HTML",
+      "type": "waypoint",
+      "titleEs": "Saluda a los Elementos HTML",
       "descriptionEs": [
         "¡Bienvenido/a al primer desafío de programación de Free Code Camp!",
         "Puedes editar tu <code>código</code> en tu <code>editor de texto</code>, que hemos incrustado en esta página web.",
@@ -41,31 +61,26 @@
         "Cada desafío tiene pruebas que puedes ejecutar en cualquier momento presionado el botón \"Run tests\". Una vez logres pasar todas las pruebas, podrás avanzar al siguiente desafío.",
         "Para pasar la prueba en este desafío, cambia tu texto de la etiqueta <code>h1</code> para que diga \"Hello World\" en lugar de \"Hello\". Entonces presiona el botón \"Ejecutar pruebas\"."
       ],
-      "nameDe": "Waypoint: Begrüße die HTML Elemente",
-      "descriptionDe": [
-        "Willkommen bei der ersten Programmier-Challenge von Free Code Camp! Klicke auf den folgenden Button für weitere Instruktionen.",
-        "Sehr gut. Jetzt kannst du den Rest der Instruktionen für diese Challenge lesen.",
-        "Mithilfe des eingebauten <code>Text Editors</code> kannst du den <code>Code</code> bearbeiten.",
-        "Siehst du den Code <code>&#60;h1&#62;Hallo&#60;/h1&#62;</code> im Editor? Das ist ein HTML <code>Element</code>",
-        "Die meisten HTML Elemente haben eine <code>öffnende Auszeichnung (Tag)</code> und eine <code>sich schließende</code>. Öffnende Tags sehen so aus: <code>&#60;h1&#62;</code>. Schließende Tags so: <code>&#60;/h1&#62;</code>. Beachte, dass der einzige Unterschied zwischen öffnenden und schließenden Tags in dem Slash besteht, das bei schließenden Tags auf die sich öffnende spitze Klammer folgt.",
-        "Sobald du eine Challenge abgeschlossen hast und alle Tests erfolgreich sind, wird der Button \"Go to my next challenge\" aktiv. Klicke auf diesen – oder drücke Steuerung (Control) und gleichzeitig Enter – um zur nächsten Challenge zu gehen.",
-        "Um den Button \"Go to my next challenge\" dieser Lektion zu aktivieren, ändere den Inhalt des <code>h1</code> Tags von \"Hello\" zu \"Hello World\"."
-      ],
-      "namePtBR": "Diga Olá aos Elementos HTML",
-      "descriptionPtBR": [
-        "Seja bem vindo ao primeiro desafio de programação do Free Code Camp!",
-        "Você pode editar o seu <code>código</code> em seu <code>editor de texto</code>, que embutimos aqui nesta página da web.",
-        "Consegue ver o código que diz <code>&#60;h1&#62;Hello&#60;/h1&#62;</code> no seu editor de texto? Esse é um elemento HTML.",
-        "A maioria dos elementos HTML tem uma <code>tag de abertura</code> e uma <code>tag de fechamento</code>.",
-        "As tags de abertura são assim: <code>&#60;h1&#62;</code>. E as tags de fechamento são assim: <code>&#60;/h1&#62;</code>.",
-        "Note que a única diferença entre as tags de abertura e fechamento é que as de fechamento possuem uma barra (/) depois do sinal de abertura (<).",
-        "Cada desafio possui testes que você pode executar a qualquer momento ao clicar no botão \"Executar testes\". Quando você conseguir passar em todos os testes, poderá avançar para o próximo desafio.",
-        "Para passar nos testes deste desafio, mude o texto do elemento <code>h1</code> para que diga \"Hello World\" no lugar de \"Hello\". Depois, clique no botão \"Executar testes\"."
-          ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Begrüße die HTML Elemente",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf0887a",
+      "descriptionPtBR": [
+        "Durante os próximos desafios, construiremos um aplicativo em HTML que se parecerá como este:",
+        "<a href=\"http://i.imgur.com/jOc1JF1.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/jOc1JF1.png\" title=\"Clique para aumentar\" alt=\"Imagem do aplicativo CatPhotoApp finalizado\"></a>",
+        "O elemento <code>h2</code> que você criar gerará um elemento <code>h2</code> na página da web.",
+        "Este elemento indica ao navegador a forma de mostrar o texto que contém.",
+        "Os elementos <code>h2</code> são ligeiramente menores que os elementos <code>h1</code>. Há também os elementos <code>h3</code>, <code>h4</code>, <code>h5</code> e <code>h6</code>.",
+        "Adicione uma tag <code>h2</code> que diga \"CatPhotoApp\" para criar um segundo <code>elemento</code> HTML abaixo de seu elemento <code>h1</code> chamado \"Hello World\"."
+      ],
+      "namePtBR": "Cabeçalho com o Elemento h2",
+      "descriptionDe": [
+        "Füge unter <code>h1</code> \"Hello World\" ein zweites HTML Element <code>h2</code> hinzu, in dem \"CatPhotoApp\" steht.",
+        "Das eingetragene <code>h2</code> Element wird ein <code>h2</code> Element auf der Website erzeugen.",
+        "Dieses Element sagt dem Browser, wie der darin enthaltene Text gerendert wird.",
+        "<code>h2</code> Elemente sind ein wenig kleiner als <code>h2</code> Elemente. Es gibt auch <code>h3</code>, <code>h4</code>, <code>h5</code> und <code>h6</code> Elemente."
+      ],
       "title": "Headline with the h2 Element",
       "description": [
         "Over the next few challenges, we'll build an HTML5 app that will look something like this:",
@@ -84,8 +99,8 @@
         "assert.isTrue((/cat(\\s)?photo(\\s)?app/gi).test($(\"h2\").text()), 'message: Your <code>h2</code> element should have the text \"CatPhotoApp\".');",
         "assert.isTrue((/hello(\\s)+world/gi).test($(\"h1\").text()), 'message: Your <code>h1</code> element should have the text \"Hello World\".');"
       ],
-      "challengeType": 0,
-      "nameEs": "Encabezado con el elemento h2",
+      "type": "waypoint",
+      "titleEs": "Encabezado con el elemento h2",
       "descriptionEs": [
         "Durante los siguientes desafíos, construiremos una aplicación HTML5 que lucirá como la siguiente:",
         "<a href=\"http://i.imgur.com/jOc1JF1.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/jOc1JF1.png\" title=\"Pulsa para agrandar\" alt=\"Pantallazo de la aplicación Cat Photo terminada\"></a>",
@@ -94,26 +109,23 @@
         "Los elementos <code>h2</code> son ligeramente más pequeños que los elementos <code>h1</code>. También hay elementos <code>h3</code>, <code>h4</code>, <code>h5</code> y <code>h6</code>",
         "Agrega una etiqueta <code>h2</code> que diga \"CatPhotoApp\" para crear un segundo <code>elemento</code> HTML debajo de tu elemento <code>h1</code> \"Hello World\"."
       ],
-      "nameDe": "Waypoint: Überschrift mit dem h2 Element",
-      "descriptionDe": [
-        "Füge unter <code>h1</code> \"Hello World\" ein zweites HTML Element <code>h2</code> hinzu, in dem \"CatPhotoApp\" steht.",
-        "Das eingetragene <code>h2</code> Element wird ein <code>h2</code> Element auf der Website erzeugen.",
-        "Dieses Element sagt dem Browser, wie der darin enthaltene Text gerendert wird.",
-        "<code>h2</code> Elemente sind ein wenig kleiner als <code>h2</code> Elemente. Es gibt auch <code>h3</code>, <code>h4</code>, <code>h5</code> und <code>h6</code> Elemente."
-      ],
-     "namePtBR": "Cabeçalho com o Elemento h2",
-     "descriptionPtBR": [
-        "Durante os próximos desafios, construiremos um aplicativo em HTML que se parecerá como este:",
-        "<a href=\"http://i.imgur.com/jOc1JF1.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/jOc1JF1.png\" title=\"Clique para aumentar\" alt=\"Imagem do aplicativo CatPhotoApp finalizado\"></a>",
-         "O elemento <code>h2</code> que você criar gerará um elemento <code>h2</code> na página da web.",
-         "Este elemento indica ao navegador a forma de mostrar o texto que contém.",
-         "Os elementos <code>h2</code> são ligeiramente menores que os elementos <code>h1</code>. Há também os elementos <code>h3</code>, <code>h4</code>, <code>h5</code> e <code>h6</code>.",
-         "Adicione uma tag <code>h2</code> que diga \"CatPhotoApp\" para criar um segundo <code>elemento</code> HTML abaixo de seu elemento <code>h1</code> chamado \"Hello World\"."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Überschrift mit dem h2 Element",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08801",
+      "descriptionPtBR": [
+        "Os elementos <code>p</code> são os preferenciais para criar parágrafos de texto com tamanho normal nas páginas da web. P significa a abreviatura de \"parágrafo\".",
+        "Você pode criar um elemento <code>p</code> assim:",
+        "<code>&#60;p&#62;Sou uma tag p!&#60;/p&#62;</code>",
+        "Crie um elemento <code>p</code> abaixo de seu elemento <code>h2</code>, e dê a ele o texto \"Hello Paragraph\"."
+      ],
+      "namePtBR": "Informe com o Elemento Parágrafo",
+      "descriptionDe": [
+        "Erstelle ein <code>p</code> Element unter deinem <code>h2</code> Element und füge den Text \"Hello Paragraph\" ein.",
+        "<code>p</code> Elemente sind das bevorzugte Element für normalen Paragraphen-Text auf einer Website. P ist die Abkürzung für \"Paragraph\".",
+        "Du kannst ein <code>p</code> Element so erzeugen: <code>&#60;p&#62;Ich bin ein p Element!&#60;/p&#62;</code>"
+      ],
       "title": "Inform with the Paragraph Element",
       "description": [
         "<code>p</code> elements are the preferred element for normal-sized paragraph text on websites. P is short for \"paragraph\".",
@@ -130,31 +142,32 @@
         "assert.isTrue((/hello(\\s)+paragraph/gi).test($(\"p\").text()), 'message: Your <code>p</code> element should have the text \"Hello Paragraph\".');",
         "assert(code.match(/<\\/p>/g) && code.match(/<\\/p>/g).length === code.match(/<p/g).length, 'message: Make sure your <code>p</code> element has a closing tag.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Informa con el Elemento Párrafo",
+      "type": "waypoint",
+      "titleEs": "Informa con el Elemento Párrafo",
       "descriptionEs": [
         "Los elementos <code>p</code> son los elementos preferidos en los sitios web para los párrafos de texto en tamaño normal. La P es abreviatura de \"párrafo\".",
         "Tú puedes crear un elemento párrafo de esta forma:",
         "<code>&#60;p&#62;¡Soy una etiqueta p!&#60;/p&#62;</code>",
         "Crea un elemento <code>p</code> debajo de tu elemento <code>h2</code>, y ponle el texto \"Hello Paragraph\"."
       ],
-      "nameDe": "Waypoint: Informiere mit dem Paragraph Element",
-      "descriptionDe": [
-        "Erstelle ein <code>p</code> Element unter deinem <code>h2</code> Element und füge den Text \"Hello Paragraph\" ein.",
-        "<code>p</code> Elemente sind das bevorzugte Element für normalen Paragraphen-Text auf einer Website. P ist die Abkürzung für \"Paragraph\".",
-        "Du kannst ein <code>p</code> Element so erzeugen: <code>&#60;p&#62;Ich bin ein p Element!&#60;/p&#62;</code>"
-      ],
-     "namePtBR": "Informe com o Elemento Parágrafo",
-     "descriptionPtBR": [
-        "Os elementos <code>p</code> são os preferenciais para criar parágrafos de texto com tamanho normal nas páginas da web. P significa a abreviatura de \"parágrafo\".",
-        "Você pode criar um elemento <code>p</code> assim:",
-        "<code>&#60;p&#62;Sou uma tag p!&#60;/p&#62;</code>",
-        "Crie um elemento <code>p</code> abaixo de seu elemento <code>h2</code>, e dê a ele o texto \"Hello Paragraph\"."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Informiere mit dem Paragraph Element",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08802",
+      "descriptionPtBR": [
+        "\"Comentar\" é uma forma de deixar anotações em seu código sem afetá-lo.",
+        "Comentar também é um jeito conveniente de deixar seu código inativo sem precisar apagá-lo por completo.",
+        "Você pode iniciar um comentário com <code>&#60;!--</code> e terminar seu comentário com <code>--&#62;</code>.",
+        "Remova o comentário dos elementos <code>h1</code>, <code>h2</code> e <code>p</code>."
+      ],
+      "namePtBR": "Descomente o HTML",
+      "descriptionDe": [
+        "Entkommentiere deine <code>h1</code>, <code>h2</code> und <code>p</code> Elemente.",
+        "Kommentieren erlaubt dir Kommentare innerhalb des Codes zu hinterlassen, ohne diesen selbst zu beeinflussen.",
+        "Dies ist auch ein guter Weg, um Code inaktiv zu machen ohne diesen komplett löschen zu müssen.",
+        "Du kannst einen Kommentar mit <code>&#60;!--</code> starten und ihn mit <code>--&#62;</code> wieder beenden."
+      ],
       "title": "Uncomment HTML",
       "description": [
         "Commenting is a way that you can leave comments within your code without affecting the code itself.",
@@ -177,32 +190,30 @@
         "assert($(\"p\").length > 0, 'message: Make your <code>p</code> element visible on your page by uncommenting it.');",
         "assert(!/-->/gi.test(code), 'message: Be sure to delete all trailing comment tags&#44; i.e. <code>--&#62;</code>.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Quita comentarios HTML",
+      "type": "waypoint",
+      "titleEs": "Quita comentarios HTML",
       "descriptionEs": [
         "\"Comentar\" es una manera en la que puedes dejar anotaciones en tu código sin afectar el código mismo.",
         "Comentar también es una forma conveniente de desactivar código sin tener que borrarlo por completo.",
         "Puedes comenzar un comentario con <code>&#60;!--</code> y terminar de comentar con <code>--&#62;</code>",
         "Quita el comentario a los elementos <code>h1</code>, <code>h2</code> y <code>p</code>"
       ],
-      "nameDe": "Waypoint: HTML entkommentieren",
-      "descriptionDe": [
-        "Entkommentiere deine <code>h1</code>, <code>h2</code> und <code>p</code> Elemente.",
-        "Kommentieren erlaubt dir Kommentare innerhalb des Codes zu hinterlassen, ohne diesen selbst zu beeinflussen.",
-        "Dies ist auch ein guter Weg, um Code inaktiv zu machen ohne diesen komplett löschen zu müssen.",
-        "Du kannst einen Kommentar mit <code>&#60;!--</code> starten und ihn mit <code>--&#62;</code> wieder beenden."
-      ],
-     "namePtBR": "Descomente o HTML",
-     "descriptionPtBR": [
-        "\"Comentar\" é uma forma de deixar anotações em seu código sem afetá-lo.",
-        "Comentar também é um jeito conveniente de deixar seu código inativo sem precisar apagá-lo por completo.",
-        "Você pode iniciar um comentário com <code>&#60;!--</code> e terminar seu comentário com <code>--&#62;</code>.",
-        "Remova o comentário dos elementos <code>h1</code>, <code>h2</code> e <code>p</code>."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: HTML entkommentieren",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08804",
+      "descriptionPtBR": [
+        "Lembre-se que para iniciar um comentário você precisa utilizar <code>&#60;!--</code>, e para terminar um comentário é necessário usar <code>--&#62;</code>.",
+        "Aqui, você deverá terminar o comentário antes que seu elemento <code>h2</code> inicie.",
+        "Comente o elemento <code>h1</code> e o elemento <code>p</code>, e deixe o elemento <code>h2</code> sem nenhum comentário."
+      ],
+      "namePtBR": "Comente o HTML",
+      "descriptionDe": [
+        "Kommentiere die Elemente <code>h1</code> und <code>p</code> aus, aber lasse dein <code>h2</code> Element unkommentiert.",
+        "Denk daran, dass du einen Kommentar mit <code>&#60;!--</code> anfangen und mit <code>--&#62;</code> wieder beenden kannst.",
+        "Hier wirst du deinen Kommentar vor dem <code>h2</code> Element beenden müssen."
+      ],
       "title": "Comment out HTML",
       "description": [
         "Remember that in order to start a comment, you need to use <code>&#60;!--</code> and to end a comment, you need to use <code>--&#62;</code>",
@@ -224,29 +235,32 @@
         "assert(($(\"p\").length === 0), 'message: Comment out your <code>p</code> element so that it is not visible on your page.');",
         "assert(code.match(/-->/g).length > 1, 'message: Be sure to close each of your comments with <code>--&#62;</code>.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Comenta en HTML",
+      "type": "waypoint",
+      "titleEs": "Comenta en HTML",
       "descriptionEs": [
         "Recuerda que para comenzar un comentario, necesitas usar <code>&#60;!--</code> y para terminar un comentario, necesitas usar <code>--&#62;</code>",
         "Aquí necesitarás terminar el comentario antes que comience el elemento <code>h2</code>.",
         "Comenta el elemento <code>h1</code> y el elemento <code>p</code>, pero deja sin comentar el elemento <code>h2</code>"
       ],
-      "nameDe": "Waypoint: HTML auskommentieren",
-      "descriptionDe": [
-        "Kommentiere die Elemente <code>h1</code> und <code>p</code> aus, aber lasse dein <code>h2</code> Element unkommentiert.",
-        "Denk daran, dass du einen Kommentar mit <code>&#60;!--</code> anfangen und mit <code>--&#62;</code> wieder beenden kannst.",
-        "Hier wirst du deinen Kommentar vor dem <code>h2</code> Element beenden müssen."
-      ],
-     "namePtBR": "Comente o HTML",
-     "descriptionPtBR": [
-        "Lembre-se que para iniciar um comentário você precisa utilizar <code>&#60;!--</code>, e para terminar um comentário é necessário usar <code>--&#62;</code>.",
-        "Aqui, você deverá terminar o comentário antes que seu elemento <code>h2</code> inicie.",
-        "Comente o elemento <code>h1</code> e o elemento <code>p</code>, e deixe o elemento <code>h2</code> sem nenhum comentário."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: HTML auskommentieren",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08833",
+      "descriptionPtBR": [
+        "Desenvolvedores web tradicionalmente usam <code>Lorem Ipsum</code> como texto de preenchimento. Lorem Ipsum é chamado assim pois essas são as duas primeiras palavras de uma passagem famosa de Cícero da Roma Antiga.",
+        "O texto Lorem Ipsum tem sido utilizado como texto de espaço reservado por compositores desde o século 16, e esta tradição continua na web.",
+        "Bem, 5 séculos é um tempo longo o bastante. Já que estamos desenvolvendo um aplicativo sobre fotos de gatos (CatPhotoApp), vamos usar algo chamado <code>Kitty Ipsum</code>.",
+        "Substitua o texto dentro do seu elemento <code>p</code> pelas primeiras palavras deste texto Kitty Ipsum: <code>Kitty ipsum dolor sit amet, shed everywhere shed everywhere stretching attack your ankles chase the red dot, hairball run catnip eat the grass sniff.</code>"
+      ],
+      "namePtBR": "Preencha Espaços com Texto de Espaço Reservado",
+      "descriptionDe": [
+        "Ersetze den Text in deinem <code>p</code> Element mit den ersten Wörtern des zur Verfügung gestellten \"Kitty Ipsum\" Textes.",
+        "Webentwickler nutzen für gewöhnlich \"Lorem Ipsum\" Text als Platzhalter. Es heißt \"Lorem Ipsum\", weil es die ersten zwei Wörter aus einer bekannten Passage von Cicero des alten Roms sind.",
+        "\"Lorem Ipsum\" Text wurde seit dem 16. Jahrhundert von Schriftsetzern als Platzhalter verwendet. Und diese Tradition setzt sich im Web fort.",
+        "Nun gut, fünf Jahrhunderte sind lange genug. Da wir eine CatPhotoApp entwickeln, lass uns stattdessen lieber \"Kitty Ipsum\" nutzen!",
+        "Hier sind die ersten paar Wörter von \"Kitty Ipsum\", die du kopieren und an die richtige Stelle einfügen kannst: <code>Kitty ipsum dolor sit amet, shed everywhere shed everywhere stretching attack your ankles chase the red dot, hairball run catnip eat the grass sniff.</code>"
+      ],
       "title": "Fill in the Blank with Placeholder Text",
       "description": [
         "Web developers traditionally use <code>lorem ipsum text</code> as placeholder text. It's called lorem ipsum text because those are the first two words of a famous passage by Cicero of Ancient Rome.",
@@ -264,33 +278,30 @@
       "tests": [
         "assert.isTrue((/Kitty(\\s)+ipsum/gi).test($(\"p\").text()), 'message: Your <code>p</code> element should contain the first few words of the provided <code>kitty ipsum text</code>.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Llena espacios con texto de relleno",
+      "type": "waypoint",
+      "titleEs": "Llena espacios con texto de relleno",
       "descriptionEs": [
         "Los desarrolladores web tradicionalmente usan <code>Lorem Ipsum</code> como texto de relleno. Se llama texto Lorem Ipsum porque esas son las primeras dos palabras de una cita famosa de Cicerón de la Roma Antigua.",
         "El texto Lorem Ipsum ha sido usado como texto de relleno en las imprentas desde el siglo 16, y esta tradición continúa en la web.",
         "Bueno, 5 siglos es bastante. Ya que estamos construyendo una aplicación de fotos de gatos (CatPhotoApp), ¡usemos un texto llamado <code>Kitty Ipsum</code>!",
         "Reemplaza el texto dentro de tu elemento <code>p</code> con las primeras palabras de este texto kitty ipsum: <code>Kitty ipsum dolor sit amet, shed everywhere shed everywhere stretching attack your ankles chase the red dot, hairball run catnip eat the grass sniff.</code>"
       ],
-      "nameDe": "Waypoint: Fülle die Lücken mit Platzhalter-Text",
-      "descriptionDe": [
-        "Ersetze den Text in deinem <code>p</code> Element mit den ersten Wörtern des zur Verfügung gestellten \"Kitty Ipsum\" Textes.",
-        "Webentwickler nutzen für gewöhnlich \"Lorem Ipsum\" Text als Platzhalter. Es heißt \"Lorem Ipsum\", weil es die ersten zwei Wörter aus einer bekannten Passage von Cicero des alten Roms sind.",
-        "\"Lorem Ipsum\" Text wurde seit dem 16. Jahrhundert von Schriftsetzern als Platzhalter verwendet. Und diese Tradition setzt sich im Web fort.",
-        "Nun gut, fünf Jahrhunderte sind lange genug. Da wir eine CatPhotoApp entwickeln, lass uns stattdessen lieber \"Kitty Ipsum\" nutzen!",
-        "Hier sind die ersten paar Wörter von \"Kitty Ipsum\", die du kopieren und an die richtige Stelle einfügen kannst: <code>Kitty ipsum dolor sit amet, shed everywhere shed everywhere stretching attack your ankles chase the red dot, hairball run catnip eat the grass sniff.</code>"
-      ],
-     "namePtBR": "Preencha Espaços com Texto de Espaço Reservado",
-     "descriptionPtBR": [
-        "Desenvolvedores web tradicionalmente usam <code>Lorem Ipsum</code> como texto de preenchimento. Lorem Ipsum é chamado assim pois essas são as duas primeiras palavras de uma passagem famosa de Cícero da Roma Antiga.",
-        "O texto Lorem Ipsum tem sido utilizado como texto de espaço reservado por compositores desde o século 16, e esta tradição continua na web.",
-        "Bem, 5 séculos é um tempo longo o bastante. Já que estamos desenvolvendo um aplicativo sobre fotos de gatos (CatPhotoApp), vamos usar algo chamado <code>Kitty Ipsum</code>.",
-        "Substitua o texto dentro do seu elemento <code>p</code> pelas primeiras palavras deste texto Kitty Ipsum: <code>Kitty ipsum dolor sit amet, shed everywhere shed everywhere stretching attack your ankles chase the red dot, hairball run catnip eat the grass sniff.</code>"
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Fülle die Lücken mit Platzhalter-Text",
+      "challengeType": 0
     },
     {
       "id": "bad87fed1348bd9aedf08833",
+      "descriptionPtBR": [
+        "Nosso celular não possui muito espaço vertical.",
+        "Vamos eliminar os elementos desnecessários para começar a construir nosso CatPhotoApp.",
+        "Apague o elemento <code>h1</code> para simplificar o nosso espaço."
+      ],
+      "namePtBR": "Apague Elementos HTML",
+      "descriptionDe": [
+        "Lösche die Elemente <code>h1</code>, damit wir etwas Ordnung schaffen.",
+        "Unser Smartphone hat nicht sehr viel vertikalen Raum.",
+        "Lass uns die unwichtigen Elemente entfernen, damit wir unsere CatPhotoApp bauen können."
+      ],
       "title": "Delete HTML Elements",
       "description": [
         "Our phone doesn't have much vertical space.",
@@ -309,29 +320,32 @@
         "assert(($(\"h2\").length > 0), 'message: Leave your <code>h2</code> element on the page.');",
         "assert(($(\"p\").length > 0), 'message: Leave your <code>p</code> element on the page.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Borra elementos HTML",
+      "type": "waypoint",
+      "titleEs": "Borra elementos HTML",
       "descriptionEs": [
         "Nuestro teléfono no tiene mucho espacio vertical.",
         "Eliminemos los elementos innecesarios para que empecemos a construir nuestra CatPhotoApp.",
         "Borra el elemento <code>h1</code> para simplificar nuestra vista."
       ],
-      "nameDe": "Waypoint: Entferne HTML Elemente",
-      "descriptionDe": [
-        "Lösche die Elemente <code>h1</code>, damit wir etwas Ordnung schaffen.",
-        "Unser Smartphone hat nicht sehr viel vertikalen Raum.",
-        "Lass uns die unwichtigen Elemente entfernen, damit wir unsere CatPhotoApp bauen können."
-      ],
-     "namePtBR": "Apague Elementos HTML",
-     "descriptionPtBR": [
-        "Nosso celular não possui muito espaço vertical.",
-        "Vamos eliminar os elementos desnecessários para começar a construir nosso CatPhotoApp.",
-        "Apague o elemento <code>h1</code> para simplificar o nosso espaço."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Entferne HTML Elemente",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08803",
+      "descriptionPtBR": [
+        "Agora vamos substituir a cor de parte do nosso texto.",
+        "Podemos fazer isso mudando o <code>style</code> do elemento <code>h2</code>.",
+        "A propriedade de estilo responsável pela cor do texto se chama \"color\".",
+        "Você pode mudar a cor do texto de seu elemento <code>h2</code> para azul assim:",
+        "<code>&#60;h2 style=\"color: blue\"&#62;CatPhotoApp&#60;/h2&#62;</code>",
+        "Mude o estilo do elemento <code>h2</code> para que seu texto fique com a cor vermelha."
+      ],
+      "namePtBR": "Substitua a Cor do Texto",
+      "descriptionDe": [
+        "Ändere den Style des <code>h2</code> Elements, damit die Textfarbe Rot ist.",
+        "Wir können das bewerkstelligen, indem wir den \"style\" des <code>h2</code> Elements ändern.",
+        "So könntest du die Textfarbe des <code>h2</code> Elements in Blau ändern: <code>&#60;h2 style=\"color: blue\"&#62;CatPhotoApp&#60;/h2&#62;</code>"
+      ],
       "title": "Change the Color of Text",
       "description": [
         "Now let's change the color of some of our text.",
@@ -349,8 +363,8 @@
       "tests": [
         "assert($(\"h2\").css(\"color\") === \"rgb(255, 0, 0)\", 'message: Your <code>h2</code> element should be red.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Cambia el color del texto",
+      "type": "waypoint",
+      "titleEs": "Cambia el color del texto",
       "descriptionEs": [
         "Ahora cambiemos el color de parte de nuestro texto.",
         "Podemos hacer esto cambiando el <code>style</code> del elemento <code>h2</code>",
@@ -359,25 +373,33 @@
         "<code>&#60;h2 style=\"color: blue\"&#62;CatPhotoApp&#60;/h2&#62;</code>",
         "Cambia el estilo del elemento <code>h2</code> de manera que el color de su texto sea rojo."
       ],
-      "nameDe": "Waypoint: Ändere die Farbe des Textes",
-      "descriptionDe": [
-        "Ändere den Style des <code>h2</code> Elements, damit die Textfarbe Rot ist.",
-        "Wir können das bewerkstelligen, indem wir den \"style\" des <code>h2</code> Elements ändern.",
-        "So könntest du die Textfarbe des <code>h2</code> Elements in Blau ändern: <code>&#60;h2 style=\"color: blue\"&#62;CatPhotoApp&#60;/h2&#62;</code>"
-      ],
-     "namePtBR": "Substitua a Cor do Texto",
-     "descriptionPtBR": [
-        "Agora vamos substituir a cor de parte do nosso texto.",
-        "Podemos fazer isso mudando o <code>style</code> do elemento <code>h2</code>.",
-        "A propriedade de estilo responsável pela cor do texto se chama \"color\".",
-        "Você pode mudar a cor do texto de seu elemento <code>h2</code> para azul assim:",
-        "<code>&#60;h2 style=\"color: blue\"&#62;CatPhotoApp&#60;/h2&#62;</code>",
-        "Mude o estilo do elemento <code>h2</code> para que seu texto fique com a cor vermelha."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Ändere die Farbe des Textes",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08805",
+      "descriptionPtBR": [
+        "Com o CSS, existem centenas de <code>propriedades</code> que você pode utilizar para modificar a forma de como um elemento pode ser visto em uma página da internet.",
+        "Quando você usou o <code>&#60;h2 style=\"color: red\"&#62;CatPhotoApp&#60;h2&#62;</code>, você deu ao elemento <code>h2</code> um <code>estilo inline</code>.",
+        "Essa é uma forma de adicionar estilos a um elemento, mas o jeito recomendado para isso é utilizar <code>Folhas de Estilo em Cascata (Cascading Style Sheets, CSS)</code>.",
+        "Acima de seu código, crie um elemento <code>style</code> como esse: <code>&#60;style&#62;&#60;/style&#62;</code>",
+        "Dentro do elemento style, é possível criar um <code>seletor CSS</code> para todos os elementos <code>h2</code>. Por exemplo, se você quiser que todos os elementos <code>h2</code> tenham a cor vermelha, seu elemento style será assim:",
+        "<code>&#60;style&#62;</code>",
+        "&nbsp;&nbsp;<code>h2 {color: red;}</code>",
+        "<code>&#60;/style&#62;</code>",
+        "Observe que é importante utilizar as chaves de abertura e de fechamento (<code>{</code> e <code>}</code>) ao redor do estilo de cada elemento. Também é necessário que o estilo de seu elemento esteja entre as tags de abertura e fechamento. Por fim, não se esqueça de adicionar o ponto-e-vírgula no final de cada um dos estilos de seu elemento.",
+        "Apague o atributo <code>style</code> de seu elemento <code>h2</code> e então crie um elemento <code>style</code> CSS. Adicione o CSS necessário para fazer com que todos os elementos <code>h2</code> tenham a cor azul."
+      ],
+      "namePtBR": "Use Seletores CSS para Estilizar Elementos",
+      "descriptionDe": [
+        "Lösche das Style Attribute deines <code>h2</code> Elements und erstelle stattdessen ein CSS <code>style</code> Element. Füge das notwendige CSS hinzu, um alle <code>h2</code> Elemente Blau zu färben.",
+        "CSS liefert dir hunderte Attribute oder \"attributes\" um HTML Elemente auf deiner Seite zu gestalten.",
+        "Mit <code>&#60;h2 style=\"color: red\"&#62;CatPhotoApp&#60;/h2&#62;</code> hast du dem einzelnen <code>h2</code> Element einen sogenannten \"inline style\" gegeben.",
+        "Das ist ein Weg, um Elemente zu gestalten. Es ist aber besser, Cascading Style Sheets (CSS) zu benutzen.",
+        "Erstelle über deinem Code ein <code>style</code> Element: <code>&#60;style&#62;&#60;/style&#62;</code>",
+        "Innerhalb des Style Elements kannst du einen CSS Selektor oder \"selector\" für alle <code>h2</code> Elemente erstellen. Wenn du zum Beispiel alle <code>h2</code> Elemente Rot färben willst, schreibst du: <code>&#60;style&#62;h2 {color: red;}&#60;/style&#62;</code>",
+        "Beachte, dass du öffnende und schließende geschwungene Klammern (<code>{</code> und <code>}</code>) um jeden Style setzen solltest. Außerdem sollten deine Styles innerhalb dieser Klammern stehen. Zum Schluss benötigst du am Ende jedes Styles ein Semikolon."
+      ],
       "title": "Use CSS Selectors to Style Elements",
       "description": [
         "With CSS, there are hundreds of CSS <code>properties</code> that you can use to change the way an element looks on your page.",
@@ -402,8 +424,8 @@
         "assert(code.match(/h2\\s*\\{\\s*color\\s*:.*;\\s*\\}/g), 'message: Ensure that your stylesheet <code>h2</code> declaration is valid with a semicolon and closing brace.');",
         "assert(code.match(/<\\/style>/g) && code.match(/<\\/style>/g).length === (code.match(/<style((\\s)*((type|media|scoped|title|disabled)=\"[^\"]*\")?(\\s)*)*>/g) || []).length, 'message: Make sure all your <code>style</code> elements are valid and have a closing tag.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Usa selectores CSS para dar estilo a los elementos",
+      "type": "waypoint",
+      "titleEs": "Usa selectores CSS para dar estilo a los elementos",
       "descriptionEs": [
         "Con CSS, hay cientos de <code>propiedades CSS</code> que puedes usar para cambiar como un elemento se ve en una página web.",
         "Cuando ingresaste <code>&#60;h2 style=\"color: red\"&#62;CatPhotoApp&#60;h2&#62;</code>, le estuviste dando al elemento <code>h2</code> un <code>estilo en línea</code>",
@@ -415,33 +437,37 @@
         "Fíjate que es importante tener llaves de apertura y de cierre (<code>{</code> y <code>}</code>) alrededor del estilo para cada elemento. También necesitas asegurarte que el estilo para tu elemento esté entre las etiquetas style de apertura y cierre. Finalmente, asegúrate de agregar el punto y coma al final de cada uno de los estilos de tu elemento.",
         "Borra el atributo <code>style</code> de tu elemento <code>h2</code> y a cambio escribe un elemento <code>style</code> CSS. Agrega el CSS necesario para hacer todos los elementos <code>h2</code> de color azul."
       ],
-      "nameDe": "Waypoint: Nutze CSS Selektoren um Elemente zu gestalten",
-      "descriptionDe": [
-        "Lösche das Style Attribute deines <code>h2</code> Elements und erstelle stattdessen ein CSS <code>style</code> Element. Füge das notwendige CSS hinzu, um alle <code>h2</code> Elemente Blau zu färben.",
-        "CSS liefert dir hunderte Attribute oder \"attributes\" um HTML Elemente auf deiner Seite zu gestalten.",
-        "Mit <code>&#60;h2 style=\"color: red\"&#62;CatPhotoApp&#60;/h2&#62;</code> hast du dem einzelnen <code>h2</code> Element einen sogenannten \"inline style\" gegeben.",
-        "Das ist ein Weg, um Elemente zu gestalten. Es ist aber besser, Cascading Style Sheets (CSS) zu benutzen.",
-        "Erstelle über deinem Code ein <code>style</code> Element: <code>&#60;style&#62;&#60;/style&#62;</code>",
-        "Innerhalb des Style Elements kannst du einen CSS Selektor oder \"selector\" für alle <code>h2</code> Elemente erstellen. Wenn du zum Beispiel alle <code>h2</code> Elemente Rot färben willst, schreibst du: <code>&#60;style&#62;h2 {color: red;}&#60;/style&#62;</code>",
-        "Beachte, dass du öffnende und schließende geschwungene Klammern (<code>{</code> und <code>}</code>) um jeden Style setzen solltest. Außerdem sollten deine Styles innerhalb dieser Klammern stehen. Zum Schluss benötigst du am Ende jedes Styles ein Semikolon."
-      ],
-     "namePtBR": "Use Seletores CSS para Estilizar Elementos",
-     "descriptionPtBR": [
-        "Com o CSS, existem centenas de <code>propriedades</code> que você pode utilizar para modificar a forma de como um elemento pode ser visto em uma página da internet.",
-        "Quando você usou o <code>&#60;h2 style=\"color: red\"&#62;CatPhotoApp&#60;h2&#62;</code>, você deu ao elemento <code>h2</code> um <code>estilo inline</code>.",
-        "Essa é uma forma de adicionar estilos a um elemento, mas o jeito recomendado para isso é utilizar <code>Folhas de Estilo em Cascata (Cascading Style Sheets, CSS)</code>.",
-        "Acima de seu código, crie um elemento <code>style</code> como esse: <code>&#60;style&#62;&#60;/style&#62;</code>",
-        "Dentro do elemento style, é possível criar um <code>seletor CSS</code> para todos os elementos <code>h2</code>. Por exemplo, se você quiser que todos os elementos <code>h2</code> tenham a cor vermelha, seu elemento style será assim:",
-        "<code>&#60;style&#62;</code>",
-        "&nbsp;&nbsp;<code>h2 {color: red;}</code>",
-        "<code>&#60;/style&#62;</code>",
-        "Observe que é importante utilizar as chaves de abertura e de fechamento (<code>{</code> e <code>}</code>) ao redor do estilo de cada elemento. Também é necessário que o estilo de seu elemento esteja entre as tags de abertura e fechamento. Por fim, não se esqueça de adicionar o ponto-e-vírgula no final de cada um dos estilos de seu elemento.",
-        "Apague o atributo <code>style</code> de seu elemento <code>h2</code> e então crie um elemento <code>style</code> CSS. Adicione o CSS necessário para fazer com que todos os elementos <code>h2</code> tenham a cor azul."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Nutze CSS Selektoren um Elemente zu gestalten",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aecf08806",
+      "descriptionPtBR": [
+        "As classes são estilos reutilizáveis que podem ser adicionadas a elementos HTML.",
+        "Aqui está um exemplo de como declarar uma classe com CSS:",
+        "<code>&#60;style&#62;</code>",
+        "<code>&nbsp;&nbsp;.blue-text {</code>",
+        "<code>&nbsp;&nbsp;&nbsp;&nbsp;color: blue;</code>",
+        "<code>&nbsp;&nbsp;}</code>",
+        "<code>&#60;/style&#62;</code>",
+        "Veja que criamos uma classe CSS chamada \"blue-text\" no interior da tag <code>&#60;style&#62;</code>.",
+        "Você pode aplicar uma classe a um elemento HTML assim:",
+        "<code>&#60;h2 class=\"blue-text\"&#62;CatPhotoApp&#60;/h2&#62;</code>",
+        "Note que em seu elemento <code>style</code> CSS, as classes devem começar com um ponto. Já nos elementos HTML, as declarações de classes não devem começar com o ponto.",
+        "Ao invés de criar um novo elemento <code>style</code>, tente eliminar a declaração de estilo de <code>h2</code> dos elementos de estilo existentes, e troque ela pela declaração de classe <code>.red-text</code>.",
+        "Crie uma classe CSS chamada <code>red-text</code> e então a aplique em seu elemento <code>h2</code>."
+      ],
+      "namePtBR": "Use Classes CSS para Estilizar Elementos",
+      "descriptionDe": [
+        "Erstelle eine CSS Klasse namens \"red-text\" und füge sie zu deinem <code>h2</code> Element hinzu.",
+        "Klassen sind wiederverwendbare Styles, die HTML Elementen zugewiesen werden können.",
+        "So sieht eine CSS Klasse aus:",
+        "<img class=\"img-responsive\" alt=\"Ein Beispiel, wie Styles geschrieben werden. Das wird im Detail in den folgenden Zeilen beschrieben.\" src=\"https://www.evernote.com/l/AHSCzZV0l_dDLrqD8r9JsHaBWfEzdN0OpRwB/image.png\">",
+        "Du siehst, dass wir die CSS Klasse \"blue-text\" innerhalb von <code>&#60;style&#62;</code> geschrieben haben.",
+        "Du kannst eine Klasse folgendermaßen einem HTML Element beifügen: <code>&#60;h2 class=\"blue-text\"&#62;CatPhotoApp&#60;/h2&#62;</code>",
+        "Beachte, dass Klassen in deinem CSS <code>style</code> Element mit einem Punkt beginngen sollten. In deinen Klassen-Deklarationen von HTML Elementen sollten diese nicht mit einem Punkt beginnen.",
+        "Anstatt ein neues <code>style</code> Element zu erstellen, versuche die <code>h2</code> Style-Deklaration von deinem bereits bestehenden Style Element zu entfernen und sie mit der Klassen-Deklaration \".red-text\" zu ersetzen."
+      ],
       "title": "Use a CSS Class to Style an Element",
       "description": [
         "Classes are reusable styles that can be added to HTML elements.",
@@ -471,8 +497,8 @@
         "assert(code.match(/\\.red-text\\s*\\{\\s*color\\s*:\\s*red;\\s*\\}/g), 'message: Your stylesheet should declare a <code>red-text</code> class and have its color set to red.');",
         "assert($(\"h2\").attr(\"style\") === undefined, 'message: Do not use inline style declarations like <code>style=\"color&#58; red\"</code> in your <code>h2</code> element.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Utiliza una clase CSS para darle estilo a un elemento",
+      "type": "waypoint",
+      "titleEs": "Utiliza una clase CSS para darle estilo a un elemento",
       "descriptionEs": [
         "Las clases son estilos reutilizables que pueden añadirse a elementos HTML.",
         "Aquí esta un ejemplo de una declaración de una clase CSS:",
@@ -484,37 +510,27 @@
         "Dentro de tu elemento <code>style</code>, cambia el selector <code>h2</code> por <code>.red-text</code> y cambia el valor del color de <code>blue</code> a <code>red</code>.",
         "Dale a tu elemento <code>h2</code> el atributo <code>class</code> con el valor de <code>'red-text'</code>."
       ],
-      "nameDe": "Waypoint: Nutze eine CSS Klasse um ein Element zu gestalten",
-      "descriptionDe": [
-        "Erstelle eine CSS Klasse namens \"red-text\" und füge sie zu deinem <code>h2</code> Element hinzu.",
-        "Klassen sind wiederverwendbare Styles, die HTML Elementen zugewiesen werden können.",
-        "So sieht eine CSS Klasse aus:",
-        "<img class=\"img-responsive\" alt=\"Ein Beispiel, wie Styles geschrieben werden. Das wird im Detail in den folgenden Zeilen beschrieben.\" src=\"https://www.evernote.com/l/AHSCzZV0l_dDLrqD8r9JsHaBWfEzdN0OpRwB/image.png\">",
-        "Du siehst, dass wir die CSS Klasse \"blue-text\" innerhalb von <code>&#60;style&#62;</code> geschrieben haben.",
-        "Du kannst eine Klasse folgendermaßen einem HTML Element beifügen: <code>&#60;h2 class=\"blue-text\"&#62;CatPhotoApp&#60;/h2&#62;</code>",
-        "Beachte, dass Klassen in deinem CSS <code>style</code> Element mit einem Punkt beginngen sollten. In deinen Klassen-Deklarationen von HTML Elementen sollten diese nicht mit einem Punkt beginnen.",
-        "Anstatt ein neues <code>style</code> Element zu erstellen, versuche die <code>h2</code> Style-Deklaration von deinem bereits bestehenden Style Element zu entfernen und sie mit der Klassen-Deklaration \".red-text\" zu ersetzen."
-      ],
-     "namePtBR": "Use Classes CSS para Estilizar Elementos",
-     "descriptionPtBR": [
-        "As classes são estilos reutilizáveis que podem ser adicionadas a elementos HTML.",
-        "Aqui está um exemplo de como declarar uma classe com CSS:",
-        "<code>&#60;style&#62;</code>",
-        "<code>&nbsp;&nbsp;.blue-text {</code>",
-        "<code>&nbsp;&nbsp;&nbsp;&nbsp;color: blue;</code>",
-        "<code>&nbsp;&nbsp;}</code>",
-        "<code>&#60;/style&#62;</code>",
-        "Veja que criamos uma classe CSS chamada \"blue-text\" no interior da tag <code>&#60;style&#62;</code>.",
-        "Você pode aplicar uma classe a um elemento HTML assim:",
-        "<code>&#60;h2 class=\"blue-text\"&#62;CatPhotoApp&#60;/h2&#62;</code>",
-        "Note que em seu elemento <code>style</code> CSS, as classes devem começar com um ponto. Já nos elementos HTML, as declarações de classes não devem começar com o ponto.",
-        "Ao invés de criar um novo elemento <code>style</code>, tente eliminar a declaração de estilo de <code>h2</code> dos elementos de estilo existentes, e troque ela pela declaração de classe <code>.red-text</code>.",
-        "Crie uma classe CSS chamada <code>red-text</code> e então a aplique em seu elemento <code>h2</code>."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Nutze eine CSS Klasse um ein Element zu gestalten",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aefe08806",
+      "descriptionPtBR": [
+        "Lembre-se que é possível adicionar classes a elementos HTML ao utilizar <code>class=\"sua-classe-aqui\"</code> dentro da tag de abertura do elemento.",
+        "Relembre também que os seletores de classes CSS exigem um ponto em seu início, assim:",
+        "<code>.blue-text {</code>",
+        "<code>&nbsp;&nbsp;color: blue;</code>",
+        "<code>}</code>",
+        "Contudo, não se esqueça que as declarações de classes em elementos não utilizam ponto, assim:",
+        "<code>&#60;h2 class=\"blue-text\"&#62;CatPhotoApp&#60;h2&#62;</code>",
+        "Adicione a classe <code>red-text</code> aos seus elementos <code>h2</code> e <code>p</code>."
+      ],
+      "namePtBR": "Estilize Múltiplos Elementos com uma Classe CSS",
+      "descriptionDe": [
+        "Füge den <code>h2</code> und <code>p</code> Elementen die Klasse \"red-text\" hinzu.",
+        "Du kannst Klassen zu HTML Elementen hinzufügen, indem du zum Beispiel <code>class=\"deine-klasse\"</code> innerhalb des öffnenden Tags schreibst.",
+        "Du weißt, es gehört ein Punkt vor CSS Klassen: <code>.red-text { color: blue; }</code>. Aber diese Klassen-Deklarationen brauchen keinen Punkt: <code>&#60;h2 class=\"blue-text\"&#62;CatPhotoApp&#60;h2&#62;</code>"
+      ],
       "title": "Style Multiple Elements with a CSS Class",
       "description": [
         "Remember that you can attach classes to HTML elements by using <code>class=\"your-class-here\"</code> within the relevant element's opening tag.",
@@ -541,8 +557,8 @@
         "assert($(\"p\").css(\"color\") === \"rgb(255, 0, 0)\", 'message: Your <code>p</code> element should be red.');",
         "assert($(\"p\").hasClass(\"red-text\"), 'message: Your <code>p</code> element should have the class <code>red-text</code>.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Da estilo a múltiples elementos con una clase CSS",
+      "type": "waypoint",
+      "titleEs": "Da estilo a múltiples elementos con una clase CSS",
       "descriptionEs": [
         "Recuerda que puedes adjuntar clases a elementos HTML utilizando <code>class=\"tu-clase-aqui\"</code> dentro de la etiqueta de apertura del elemento mismo.",
         "Recuerda que los selectores de clase CSS requieren un punto al principio, así:",
@@ -551,27 +567,26 @@
         "<code>&#60;h2 class=\"blue-text\"&#62;CatPhotoApp&#60;h2&#62;</code>",
         "Aplica la clase <code>red-text</code> a tus elementos <code>h2</code> y <code>p</code>"
       ],
-      "nameDe": "Waypoint: Gestalte mehrere Elemente mit einer CSS Klasse",
-      "descriptionDe": [
-        "Füge den <code>h2</code> und <code>p</code> Elementen die Klasse \"red-text\" hinzu.",
-        "Du kannst Klassen zu HTML Elementen hinzufügen, indem du zum Beispiel <code>class=\"deine-klasse\"</code> innerhalb des öffnenden Tags schreibst.",
-        "Du weißt, es gehört ein Punkt vor CSS Klassen: <code>.red-text { color: blue; }</code>. Aber diese Klassen-Deklarationen brauchen keinen Punkt: <code>&#60;h2 class=\"blue-text\"&#62;CatPhotoApp&#60;h2&#62;</code>"
-      ],
-     "namePtBR": "Estilize Múltiplos Elementos com uma Classe CSS",
-     "descriptionPtBR": [
-        "Lembre-se que é possível adicionar classes a elementos HTML ao utilizar <code>class=\"sua-classe-aqui\"</code> dentro da tag de abertura do elemento.",
-        "Relembre também que os seletores de classes CSS exigem um ponto em seu início, assim:",
-        "<code>.blue-text {</code>",
-        "<code>&nbsp;&nbsp;color: blue;</code>",
-        "<code>}</code>",
-        "Contudo, não se esqueça que as declarações de classes em elementos não utilizam ponto, assim:",
-        "<code>&#60;h2 class=\"blue-text\"&#62;CatPhotoApp&#60;h2&#62;</code>",
-        "Adicione a classe <code>red-text</code> aos seus elementos <code>h2</code> e <code>p</code>."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Gestalte mehrere Elemente mit einer CSS Klasse",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08806",
+      "descriptionPtBR": [
+        "O tamanho da fonte é controlado pela propriedade CSS \"font-size\", como aqui:",
+        "<code>h1 {</code>",
+        "<code>&nbsp;&nbsp;font-size: 30px;</code>",
+        "<code>}</code>",
+        "Crie um segundo elemento <code>p</code> que tenha o seguinte texto Kitty Ipsum: <code>Purr jump eat the grass rip the couch scratched sunbathe, shed everywhere rip the couch sleep in the sink fluffy fur catnip scratched.</code>",
+        "Dentro da mesma tag <code>&#60;style&#62;</code> que criamos para sua classe <code>red-text</code>, modifique o <code>font-size</code> dos elementos <code>p</code> para que tenha um tamanho de 16 pixels (<code>16px</code>)."
+      ],
+      "namePtBR": "Mude o Tamanho da Fonte de um Elemento",
+      "descriptionDe": [
+        "Erstelle ein zweites <code>p</code> Element. Ändere dann innerhalb deines <code>&#60;style&#62;</code> Elements die Schriftgröße oder \"font-size\" von allen <code>p</code> Elementen auf 16 Pixel.",
+        "Schriftgröße wird von dem CSS Attribut \"font-size\" kontrolliert: <code>h1 { font-size: 30px; }</code>",
+        "Zuerst erstellst du ein zweites <code>p</code> Element mit dem folgenden Kitty Ipsum Text: <code>Purr jump eat the grass rip the couch scratched sunbathe, shed everywhere rip the couch sleep in the sink fluffy fur catnip scratched.</code>",
+        "Versuche nun beiden <code>p</code> Elementen die Schriftgröße von 16 Pixeln (<code>16px</code>) zu geben. Du kannst das innerhalb des selben <code>&#60;style&#62;</code> Tags machen, welches wir für deine \"red-text\" Klasse erstellt haben."
+      ],
       "title": "Change the Font Size of an Element",
       "description": [
         "Font size is controlled by the <code>font-size</code> CSS property, like this:",
@@ -599,8 +614,8 @@
         "assert($(\"p:not([class])\").length === 1, 'message: Do not add a class attribute to the second <code>p</code> element, without removing it from the first one.');",
         "assert(parseInt($(\"p:not([class])\").css(\"font-size\"), 10) > 15, 'message: Give elements with the <code>p</code> tag a <code>font-size</code> of <code>16px</code>. Browser and Text zoom should be at 100%.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Cambia el tamaño de fuente de un elemento.",
+      "type": "waypoint",
+      "titleEs": "Cambia el tamaño de fuente de un elemento.",
       "descriptionEs": [
         "El tamaño de fuente es controlado por la propiedad CSS \"font-size\", como aquí:",
         "<blockquote>h1 {<br>&nbsp;&nbsp;font-size: 30px;<br>}</blockquote>",
@@ -609,26 +624,25 @@
         "<strong>Nota</strong><br>Debido a diferencias en los navegadores, es posible que tengas que establecer el zoom en 100% para pasar las pruebas en este desafío.",
         "Además, no agregues ningún atributo de clase a tu elemento <code>p</code>."
       ],
-      "nameDe": "Waypoint: Ändere die Schriftgröße eines Elements",
-      "descriptionDe": [
-        "Erstelle ein zweites <code>p</code> Element. Ändere dann innerhalb deines <code>&#60;style&#62;</code> Elements die Schriftgröße oder \"font-size\" von allen <code>p</code> Elementen auf 16 Pixel.",
-        "Schriftgröße wird von dem CSS Attribut \"font-size\" kontrolliert: <code>h1 { font-size: 30px; }</code>",
-        "Zuerst erstellst du ein zweites <code>p</code> Element mit dem folgenden Kitty Ipsum Text: <code>Purr jump eat the grass rip the couch scratched sunbathe, shed everywhere rip the couch sleep in the sink fluffy fur catnip scratched.</code>",
-        "Versuche nun beiden <code>p</code> Elementen die Schriftgröße von 16 Pixeln (<code>16px</code>) zu geben. Du kannst das innerhalb des selben <code>&#60;style&#62;</code> Tags machen, welches wir für deine \"red-text\" Klasse erstellt haben."
-      ],
-     "namePtBR": "Mude o Tamanho da Fonte de um Elemento",
-     "descriptionPtBR": [
-        "O tamanho da fonte é controlado pela propriedade CSS \"font-size\", como aqui:",
-        "<code>h1 {</code>",
-        "<code>&nbsp;&nbsp;font-size: 30px;</code>",
-        "<code>}</code>",
-        "Crie um segundo elemento <code>p</code> que tenha o seguinte texto Kitty Ipsum: <code>Purr jump eat the grass rip the couch scratched sunbathe, shed everywhere rip the couch sleep in the sink fluffy fur catnip scratched.</code>",
-        "Dentro da mesma tag <code>&#60;style&#62;</code> que criamos para sua classe <code>red-text</code>, modifique o <code>font-size</code> dos elementos <code>p</code> para que tenha um tamanho de 16 pixels (<code>16px</code>)."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Ändere die Schriftgröße eines Elements",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aede08807",
+      "descriptionPtBR": [
+        "Você pode estabelecer o estilo de fonte para um elemento ao utilizar a propriedade <code>font-family</code>.",
+        "Por exemplo, se você quiser estabelecer o estilo de fonte de seu elemento <code>h2</code> como <code>Sans-serif</code>, você poderá utilizar o seguinte código em CSS:",
+        "<code>h2 {</code>",
+        "<code>&nbsp;&nbsp;font-family: Sans-serif;</code>",
+        "<code>}</code>",
+        "Faça com que todos os elementos <code>p</code> utilizem o estilo de fonte <code>Monospace</code>."
+      ],
+      "namePtBR": "Defina a Fonte para um Elemento",
+      "descriptionDe": [
+        "Definiere für alle <code>p</code> Elemente die Schriftart \"Monospace\".",
+        "Du kannst einem Element mit \"font-family\" eine Schriftart zuweisen.",
+        "Wenn du zum Beispiel deinem <code>h2</code> Element die Schriftart \"Sans-serif\" zuweisen willst, kannst du das mit dem folgenden CSS tun: <code>h2 { font-family: Sans-serif; }</code>"
+      ],
       "title": "Set the Font Family of an Element",
       "description": [
         "You can set an element's font by using the <code>font-family</code> property.",
@@ -655,33 +669,34 @@
       "tests": [
         "assert($(\"p\").not(\".red-text\").css(\"font-family\").match(/monospace/i), 'message: Your <code>p</code> elements should use the font <code>Monospace</code>.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Establecer la familia del tipo de letra de un elemento",
+      "type": "waypoint",
+      "titleEs": "Establecer la familia del tipo de letra de un elemento",
       "descriptionEs": [
         "Puedes establecer el tipo de letra de un elemento usando la propiedad <code>font-family</code>.",
         "Por ejemplo, si quieres establecer el tipo de letra de tu elemento <code>h2</code> como <code>Sans-serif</code>, usa el siguiente CSS:",
         "<blockquote>h2 {<br>&nbsp;&nbsp;font-family: Sans-serif;<br>}</blockquote>",
         "Haz que todos tus elementos <code>p</code> utilicen el tipo de letra <code>Monospace</code>."
       ],
-      "nameDe": "Waypoint: Definiere die Schriftart eines Elements",
-      "descriptionDe": [
-        "Definiere für alle <code>p</code> Elemente die Schriftart \"Monospace\".",
-        "Du kannst einem Element mit \"font-family\" eine Schriftart zuweisen.",
-        "Wenn du zum Beispiel deinem <code>h2</code> Element die Schriftart \"Sans-serif\" zuweisen willst, kannst du das mit dem folgenden CSS tun: <code>h2 { font-family: Sans-serif; }</code>"
-      ],
-     "namePtBR": "Defina a Fonte para um Elemento",
-     "descriptionPtBR": [
-        "Você pode estabelecer o estilo de fonte para um elemento ao utilizar a propriedade <code>font-family</code>.",
-        "Por exemplo, se você quiser estabelecer o estilo de fonte de seu elemento <code>h2</code> como <code>Sans-serif</code>, você poderá utilizar o seguinte código em CSS:",
-        "<code>h2 {</code>",
-        "<code>&nbsp;&nbsp;font-family: Sans-serif;</code>",
-        "<code>}</code>",
-        "Faça com que todos os elementos <code>p</code> utilizem o estilo de fonte <code>Monospace</code>."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Definiere die Schriftart eines Elements",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08807",
+      "descriptionPtBR": [
+        "Agora, vamos importar e aplicar um estilo de fonte por meio do Google Fonts.",
+        "Primeiro, faça um <code>chamado</code> ao Google Fonts para poder utilizar a fonte chamada <code>Lobster</code> e carregá-la em seu HTML.",
+        "Para fazer isso, copie o código abaixo e insira-o na parte superior de seu editor de texto:",
+        "<code>&#60;link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\"&#62;</code>",
+        "Agora, estableça <code>Lobster</code> como o valor para font-family em seu elemento <code>h2</code>."
+      ],
+      "namePtBR": "Importe uma Fonte a Partir do Google Fonts",
+      "descriptionDe": [
+        "Füge dem <code>h2</code> Element die Schriftart oder <code>font-family</code> \"Lobster\" hinzu.",
+        "Zuerst musst du Google Fonts in dein HTML einbinden, um auf \"Lobster\" zugreifen zu können.",
+        "Kopiere den folgenden Code und füge diesen in deinen Editor über dem <code>style</code> Element ein:",
+        "<code>&#60;link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\"&#62;</code>",
+        "Jetzt kannst du \"Lobster\" als font-family Attribut zu deinem <code>h2</code> Element hinzufügen."
+      ],
       "title": "Import a Google Font",
       "description": [
         "Now, let's import and apply a Google font (note that if Google is blocked in your country, you will need to skip this challenge).",
@@ -713,8 +728,8 @@
         "assert($(\"h2\").css(\"font-family\").match(/lobster/i), 'message: Your <code>h2</code> element should use the font <code>Lobster</code>.');",
         "assert($(\"p\").css(\"font-family\").match(/monospace/i), 'message: Your <code>p</code> element should still use the font <code>Monospace</code>.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Importar un tipo de letra de Google",
+      "type": "waypoint",
+      "titleEs": "Importar un tipo de letra de Google",
       "descriptionEs": [
         "Ahora, importemos y apliquemos un tipo de letra de Google (ten en cuenta que si Google está bloqueado en tu país, deberás saltarte este desafío).",
         "Primero, haz un <code>llamado</code> a Google para obtener el tipo de letra <code>Lobster</code> y para cargarlo en tu HTML.",
@@ -723,26 +738,28 @@
         "Ahora puedes establecer <code>Lobster</code> como valor de font-family de tu elemento <code>h2</code>.",
         "Aplica el tipo de letra (<code>font-family</code>) <code>Lobster</code> a tu elemento <code>h2</code>."
       ],
-      "nameDe": "Waypoint: Importiere eine Google Font",
-      "descriptionDe": [
-        "Füge dem <code>h2</code> Element die Schriftart oder <code>font-family</code> \"Lobster\" hinzu.",
-        "Zuerst musst du Google Fonts in dein HTML einbinden, um auf \"Lobster\" zugreifen zu können.",
-        "Kopiere den folgenden Code und füge diesen in deinen Editor über dem <code>style</code> Element ein:",
-        "<code>&#60;link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\"&#62;</code>",
-        "Jetzt kannst du \"Lobster\" als font-family Attribut zu deinem <code>h2</code> Element hinzufügen."
-      ],
-     "namePtBR": "Importe uma Fonte a Partir do Google Fonts",
-     "descriptionPtBR": [
-        "Agora, vamos importar e aplicar um estilo de fonte por meio do Google Fonts.",
-        "Primeiro, faça um <code>chamado</code> ao Google Fonts para poder utilizar a fonte chamada <code>Lobster</code> e carregá-la em seu HTML.",
-        "Para fazer isso, copie o código abaixo e insira-o na parte superior de seu editor de texto:",
-        "<code>&#60;link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\"&#62;</code>",
-        "Agora, estableça <code>Lobster</code> como o valor para font-family em seu elemento <code>h2</code>."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Importiere eine Google Font",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08808",
+      "descriptionPtBR": [
+        "Existem diversas fontes que estão disponíveis por padrão nos navegadores de internet, incluindo <code>Monospace</code>, <code>Serif</code> e <code>Sans-Serif</code>.",
+        "No entanto, quando uma fonte não está disponível, podemos dizer ao navegador que \"degrade\" a outro tipo de fonte.",
+        "Por exemplo, se você deseja que um elemento use a fonte <code>Helvetica</code>, e que degrade para a fonte <code>Sans-Serif</code> quando a <code>Helvetica</code> não estiver disponível, você pode utilizar o seguinte CSS:",
+        "<code>p {</code>",
+        "<code>&nbsp;&nbsp;font-family: Helvetica, Sans-Serif;</code>",
+        "<code>}</code>",
+        "Agora, comente o seu chamado para a fonte do Google, para que a fonte <code>Lobster</code> não esteja disponível. Note como a fonte degrada para <code>Monospace</code>."
+      ],
+      "namePtBR": "Especifique como as Fontes Devem se Degradar",
+      "descriptionDe": [
+        "Füge allen <code>h2</code> Elementen die Schriftart \"Lobster\" hinzu und definiere \"Monospace\" als Ersatzschrift, wenn \"Lobster\" nicht verfügbar ist.",
+        "Du kannst \"Lobster\" als Schriftart deines <code>h2</code> Elements belassen, aber gleichzeitig dafür sorgen, dass eine alternative Schrift geladen wird, wenn \"Lobster\" nicht zur Verfügung steht.",
+        "Wenn du zum Beispiel einem Element die Schriftart \"Helvetica\" geben möchtest, aber gleichzeitig die alternative Schrift \"Sans-Serif\" laden willst, wenn \"Helvetica\" nicht verfügbar ist, kannst du diesen CSS Style verwenden: <code>p { font-family: Helvetica, Sans-Serif; }</code>",
+        "Es gibt verschiedene Schriftarten, die jedem Browser standardmäßig zur Verfügung stehen. Das sind unter anderem \"Monospace\", \"Serif\" und \"Sans-Serif\". Probiere deinem <code>h2</code> Element gleichzeitig die Schriftart \"Lobster\" und als Alternative \"Monospace\" zu geben.",
+        "Jetzt versuche den Aufruf von Google Fonts in deinem HTML auszukommentieren, sodass \"Lobster\" nicht zur Verfügung steht. Beachte, wie nun die Schriftart \"Monospace\" geladen wird."
+      ],
       "title": "Specify How Fonts Should Degrade",
       "description": [
         "There are several default fonts that are available in all browsers. These include <code>Monospace</code>, <code>Serif</code> and <code>Sans-Serif</code>",
@@ -779,8 +796,8 @@
         "assert(new RegExp(\"<!--\", \"gi\").test(code), 'message: Comment out your call to Google for the <code>Lobster</code> font by putting <code>&#60!--</code> in front of it.');",
         "assert(new RegExp(\"-->\", \"gi\").test(code), 'message: Be sure to close your comment by adding <code>--&#62;</code>.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Especifica cómo deben degradarse los tipos de letra",
+      "type": "waypoint",
+      "titleEs": "Especifica cómo deben degradarse los tipos de letra",
       "descriptionEs": [
         "Hay diversos tipos de letra disponibles por omisión en todos los navegadores.  Estos incluyen <code>Monospace</code>, <code>Serif</code> y <code>Sans-Serif</code>",
         "Cuando un tipo de letra no está disponible, puedes decirle al navegador que \"degrade\" a otro tipo de letra.",
@@ -788,28 +805,26 @@
         "<blockquote>p {<br>&nbsp;&nbsp;font-family: Helvetica, Sans-Serif;<br>}</blockquote>",
         "Ahora pon en forma de comentario tu llamada a tipos de letra de Google, de forma que el tipo <code>Lobster</code> no esté disponible. Nota cómo se degrada al tipo <code>Monospace</code>."
       ],
-      "nameDe": "Waypoint: Spezifiziere die Rangfolge von Schriftarten",
-      "descriptionDe": [
-        "Füge allen <code>h2</code> Elementen die Schriftart \"Lobster\" hinzu und definiere \"Monospace\" als Ersatzschrift, wenn \"Lobster\" nicht verfügbar ist.",
-        "Du kannst \"Lobster\" als Schriftart deines <code>h2</code> Elements belassen, aber gleichzeitig dafür sorgen, dass eine alternative Schrift geladen wird, wenn \"Lobster\" nicht zur Verfügung steht.",
-        "Wenn du zum Beispiel einem Element die Schriftart \"Helvetica\" geben möchtest, aber gleichzeitig die alternative Schrift \"Sans-Serif\" laden willst, wenn \"Helvetica\" nicht verfügbar ist, kannst du diesen CSS Style verwenden: <code>p { font-family: Helvetica, Sans-Serif; }</code>",
-        "Es gibt verschiedene Schriftarten, die jedem Browser standardmäßig zur Verfügung stehen. Das sind unter anderem \"Monospace\", \"Serif\" und \"Sans-Serif\". Probiere deinem <code>h2</code> Element gleichzeitig die Schriftart \"Lobster\" und als Alternative \"Monospace\" zu geben.",
-        "Jetzt versuche den Aufruf von Google Fonts in deinem HTML auszukommentieren, sodass \"Lobster\" nicht zur Verfügung steht. Beachte, wie nun die Schriftart \"Monospace\" geladen wird."
-      ],
-     "namePtBR": "Especifique como as Fontes Devem se Degradar",
-     "descriptionPtBR": [
-        "Existem diversas fontes que estão disponíveis por padrão nos navegadores de internet, incluindo <code>Monospace</code>, <code>Serif</code> e <code>Sans-Serif</code>.",
-        "No entanto, quando uma fonte não está disponível, podemos dizer ao navegador que \"degrade\" a outro tipo de fonte.",
-        "Por exemplo, se você deseja que um elemento use a fonte <code>Helvetica</code>, e que degrade para a fonte <code>Sans-Serif</code> quando a <code>Helvetica</code> não estiver disponível, você pode utilizar o seguinte CSS:",
-        "<code>p {</code>",
-        "<code>&nbsp;&nbsp;font-family: Helvetica, Sans-Serif;</code>",
-        "<code>}</code>",
-        "Agora, comente o seu chamado para a fonte do Google, para que a fonte <code>Lobster</code> não esteja disponível. Note como a fonte degrada para <code>Monospace</code>."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Spezifiziere die Rangfolge von Schriftarten",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08812",
+      "descriptionPtBR": [
+        "Você pode adicionar imagens à sua página da internet com o uso do elemento <code>img</code>, e apontar para a URL específica de uma imagem utilizando o atributo <code>src</code>.",
+        "Um exemplo para isso seria:",
+        "<code>&#60img src=\"http://www.your-image-source.com/your-image.jpg\"&#62</code>",
+        "Observe que na maior parte dos casos, os elementos <code>img</code> são de fechamento automático.",
+        "Agora, tente fazer isso com essa imagem:",
+        "<code>https://bit.ly/fcc-relaxing-cat</code>"
+      ],
+      "namePtBR": "Adicione Imagens em sua Página Web",
+      "descriptionDe": [
+        "Nutze ein <code>img</code> Element um das Bild <code>https://bit.ly/fcc-relaxing-cat</code> einzufügen.",
+        "Du kannst <code>img</code> Elemente verwenden, um Bilder in deine Website einzubauen. Um zur URL des Bildes zu verweisen, benutzt du das <code>src</code> Attribut.",
+        "Ein Beispiel dafür wäre <code>&#60img src=\"www.bild-quelle.com/bild.jpg\"/&#62</code>. Beachte, dass <code>img</code> Elemente in den meisten Fällen selbstschließend sind.",
+        "Versuche es mit diesem Bild: <code>https://bit.ly/fcc-relaxing-cat</code>"
+      ],
       "title": "Add Images to your Website",
       "description": [
         "You can add images to your website by using the <code>img</code> element, and point to a specific image's URL using the <code>src</code> attribute.",
@@ -845,8 +860,8 @@
         "assert($(\"img\").length > 0, 'message: Your page should have an image element.');",
         "assert(new RegExp(\"\\/\\/bit.ly\\/fcc-relaxing-cat\", \"gi\").test($(\"img\").attr(\"src\")), 'message: Your image should have a <code>src</code> attribute that points to the kitten image.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Añade imágenes a tu sitio web",
+      "type": "waypoint",
+      "titleEs": "Añade imágenes a tu sitio web",
       "descriptionEs": [
         "Puedes agregar imágenes a tu sitio web mediante el uso del elemento <code>img</code>, y apuntar a la URL específica de una imagen utilizando el atributo <code>src</code>.",
         "Un ejemplo de esto sería:",
@@ -855,26 +870,27 @@
         "Prueba con esta imagen:",
         "<code>https://bit.ly/fcc-relaxing-cat</code>"
       ],
-      "nameDe": "Waypoint: Füge Bilder zu deiner Website hinzu",
-      "descriptionDe": [
-        "Nutze ein <code>img</code> Element um das Bild <code>https://bit.ly/fcc-relaxing-cat</code> einzufügen.",
-        "Du kannst <code>img</code> Elemente verwenden, um Bilder in deine Website einzubauen. Um zur URL des Bildes zu verweisen, benutzt du das <code>src</code> Attribut.",
-        "Ein Beispiel dafür wäre <code>&#60img src=\"www.bild-quelle.com/bild.jpg\"/&#62</code>. Beachte, dass <code>img</code> Elemente in den meisten Fällen selbstschließend sind.",
-        "Versuche es mit diesem Bild: <code>https://bit.ly/fcc-relaxing-cat</code>"
-      ],
-     "namePtBR": "Adicione Imagens em sua Página Web",
-     "descriptionPtBR": [
-        "Você pode adicionar imagens à sua página da internet com o uso do elemento <code>img</code>, e apontar para a URL específica de uma imagem utilizando o atributo <code>src</code>.",
-        "Um exemplo para isso seria:",
-        "<code>&#60img src=\"http://www.your-image-source.com/your-image.jpg\"&#62</code>",
-        "Observe que na maior parte dos casos, os elementos <code>img</code> são de fechamento automático.",
-        "Agora, tente fazer isso com essa imagem:",
-        "<code>https://bit.ly/fcc-relaxing-cat</code>"
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Füge Bilder zu deiner Website hinzu",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9acdf08812",
+      "descriptionPtBR": [
+        "O CSS possui uma propriedade chamada <code>width</code>, que controla a largura de um elemento. Da mesma forma que com as fontes, vamos utilizar <code>px</code> (pixels) como medida para especificar a largura de nossa imagem.",
+        "Por exemplo, se queremos criar uma classe CSS chamada <code>larger-image</code> que dê aos elementos HTML uma largura de 500px, vamos usar:",
+        "<code>&#60;estilo&#62;</code>",
+        "<code>&nbsp;&nbsp;.larger-image{</code>",
+        "<code>&nbsp;&nbsp;&nbsp;&nbsp;width: 500px;</code>",
+        "<code>&nbsp;&nbsp;}</code>",
+        "<code>&#60;/style&#62;</code>",
+        "Crie uma classe chamada <code>smaller-image</code> e a utilize para mudar o tamanho da imagem para que ela tenha apenas 100 pixels de largura."
+      ],
+      "namePtBR": "Dê um Tamanho para suas Imagens",
+      "descriptionDe": [
+        "Erstelle eine Klasse mit dem Namen <code>smaller-image</code> und verwende sie, um dein Bild auf 100 Pixel zu skalieren.",
+        "Die Breite eines Elements wird mit dem CSS Attribut <code>width</code> kontrolliert. Wie bei Schriftarten verwenden wir Pixel (px) um die Größe zu definieren.",
+        "Wenn wir also die CSS Klasse \"larger-image\" erstellen wollen, um HTML Elementen eine Breite von 500 Pixeln zu verleihen, verwenden wir: <code>&#60;style&#62; .larger-image { width: 500px; } &#60;/style&#62;</code>"
+      ],
       "title": "Size your Images",
       "description": [
         "CSS has a property called <code>width</code> that controls an element's width. Just like with fonts, we'll use <code>px</code> (pixels) to specify the image's width.",
@@ -911,36 +927,40 @@
         "assert($(\"img\").hasClass(\"smaller-image\"), 'message: Your <code>img</code> element should have the class <code>smaller-image</code>.');",
         "assert($(\"img\").width() === 100, 'message: Your image should be 100 pixels wide. Browser zoom should be at 100%.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Da tamaño a tus imágenes",
+      "type": "waypoint",
+      "titleEs": "Da tamaño a tus imágenes",
       "descriptionEs": [
         "CSS tiene una propiedad llamada <code>width</code> que controla el ancho de un elemento. Al igual que con las fuentes de letra, usaremos <code>px</code> (píxeles) para especificar el ancho de la imagen. ",
         "Por ejemplo, si queremos crear una clase CSS llamada <code>larger-image</code> que le de a los elementos HTML un ancho de 500 píxeles, usaríamos:",
-        "<blockquote>&#60;style&#62;<br>&nbsp;&nbsp;.larger-image {<br>&nbsp;&nbsp;&nbsp;&nbsp;width: 500px;<br>&nbsp;&nbsp;}<br>&#60;/style&#62;</blockquote>",
-        "Crea una clase llamada <code>smaller-image</code> y utilízala para cambiar el tamaño de la imagen de modo que sea de sólo 100 píxeles de ancho.",
-        "<strong>Nota</strong><br>Debido a diferencias en los navegadores, es posible que tengas que establecer el zoom en 100% para pasar las pruebas en este desafío."
-      ],
-      "nameDe": "Waypoint: Skaliere deine Bilder",
-      "descriptionDe": [
-        "Erstelle eine Klasse mit dem Namen <code>smaller-image</code> und verwende sie, um dein Bild auf 100 Pixel zu skalieren.",
-        "Die Breite eines Elements wird mit dem CSS Attribut <code>width</code> kontrolliert. Wie bei Schriftarten verwenden wir Pixel (px) um die Größe zu definieren.",
-        "Wenn wir also die CSS Klasse \"larger-image\" erstellen wollen, um HTML Elementen eine Breite von 500 Pixeln zu verleihen, verwenden wir: <code>&#60;style&#62; .larger-image { width: 500px; } &#60;/style&#62;</code>"
-      ],
-     "namePtBR": "Dê um Tamanho para suas Imagens",
-     "descriptionPtBR": [
-        "O CSS possui uma propriedade chamada <code>width</code>, que controla a largura de um elemento. Da mesma forma que com as fontes, vamos utilizar <code>px</code> (pixels) como medida para especificar a largura de nossa imagem.",
-        "Por exemplo, se queremos criar uma classe CSS chamada <code>larger-image</code> que dê aos elementos HTML uma largura de 500px, vamos usar:",
-        "<code>&#60;estilo&#62;</code>",
-        "<code>&nbsp;&nbsp;.larger-image{</code>",
-        "<code>&nbsp;&nbsp;&nbsp;&nbsp;width: 500px;</code>",
-        "<code>&nbsp;&nbsp;}</code>",
-        "<code>&#60;/style&#62;</code>",
-        "Crie uma classe chamada <code>smaller-image</code> e a utilize para mudar o tamanho da imagem para que ela tenha apenas 100 pixels de largura."
+        "<blockquote>&#60;style&#62;<br>&nbsp;&nbsp;.larger-image {<br>&nbsp;&nbsp;&nbsp;&nbsp;width: 500px;<br>&nbsp;&nbsp;}<br>&#60;/style&#62;</blockquote>",
+        "Crea una clase llamada <code>smaller-image</code> y utilízala para cambiar el tamaño de la imagen de modo que sea de sólo 100 píxeles de ancho.",
+        "<strong>Nota</strong><br>Debido a diferencias en los navegadores, es posible que tengas que establecer el zoom en 100% para pasar las pruebas en este desafío."
       ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Skaliere deine Bilder",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9bedf08813",
+      "descriptionPtBR": [
+        "As bordas em CSS possuem propriedades como <code>style</code>, <code>color</code> e <code>width</code>",
+        "Por exemplo, se queremos criar uma borda com tamanho de 5 pixels de cor vermelha ao redor de um elemento HTML, podemos utilizar esta classe:",
+        "<code>&#60;style&#62;</code>",
+        "<code>&nbsp;&nbsp;.thin-red-border {</code>",
+        "<code>&nbsp;&nbsp;&nbsp;&nbsp;border-color: red;</code>",
+        "<code>&nbsp;&nbsp;&nbsp;&nbsp;border-width: 5px;</code>",
+        "<code>&nbsp;&nbsp;&nbsp;&nbsp;border-style: solid;</code>",
+        "<code>&nbsp;&nbsp;}</code>",
+        "<code>&#60;/style&#62;</code>",
+        "Crie uma classe chamada <code>thick-green-border</code> que insira uma borda verde de 10 pixels de largura com um estilo <code>solid</code> ao redor de um elemento HTML, e então adicione essa classe em sua foto com o gato.",
+        "Lembre que você pode aplicar diversas classes a um elemento separando cada uma das classes com um espaço, dentro do atributo <code>class</code>. Por exemplo:",
+        "<code>&lt;img class=\"clase1 clase2\"&gt;</code>"
+      ],
+      "namePtBR": "Adicione Bordas ao Redor de seus Elementos",
+      "descriptionDe": [
+        "Erstelle die Klasse \"thick-green-border\", welche einen 10 Pixel dicken, grünen Rahmen mit dem Style \"solid\" um ein HTML Element setzt. Füge diese Klasse zu deinem Katzenfoto hinzu.",
+        "CSS Rahmen haben Attribute wie Style, Color und Width.",
+        "Wenn wir nun einen roten, 5 Pixel dicken Rahmen um ein HTML Element setzen wollen, würden wir so vorgehen: <code>&#60;style&#62; .thin-red-border { border-color: red; border-width: 5px; border-style: solid; } &#60;/style&#62;</code>"
+      ],
       "title": "Add Borders Around your Elements",
       "description": [
         "CSS borders have properties like <code>style</code>, <code>color</code> and <code>width</code>",
@@ -985,8 +1005,8 @@
         "assert($(\"img\").css(\"border-right-style\") === \"solid\", 'message: Give your image a border style of <code>solid</code>.');",
         "assert($(\"img\").css(\"border-left-color\") === \"rgb(0, 128, 0)\", 'message: The border around your <code>img</code> element should be green.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Añade bordes alrededor de tus elementos",
+      "type": "waypoint",
+      "titleEs": "Añade bordes alrededor de tus elementos",
       "descriptionEs": [
         "Los bordes CSS tienen propiedades como <code>style</code>, <code>color</code> y <code>width</code>",
         "Por ejemplo, si queremos crear un borde rojo de 5 píxeles alrededor de un elemento HTML, podríamos utilizar esta clase:",
@@ -995,31 +1015,22 @@
         "Recuerda que puedes aplicar clases múltiples a un elemento separando cada clase con un espacio dentro del atributo <code>class</code>. Por ejemplo:",
         "<code>&lt;img class=\"clase1 clase2\"&gt;</code>"
       ],
-      "nameDe": "Waypoint: Füge Rahmen zu deinen Elementen hinzu",
-      "descriptionDe": [
-        "Erstelle die Klasse \"thick-green-border\", welche einen 10 Pixel dicken, grünen Rahmen mit dem Style \"solid\" um ein HTML Element setzt. Füge diese Klasse zu deinem Katzenfoto hinzu.",
-        "CSS Rahmen haben Attribute wie Style, Color und Width.",
-        "Wenn wir nun einen roten, 5 Pixel dicken Rahmen um ein HTML Element setzen wollen, würden wir so vorgehen: <code>&#60;style&#62; .thin-red-border { border-color: red; border-width: 5px; border-style: solid; } &#60;/style&#62;</code>"
-      ],
-     "namePtBR": "Adicione Bordas ao Redor de seus Elementos",
-     "descriptionPtBR": [
-        "As bordas em CSS possuem propriedades como <code>style</code>, <code>color</code> e <code>width</code>",
-        "Por exemplo, se queremos criar uma borda com tamanho de 5 pixels de cor vermelha ao redor de um elemento HTML, podemos utilizar esta classe:",
-        "<code>&#60;style&#62;</code>",
-        "<code>&nbsp;&nbsp;.thin-red-border {</code>",
-        "<code>&nbsp;&nbsp;&nbsp;&nbsp;border-color: red;</code>",
-        "<code>&nbsp;&nbsp;&nbsp;&nbsp;border-width: 5px;</code>",
-        "<code>&nbsp;&nbsp;&nbsp;&nbsp;border-style: solid;</code>",
-        "<code>&nbsp;&nbsp;}</code>",
-        "<code>&#60;/style&#62;</code>",
-        "Crie uma classe chamada <code>thick-green-border</code> que insira uma borda verde de 10 pixels de largura com um estilo <code>solid</code> ao redor de um elemento HTML, e então adicione essa classe em sua foto com o gato.",
-        "Lembre que você pode aplicar diversas classes a um elemento separando cada uma das classes com um espaço, dentro do atributo <code>class</code>. Por exemplo:",
-        "<code>&lt;img class=\"clase1 clase2\"&gt;</code>"
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Füge Rahmen zu deinen Elementen hinzu",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08814",
+      "descriptionPtBR": [
+        "Sua foto com o gato possui cantos pontiagudos. Podemos arredondar os cantos com uma propriedade CSS chamado <code>border-radius</code>.",
+        "Você pode especificar um <code>border-radius</code> com pixels. Adicione um <code>border-radius</code> de <code>10px</code> para a sua foto.",
+        "Nota: Este desafio permite várias soluções possíveis. Por exemplo, você pode adicionar o <code>border-radius</code> tanto para a classe <code>.thick-green-border</code> como para a classe <code>.smaller-image</code>."
+      ],
+      "namePtBR": "Insira Bordas Arredondadas com o Border Radius",
+      "descriptionDe": [
+        "Gib deinem Katzenbild einen <code>border-radius</code> von 10 Pixeln.",
+        "Das Bild hat nun spitze Ecken. Wir können diese Ecken mit dem CSS Attribut <code>border-radius</code> abrunden.",
+        "Du kannst einen <code>border-radius</code> mit Pixeln deklarieren. Das beeinflusst die Rundung der Ecken. Füge dieses Attribut zu deiner <code>thick-green-border</code> Klasse hinzu und setze es auf 10 Pixel."
+      ],
       "title": "Add Rounded Corners with a Border Radius",
       "description": [
         "Your cat photo currently has sharp corners. We can round out those corners with a CSS property called <code>border-radius</code>.",
@@ -1064,29 +1075,27 @@
         "assert($(\"img\").hasClass(\"thick-green-border\"), 'message: Your image element should have the class \"thick-green-border\".');",
         "assert(parseInt($(\"img\").css(\"border-top-left-radius\")) > 8, 'message: Your image should have a border radius of <code>10px</code>');"
       ],
-      "challengeType": 0,
-      "nameEs": "Agrega esquinas redondeadas usando Border Radius",
+      "type": "waypoint",
+      "titleEs": "Agrega esquinas redondeadas usando Border Radius",
       "descriptionEs": [
         "Tu foto del gato tiene actualmente esquinas angulares. Podemos redondear esas esquinas con una propiedad CSS llamada <code>border-radius</code>.",
         "Puedes especificar <code>border-radius</code> usando pixeles. Dale a tu foto del gato un <code>border-radius</code> de <code>10px</code>.",
         "Nota: este desafío acepta múltiples soluciones. Por ejemplo, puedes agregar <code>border-radius</code> ya sea a la clase <code>.thick-green-border</code> o a la clase <code>.smaller-image</code>."
       ],
-      "nameDe": "Waypoint: Füge abgerundete Ecken mit Border Radius hinzu",
-      "descriptionDe": [
-        "Gib deinem Katzenbild einen <code>border-radius</code> von 10 Pixeln.",
-        "Das Bild hat nun spitze Ecken. Wir können diese Ecken mit dem CSS Attribut <code>border-radius</code> abrunden.",
-        "Du kannst einen <code>border-radius</code> mit Pixeln deklarieren. Das beeinflusst die Rundung der Ecken. Füge dieses Attribut zu deiner <code>thick-green-border</code> Klasse hinzu und setze es auf 10 Pixel."
-      ],
-     "namePtBR": "Insira Bordas Arredondadas com o Border Radius",
-     "descriptionPtBR": [
-        "Sua foto com o gato possui cantos pontiagudos. Podemos arredondar os cantos com uma propriedade CSS chamado <code>border-radius</code>.",
-        "Você pode especificar um <code>border-radius</code> com pixels. Adicione um <code>border-radius</code> de <code>10px</code> para a sua foto.",
-        "Nota: Este desafio permite várias soluções possíveis. Por exemplo, você pode adicionar o <code>border-radius</code> tanto para a classe <code>.thick-green-border</code> como para a classe <code>.smaller-image</code>."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Füge abgerundete Ecken mit Border Radius hinzu",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08815",
+      "descriptionPtBR": [
+        "Assim como pixels, você também pode usar o <code>border-radius</code> com porcentagens.",
+        "Dê para a sua foto de gato um <code>border-radius</code> de <code>50%</code>."
+      ],
+      "namePtBR": "Deixe as Imagens Circulares com o Border Radius",
+      "descriptionDe": [
+        "Gib deinem Katzenfoto einen <code>border-radius</code> von 50 %.",
+        "Du kannst einem <code>border-radius</code> neben Pixeln auch Prozentwerte zuweisen."
+      ],
       "title": "Make Circular Images with a Border Radius",
       "description": [
         "In addition to pixels, you can also specify a <code>border-radius</code> using a percentage.",
@@ -1131,26 +1140,32 @@
         "assert(parseInt($(\"img\").css(\"border-top-left-radius\")) > 48, 'message: Your image should have a border radius of <code>50&#37;</code>&#44; making it perfectly circular.');",
         "assert(code.match(/50%/g), 'message: Be sure to use a percentage instead of a pixel value.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Crea imágenes circulares usando Border Radius",
+      "type": "waypoint",
+      "titleEs": "Crea imágenes circulares usando Border Radius",
       "descriptionEs": [
         "Además de pixeles, puedes especificar un <code>border-radius</code> usando porcentajes.",
         "Dale a tu foto del gato un <code>border-radius</code> de <code>50%</code>."
       ],
-      "nameDe": "Waypoint: Erstelle runde Bilder mit einem Border Radius",
-      "descriptionDe": [
-        "Gib deinem Katzenfoto einen <code>border-radius</code> von 50 %.",
-        "Du kannst einem <code>border-radius</code> neben Pixeln auch Prozentwerte zuweisen."
-      ],
-     "namePtBR": "Deixe as Imagens Circulares com o Border Radius",
-     "descriptionPtBR": [
-        "Assim como pixels, você também pode usar o <code>border-radius</code> com porcentagens.",
-        "Dê para a sua foto de gato um <code>border-radius</code> de <code>50%</code>."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Erstelle runde Bilder mit einem Border Radius",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08816",
+      "descriptionPtBR": [
+        "Os elementos <code>a</code>, também conhecidos como elementos <code>âncora</code>, são utilizados para ligar conteúdo fora da página atual.",
+        "Aqui está um diagrama de um elemento <code>a</code>. Neste caso, o elemento <code>a</code> é utilizado no meio de um elemento de parágrafo, o que significa que o link externo aparecerá no meio de uma frase.",
+        "<a href=\"http://i.imgur.com/hviuZwe.png\" data-lightbox=\"img-enlarge\"> <img class=\"img-responsive\" title=\"Clique para ampliar\" alt=\"diagrama de como as tags de âncora se compõem com o texto, como na próxima linha\" src=\"http://i.imgur.com/hviuZwe.png\"></a>",
+        "Veja um exemplo:",
+        "<code>&#60;p&#62;Aqui está um &#60;a href=\"http://freecodecamp.com\"&#62; link ligado ao Free Code Camp&#60;/a&#62; para que você o siga.&#60;/p&#62;</code>",
+        "Crie um elemento <code>a</code> que esteja ligado ao site <code>http://freecatphotoapp.com</code> e tenha como <code>texto de âncora</code> \"fotos de gatos\"."
+      ],
+      "namePtBR": "Ligue Páginas Externas com o Elemento Âncora",
+      "descriptionDe": [
+        "Erstelle ein <code>a</code> Element oder \"Anker Element\", das auf http://freecatphotoapp.com verlinkt und den Link-Text \"cat photos\" oder \"anchor text\" beinhaltet.",
+        "So sieht ein <code>a</code> Element aus. In diesem Fall wird es innerhalb eines Paragraphen Elements verwendet. Das bedeutet dein Link wird innerhalb des Satzes erscheinen.",
+        "<img class=\"img-responsive\" alt=\"Ein Beispiel wie Anker Tags geschrieben werden.\" src=\"https://www.evernote.com/l/AHSaNaepx_lG9LhhPkVYmagcedpmAeITDsQB/image.png\">",
+        "Hier ist ein Beispiel: <code>&#60;p&#62;Hier ist ein &#60;a href=\"http://freecodecamp.com\"&#62; Link zum Free Code Camp&#60;/a&#62; für dich zum Folgen.&#60;/p&#62;</code>"
+      ],
       "title": "Link to External Pages with Anchor Elements",
       "description": [
         "<code>a</code> elements, also known as <code>anchor</code> elements, are used to link to content outside of the current page.",
@@ -1200,8 +1215,8 @@
         "assert(/http:\\/\\/freecatphotoapp\\.com/gi.test($(\"a\").attr(\"href\")), 'message: You need an <code>a</code> element that links to <code>http&#58;//freecatphotoapp.com</code>');",
         "assert(code.match(/<\\/a>/g) && code.match(/<\\/a>/g).length === code.match(/<a/g).length, 'message: Make sure your <code>a</code> element has a closing tag.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Enlaza páginas externas con elementos ancla",
+      "type": "waypoint",
+      "titleEs": "Enlaza páginas externas con elementos ancla",
       "descriptionEs": [
         "Los elementos <code>a</code>, también conocidos como elementos <code>ancla</code>, se utilizan para enlazar a contenido fuera de la página actual.",
         "Aquí está un diagrama de un elemento <code>a</code>. En este caso, el elemento <code>a</code> se utiliza en el medio de un elemento de párrafo, lo que significa que el enlace aparecerá en el medio de una frase. ",
@@ -1210,26 +1225,25 @@
         "<code>&#60;p&#62;Aquí está un &#60;a href=\"http://freecodecamp.com\"&#62; enlace a Free Code Camp&#60;/a&#62; para que lo sigas.&#60;/p&#62;</code>",
         "Crea un elemento <code>a</code> que se vincule a <code>http://freecatphotoapp.com</code> y tenga como <code>texto de ancla</code> \"fotos de gatos\"."
       ],
-      "nameDe": "Waypoint: Verlinke externe Seiten mit Anker Elementen",
-      "descriptionDe": [
-        "Erstelle ein <code>a</code> Element oder \"Anker Element\", das auf http://freecatphotoapp.com verlinkt und den Link-Text \"cat photos\" oder \"anchor text\" beinhaltet.",
-        "So sieht ein <code>a</code> Element aus. In diesem Fall wird es innerhalb eines Paragraphen Elements verwendet. Das bedeutet dein Link wird innerhalb des Satzes erscheinen.",
-        "<img class=\"img-responsive\" alt=\"Ein Beispiel wie Anker Tags geschrieben werden.\" src=\"https://www.evernote.com/l/AHSaNaepx_lG9LhhPkVYmagcedpmAeITDsQB/image.png\">",
-        "Hier ist ein Beispiel: <code>&#60;p&#62;Hier ist ein &#60;a href=\"http://freecodecamp.com\"&#62; Link zum Free Code Camp&#60;/a&#62; für dich zum Folgen.&#60;/p&#62;</code>"
-      ],
-     "namePtBR": "Ligue Páginas Externas com o Elemento Âncora",
-     "descriptionPtBR": [
-        "Os elementos <code>a</code>, também conhecidos como elementos <code>âncora</code>, são utilizados para ligar conteúdo fora da página atual.",
-        "Aqui está um diagrama de um elemento <code>a</code>. Neste caso, o elemento <code>a</code> é utilizado no meio de um elemento de parágrafo, o que significa que o link externo aparecerá no meio de uma frase.",
-        "<a href=\"http://i.imgur.com/hviuZwe.png\" data-lightbox=\"img-enlarge\"> <img class=\"img-responsive\" title=\"Clique para ampliar\" alt=\"diagrama de como as tags de âncora se compõem com o texto, como na próxima linha\" src=\"http://i.imgur.com/hviuZwe.png\"></a>",
-        "Veja um exemplo:",
-        "<code>&#60;p&#62;Aqui está um &#60;a href=\"http://freecodecamp.com\"&#62; link ligado ao Free Code Camp&#60;/a&#62; para que você o siga.&#60;/p&#62;</code>",
-        "Crie um elemento <code>a</code> que esteja ligado ao site <code>http://freecatphotoapp.com</code> e tenha como <code>texto de âncora</code> \"fotos de gatos\"."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Verlinke externe Seiten mit Anker Elementen",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aede08817",
+      "descriptionPtBR": [
+        "Outra vez, aqui está um diagrama de um elemento <code>a</code> para você usar como referência.",
+        "<a href=\"http://i.imgur.com/hviuZwe.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" title=\"Clique para ampliar\" alt=\"diagrama de como são as tags de âncora com o texto como na linha seguinte\" src=\"http://i.imgur.com/hviuZwe.png\"></a>",
+        "Veja um exemplo:",
+        "<code>&#60;p&#62;Este é um &#60;a href=\"http://freecodecamp.com\"&#62; link ligado ao Free Code Camp&#60;/a&#62; para que você o siga.&#60;/p&#62;</code>",
+        "<code>Aninhamento</code> significa ter um elemento no interior de outro elemento.",
+        "Agora, aninhe o elemento <code>a</code> existente dentro de um novo elemento <code>p</code> de forma que o parágrafo diga \"View more cat photos\", mas onde apenas \"cat photos\" seja um link, e o resto seja texto comum."
+      ],
+      "namePtBR": "Aninhe o Elemento Âncora no Interior de um Parágrafo",
+      "descriptionDe": [
+        "Jetzt umschließe dein <code>a</code> Element mit einem <code>p</code> Element und dem Text \"click here for cat photos\". Nur \"cat photos\" soll ein Link ein – der Rest normaler Text.",
+        "Hier ist nochmal ein Beispiel für ein <code>a</code> Element: <img class=\"img-responsive\" alt=\"Ein Beispiel wie Anker Tags geschrieben werden.\" src=\"https://www.evernote.com/l/AHSaNaepx_lG9LhhPkVYmagcedpmAeITDsQB/image.png\">",
+        "So könnte es aussehen: <code>&#60;p&#62;Hier ist ein &#60;a href=\"http://freecodecamp.com\"&#62; Link zum Free Code Camp&#60;/a&#62; für dich zum Folgen.&#60;/p&#62;</code>"
+      ],
       "title": "Nest an Anchor Element within a Paragraph",
       "description": [
         "Again, here's a diagram of an <code>a</code> element for your reference:",
@@ -1286,8 +1300,8 @@
         "assert(code.match(/<\\/p>/g) && code.match(/<p/g) && code.match(/<\\/p>/g).length === code.match(/<p/g).length, 'message: Make sure each of your <code>p</code> elements has a closing tag.');",
         "assert(code.match(/<\\/a>/g) && code.match(/<a/g) && code.match(/<\\/a>/g).length === code.match(/<a/g).length, 'message: Make sure each of your <code>a</code> elements has a closing tag.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Anida un elemento de ancla dentro de un párrafo",
+      "type": "waypoint",
+      "titleEs": "Anida un elemento de ancla dentro de un párrafo",
       "descriptionEs": [
         "Una vez más, aquí está un diagrama de un elemento <code>a</code> para tu referencia:",
         "<a href=\"http://i.imgur.com/hviuZwe.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" title=\"Pulse para ampliar\" alt=\"un diagrama de como se componen las etiquetas de anclaje con el texto como en la siguiente línea\" src=\"http://i.imgur.com/hviuZwe.png\"></a>",
@@ -1296,25 +1310,23 @@
         "<code>Anidamiento</code> simplemente significa poner un elemento dentro de otro elemento.",
         "Ahora anida el elemento <code>a</code> existente dentro de un nuevo elemento <code>p</code> (justo después del elemento <code>h2</code> que ya tienes) de tal forma que el párrafo que lo rodee diga \"View more cat photos\", pero que sólo \"cat photos\" sea un enlace, y el resto sea texto plano ."
       ],
-      "nameDe": "Waypoint Umschließe ein Anker Element mit einem Paragraphen",
-      "descriptionDe": [
-        "Jetzt umschließe dein <code>a</code> Element mit einem <code>p</code> Element und dem Text \"click here for cat photos\". Nur \"cat photos\" soll ein Link ein – der Rest normaler Text.",
-        "Hier ist nochmal ein Beispiel für ein <code>a</code> Element: <img class=\"img-responsive\" alt=\"Ein Beispiel wie Anker Tags geschrieben werden.\" src=\"https://www.evernote.com/l/AHSaNaepx_lG9LhhPkVYmagcedpmAeITDsQB/image.png\">",
-        "So könnte es aussehen: <code>&#60;p&#62;Hier ist ein &#60;a href=\"http://freecodecamp.com\"&#62; Link zum Free Code Camp&#60;/a&#62; für dich zum Folgen.&#60;/p&#62;</code>"
-      ],
-     "namePtBR": "Aninhe o Elemento Âncora no Interior de um Parágrafo",
-     "descriptionPtBR": [
-        "Outra vez, aqui está um diagrama de um elemento <code>a</code> para você usar como referência.",
-        "<a href=\"http://i.imgur.com/hviuZwe.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" title=\"Clique para ampliar\" alt=\"diagrama de como são as tags de âncora com o texto como na linha seguinte\" src=\"http://i.imgur.com/hviuZwe.png\"></a>",
-        "Veja um exemplo:",
-        "<code>&#60;p&#62;Este é um &#60;a href=\"http://freecodecamp.com\"&#62; link ligado ao Free Code Camp&#60;/a&#62; para que você o siga.&#60;/p&#62;</code>",
-        "<code>Aninhamento</code> significa ter um elemento no interior de outro elemento.",
-        "Agora, aninhe o elemento <code>a</code> existente dentro de um novo elemento <code>p</code> de forma que o parágrafo diga \"View more cat photos\", mas onde apenas \"cat photos\" seja um link, e o resto seja texto comum."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint Umschließe ein Anker Element mit einem Paragraphen",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08817",
+      "descriptionPtBR": [
+        "As vezes você pode querer adicionar elementos <code>a</code> em sua página web antes de saber o link que as ligará.",
+        "Isso também é útil quando você desejar mudar o comportamento de um link utilizando <code>jQuery</code>, o que vamos aprender mais adiante.",
+        "Substitua o atributo <code>href</code> de seu elemento <code>a</code> por um <code>#</code>, também conhecido como símbolo de <em>hash</em> ou hashtag. Isso o transformará em um link inativo."
+      ],
+      "namePtBR": "Crie Links Inativos com o Símbolo Cerquilha",
+      "descriptionDe": [
+        "Nutze das Hash Symbol (#) um deine <code>a</code> Elemente zu toten Links zu machen.",
+        "Manchmal wirst du <code>a</code> Elemente zu deiner Website hinzufügen möchten, ohne dass du das Ziel des Links kennst.",
+        "Das ist auch nützlich, wenn du die Funktion eines Links mit <code>jQuery</code> verändern willst. Das werden wir noch behandeln.",
+        "Ersetze den Inhalt des <code>href</code> Attributs deines <code>a</code> Elements mit einem Hash Symbol um einen toten Link zu erzeugen."
+      ],
       "title": "Make Dead Links using the Hash Symbol",
       "description": [
         "Sometimes you want to add <code>a</code> elements to your website before you know where they will link.",
@@ -1361,30 +1373,32 @@
       "tests": [
         "assert($(\"a\").attr(\"href\") === \"#\", 'message: Your <code>a</code> element should be a dead link with a <code>href</code> attribute set to \"#\".');"
       ],
-      "challengeType": 0,
-      "nameEs": "Haz vínculos muertos utilizando el símbolo de numero",
+      "type": "waypoint",
+      "titleEs": "Haz vínculos muertos utilizando el símbolo de numero",
       "descriptionEs": [
         "A veces quieres agregar elementos <code>a</code> a tu sitio web antes de saber qué enlazarán.",
         "Esto también es útil cuando estás cambiando el comportamiento de un enlace usando <code>jQuery</code>, lo cual aprenderemos más adelante.",
         "Reemplaza el atributo <code>href</code> de tu elemento <code>a</code> con un <code>#</code>, también conocido como un símbolo de número o de <em>hash</em>, para convertirlo en un vínculo muerto."
       ],
-      "nameDe": "Waypoint: Erstelle tote Links mit dem Hash Symbol",
-      "descriptionDe": [
-        "Nutze das Hash Symbol (#) um deine <code>a</code> Elemente zu toten Links zu machen.",
-        "Manchmal wirst du <code>a</code> Elemente zu deiner Website hinzufügen möchten, ohne dass du das Ziel des Links kennst.",
-        "Das ist auch nützlich, wenn du die Funktion eines Links mit <code>jQuery</code> verändern willst. Das werden wir noch behandeln.",
-        "Ersetze den Inhalt des <code>href</code> Attributs deines <code>a</code> Elements mit einem Hash Symbol um einen toten Link zu erzeugen."
-      ],
-     "namePtBR": "Crie Links Inativos com o Símbolo Cerquilha",
-     "descriptionPtBR": [
-        "As vezes você pode querer adicionar elementos <code>a</code> em sua página web antes de saber o link que as ligará.",
-        "Isso também é útil quando você desejar mudar o comportamento de um link utilizando <code>jQuery</code>, o que vamos aprender mais adiante.",
-        "Substitua o atributo <code>href</code> de seu elemento <code>a</code> por um <code>#</code>, também conhecido como símbolo de <em>hash</em> ou hashtag. Isso o transformará em um link inativo."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Erstelle tote Links mit dem Hash Symbol",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08820",
+      "descriptionPtBR": [
+        "Você pode transformar elementos em links ao aninhá-los com um elemento <code>a</code>.",
+        "Aninhe sua imagem dentro de um elemento <code>a</code>. Temos aqui um exemplo.",
+        "<code>&#60;a href=\"#\"&#62;&#60;img src=\"http://bit.ly/fcc-running-cats\"/&#62;&#60;/a&#62;</code>",
+        "Lembre de usar <code>#</code> como atributo <code>href</code> de seu elemento <code>a</code> para tornar o link inativo."
+      ],
+      "namePtBR": "Transforme uma Imagem em um Link",
+      "descriptionDe": [
+        "Umschließe dein <code>img</code> Element mit einem <code>a</code> Element als toten Link.",
+        "Du kannst jedes Element in einen Link verwandeln, indem du es mit einem <code>a</code> Element umschließt.",
+        "Umschließe nun dein Bild mit einem <code>a</code> Element. Hier ist ein Beispiel: <code>&#60;a href=\"#\"&#62;&#60;img src=\"http://bit.ly/fcc-running-cats\"/&#62;&#60;/a&#62;</code>",
+        "Vergewissere dich, dass du ein Hash Symbol (#) innerhalb des <code>href</code> Attributs des <code>a</code> Elements nutzt, um daraus einen toten Link zu machen.",
+        "Sobald du das gemacht hast, kannst du mit der Maus über dein Bild fahren. Der normale Mauszeiger sollte nun zu einer Hand für Links werden. Das Bild ist jetzt ein Link."
+      ],
       "title": "Turn an Image into a Link",
       "description": [
         "You can make elements into links by nesting them within an <code>a</code> element.",
@@ -1435,8 +1449,8 @@
         "assert(new RegExp(\"#\").test($(\"a\").children(\"img\").parent().attr(\"href\")), 'message: Your <code>a</code> element should be a dead link with a <code>href</code> attribute set to <code>#</code>.');",
         "assert(code.match(/<\\/a>/g) && code.match(/<a/g) && code.match(/<\\/a>/g).length === code.match(/<a/g).length, 'message: Make sure each of your <code>a</code> elements has a closing tag.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Convierte una imagen en un vínculo",
+      "type": "waypoint",
+      "titleEs": "Convierte una imagen en un vínculo",
       "descriptionEs": [
         "Puedes convertir elementos en enlaces al anidarlos dentro de un elemento <code>a</code>.",
         "Anida tu imagen dentro de un elemento <code>a</code>. He aquí un ejemplo: ",
@@ -1444,25 +1458,26 @@
         "Recuerda usar <code>#</code> como atributo <code>href</code> de tu elemento <code>a</code> con el fin de convertirlo en un vínculo muerto.",
         "Una vez hayas hecho esto, coloca el cursor sobre tu imagen. El puntero normal de tu cursor debería convertirse en el puntero de enlace. La foto es ahora un vínculo ."
       ],
-      "nameDe": "Waypoint: Verlinke ein Bild",
-      "descriptionDe": [
-        "Umschließe dein <code>img</code> Element mit einem <code>a</code> Element als toten Link.",
-        "Du kannst jedes Element in einen Link verwandeln, indem du es mit einem <code>a</code> Element umschließt.",
-        "Umschließe nun dein Bild mit einem <code>a</code> Element. Hier ist ein Beispiel: <code>&#60;a href=\"#\"&#62;&#60;img src=\"http://bit.ly/fcc-running-cats\"/&#62;&#60;/a&#62;</code>",
-        "Vergewissere dich, dass du ein Hash Symbol (#) innerhalb des <code>href</code> Attributs des <code>a</code> Elements nutzt, um daraus einen toten Link zu machen.",
-        "Sobald du das gemacht hast, kannst du mit der Maus über dein Bild fahren. Der normale Mauszeiger sollte nun zu einer Hand für Links werden. Das Bild ist jetzt ein Link."
-      ],
-     "namePtBR": "Transforme uma Imagem em um Link",
-     "descriptionPtBR": [
-        "Você pode transformar elementos em links ao aninhá-los com um elemento <code>a</code>.",
-        "Aninhe sua imagem dentro de um elemento <code>a</code>. Temos aqui um exemplo.",
-        "<code>&#60;a href=\"#\"&#62;&#60;img src=\"http://bit.ly/fcc-running-cats\"/&#62;&#60;/a&#62;</code>",
-        "Lembre de usar <code>#</code> como atributo <code>href</code> de seu elemento <code>a</code> para tornar o link inativo."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Verlinke ein Bild",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08818",
+      "descriptionPtBR": [
+        "Os atributos <code>alt</code>, também conhecidos como <code>texto alternativo</code>, serão apresentados caso se por qualquer motivo o navegador não possa mostrar a imagem. Os atributos <code>alt</code> também são importantes para que usuários cegos ou com alguma deficiência visual possam entender o que uma imagem retrata. Além disso, os motores de busca também examinam os atributos <code>alt</code>.",
+        "Em resumo: Todas as imagem devem ter um atributo <code>alt</code>!",
+        "Você pode adicionar um atributo <code>alt</code> já no elemento <code>img</code> assim:",
+        "<code>&#60img src=\"www.your-image-source.com/your-image.jpg\" alt=\"seu texto alternativo\"&#62</code>",
+        "Adicione um atributo <code>alt</code> com o texto <code>A cute orange cat lying on its back</code> para a nossa foto com o gato."
+      ],
+      "namePtBR": "Dê Acessibilidade a uma Imagem com Texto Alternativo",
+      "descriptionDe": [
+        "Füge zu unserem Katzen-Bild ein <code>alt</code> Attribut mit dem Text \"A cute orange cat lying on its back\" hinzu.",
+        "<code>alt</code> Attribute – auch \"Alt Text\" genannt – werden vom Browser angezeigt, wenn sie ein Bild nicht laden können. Für blinde oder visuell eingeschränkte Menschen sind sie ebenfalls wichtig um zu verstehen, was ein Bild darstellt. Zudem werden diese Texte von Suchmaschinen genutzt.",
+        "Kurz gesagt: Jedes Bild sollte ein <code>alt</code> Attribut beinhalten!",
+        "<code>alt</code> Attribute sind nützlich um Personen – und Web Crawlers wie Google – zu sagen was in einem Foto abgebildet wird. Das ist extrem wichtig, damit blinde oder visuell eingeschränkte Menschen den Inhalt der Website verstehen.",
+        "Du kannst das <code>alt</code> Attribut direkt in das Img Element einfügen: <code>&#60img src=\"www.bild-quelle.com/bild.jpg\" alt=\"Dein Alt Text.\"/&#62</code>"
+      ],
       "title": "Add Alt Text to an Image for Accessibility",
       "description": [
         "<code>alt</code> attributes, also known as <code>alt text</code>, are what browsers will display if they fail to load the image. <code>alt</code> attributes are also important for blind or visually impaired users to understand what an image portrays. And search engines also look at <code>alt</code> attributes.",
@@ -1511,8 +1526,8 @@
       "tests": [
         "assert($(\"img\").filter(function(){ return /cat/gi.test(this.alt) }).length > 0, 'message: Your image element should have an <code>alt</code> attribute set to <code>A cute orange cat lying on its back</code>');"
       ],
-      "challengeType": 0,
-      "nameEs": "Agrega texto alternativo a una imagen para dar Accesibilidad",
+      "type": "waypoint",
+      "titleEs": "Agrega texto alternativo a una imagen para dar Accesibilidad",
       "descriptionEs": [
         "Los atributos <code>alt</code> también conocidos como <code>texto alternativo</code>, son lo que se presentarán en caso que el navegador no pueda mostrar la imagen. Los atributos <code>alt</code> también son importantes para los usuarios ciegos o con deficiencia visual para entender lo que una imagen retrata. Los motores de búsqueda también examinan los atributos <code>alt</code>. ",
         "En resumen, ¡cada imagen debe tener un atributo <code>alt</code>!",
@@ -1520,26 +1535,29 @@
         "<code>&#60img src=\"www.fuente-de-tu-imagen.com/tu-imagen.jpg\" alt=\"tu texto alternativo\"&#62</code>",
         "Añade un atributo <code>alt</code> con el texto <code>A cute orange cat lying on its back</code> a nuestra foto del gato."
       ],
-      "nameDe": "Waypoint: Füge Alt Text für mehr Barrierefreiheit hinzu",
-      "descriptionDe": [
-        "Füge zu unserem Katzen-Bild ein <code>alt</code> Attribut mit dem Text \"A cute orange cat lying on its back\" hinzu.",
-        "<code>alt</code> Attribute – auch \"Alt Text\" genannt – werden vom Browser angezeigt, wenn sie ein Bild nicht laden können. Für blinde oder visuell eingeschränkte Menschen sind sie ebenfalls wichtig um zu verstehen, was ein Bild darstellt. Zudem werden diese Texte von Suchmaschinen genutzt.",
-        "Kurz gesagt: Jedes Bild sollte ein <code>alt</code> Attribut beinhalten!",
-        "<code>alt</code> Attribute sind nützlich um Personen – und Web Crawlers wie Google – zu sagen was in einem Foto abgebildet wird. Das ist extrem wichtig, damit blinde oder visuell eingeschränkte Menschen den Inhalt der Website verstehen.",
-        "Du kannst das <code>alt</code> Attribut direkt in das Img Element einfügen: <code>&#60img src=\"www.bild-quelle.com/bild.jpg\" alt=\"Dein Alt Text.\"/&#62</code>"
-      ],
-     "namePtBR": "Dê Acessibilidade a uma Imagem com Texto Alternativo",
-     "descriptionPtBR": [
-        "Os atributos <code>alt</code>, também conhecidos como <code>texto alternativo</code>, serão apresentados caso se por qualquer motivo o navegador não possa mostrar a imagem. Os atributos <code>alt</code> também são importantes para que usuários cegos ou com alguma deficiência visual possam entender o que uma imagem retrata. Além disso, os motores de busca também examinam os atributos <code>alt</code>.",
-        "Em resumo: Todas as imagem devem ter um atributo <code>alt</code>!",
-        "Você pode adicionar um atributo <code>alt</code> já no elemento <code>img</code> assim:",
-        "<code>&#60img src=\"www.your-image-source.com/your-image.jpg\" alt=\"seu texto alternativo\"&#62</code>",
-        "Adicione um atributo <code>alt</code> com o texto <code>A cute orange cat lying on its back</code> para a nossa foto com o gato."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Füge Alt Text für mehr Barrierefreiheit hinzu",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08827",
+      "descriptionPtBR": [
+        "O HTML possui um elemento especial para a criação de <code>listas não ordenadas</code>, ou listas com marcadores.",
+        "As listas não ordenadas iniciam com um elemento <code>&#60;ul&#62;</code>. Logo após, possuem uma série de elementos <code>&#60;li&#62;.</code>",
+        "Por exemplo:",
+        "<code>&#60;ul&#62;</code>",
+        "&nbsp;&nbsp;<code>&#60;li&#62;leite&#60;/li&#62;</code>",
+        "&nbsp;&nbsp;<code>&#60;li&#62;queijo&#60;/li&#62;</code>",
+        "<code>&#60;/ul&#62;</code>",
+        "Isso criará uma lista com marcadores que tem como elementos \"leite\" e \"queijo\".",
+        "Apague os dois últimos elementos <code>p</code> e no final da página crie uma lista não ordenada com três coisas que os gatos adoram."
+      ],
+      "namePtBR": "Crie uma Lista Não Ordenada com Marcadores",
+      "descriptionDe": [
+        "Ersetze deine <code>p</code> Elemente mit drei Dingen, die Katzen lieben – in einer ungeordneten Liste.",
+        "HTML hat ein spezielles Element zum Erstellen von ungeordneten Listen.",
+        "ungeordnete Listen starten mit einem <code>&#60;ul&#62;</code> Element. Dann beinhalten sie eine gewisse Anzahl an <code>&#60;li&#62;</code> Elementen.",
+        "Als Beispiel: <code>&#60;ul&#62;&#60;li&#62;Milch&#60;/li&#62;&#60;li&#62;Käse&#60;/li&#62;&#60;/ul&#62;</code> würde eine ungeordnete Liste für \"Milch\" und \"Käse\" erstellen."
+      ],
       "title": "Create a Bulleted Unordered List",
       "description": [
         "HTML has a special element for creating <code>unordered lists</code>, or bullet point-style lists.",
@@ -1592,39 +1610,39 @@
         "assert(code.match(/<\\/ul>/gi) && code.match(/<ul/gi) && code.match(/<\\/ul>/gi).length === code.match(/<ul/gi).length, 'message: Make sure your <code>ul</code> element has a closing tag.');",
         "assert(code.match(/<\\/li>/gi) && code.match(/<li[\\s>]/gi) && code.match(/<\\/li>/gi).length === code.match(/<li[\\s>]/gi).length, 'message: Make sure your <code>li</code> elements have closing tags.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Crea una lista no ordenada con viñetas",
-      "descriptionEs": [
-        "HTML tiene un elemento especial para la creación de <code>listas no ordenadas</code>, o listas con estilo viñeta.",
-        "Las listas no ordenadas comienzan con un elemento <code>&#60;ul&#62;</code>. A continuación contienen una cantidad de elementos <code>&#60;li&#62;.</code>",
-        "Por ejemplo: ",
-        "<blockquote>&#60;ul&#62;<br>&nbsp;&nbsp;&#60;li&#62;leche&#60;/li&#62;<br>&nbsp;&nbsp;&#60;li&#62;queso&#60;/li&#62;<br>&#60;/ul&#62;</blockquote>",
-        "creará una lista con viñetas y con elementos \"leche\" y \"queso\".",
-        "Elimina los dos últimos elementos <code>p</code> y en la parte inferior de la página crea una lista no ordenada de tres cosas que los gatos aman."
-      ],
-      "nameDe": "Waypoint: Erstelle eine ungeordnete Liste",
-      "descriptionDe": [
-        "Ersetze deine <code>p</code> Elemente mit drei Dingen, die Katzen lieben – in einer ungeordneten Liste.",
-        "HTML hat ein spezielles Element zum Erstellen von ungeordneten Listen.",
-        "ungeordnete Listen starten mit einem <code>&#60;ul&#62;</code> Element. Dann beinhalten sie eine gewisse Anzahl an <code>&#60;li&#62;</code> Elementen.",
-        "Als Beispiel: <code>&#60;ul&#62;&#60;li&#62;Milch&#60;/li&#62;&#60;li&#62;Käse&#60;/li&#62;&#60;/ul&#62;</code> würde eine ungeordnete Liste für \"Milch\" und \"Käse\" erstellen."
-      ],
-     "namePtBR": "Crie uma Lista Não Ordenada com Marcadores",
-     "descriptionPtBR": [
-        "O HTML possui um elemento especial para a criação de <code>listas não ordenadas</code>, ou listas com marcadores.",
-        "As listas não ordenadas iniciam com um elemento <code>&#60;ul&#62;</code>. Logo após, possuem uma série de elementos <code>&#60;li&#62;.</code>",
-        "Por exemplo:",
-        "<code>&#60;ul&#62;</code>",
-        "&nbsp;&nbsp;<code>&#60;li&#62;leite&#60;/li&#62;</code>",
-        "&nbsp;&nbsp;<code>&#60;li&#62;queijo&#60;/li&#62;</code>",
-        "<code>&#60;/ul&#62;</code>",
-        "Isso criará uma lista com marcadores que tem como elementos \"leite\" e \"queijo\".",
-        "Apague os dois últimos elementos <code>p</code> e no final da página crie uma lista não ordenada com três coisas que os gatos adoram."
+      "type": "waypoint",
+      "titleEs": "Crea una lista no ordenada con viñetas",
+      "descriptionEs": [
+        "HTML tiene un elemento especial para la creación de <code>listas no ordenadas</code>, o listas con estilo viñeta.",
+        "Las listas no ordenadas comienzan con un elemento <code>&#60;ul&#62;</code>. A continuación contienen una cantidad de elementos <code>&#60;li&#62;.</code>",
+        "Por ejemplo: ",
+        "<blockquote>&#60;ul&#62;<br>&nbsp;&nbsp;&#60;li&#62;leche&#60;/li&#62;<br>&nbsp;&nbsp;&#60;li&#62;queso&#60;/li&#62;<br>&#60;/ul&#62;</blockquote>",
+        "creará una lista con viñetas y con elementos \"leche\" y \"queso\".",
+        "Elimina los dos últimos elementos <code>p</code> y en la parte inferior de la página crea una lista no ordenada de tres cosas que los gatos aman."
       ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Erstelle eine ungeordnete Liste",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08828",
+      "descriptionPtBR": [
+        "O HTML possui um elemento especial para a criação de <code>listas ordenadas</code>, ou listas numeradas.",
+        "As listas ordenadas iniciam com um elemento <code>&#60;ol&#62;</code>. Logo após, contém uma série de elementos <code>&#60;li&#62;.</code>",
+        "Por exemplo:",
+        "<code>&#60;ol&#62;</code>",
+        "&nbsp;&nbsp;<code>&#60;li&#62;Garfield&#60;/li&#62;</code>",
+        "&nbsp;&nbsp;<code>&#60;li&#62;Sylvester&#60;/li&#62;</code>",
+        "<code>&#60;/ol&#62;</code>",
+        "Isso criará uma lista numerada com \"Garfield\" e \"Sylvester\".",
+        "Crie uma lista ordenada com as três coisas que os gatos mais odeiam."
+      ],
+      "namePtBR": "Crie uma Lista Ordenada",
+      "descriptionDe": [
+        "Erstelle eine geordnete Liste von den drei Dingen, die Katzen am meisten hassen.",
+        "HTML beinhaltet ein spezielles Element für geordnete Listen.",
+        "Geordnete Listen starten mit einem <code>&#60;ol&#62;</code> Element. Dann enthalten sie eine gewisse Anzahl an <code>&#60;li&#62;</code> Elementen.",
+        "Als beispiel: <code>&#60;ol&#62;&#60;li&#62;hydrogen&#60;/li&#62;&#60;li&#62;Helium&#60;/li&#62;&#60;/ol&#62;</code> würde eine nummerierte Liste aus \"Hydrogen\" und \"Helium\" erstellen."
+      ],
       "title": "Create an Ordered List",
       "description": [
         "HTML has a special element for creating <code>ordered lists</code>, or numbered-style lists.",
@@ -1685,8 +1703,8 @@
         "assert(code.match(/<\\/ol>/g) && code.match(/<\\/ol>/g).length === code.match(/<ol>/g).length, 'message: Make sure your <code>ol</code> element has a closing tag.');",
         "assert(code.match(/<\\/li>/g) && code.match(/<li>/g) && code.match(/<\\/li>/g).length === code.match(/<li>/g).length, 'message: Make sure your <code>li</code> element has a closing tag.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Crear una lista ordenada",
+      "type": "waypoint",
+      "titleEs": "Crear una lista ordenada",
       "descriptionEs": [
         "HTML tiene un elemento especial para la creación de <code>listas ordenadas</code>, o listas de estilo numerado.",
         "Las listas ordenadas comienzan con un elemento <code>&#60;ol&#62;</code>. Luego contienen un número de elementos <code>&#60;li&#62;.</code>",
@@ -1695,29 +1713,25 @@
         "creará una lista numerada con \"Garfield\" y \"Sylvester\".",
         "Crea una lista ordenada de los 3 cosas que más odian los gatos."
       ],
-      "nameDe": "Waypoint: Erstelle eine geordnete Liste",
-      "descriptionDe": [
-        "Erstelle eine geordnete Liste von den drei Dingen, die Katzen am meisten hassen.",
-        "HTML beinhaltet ein spezielles Element für geordnete Listen.",
-        "Geordnete Listen starten mit einem <code>&#60;ol&#62;</code> Element. Dann enthalten sie eine gewisse Anzahl an <code>&#60;li&#62;</code> Elementen.",
-        "Als beispiel: <code>&#60;ol&#62;&#60;li&#62;hydrogen&#60;/li&#62;&#60;li&#62;Helium&#60;/li&#62;&#60;/ol&#62;</code> würde eine nummerierte Liste aus \"Hydrogen\" und \"Helium\" erstellen."
-      ],
-     "namePtBR": "Crie uma Lista Ordenada",
-     "descriptionPtBR": [
-        "O HTML possui um elemento especial para a criação de <code>listas ordenadas</code>, ou listas numeradas.",
-        "As listas ordenadas iniciam com um elemento <code>&#60;ol&#62;</code>. Logo após, contém uma série de elementos <code>&#60;li&#62;.</code>",
-        "Por exemplo:",
-        "<code>&#60;ol&#62;</code>",
-        "&nbsp;&nbsp;<code>&#60;li&#62;Garfield&#60;/li&#62;</code>",
-        "&nbsp;&nbsp;<code>&#60;li&#62;Sylvester&#60;/li&#62;</code>",
-        "<code>&#60;/ol&#62;</code>",
-        "Isso criará uma lista numerada com \"Garfield\" e \"Sylvester\".",
-        "Crie uma lista ordenada com as três coisas que os gatos mais odeiam."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Erstelle eine geordnete Liste",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08829",
+      "descriptionPtBR": [
+        "Agora vamos criar um formulário web.",
+        "Os campos de texto são uma forma conveniente de obter uma resposta do usuário.",
+        "Você pode criar um assim:",
+        "<code>&#60;input type=\"text\"&#62;</code>",
+        "Note que os elementos <code>input</code> são de fechamento automático.",
+        "Crie um elemento <code>input</code> de tipo <code>text</code> abaixo de suas listas."
+      ],
+      "namePtBR": "Crie um Campo de Texto",
+      "descriptionDe": [
+        "Nun erstellen wir ein Web Formular. Erstelle ein Textfeld unter deinen Listen.",
+        "Eingabefelder sind ein guter Weg, um Daten von Nutzern zu erhalten.",
+        "So kannst du eines erstellen: <code>&#60;input type=\"text\"&#62;</code>. Beachte, dass <code>input</code> Elemente selbstschließend sind."
+      ],
       "title": "Create a Text Field",
       "description": [
         "Now let's create a web form.",
@@ -1777,8 +1791,8 @@
       "tests": [
         "assert($(\"input[type=text]\").length > 0, 'message: Your app should have an <code>input</code> element of type <code>text</code>.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Crea un campo de texto",
+      "type": "waypoint",
+      "titleEs": "Crea un campo de texto",
       "descriptionEs": [
         "Ahora vamos a crear un formulario web.",
         "Los campos de texto son una manera conveniente de obtener retroalimentación de tu usuario.",
@@ -1787,25 +1801,23 @@
         "Ten en cuenta que los elementos <code>input</code> son de cierre automático.",
         "Crea un elemento <code>input</code> de tipo <code>text</code> debajo de tus listas."
       ],
-      "nameDe": "Waypoint: Erstelle ein Textfeld",
-      "descriptionDe": [
-        "Nun erstellen wir ein Web Formular. Erstelle ein Textfeld unter deinen Listen.",
-        "Eingabefelder sind ein guter Weg, um Daten von Nutzern zu erhalten.",
-        "So kannst du eines erstellen: <code>&#60;input type=\"text\"&#62;</code>. Beachte, dass <code>input</code> Elemente selbstschließend sind."
-      ],
-     "namePtBR": "Crie um Campo de Texto",
-     "descriptionPtBR": [
-        "Agora vamos criar um formulário web.",
-        "Os campos de texto são uma forma conveniente de obter uma resposta do usuário.",
-        "Você pode criar um assim:",
-        "<code>&#60;input type=\"text\"&#62;</code>",
-        "Note que os elementos <code>input</code> são de fechamento automático.",
-        "Crie um elemento <code>input</code> de tipo <code>text</code> abaixo de suas listas."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Erstelle ein Textfeld",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08830",
+      "descriptionPtBR": [
+        "O texto indicativo é o que aparece em um campo de texto antes que um usuário tenha escrito algo.",
+        "Você pode criar um texto indicativo assim:",
+        "<code>&#60;input type=\"text\" placeholder=\"isso é um texto indicativo\"&#62;</code>",
+        "Estabeleça o valor do <code>texto indicativo</code> do seu campo de texto como \"cat photo URL\"."
+      ],
+      "namePtBR": "Adicione Texto Indicativo a um Campo de Texto",
+      "descriptionDe": [
+        "Setze bei deinem <code>input</code> Element den Wert für <code>placeholder</code> auf \"cat photo URL\".",
+        "Platzhalter erscheinen in <code>input</code> Feldern, bevor der Nutzer etwas eingibt.",
+        "Du kannst Platzhalter auf folgende Weise erstellen: <code>&#60;input type=\"text\" placeholder=\"Das ist ein Platzhalter.\"&#62;</code>"
+      ],
       "title": "Add Placeholder Text to a Text Field",
       "description": [
         "Your placeholder text is what appears in your text <code>input</code> before your user has input anything.",
@@ -1866,31 +1878,31 @@
         "assert($(\"input\") && $(\"input\").attr(\"placeholder\") && $(\"input\").attr(\"placeholder\").match(/cat\\s+photo\\s+URL/gi), 'message: Set the value of your placeholder attribute to \"cat photo URL\".');",
         "assert($(\"input[type=text]\").length > 0 && code.match(/URL\\s*[\"\\']\\s*\\/?>/gi), 'message: The finished <code>input</code> element should have valid syntax.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Agrega un texto de relleno a un campo de texto",
+      "type": "waypoint",
+      "titleEs": "Agrega un texto de relleno a un campo de texto",
       "descriptionEs": [
         "El texto de relleno es el que aparece en un campo de texto antes de que un usuario haya ingresado datos.",
         "Puedes crear un texto de relleno de esta manera:",
         "<code>&#60;input type=\"text\" placeholder=\"este es un texto de relleno\"&#62;</code>",
         "Establece el valor del <code>texto de relleno</code> de tu campo de texto como \"cat photo URL\"."
       ],
-      "nameDe": "Waypoint: Füge Platzhalter zu einem Textfeld hinzu",
-      "descriptionDe": [
-        "Setze bei deinem <code>input</code> Element den Wert für <code>placeholder</code> auf \"cat photo URL\".",
-        "Platzhalter erscheinen in <code>input</code> Feldern, bevor der Nutzer etwas eingibt.",
-        "Du kannst Platzhalter auf folgende Weise erstellen: <code>&#60;input type=\"text\" placeholder=\"Das ist ein Platzhalter.\"&#62;</code>"
-      ],
-     "namePtBR": "Adicione Texto Indicativo a um Campo de Texto",
-     "descriptionPtBR": [
-        "O texto indicativo é o que aparece em um campo de texto antes que um usuário tenha escrito algo.",
-        "Você pode criar um texto indicativo assim:",
-        "<code>&#60;input type=\"text\" placeholder=\"isso é um texto indicativo\"&#62;</code>",
-        "Estabeleça o valor do <code>texto indicativo</code> do seu campo de texto como \"cat photo URL\"."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Füge Platzhalter zu einem Textfeld hinzu",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aede08830",
+      "descriptionPtBR": [
+        "É possível construir formulários web que realmente enviem dados a um servidor utilizando nada além de HTML puro. Você pode fazer isso especificando uma ação em seu elemento <code>form</code>.",
+        "Por exemplo:",
+        "<code>&#60;form action=\"/url-para-onde-você-quer-enviar-os-dados-do-formulário\"&#62;&#60;/form&#62;</code>",
+        "Aninhe seu campo de texto em um elemento <code>form</code>. Adicione o atributo <code>action=\"/submit-cat-photo\"</code> para este elemento de formulário."
+      ],
+      "namePtBR": "Crie um Elemento de Formulário",
+      "descriptionDe": [
+        "Umschließe dein Textfeld mit einem <code>form</code> Element. Füge anschließend das Attribut <code>action=\"/submit-cat-photo\"</code> hinzu.",
+        "Du kannst Web Formulare bauen, die Daten zu einem Server übertragen – und das nur mit HTML. Das wird möglich, indem du eine Aktion für dein <code>form</code> Element bestimmst.",
+        "Zum Beispiel: <code>&#60;form action=\"/url-wohin-du-deine-formular-daten-senden-willst\"&#62;&#60;/form&#62;</code>"
+      ],
       "title": "Create a Form Element",
       "description": [
         "You can build web forms that actually submit data to a server using nothing more than pure HTML. You can do this by specifying an action on your <code>form</code> element.",
@@ -1951,31 +1963,31 @@
         "assert($(\"form\").attr(\"action\") === \"/submit-cat-photo\", 'message: Make sure your <code>form</code> has an <code>action</code> attribute which is set to <code>/submit-cat-photo</code>');",
         "assert(code.match(/<\\/form>/g) && code.match(/<form/g) && code.match(/<\\/form>/g).length === code.match(/<form/g).length, 'message: Make sure your <code>form</code> element has a closing tag.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Crea un elemento de formulario",
+      "type": "waypoint",
+      "titleEs": "Crea un elemento de formulario",
       "descriptionEs": [
         "Puedes construir formularios web que realmente envíen datos a un servidor usando nada más que HTML puro. Puedes hacerlo especificando una acción en tu elemento <code>form</code>.",
         "Por ejemplo:",
         "<code>&#60;form action=\"/url-al-que-quieres-enviar-los-datos-del-formulario\"&#62;&#60;/form&#62;</code>",
         "Anida tu campo de texto en un elemento <code>form</code>. Agrega el atributo <code>action=\"/submit-cat-photo\"</code> a este elemento de formulario."
       ],
-      "nameDe": "Waypoint: Erstelle ein Formular",
-      "descriptionDe": [
-        "Umschließe dein Textfeld mit einem <code>form</code> Element. Füge anschließend das Attribut <code>action=\"/submit-cat-photo\"</code> hinzu.",
-        "Du kannst Web Formulare bauen, die Daten zu einem Server übertragen – und das nur mit HTML. Das wird möglich, indem du eine Aktion für dein <code>form</code> Element bestimmst.",
-        "Zum Beispiel: <code>&#60;form action=\"/url-wohin-du-deine-formular-daten-senden-willst\"&#62;&#60;/form&#62;</code>"
-      ],
-     "namePtBR": "Crie um Elemento de Formulário",
-     "descriptionPtBR": [
-        "É possível construir formulários web que realmente enviem dados a um servidor utilizando nada além de HTML puro. Você pode fazer isso especificando uma ação em seu elemento <code>form</code>.",
-        "Por exemplo:",
-        "<code>&#60;form action=\"/url-para-onde-você-quer-enviar-os-dados-do-formulário\"&#62;&#60;/form&#62;</code>",
-        "Aninhe seu campo de texto em um elemento <code>form</code>. Adicione o atributo <code>action=\"/submit-cat-photo\"</code> para este elemento de formulário."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Erstelle ein Formular",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedd08830",
+      "descriptionPtBR": [
+        "Vamos inserir um elemento <code>submit</code> ao seu formulário. Ao clicar neste botão, os dados inseridos serão enviados para a URL especificada no atributo <code>action</code> do formulário.",
+        "Aqui está um exemplo de um botão de enviar:",
+        "<code>&#60;button type=\" submit\"&#62;este botão enviará o formulário&#60;/button&#62;</code>",
+        "Adicione um botão de enviar ao seu elemento <code>form</code> com o tipo <code>submit</code> e com o texto \"Submit\"."
+      ],
+      "namePtBR": "Inclua um Botão de Enviar a um Formulário",
+      "descriptionDe": [
+        "Füge eine Schaltfläche zum Senden mit dem Typ \"submit\" und \"Submit\" als Text zu deinem <code>form</code> Element hinzu.",
+        "Lass uns nun eine Schaltfläche zum Senden zu deinem Formlar hinzufügen. Durch einen Klick auf diese Schaltfläche werden die Daten des Formulars an die URL gesendet, welche du in dem <code>action</code> Attribut deines Formulars angegeben hast.",
+        "Hier ist ein Beispiel einer solchen Schaltfläche: <code>&#60;button type=\"submit\"&#62;Diese Schaltfläche überträgt die Daten des Formulars.&#60;/button&#62;</code>"
+      ],
       "title": "Add a Submit Button to a Form",
       "description": [
         "Let's add a <code>submit</code> button to your form. Clicking this button will send the data from your form to the URL you specified with your form's <code>action</code> attribute.",
@@ -2039,31 +2051,31 @@
         "assert($(\"button\").text().match(/^\\s*submit\\s*$/gi), 'message: Your submit button should only have the text \"Submit\".');",
         "assert(code.match(/<\\/button>/g) && code.match(/<button/g) && code.match(/<\\/button>/g).length === code.match(/<button/g).length, 'message: Make sure your <code>button</code> element has a closing tag.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Agrega un botón Enviar a un formulario",
+      "type": "waypoint",
+      "titleEs": "Agrega un botón Enviar a un formulario",
       "descriptionEs": [
         "Añadamos un elemento <code>submit</code> a tu formulario. Al hacer clic en este botón enviará los datos del formulario a la URL especificada en el atributo <code>action</code> de tu formulario. ",
         "He aquí un ejemplo de un botón de envío:",
         "<code>&#60;button type=\" submit\"&#62;este botón envía el formulario&#60;/botón&#62;</code>",
         "Agrega un botón de enviar a tu elemento <code>form</code> con el tipo <code>submit</code> y con el texto \"Submit\"."
       ],
-      "nameDe": "Waypoint: Füge eine Schaltfläche zum Senden hinzu",
-      "descriptionDe": [
-        "Füge eine Schaltfläche zum Senden mit dem Typ \"submit\" und \"Submit\" als Text zu deinem <code>form</code> Element hinzu.",
-        "Lass uns nun eine Schaltfläche zum Senden zu deinem Formlar hinzufügen. Durch einen Klick auf diese Schaltfläche werden die Daten des Formulars an die URL gesendet, welche du in dem <code>action</code> Attribut deines Formulars angegeben hast.",
-        "Hier ist ein Beispiel einer solchen Schaltfläche: <code>&#60;button type=\"submit\"&#62;Diese Schaltfläche überträgt die Daten des Formulars.&#60;/button&#62;</code>"
-      ],
-     "namePtBR": "Inclua um Botão de Enviar a um Formulário",
-     "descriptionPtBR": [
-        "Vamos inserir um elemento <code>submit</code> ao seu formulário. Ao clicar neste botão, os dados inseridos serão enviados para a URL especificada no atributo <code>action</code> do formulário.",
-        "Aqui está um exemplo de um botão de enviar:",
-        "<code>&#60;button type=\" submit\"&#62;este botão enviará o formulário&#60;/button&#62;</code>",
-        "Adicione um botão de enviar ao seu elemento <code>form</code> com o tipo <code>submit</code> e com o texto \"Submit\"."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Füge eine Schaltfläche zum Senden hinzu",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedc08830",
+      "descriptionPtBR": [
+        "Você pode especificar um campo como obrigatório para que seu usuário não consiga enviar o formulário até que o tenha completado.",
+        "Por exemplo, se você quiser tornar obrigatório um campo de texto, basta adicionar a palavra <code>required</code> dentro de seu elemento <code>input</code> assim: <code>&#60;input type=\"text\" required&#62;</code>",
+        "Faça com que seu campo de texto seja obrigatório, de forma que o usuário não possa enviar o formulário sem ter completado esse campo.",
+        "Após isso, tente enviar o formulário sem digitar nenhum texto no campo. Percebe como seu formulário HTML5 mostra que o campo é obrigatório?"
+      ],
+      "namePtBR": "Use HTML5 para Especificar Campos Obrigatórios",
+      "descriptionDe": [
+        "Mache aus deinem <code>input</code> Feld ein Pflichtfeld – \"required\" – damit deine Nutzer das Formular nicht abschicken können, ohne dieses Feld auszufüllen.",
+        "Du kannst bestimmte Felder eines Formulars als Pflichtfelder deklarieren. Damit ist es deinen Nutzern nicht mehr möglich, das Formular abzuschicken, ohne die Pflichtfelder auszufüllen.",
+        "Um zum Beispiel ein Textfeld als Pflichtfeld zu deklarieren, kannst du einfach ein \"required\" innerhalb deines <code>input</code> Elements hinzufügen: <code>&#60;input type=\"text\" required&#62;</code>"
+      ],
       "title": "Use HTML5 to Require a Field",
       "description": [
         "You can require specific form fields so that your user will not be able to submit your form until he or she has filled them out.",
@@ -2126,8 +2138,8 @@
       "tests": [
         "assert($(\"input\").prop(\"required\"), 'message: Your text <code>input</code> element should have the <code>required</code> attribute.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Utiliza HTML5 para especificar campos obligatorios",
+      "type": "waypoint",
+      "titleEs": "Utiliza HTML5 para especificar campos obligatorios",
       "descriptionEs": [
         "Puedes especificar un campo obligatorio en un formulario para que tu usuario no pueda enviar el formulario hasta que lo haya llenado.",
         "Por ejemplo, si quieres requerir obligatoriamente un campo de texto, puedes agregar la palabra <code>required</code> dentro de tu elemento <code>input</code>, usarías: <code>&#60;input type=\"text\" required&#62;</code> ",
@@ -2135,23 +2147,29 @@
         "Luego, intenta enviar el formulario sin ingresar texto alguno. ¿Ves cómo tu formulario HTML5 te notifica que el campo es obligatorio?",
         "Nota: Este campo no funciona en Safari."
       ],
-      "nameDe": "Waypoint: Nutze HTML5 um ein Pflichtfeld zu erstellen",
-      "descriptionDe": [
-        "Mache aus deinem <code>input</code> Feld ein Pflichtfeld – \"required\" – damit deine Nutzer das Formular nicht abschicken können, ohne dieses Feld auszufüllen.",
-        "Du kannst bestimmte Felder eines Formulars als Pflichtfelder deklarieren. Damit ist es deinen Nutzern nicht mehr möglich, das Formular abzuschicken, ohne die Pflichtfelder auszufüllen.",
-        "Um zum Beispiel ein Textfeld als Pflichtfeld zu deklarieren, kannst du einfach ein \"required\" innerhalb deines <code>input</code> Elements hinzufügen: <code>&#60;input type=\"text\" required&#62;</code>"
-      ],
-     "namePtBR": "Use HTML5 para Especificar Campos Obrigatórios",
-     "descriptionPtBR": [
-        "Você pode especificar um campo como obrigatório para que seu usuário não consiga enviar o formulário até que o tenha completado.",
-        "Por exemplo, se você quiser tornar obrigatório um campo de texto, basta adicionar a palavra <code>required</code> dentro de seu elemento <code>input</code> assim: <code>&#60;input type=\"text\" required&#62;</code>",
-        "Faça com que seu campo de texto seja obrigatório, de forma que o usuário não possa enviar o formulário sem ter completado esse campo.",
-        "Após isso, tente enviar o formulário sem digitar nenhum texto no campo. Percebe como seu formulário HTML5 mostra que o campo é obrigatório?"
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Nutze HTML5 um ein Pflichtfeld zu erstellen",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08834",
+      "descriptionPtBR": [
+        "É possível utilizar botões de seleção (botões de rádio) para perguntas nas quais o usuário deverá selecionar apenas uma resposta, dentre várias possíveis.",
+        "Os botões de seleção são um tipo de elemento <code>input</code>",
+        "Cada um dos botões de seleção deve estar contido dentro de seu próprio elemento <code>label</code>.",
+        "Todos os botões de seleção relacionados devem ter o mesmo atributo <code>name</code>.",
+        "Temos aqui um exemplo de um botão de seleção/rádio:",
+        "<code>&#60;label&#62;&#60;input type=\"radio\" name=\"indoor-outdoor\"&#62; Indoor&#60;/label&#62;</code>",
+        "Adicione um par de botões de seleção ao seu formulário. Um deles deve ter a opção <code>indoor</code> enquanto o outro deve ter a opção <code>outdoor</code>."
+      ],
+      "namePtBR": "Crie um Conjunto de Botões de Seleção",
+      "descriptionDe": [
+        "Füge ein paar Optionsfelder zu deinem Formular hinzu. Jedes Optionsfeld sollte innerhalb seines eigenen <code>label</code> Elements liegen. Sie sollten außerdem ein <code>name</code> Attribut teilen. Eines davon sollte die Option \"indoor\" und das andere die Option \"outdoor\" haben.",
+        "Du kannst Optionsfelder für Fragen verwenden, auf die der Nutzer nur eine Antwort geben soll.",
+        "Optionsfelder sind lediglich ein weiterer Typ von <code>input</code> Elementen.",
+        "Jedes deiner Optionsfelder sollte innerhalb des eigenen <code>label</code> Elements liegen.",
+        "Alle Optionsfelder mit Bezug zueinander sollten das gleiche <code>name</code> Attribut teilen.",
+        "Ein Beispiel eines Optionsfeldes: <code>&#60;label&#62;&#60;input type=\"radio\" name=\"indoor-outdoor\"&#62; Indoor&#60;/label&#62;</code>"
+      ],
       "title": "Create a Set of Radio Buttons",
       "description": [
         "You can use <code>radio buttons</code> for questions where you want the user to only give you one answer.",
@@ -2221,8 +2239,8 @@
         "assert($(\"label\").text().match(/indoor/gi), 'message: One of your radio buttons should have the label <code>indoor</code>.');",
         "assert($(\"label\").text().match(/outdoor/gi), 'message: One of your radio buttons should have the label <code>outdoor</code>.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Crea un Conjunto de botones de radio",
+      "type": "waypoint",
+      "titleEs": "Crea un Conjunto de botones de radio",
       "descriptionEs": [
         "Puedes usar <code>botones de radio</code> para las preguntas en las que deseas que el usuario sólo pueda dar una respuesta.",
         "Los botones de radio son un tipo del elemento <code>input</code>",
@@ -2232,29 +2250,26 @@
         "<code>&#60;label&#62;&#60;input type=\"radio\" name=\"dentro-fuera\"&#62; Dentro&#60;/label&#62;</code>",
         "Agrega un par de botones de radio a tu formulario. Uno debe tener la opción de <code>indoor</code> y el otro debe tener la opción <code>outdoor</code>. "
       ],
-      "nameDe": "Waypoint: Erstelle ein paar Optionsfelder",
-      "descriptionDe": [
-        "Füge ein paar Optionsfelder zu deinem Formular hinzu. Jedes Optionsfeld sollte innerhalb seines eigenen <code>label</code> Elements liegen. Sie sollten außerdem ein <code>name</code> Attribut teilen. Eines davon sollte die Option \"indoor\" und das andere die Option \"outdoor\" haben.",
-        "Du kannst Optionsfelder für Fragen verwenden, auf die der Nutzer nur eine Antwort geben soll.",
-        "Optionsfelder sind lediglich ein weiterer Typ von <code>input</code> Elementen.",
-        "Jedes deiner Optionsfelder sollte innerhalb des eigenen <code>label</code> Elements liegen.",
-        "Alle Optionsfelder mit Bezug zueinander sollten das gleiche <code>name</code> Attribut teilen.",
-        "Ein Beispiel eines Optionsfeldes: <code>&#60;label&#62;&#60;input type=\"radio\" name=\"indoor-outdoor\"&#62; Indoor&#60;/label&#62;</code>"
-      ],
-     "namePtBR": "Crie um Conjunto de Botões de Seleção",
-     "descriptionPtBR": [
-        "É possível utilizar botões de seleção (botões de rádio) para perguntas nas quais o usuário deverá selecionar apenas uma resposta, dentre várias possíveis.",
-        "Os botões de seleção são um tipo de elemento <code>input</code>",
-        "Cada um dos botões de seleção deve estar contido dentro de seu próprio elemento <code>label</code>.",
-        "Todos os botões de seleção relacionados devem ter o mesmo atributo <code>name</code>.",
-        "Temos aqui um exemplo de um botão de seleção/rádio:",
-        "<code>&#60;label&#62;&#60;input type=\"radio\" name=\"indoor-outdoor\"&#62; Indoor&#60;/label&#62;</code>",
-        "Adicione um par de botões de seleção ao seu formulário. Um deles deve ter a opção <code>indoor</code> enquanto o outro deve ter a opção <code>outdoor</code>."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Erstelle ein paar Optionsfelder",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08835",
+      "descriptionPtBR": [
+        "Os formulários costumam utilizar caixas de seleção para perguntas que podem ter mais de uma resposta.",
+        "As caixas de seleção são um tipo de elemento <code>input</code>",
+        "Cada uma de suas caixas de seleção deve ser aninhada dentro do próprio elemento <code>label</code>.",
+        "Todas as caixas de seleção relacionadas devem ter o mesmo atributo <code>name</code>.",
+        "Veja aqui um exemplo de uma caixa de verificação:",
+        "<code>&#60;label&#62;&#60;input type=\"checkbox\" name=\"personality\"&#62; Carinhoso&#60;/label&#62;</code>",
+        "Adicione ao seu formulário um conjunto de três caixas de verificação. Cada uma delas deve estar aninhada dentro de seu próprio elemento <code>label</code>. As três devem compartilhar o atributo <code>name</code>."
+      ],
+      "namePtBR": "Crie um Conjunto de Caixas de Seleção",
+      "descriptionDe": [
+        "Füge deinem Formular drei Kontrollkästchen hinzu. Jedes dieser Elemente sollte innerhalb seines eigenen <code>label</code> Elements stehen. Alle sollten das gleiche <code>name</code> Attribut \"personality\" teilen.",
+        "Formulare nutzen Kontrollkästchen meistens für Fragen, die mehrerer Antworten bedürfen.",
+        "Als Beispiel: <code>&#60;label&#62;&#60;input type=\"checkbox\" name=\"personality\"&#62; liebevoll&#60;/label&#62;</code>"
+      ],
       "title": "Create a Set of Checkboxes",
       "description": [
         "Forms commonly use <code>checkboxes</code> for questions that may have more than one answer.",
@@ -2324,8 +2339,8 @@
         "assert(code.match(/<\\/label>/g) && code.match(/<label/g) && code.match(/<\\/label>/g).length === code.match(/<label/g).length, 'message: Make sure each of your <code>label</code> elements has a closing tag.');",
         "assert($('label > input[type=\"checkbox\"]').filter(\"[name='personality']\").length > 2, 'message: Give your checkboxes the <code>name</code> attribute of <code>personality</code>.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Crea un conjunto de casillas de verificación",
+      "type": "waypoint",
+      "titleEs": "Crea un conjunto de casillas de verificación",
       "descriptionEs": [
         "Los formularios suelen usar <code>casillas de verificación</code> para preguntas que pueden tener más de una respuesta.",
         "Las casillas de verificación son un tipo del elemento <code>input</code>",
@@ -2335,26 +2350,23 @@
         "<code>&#60;label&#62;&#60;input type=\"checkbox\" name=\"personalidad\"&#62; Cariñoso&#60;/label&#62;</code>",
         "Añade a tu formulario un conjunto de tres casillas de verificación. Cada casilla de verificación debe estar anidada dentro de su propio elemento <code>label</code>. Las tres deben tener <code>personality</code> como su atributo <code>name</code>."
       ],
-      "nameDe": "Waypoint: Erstelle ein paar Kontrollkästchen",
-      "descriptionDe": [
-        "Füge deinem Formular drei Kontrollkästchen hinzu. Jedes dieser Elemente sollte innerhalb seines eigenen <code>label</code> Elements stehen. Alle sollten das gleiche <code>name</code> Attribut \"personality\" teilen.",
-        "Formulare nutzen Kontrollkästchen meistens für Fragen, die mehrerer Antworten bedürfen.",
-        "Als Beispiel: <code>&#60;label&#62;&#60;input type=\"checkbox\" name=\"personality\"&#62; liebevoll&#60;/label&#62;</code>"
-      ],
-     "namePtBR": "Crie um Conjunto de Caixas de Seleção",
-     "descriptionPtBR": [
-        "Os formulários costumam utilizar caixas de seleção para perguntas que podem ter mais de uma resposta.",
-        "As caixas de seleção são um tipo de elemento <code>input</code>",
-        "Cada uma de suas caixas de seleção deve ser aninhada dentro do próprio elemento <code>label</code>.",
-        "Todas as caixas de seleção relacionadas devem ter o mesmo atributo <code>name</code>.",
-        "Veja aqui um exemplo de uma caixa de verificação:",
-        "<code>&#60;label&#62;&#60;input type=\"checkbox\" name=\"personality\"&#62; Carinhoso&#60;/label&#62;</code>",
-        "Adicione ao seu formulário um conjunto de três caixas de verificação. Cada uma delas deve estar aninhada dentro de seu próprio elemento <code>label</code>. As três devem compartilhar o atributo <code>name</code>."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Erstelle ein paar Kontrollkästchen",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedd08835",
+      "descriptionPtBR": [
+        "É possível deixar um botão ou caixa de seleção ativado por padrão ao utilizar o atributo <code>checked</code>.",
+        "Para isso, basta você acrescentar a palavra \"checked\" no interior de um elemento de entrada. Por exemplo:",
+        "<code>&#60;input type=\"radio\" name=\"nome-de-teste\" checked&#62;</code>",
+        "Estabeleça como marcados por padrão o primeiro dos seus <code>botões de seleção/rádio</code> e a primeira <code>caixa de seleção</code>."
+      ],
+      "namePtBR": "Deixe Botões e Caixas de Seleção Ativados por Padrão",
+      "descriptionDe": [
+        "Stelle sicher, dass jeweilse dein erstes Optionsfeld und Kontrollkästchen standardmäßig markiert sind.",
+        "Das kannst du erreichen, indem beiden das Attribut <code>checked</code> beigefügt wird.",
+        "Um das zu bewerkstelligen, füge einfach \"checked\" innerhalb eines Eingabefeldes hinzu. Als Beispiel: <code>&#60;input type=\"radio\" name=\"test-name\" checked&#62;</code>"
+      ],
       "title": "Check Radio Buttons and Checkboxes by Default",
       "description": [
         "You can set a checkbox or radio button to be checked by default using the <code>checked</code> attribute.",
@@ -2419,34 +2431,37 @@
         "</form>"
       ],
       "tests": [
-        "assert($('input[type=\"radio\"]').prop(\"checked\"), 'message: Your first radio button on your form should be checked by default.');",
-        "assert($('input[type=\"checkbox\"]').prop(\"checked\"), 'message: Your first checkbox on your form should be checked by default.');"
-      ],
-      "challengeType": 0,
-      "nameEs": "Marca botones de radio y casillas de verificación por omisión",
-      "descriptionEs": [
-        "Puedes marcar por omisión una casilla de verificación o un botón de radio usando el atributo <code>checked</code>.",
-        "Para ello, sólo tienes que añadir la palabra \"checked\" en el interior de un elemento <code>input</code>. Por ejemplo:",
-        "<code>&#60;input type=\"radio\" name=\"nombre-de-prueba\" checked&#62;</code>",
-        "Establece como marcados por omisión el primero de tus <code>botones de radio</code> y la primera <code>casilla de verificación</code>."
-      ],
-      "nameDe": "Waypoint: Standardmäßig ausgewählte Optionsfelder und Kontrollkästchen",
-      "descriptionDe": [
-        "Stelle sicher, dass jeweilse dein erstes Optionsfeld und Kontrollkästchen standardmäßig markiert sind.",
-        "Das kannst du erreichen, indem beiden das Attribut <code>checked</code> beigefügt wird.",
-        "Um das zu bewerkstelligen, füge einfach \"checked\" innerhalb eines Eingabefeldes hinzu. Als Beispiel: <code>&#60;input type=\"radio\" name=\"test-name\" checked&#62;</code>"
-      ],
-     "namePtBR": "Deixe Botões e Caixas de Seleção Ativados por Padrão",
-     "descriptionPtBR": [
-        "É possível deixar um botão ou caixa de seleção ativado por padrão ao utilizar o atributo <code>checked</code>.",
-        "Para isso, basta você acrescentar a palavra \"checked\" no interior de um elemento de entrada. Por exemplo:",
-        "<code>&#60;input type=\"radio\" name=\"nome-de-teste\" checked&#62;</code>",
-        "Estabeleça como marcados por padrão o primeiro dos seus <code>botões de seleção/rádio</code> e a primeira <code>caixa de seleção</code>."
+        "assert($('input[type=\"radio\"]').prop(\"checked\"), 'message: Your first radio button on your form should be checked by default.');",
+        "assert($('input[type=\"checkbox\"]').prop(\"checked\"), 'message: Your first checkbox on your form should be checked by default.');"
+      ],
+      "type": "waypoint",
+      "titleEs": "Marca botones de radio y casillas de verificación por omisión",
+      "descriptionEs": [
+        "Puedes marcar por omisión una casilla de verificación o un botón de radio usando el atributo <code>checked</code>.",
+        "Para ello, sólo tienes que añadir la palabra \"checked\" en el interior de un elemento <code>input</code>. Por ejemplo:",
+        "<code>&#60;input type=\"radio\" name=\"nombre-de-prueba\" checked&#62;</code>",
+        "Establece como marcados por omisión el primero de tus <code>botones de radio</code> y la primera <code>casilla de verificación</code>."
       ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Standardmäßig ausgewählte Optionsfelder und Kontrollkästchen",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aede08835",
+      "descriptionPtBR": [
+        "O elemento <code>div</code>, também conhecido como elemento de divisão, é um contentor de propósito geral para outros elementos.",
+        "O elemento <code>div</code> é provavelmente o elemento HTML mais utilizado. Ele é útil para adicionar o CSS de suas próprias declarações de classe para todos os elementos que o contém.",
+        "Da mesma forma que qualquer outro elemento sem fechamento automático, você deve abrir uma tag <code>div</code> com <code>&#60;div&#62;</code> e fechá-la em outra linha com <code>&#60;/div&#62;</code>.",
+        "Tente colocar sua tag de abertura <code>div</code> acima do elemento <code>p</code> \"Things cat love\", e sua tag de fechamento de <code>div</code> depois da tag de fechamento do <code>ol</code>, para que cada uma de suas listas esteja dentro de um <code>div</code>.",
+        "Aninhe suas listas \"Things cats love\" e \"Things cats hate\" no interior de um único elemento <code>div</code>."
+      ],
+      "namePtBR": "Aninhe Muitos Elementos Dentro de um só Elemento Div",
+      "descriptionDe": [
+        "Umschließe deine \"Thins cats love\" und \"Things cats hate\" Listen mit einem <code>div</code> Element.",
+        "Das <code>div</code> Element oder \"Division\" ist ein allgemeiner Container für andere Elemente.",
+        "Dieses Element wird von allen HTML Elementen wahrscheinlich am häufigsten verwendet. Es ist nützlich um die CSS Stile der eigenen Klasse an die enthaltenen Elemente zu vererben.",
+        "Wie jedes andere Element – das sich nicht selbst schließt –  kannst du ein <code>div</code> Element mit <code>&#60;div&#62;</code> öffnen und mit <code>&#60;/div&#62;</code> wieder schließen.",
+        "Versuche deine öffnende <code>div</code> Auszeichnung überhalb des <code>p</code> Elements von  \"Things cats love\" und das schließende <code>div</code> unterhalb der schließenden <code>ol</code> Auszeichnung zu platzieren. Damit befinden sich beide Listen innerhalb eines <code>div</code>"
+      ],
       "title": "Nest Many Elements within a Single Div Element",
       "description": [
         "The <code>div</code> element, also known as a division element, is a general purpose container for other elements.",
@@ -2518,8 +2533,8 @@
         "assert($(\"div\").children(\"ol\").length > 0, 'message: Nest your <code>ol</code> element inside your <code>div</code> element.');",
         "assert(code.match(/<\\/div>/g) && code.match(/<\\/div>/g).length === code.match(/<div>/g).length, 'message: Make sure your <code>div</code> element has a closing tag.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Anida muchos elementos dentro de una sólo elemento Div",
+      "type": "waypoint",
+      "titleEs": "Anida muchos elementos dentro de una sólo elemento Div",
       "descriptionEs": [
         "El elemento <code>div</code>, también conocido como un elemento de división, es un contenedor de propósito general para otros elementos.",
         "El elemento <code>div</code> es probablemente el elemento HTML más utilizado. Es útil para pasar el CSS de sus propias declaraciones de clase a todos los elementos que contiene. ",
@@ -2527,23 +2542,8 @@
         "Trata de poner tu etiqueta de apertura <code>div</code> por encima de elemento <code>p</code> \"Things cat love\", y tu etiqueta de cierre de <code>div</code> después de tu etiqueta de cierre de <code>ol</code>, para que cada una de tus listas estén dentro de un <code>div</code>. ",
         "Anida tus listas \"Things cats love\" y \"Things cats hate\" dentro de un solo elemento <code>div</code>."
       ],
-      "nameDe": "Waypoint: Umschließe viele Elemente mit einem einzigen Div Element",
-      "descriptionDe": [
-        "Umschließe deine \"Thins cats love\" und \"Things cats hate\" Listen mit einem <code>div</code> Element.",
-        "Das <code>div</code> Element oder \"Division\" ist ein allgemeiner Container für andere Elemente.",
-        "Dieses Element wird von allen HTML Elementen wahrscheinlich am häufigsten verwendet. Es ist nützlich um die CSS Stile der eigenen Klasse an die enthaltenen Elemente zu vererben.",
-        "Wie jedes andere Element – das sich nicht selbst schließt –  kannst du ein <code>div</code> Element mit <code>&#60;div&#62;</code> öffnen und mit <code>&#60;/div&#62;</code> wieder schließen.",
-        "Versuche deine öffnende <code>div</code> Auszeichnung überhalb des <code>p</code> Elements von  \"Things cats love\" und das schließende <code>div</code> unterhalb der schließenden <code>ol</code> Auszeichnung zu platzieren. Damit befinden sich beide Listen innerhalb eines <code>div</code>"
-      ],
-     "namePtBR": "Aninhe Muitos Elementos Dentro de um só Elemento Div",
-     "descriptionPtBR": [
-        "O elemento <code>div</code>, também conhecido como elemento de divisão, é um contentor de propósito geral para outros elementos.",
-        "O elemento <code>div</code> é provavelmente o elemento HTML mais utilizado. Ele é útil para adicionar o CSS de suas próprias declarações de classe para todos os elementos que o contém.",
-        "Da mesma forma que qualquer outro elemento sem fechamento automático, você deve abrir uma tag <code>div</code> com <code>&#60;div&#62;</code> e fechá-la em outra linha com <code>&#60;/div&#62;</code>.",
-        "Tente colocar sua tag de abertura <code>div</code> acima do elemento <code>p</code> \"Things cat love\", e sua tag de fechamento de <code>div</code> depois da tag de fechamento do <code>ol</code>, para que cada uma de suas listas esteja dentro de um <code>div</code>.",
-        "Aninhe suas listas \"Things cats love\" e \"Things cats hate\" no interior de um único elemento <code>div</code>."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Umschließe viele Elemente mit einem einzigen Div Element",
+      "challengeType": 0
     },
     {
       "id": "bad87fed1348bd9aede07836",
@@ -2617,23 +2617,23 @@
         "assert($(\"div\").hasClass(\"gray-background\"), 'message: Give your <code>div</code> element the class <code>gray-background</code>.');",
         "assert($(\".gray-background\").css(\"background-color\") === \"rgb(128, 128, 128)\", 'message: Your <code>div</code> element should have a gray background.');"
       ],
+      "descriptionPtBR": [
+        "Você pode acrescentar uma cor de fundo de um elemento com a propriedade <code>background-color</code>.",
+        "Por exemplo, se você quiser que a cor de fundo de um elemento seja verde (<code>green</code>), dentro de seu elemento <code>style</code> seria assim:",
+        "<code>.green-background {</code>",
+        "<code>&nbsp;&nbsp;background-color: green;</code>",
+        "<code>}</code>",
+        "Crie uma classe chamada <code>gray-background</code> com a propriedade <code>background-color</code> em cinza (<code>gray</code>). Depois, adicione essa classe ao seu elemento <code>div</code>."
+      ],
+      "namePtBR": "Dê uma Cor de Fundo a um Elemento Div",
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Da un color de fondo a un elemento Div",
+      "titleEs": "Da un color de fondo a un elemento Div",
       "descriptionEs": [
         "Puedes fijar el color de fondo de un elemento con la propiedad <code>background-color</code>.",
         "Por ejemplo, si quieres que el color de fondo de un elemento sea verde (<code>green</code>), dentro de tu elemento <code>style</code> pondrías:",
         "<blockquote>.green-background {<br>&nbsp;&nbsp;background-color: green;<br>}</blockquote>",
         "Crea una clase llamada <code>gray-background</code> con la propiedad <code>background-color</code> en gris (<code>gray</code>). Asigna esta clase a tu elemento <code>div</code> ."
-      ],
-     "namePtBR": "Dê uma Cor de Fundo a um Elemento Div",
-     "descriptionPtBR": [
-        "Você pode acrescentar uma cor de fundo de um elemento com a propriedade <code>background-color</code>.",
-        "Por exemplo, se você quiser que a cor de fundo de um elemento seja verde (<code>green</code>), dentro de seu elemento <code>style</code> seria assim:",
-        "<code>.green-background {</code>",
-        "<code>&nbsp;&nbsp;background-color: green;</code>",
-        "<code>}</code>",
-        "Crie uma classe chamada <code>gray-background</code> com a propriedade <code>background-color</code> em cinza (<code>gray</code>). Depois, adicione essa classe ao seu elemento <code>div</code>."
       ]
     },
     {
@@ -2712,9 +2712,18 @@
       "tests": [
         "assert($(\"form\").attr(\"id\") === \"cat-photo-form\", 'message: Give your <code>form</code> element the id of <code>cat-photo-form</code>.');"
       ],
+      "descriptionPtBR": [
+        "Além das classes, cada elemento HTML também pode ter um atributo de identificação chamado <code>id</code>.",
+        "Existem várias vantagens ao utilizar atributos <code>id</code>, e você aprenderá mais sobre elas quando começar a utilizar jQuery.",
+        "Os atributos <code>id</code> devem ser únicos. Os navegadores não o obrigarão a isso, mas isso é amplamente reconhecido como uma boa prática. Assim, não dê um mesmo atributo <code>id</code> a mais de um elemento.",
+        "Veja aqui um exemplo de como dar a id <code>cat-photo-app</code> ao seu elemento code>h2</code>:",
+        "<code>&#60;h2 id=\"cat-photo-app\"></code>",
+        "Dê ao seu elemento <code>form</code> a id <code>cat-photo-form</code>."
+      ],
+      "namePtBR": "Estabeleça a ID de um Elemento",
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Establecer el ID de un elemento",
+      "titleEs": "Establecer el ID de un elemento",
       "descriptionEs": [
         "Además de las clases, cada elemento HTML también puede tener un atributo de identificación <code>id</code>.",
         "Hay varias ventajas al usar atributos <code>id</code>, y aprenderás más sobre estas cuando comiences a usar jQuery.",
@@ -2722,15 +2731,6 @@
         "He aquí un ejemplo de cómo le das la identificación <code>cat-photo-app</code> a tu elemento <code>h2</code>:",
         "<code>&#60;h2 id=\"cat-photo-app\"></code>",
         "Dale a tu elemento <code>form</code> la id <code>cat-photo-form</code>."
-      ],
-     "namePtBR": "Estabeleça a ID de um Elemento",
-     "descriptionPtBR": [
-        "Além das classes, cada elemento HTML também pode ter um atributo de identificação chamado <code>id</code>.",
-        "Existem várias vantagens ao utilizar atributos <code>id</code>, e você aprenderá mais sobre elas quando começar a utilizar jQuery.",
-        "Os atributos <code>id</code> devem ser únicos. Os navegadores não o obrigarão a isso, mas isso é amplamente reconhecido como uma boa prática. Assim, não dê um mesmo atributo <code>id</code> a mais de um elemento.",
-        "Veja aqui um exemplo de como dar a id <code>cat-photo-app</code> ao seu elemento code>h2</code>:",
-        "<code>&#60;h2 id=\"cat-photo-app\"></code>",
-        "Dê ao seu elemento <code>form</code> a id <code>cat-photo-form</code>."
       ]
     },
     {
@@ -2812,29 +2812,45 @@
         "assert(code.match(/<form.*cat-photo-form.*>/gi) && code.match(/<form.*cat-photo-form.*>/gi).length > 0, 'message: Make sure your <code>form</code> element has an <code>id</code> attribute.');",
         "assert(!code.match(/<form.*style.*>/gi) && !code.match(/<form.*class.*>/gi), 'message: Do not give your <code>form</code> any <code>class</code> or <code>style</code> attributes.');"
       ],
+      "descriptionPtBR": [
+        "Algo interessante sobre os atributos <code>id</code> é que, da mesma forma que com as classes, é possível dar estilos a eles usando CSS.",
+        "Aqui está um exemplo de como você pode usar seu elemento com atributo <code>id</code> em <code>cat-photo-element</code> e dar a ele a cor de fundo verde.",
+        "<code>#cat-photo-element {</code>",
+        "<code>&nbsp;&nbsp;background-color: green;</code>",
+        "<code>}</code>",
+        "Note que dentro de seu elemento <code>style</code>, você deve sempre referenciar uma classe colocando um <code>.</code> logo antes de seu nome. Já com uma id, você deve referenciar colocando um <code>#</code> antes de seu nome.",
+        "Dê ao seu formulário, que agora possui o atributo code>id</code> em <code>cat-photo-form</code>, um fundo verde."
+      ],
+      "namePtBR": "Use um Atributo ID para Estilizar um Elemento",
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Usa un atributo ID para dar estilo a un elemento",
+      "titleEs": "Usa un atributo ID para dar estilo a un elemento",
       "descriptionEs": [
         "Una cosa buena sobre los atributos <code>id</code> es que, al igual que con clases, puedes darles estilo usando CSS.",
         "He aquí un ejemplo de cómo puedes tomar tu elemento con atributo <code>id</code> de <code>cat-photo-element</code> y ponerle el color de fondo verde. En tu elemento <code>style</code>: ",
         "<blockquote>#cat-photo-element {<br>&nbsp;&nbsp;background-color: green;<br>}</blockquote>",
         "Ten en cuenta que dentro de tu elemento <code>style</code>, siempre referencias clases poniendo un <code>.</code> en frente de sus nombres. Y siempre referencias identificaciones poniendo un <code>#</code> frente a sus nombres. ",
         "Trata de darle a tu formulario, que ahora tiene el atributo <code>id</code> en <code>cat-photo-form</code>, un fondo verde."
-      ],
-     "namePtBR": "Use um Atributo ID para Estilizar um Elemento",
-     "descriptionPtBR": [
-        "Algo interessante sobre os atributos <code>id</code> é que, da mesma forma que com as classes, é possível dar estilos a eles usando CSS.",
-        "Aqui está um exemplo de como você pode usar seu elemento com atributo <code>id</code> em <code>cat-photo-element</code> e dar a ele a cor de fundo verde.",
-        "<code>#cat-photo-element {</code>",
-        "<code>&nbsp;&nbsp;background-color: green;</code>",
-        "<code>}</code>",
-        "Note que dentro de seu elemento <code>style</code>, você deve sempre referenciar uma classe colocando um <code>.</code> logo antes de seu nome. Já com uma id, você deve referenciar colocando um <code>#</code> antes de seu nome.",
-        "Dê ao seu formulário, que agora possui o atributo code>id</code> em <code>cat-photo-form</code>, um fundo verde."
       ]
     },
     {
       "id": "bad88fee1348bd9aedf08825",
+      "descriptionPtBR": [
+        "Agora vamos deixar nosso aplicativo de fotos de gatos um pouco de lado, e aprender mais sobre dar estilos em HTML.",
+        "Você provavelmente já deve ter notado, mas todos os elementos HTML são, essencialmente, pequenos retângulos.",
+        "Três propriedades importantes controlam o espaço ao redor de cada elemento HTML: preenchimento (<code>padding</code>), margem (<code>margin</code>) e borda (<code>border</code>).",
+        "O preenchimento (<code>padding</code>) de um elemento controla a quantidade de espaço entre o elemento e sua borda (<code>border</code>).",
+        "Aqui, podemos ver que o quadro verde e o quadro vermelho se aninham dentro do quadro amarelo. Leve em conta que o quadro vermelho tem mais preenchimento (<code>padding</code>) que o quadro verde.",
+        "Quando você aumenta o preenchimento da caixa verde, a distância entre o texto <code>padding</code> e a borda ao seu redor também será maior.",
+        "Mude o preenchimento (<code>padding</code>) da caixa verde para que coincida com a de seu quadrado vermelho."
+      ],
+      "namePtBR": "Ajuste o Preenchimento de um Elemento",
+      "descriptionDe": [
+        "Die nächsten Wegpunkte werden dir drei wichtige Aspekte von Raum – und Zeit! – bei HTML Elementen näher bringen: <code>padding</code>, <code>margin</code> und <code>border</code>. Das mit der Zeit war ein Scherz. Gleiche nun den Innenabstand – <code>padding</code> – deiner grünen Box dem der roten Box an.",
+        "<code>padding</code> kontrolliert den Raum oder Abstand zwischen dem Inhalt eines Elements und dessen Rahmen – <code>border</code>",
+        "Wir sehen in diesem Beispiel, dass sich die grüne Box und die rote Box innerhalb der gelben Box befinden. Beachte, dass die rote Box mehr <code>padding</code> hat als die grüne Box.",
+        "Wenn du den Innenabstand der grünen Box – also <code>padding</code> – erhöhst, wird sich die Entfernung zwischen dem Text \"padding\" und dem Rahmen darum erhöhen."
+      ],
       "title": "Adjusting the Padding of an Element",
       "description": [
         "Now let's put our Cat Photo App away for a little while and learn more about styling HTML.",
@@ -2884,8 +2900,8 @@
       "tests": [
         "assert($(\".green-box\").css(\"padding-top\") === \"20px\", 'message: Your <code>green-box</code> class should give elements <code>20px</code> of <code>padding</code>.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Ajusta el relleno de un elemento",
+      "type": "waypoint",
+      "titleEs": "Ajusta el relleno de un elemento",
       "descriptionEs": [
         "Ahora vamos a dejar de lado nuestra aplicación de fotos de gatos por un tiempo, y aprenderemos más sobre dar estilo a HTML",
         "Ya habrás notado esto, pero todos los elementos HTML son esencialmente pequeños rectángulos.",
@@ -2895,27 +2911,24 @@
         "Cuando aumentes el relleno de la caja verde, aumentará la distancia entre el texto <code>padding</code> y el borde alrededor de este.",
         "Cambia el relleno (<code>padding</code>) de la caja verde para que coincida con el de tu cuadro rojo."
       ],
-      "nameDe": "Wegpunkt: Justiere den Innenabstand eines Elements",
-      "descriptionDe": [
-        "Die nächsten Wegpunkte werden dir drei wichtige Aspekte von Raum – und Zeit! – bei HTML Elementen näher bringen: <code>padding</code>, <code>margin</code> und <code>border</code>. Das mit der Zeit war ein Scherz. Gleiche nun den Innenabstand – <code>padding</code> – deiner grünen Box dem der roten Box an.",
-        "<code>padding</code> kontrolliert den Raum oder Abstand zwischen dem Inhalt eines Elements und dessen Rahmen – <code>border</code>",
-        "Wir sehen in diesem Beispiel, dass sich die grüne Box und die rote Box innerhalb der gelben Box befinden. Beachte, dass die rote Box mehr <code>padding</code> hat als die grüne Box.",
-        "Wenn du den Innenabstand der grünen Box – also <code>padding</code> – erhöhst, wird sich die Entfernung zwischen dem Text \"padding\" und dem Rahmen darum erhöhen."
-      ],
-     "namePtBR": "Ajuste o Preenchimento de um Elemento",
-     "descriptionPtBR": [
-        "Agora vamos deixar nosso aplicativo de fotos de gatos um pouco de lado, e aprender mais sobre dar estilos em HTML.",
-        "Você provavelmente já deve ter notado, mas todos os elementos HTML são, essencialmente, pequenos retângulos.",
-        "Três propriedades importantes controlam o espaço ao redor de cada elemento HTML: preenchimento (<code>padding</code>), margem (<code>margin</code>) e borda (<code>border</code>).",
-        "O preenchimento (<code>padding</code>) de um elemento controla a quantidade de espaço entre o elemento e sua borda (<code>border</code>).",
-        "Aqui, podemos ver que o quadro verde e o quadro vermelho se aninham dentro do quadro amarelo. Leve em conta que o quadro vermelho tem mais preenchimento (<code>padding</code>) que o quadro verde.",
-        "Quando você aumenta o preenchimento da caixa verde, a distância entre o texto <code>padding</code> e a borda ao seu redor também será maior.",
-        "Mude o preenchimento (<code>padding</code>) da caixa verde para que coincida com a de seu quadrado vermelho."
-      ],
-      "type": "waypoint"
+      "titleDe": "Wegpunkt: Justiere den Innenabstand eines Elements",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08822",
+      "descriptionPtBR": [
+        "A margem (<code>margin</code>) de um elemento controla a quantidade de espaço entre a borda (<code>border</code>) e os elementos ao seu redor.",
+        "Aqui, podemos ver que a caixa verde e a caixa vermelha se aninham dentro da caixa amarela. Note que a caixa vermelha possui a margem maior que a caixa verde, fazendo com que ela pareça menor.",
+        "Quando você aumenta a margem (<code>margin</code>) da caixa verde, a distância entre a borda e os elementos ao seu redor também aumentará.",
+        "Mude a margem (<code>margin</code>) da caixa verde para que coincida com a margem da caixa vermelha."
+      ],
+      "namePtBR": "Ajuste a Margem de um Elemento",
+      "descriptionDe": [
+        "Gleiche den Außenabstand – <code>margin</code> der grünen Box dem der roten Box an.",
+        "<code>margin</code> kontrolliert den Abstand zwischen dem Rahmen eines Elements und den benachbarten Elementen.",
+        "Die grüne und die rote Box befinden sich beide erneut innerhalb der gelben Box. Beachte, dass die rote Box mehr <code>margin</code> aufweist als ihr Erzfeind – die grüne Box.",
+        "Wenn du den Außenabstand – <code>margin</code> – der grünen Box erhöhst, wird sich der Abstand zwischen ihrem Rahmen und den benachbarten Elementen vergrößern."
+      ],
       "title": "Adjust the Margin of an Element",
       "description": [
         "An element's <code>margin</code> controls the amount of space between an element's <code>border</code> and surrounding elements.",
@@ -2964,32 +2977,32 @@
       "tests": [
         "assert($(\".green-box\").css(\"margin-top\") === \"20px\", 'message: Your <code>green-box</code> class should give elements <code>20px</code> of <code>margin</code>.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Ajusta el margen de un elemento",
+      "type": "waypoint",
+      "titleEs": "Ajusta el margen de un elemento",
       "descriptionEs": [
         "El margen (<code>margin</code>) de un elemento controla la cantidad de espacio entre el borde (<code>border</code>) y los elementos alrededor.",
         "Aquí, podemos ver que la caja verde y la caja roja se anidan dentro de la caja amarilla. Ten en cuenta que la caja roja tiene más margen (<code>margin</code>) que la caja verde, haciendo que parezca más pequeña. ",
         "Cuando aumentes el margen (<code>margin</code>) de la caja verde, aumentará la distancia entre su borde y los elementos que la rodean.",
         "Cambia el margen (<code>margin</code>) de la caja verde para que coincida con el de la caja roja."
       ],
-      "nameDe": "Waypoint: Passe den Außenabstand eines Elements an",
-      "descriptionDe": [
-        "Gleiche den Außenabstand – <code>margin</code> der grünen Box dem der roten Box an.",
-        "<code>margin</code> kontrolliert den Abstand zwischen dem Rahmen eines Elements und den benachbarten Elementen.",
-        "Die grüne und die rote Box befinden sich beide erneut innerhalb der gelben Box. Beachte, dass die rote Box mehr <code>margin</code> aufweist als ihr Erzfeind – die grüne Box.",
-        "Wenn du den Außenabstand – <code>margin</code> – der grünen Box erhöhst, wird sich der Abstand zwischen ihrem Rahmen und den benachbarten Elementen vergrößern."
-      ],
-     "namePtBR": "Ajuste a Margem de um Elemento",
-     "descriptionPtBR": [
-        "A margem (<code>margin</code>) de um elemento controla a quantidade de espaço entre a borda (<code>border</code>) e os elementos ao seu redor.",
-        "Aqui, podemos ver que a caixa verde e a caixa vermelha se aninham dentro da caixa amarela. Note que a caixa vermelha possui a margem maior que a caixa verde, fazendo com que ela pareça menor.",
-        "Quando você aumenta a margem (<code>margin</code>) da caixa verde, a distância entre a borda e os elementos ao seu redor também aumentará.",
-        "Mude a margem (<code>margin</code>) da caixa verde para que coincida com a margem da caixa vermelha."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Passe den Außenabstand eines Elements an",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08823",
+      "descriptionPtBR": [
+        "A margem de um elemento controla a quantidade de espaço entre a borda do elemento e os elementos ao seu redor.",
+        "Se você estabelece a margem de um elemento com um valor negativo, o elemento ficará maior.",
+        "Tente estabelecer a margem (<code>margin</code>) a um valor negativo como o da caixa vermelha.",
+        "Mude a margem (<code>margin</code>) da caixa verde para <code>-15px</code>, de forma que ocupe toda a largura horizontal da caixa amarela que a rodeia."
+      ],
+      "namePtBR": "Adicione uma Margem Negativa a um Elemento",
+      "descriptionDe": [
+        "Passe den Außenabstand – <code>margin</code> – der grünen Box mit einem negativen Wert an, damit sie die gelbe Box horizontal ausfüllt.",
+        "<code>margin</code> kontrolliert den Abstand zwischen dem Rahmen eines Elements und den benachbarten Elementen.",
+        "Wenn du dem Außenabstand eines Elements einen negativen Wert zuweist, wird das Element größer.",
+        "Versuche den Außenabstand auf einen negativen Wert wie bei der roten Box zu setzen."
+      ],
       "title": "Add a Negative Margin to an Element",
       "description": [
         "An element's <code>margin</code> controls the amount of space between an element's <code>border</code> and surrounding elements.",
@@ -3037,32 +3050,30 @@
       "tests": [
         "assert($(\".green-box\").css(\"margin-top\") === \"-15px\", 'message: Your <code>green-box</code> class should give elements <code>-15px</code> of <code>margin</code>.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Agregar un margen negativo a un elemento",
+      "type": "waypoint",
+      "titleEs": "Agregar un margen negativo a un elemento",
       "descriptionEs": [
         "El margen de un elemento controla la cantidad de espacio entre el borde del elemento y los elementos que lo rodean.",
         "Si estableces el margen de un elemento en un valor negativo, el elemento se hará más grande.",
         "Trata de establecer el margen (<code>margin</code>) a un valor negativo como el de la caja roja.",
         "Cambia el margen (<code>margin</code>) de la caja verde a <code>-15px</code>, de forma que ocupe todo el ancho horizontal de la caja amarilla que lo rodea."
       ],
-      "nameDe": "Waypoint: Füge einem Element negativen Außenabstand hinzu",
-      "descriptionDe": [
-        "Passe den Außenabstand – <code>margin</code> – der grünen Box mit einem negativen Wert an, damit sie die gelbe Box horizontal ausfüllt.",
-        "<code>margin</code> kontrolliert den Abstand zwischen dem Rahmen eines Elements und den benachbarten Elementen.",
-        "Wenn du dem Außenabstand eines Elements einen negativen Wert zuweist, wird das Element größer.",
-        "Versuche den Außenabstand auf einen negativen Wert wie bei der roten Box zu setzen."
-      ],
-     "namePtBR": "Adicione uma Margem Negativa a um Elemento",
-     "descriptionPtBR": [
-        "A margem de um elemento controla a quantidade de espaço entre a borda do elemento e os elementos ao seu redor.",
-        "Se você estabelece a margem de um elemento com um valor negativo, o elemento ficará maior.",
-        "Tente estabelecer a margem (<code>margin</code>) a um valor negativo como o da caixa vermelha.",
-        "Mude a margem (<code>margin</code>) da caixa verde para <code>-15px</code>, de forma que ocupe toda a largura horizontal da caixa amarela que a rodeia."
-      ],
-      "type": "waypoint"
+      "titleDe": "Waypoint: Füge einem Element negativen Außenabstand hinzu",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08824",
+      "descriptionPtBR": [
+        "As vezes pode ser que você queira personalizar um elemento para que tenha um preenchimento (<code>padding</code>) diferente em cada um de seus lados.",
+        "O CSS permite controlar o preenchimento (<code>padding</code>) de um elemento em todos os quatro lados: superior, direito, inferior e esquerdo, com as propriedades <code>padding-top</code>, <code>padding-right</code>, <code>padding-bottom</code> e <code>padding-left</code>.",
+        "Dê para a caixa verde um preenchimento (<code>padding</code>) de <code>40px</code> nas partes superior e esquerda, e de apenas <code>20px</code> em suas partes inferior e direita."
+      ],
+      "namePtBR": "Dê Valores Diferentes de Preenchimento a Cada Lado de um Elemento",
+      "descriptionDe": [
+        "Verleihe der grünen Box einen Innenabstand – <code>padding</code> – von 40 Pixeln auf der oberen und linken Seite, aber nur 20 Pixel auf der unteren und rechten Seite.",
+        "Manchmal wirst du einem Element unterschiedlichen Innenabstand – also <code>padding</code> – auf jeder Seite geben wollen.",
+        "CSS erlaubt dir den Innenabstand eines Elements auf allen Seiten einzeln mit den Eigenschaften <code>padding-top</code>, <code>padding-right</code>, <code>padding-bottom</code> und <code>padding-left</code> zu steuern."
+      ],
       "title": "Add Different Padding to Each Side of an Element",
       "description": [
         "Sometimes you will want to customize an element so that it has different <code>padding</code> on each of its sides.",
@@ -3113,29 +3124,28 @@
         "assert($(\".green-box\").css(\"padding-right\") === \"20px\", 'message: Your <code>green-box</code> class should give the right of the elements <code>20px</code> of <code>padding</code>.');",
         "assert($(\".green-box\").css(\"padding-bottom\") === \"20px\", 'message: Your <code>green-box</code> class should give the bottom of the elements <code>20px</code> of <code>padding</code>.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Añade relleno diferente a cada lado de un elemento",
+      "type": "waypoint",
+      "titleEs": "Añade relleno diferente a cada lado de un elemento",
       "descriptionEs": [
         "A veces querrás personalizar un elemento para que tenga diferente relleno (<code>padding</code>) en cada uno de sus lados.",
         "CSS te permite controlar el relleno (<code>padding</code>) de un elemento en los cuatro lados superior, derecho, inferior e izquierdo con las propiedades <code>padding-top</code>, <code>padding-right</code>, <code>padding-bottom</code> y <code>padding-left</code>. ",
         "Da a la caja verde un relleno (<code>padding</code>) de <code>40px</code> en las partes superior e izquierda, pero sólo <code>20px</code> en sus partes inferior y derecha."
       ],
-      "nameDe": "Wegpunkt: Gib jeder Seite eines Elements unterschiedlichen Innenabstand",
-      "descriptionDe": [
-        "Verleihe der grünen Box einen Innenabstand – <code>padding</code> – von 40 Pixeln auf der oberen und linken Seite, aber nur 20 Pixel auf der unteren und rechten Seite.",
-        "Manchmal wirst du einem Element unterschiedlichen Innenabstand – also <code>padding</code> – auf jeder Seite geben wollen.",
-        "CSS erlaubt dir den Innenabstand eines Elements auf allen Seiten einzeln mit den Eigenschaften <code>padding-top</code>, <code>padding-right</code>, <code>padding-bottom</code> und <code>padding-left</code> zu steuern."
-      ],
-     "namePtBR": "Dê Valores Diferentes de Preenchimento a Cada Lado de um Elemento",
-     "descriptionPtBR": [
-        "As vezes pode ser que você queira personalizar um elemento para que tenha um preenchimento (<code>padding</code>) diferente em cada um de seus lados.",
-        "O CSS permite controlar o preenchimento (<code>padding</code>) de um elemento em todos os quatro lados: superior, direito, inferior e esquerdo, com as propriedades <code>padding-top</code>, <code>padding-right</code>, <code>padding-bottom</code> e <code>padding-left</code>.",
-        "Dê para a caixa verde um preenchimento (<code>padding</code>) de <code>40px</code> nas partes superior e esquerda, e de apenas <code>20px</code> em suas partes inferior e direita."
-      ],
-      "type": "waypoint"
+      "titleDe": "Wegpunkt: Gib jeder Seite eines Elements unterschiedlichen Innenabstand",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1248bd9aedf08824",
+      "descriptionPtBR": [
+        "Talvez você queira personalizar um elemento para que possua uma margem (<code>margin</code>) diferente em cada um de seus lados.",
+        "O CSS permite controlar a margem de um elemento em todos os seus quatro lados: superior, direito, inferior e esquerdo, com as propriedades <code>margin-top</code>, <code>margin-right</code>, <code>margin-bottom</code> e <code>margin-left</code>.",
+        "Dê para a caixa verde uma margem (<code>margin</code>) de <code>40px</code> nas partes superior e esquerda, e de apenas <code>20px</code> nas partes inferior e direita."
+      ],
+      "namePtBR": "Dê Valores Diferentes de Margem a Cada Lado de um Elemento",
+      "descriptionDe": [
+        "Gib der grünen Box einen Außenabstand – also <code>margin</code> – von 40 Pixeln auf der oberen und linken Seite, aber nur 20 Pixel auf der unteren und rechten Seite.",
+        "CSS erlaubt dir ebenfalls den Außenabstand auf jeder Seite einzeln mit den Eigenschaften <code>margin-top</code>, <code>margin-right</code>, <code>margin-bottom</code> und <code>margin-left</code> zu steuern."
+      ],
       "title": "Add Different Margins to Each Side of an Element",
       "description": [
         "Sometimes you will want to customize an element so that it has a different <code>margin</code> on each of its sides.",
@@ -3186,28 +3196,30 @@
         "assert($(\".green-box\").css(\"margin-right\") === \"20px\", 'message: Your <code>green-box</code> class should give the right of elements <code>20px</code> of <code>margin</code>.');",
         "assert($(\".green-box\").css(\"margin-bottom\") === \"20px\", 'message: Your <code>green-box</code> class should give the bottom of elements <code>20px</code> of <code>margin</code>.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Añade márgenes diferentes a cada lado de un elemento",
+      "type": "waypoint",
+      "titleEs": "Añade márgenes diferentes a cada lado de un elemento",
       "descriptionEs": [
         "A veces querrás personalizar un elemento para que tenga un margen (<code>margin</code>) diferente en cada uno de sus lados.",
         "CSS te permite controlar el margen de un elemento en los cuatro lados superior, derecho, inferior e izquierdo con las propiedades <code>margin-top</code>, <code>margin-right</code>, <code>margin-bottom</code> y <code>margin-left</code>. ",
         "Da a la caja verde un margen (<code>margin</code>) de <code>40px</code> en las partes superior e izquierda, pero sólo <code>20px</code> en su parte inferior y al lado derecho."
       ],
-      "nameDe": "Wegpunkt: Füge jeder Seite eines Elements unterschiedlichen Außenabstand hinzu",
-      "descriptionDe": [
-        "Gib der grünen Box einen Außenabstand – also <code>margin</code> – von 40 Pixeln auf der oberen und linken Seite, aber nur 20 Pixel auf der unteren und rechten Seite.",
-        "CSS erlaubt dir ebenfalls den Außenabstand auf jeder Seite einzeln mit den Eigenschaften <code>margin-top</code>, <code>margin-right</code>, <code>margin-bottom</code> und <code>margin-left</code> zu steuern."
-      ],
-     "namePtBR": "Dê Valores Diferentes de Margem a Cada Lado de um Elemento",
-     "descriptionPtBR": [
-        "Talvez você queira personalizar um elemento para que possua uma margem (<code>margin</code>) diferente em cada um de seus lados.",
-        "O CSS permite controlar a margem de um elemento em todos os seus quatro lados: superior, direito, inferior e esquerdo, com as propriedades <code>margin-top</code>, <code>margin-right</code>, <code>margin-bottom</code> e <code>margin-left</code>.",
-        "Dê para a caixa verde uma margem (<code>margin</code>) de <code>40px</code> nas partes superior e esquerda, e de apenas <code>20px</code> nas partes inferior e direita."
-      ],
-      "type": "waypoint"
+      "titleDe": "Wegpunkt: Füge jeder Seite eines Elements unterschiedlichen Außenabstand hinzu",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08826",
+      "descriptionPtBR": [
+        "Ao invés de especificar as propriedades <code>padding-top</code>, <code>padding-right</code>, <code>padding-bottom</code> e <code>padding-left</code> de um elemento, você pode especificar todas elas em uma só linha, assim:",
+        "<code>padding: 10px 20px 10px 20px;</code>",
+        "Estes quatro valores funcionam como um relógio: cima, direita, baixo e esquerda, e produzirão o mesmo resultado das quatro instruções de preenchimento.",
+        "Use a <code>notação em sentido horário</code> para dar para a classe \"<code>.green-box</code>\" um preenchimento de <code>40px</code> nas partes superior e esquerda, mas de apenas <code>20px</code> em sua parte inferior e ao lado direito."
+      ],
+      "namePtBR": "Use Notação em Sentido Horário para Especificar o Preenchimento de um Elemento",
+      "descriptionDe": [
+        "Gib der Klasse \".green-box\" mit einer Notation im Uhrzeigersinn einen Innenabstand – <code>padding</code> – von 40 Pixeln auf der oberen und linken Seite, aber nur 20 Pixel auf der unteren und rechten Seite.",
+        "Anstatt die Eigenschaften <code>padding-top</code>, <code>padding-right</code>, <code>padding-bottom</code> und <code>padding-left</code> zu verwenden, kannst du sie alle in einer Zeile schreiben: <code>padding: 10px 20px 10px 20px;</code>",
+        "Diese vier Werte funktionieren wie eine Uhr: oben, rechts, unten und links. Sie bedeuten exakt das selbe wie die seitenspezifischen Anweisungen."
+      ],
       "title": "Use Clockwise Notation to Specify the Padding of an Element",
       "description": [
         "Instead of specifying an element's <code>padding-top</code>, <code>padding-right</code>, <code>padding-bottom</code>, and <code>padding-left</code> properties, you can specify them all in one line, like this:",
@@ -3256,31 +3268,32 @@
         "assert($(\".green-box\").css(\"padding-bottom\") === \"20px\", 'message: Your <code>green-box</code> class should give the bottom of elements <code>20px</code> of <code>padding</code>.');",
         "assert($(\".green-box\").css(\"padding-left\") === \"40px\", 'message: Your <code>green-box</code> class should give the left of elements <code>40px</code> of <code>padding</code>.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Utiliza notación en sentido horario para especificar el relleno de un elemento",
+      "type": "waypoint",
+      "titleEs": "Utiliza notación en sentido horario para especificar el relleno de un elemento",
       "descriptionEs": [
         "En lugar de especificar las propiedades <code>padding-top</code>, <code>padding-right</code>, <code>padding-bottom</code> y <code>padding-left</code> de un elemento, puedes especificar todas en una sóla línea, así: ",
         "<code>padding: 10px 20px 10px 20px;</code>",
         "Estos cuatro valores funcionan como un reloj: arriba, derecha, abajo, izquierda, y producirán exactamente el mismo resultado de las cuatro instrucciones de relleno.",
         "Usa la notación en sentido horario para dar a la clase \"<code>.green-box</code>\" un relleno de <code>40px</code> en las partes superior e izquierda, pero sólo <code>20px</code> en su parte inferior y al lado derecho ."
       ],
-      "nameDe": "Wegpunkt: Nutze die Notation im Uhrzeigersinn um den Innenabstand eines Elements zu bestimmen",
-      "descriptionDe": [
-        "Gib der Klasse \".green-box\" mit einer Notation im Uhrzeigersinn einen Innenabstand – <code>padding</code> – von 40 Pixeln auf der oberen und linken Seite, aber nur 20 Pixel auf der unteren und rechten Seite.",
-        "Anstatt die Eigenschaften <code>padding-top</code>, <code>padding-right</code>, <code>padding-bottom</code> und <code>padding-left</code> zu verwenden, kannst du sie alle in einer Zeile schreiben: <code>padding: 10px 20px 10px 20px;</code>",
-        "Diese vier Werte funktionieren wie eine Uhr: oben, rechts, unten und links. Sie bedeuten exakt das selbe wie die seitenspezifischen Anweisungen."
-      ],
-     "namePtBR": "Use Notação em Sentido Horário para Especificar o Preenchimento de um Elemento",
-     "descriptionPtBR": [
-        "Ao invés de especificar as propriedades <code>padding-top</code>, <code>padding-right</code>, <code>padding-bottom</code> e <code>padding-left</code> de um elemento, você pode especificar todas elas em uma só linha, assim:",
-        "<code>padding: 10px 20px 10px 20px;</code>",
-        "Estes quatro valores funcionam como um relógio: cima, direita, baixo e esquerda, e produzirão o mesmo resultado das quatro instruções de preenchimento.",
-        "Use a <code>notação em sentido horário</code> para dar para a classe \"<code>.green-box</code>\" um preenchimento de <code>40px</code> nas partes superior e esquerda, mas de apenas <code>20px</code> em sua parte inferior e ao lado direito."
-      ],
-      "type": "waypoint"
+      "titleDe": "Wegpunkt: Nutze die Notation im Uhrzeigersinn um den Innenabstand eines Elements zu bestimmen",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9afdf08726",
+      "descriptionPtBR": [
+        "Vamos praticar isso outra vez, mas desta vez será com a margem (<code>margin</code>).",
+        "Ao invés de especificar as propriedades <code>margin-top</code>, <code>margin-right</code>, <code>margin-bottom</code>, e <code>margin-left</code> de um elemento, você pode especificar todas elas em apenas uma linha assim:",
+        "<code>margin: 10px 20px 10px 20px;</code>",
+        "Estes quatro valores funcionam como um relógio: cima, direita, baixo e esquerda, e produzirão o mesmo resultado das quatro instruções de margem.",
+        "Use a <code>notação em sentido horário</code> para dar para a classe \"<code>.green-box</code>\" uma margem de <code>40px</code> nas partes superior e esquerda, mas de apenas <code>20px</code> em sua parte inferior e ao lado direito."
+      ],
+      "namePtBR": "Use Notação em Sentido Horário para Especificar a Margem de um Elemento",
+      "descriptionDe": [
+        "Versuchen wir das noch einmal, aber diesmal mit dem Außenabstand – also <code>margin</code>. Nutze die Notation im Uhrzeigersinn – auch <code>Clockwise Notation</code> genannt – um einem Element 40 Pixel Außenabstand auf der oberen und linken Seite, aber nur 20 Pixel auf der unteren und rechten Seite zu verleihen.",
+        "Anstatt die Eigenschaften <code>margin-top</code>, <code>margin-right</code>, <code>margin-bottom</code> und <code>margin-left</code> zu verwenden, kannst du alle in eine Zeile schreiben: <code>margin: 10px 20px 10px 20px;</code>",
+        "Diese vier Werte funktionieren wieder wie eine Uhr: oben, rechts, unten und links. Sie meinen exakt das gleiche wie die seitenspezifischen Anweisungen."
+      ],
       "title": "Use Clockwise Notation to Specify the Margin of an Element",
       "description": [
         "Let's try this again, but with <code>margin</code> this time.",
@@ -3330,8 +3343,8 @@
         "assert($(\".green-box\").css(\"margin-bottom\") === \"20px\", 'message: Your <code>green-box</code> class should give the bottom of elements <code>20px</code> of <code>margin</code>.');",
         "assert($(\".green-box\").css(\"margin-left\") === \"40px\", 'message: Your <code>green-box</code> class should give the left of elements <code>40px</code> of <code>margin</code>.');"
       ],
-      "challengeType": 0,
-      "nameEs": "Utiliza notación en sentido horario para especificar el margen de un elemento",
+      "type": "waypoint",
+      "titleEs": "Utiliza notación en sentido horario para especificar el margen de un elemento",
       "descriptionEs": [
         "Vamos a intentar esto de nuevo, pero esta vez con el margen (<code>margin</code>).",
         "En lugar de especificar las propiedades <code>margin-top</code>, <code>margin-right</code>, <code>margin-bottom</code>, y <code>margin-left</code> de un elemento, puedes especificarlas en una sóla línea así: ",
@@ -3339,21 +3352,8 @@
         "Estos cuatro valores funcionan como un reloj: arriba, derecha, abajo, izquierda, y producirán exactamente el mismo resultado de las cuatro instrucciones que especifican el margen.",
         "Usa <code>notación en sentido horario</code> para dar al elemento con la clase <code>green-box</code> un margen de <code>40px</code> en las partes superior e izquierda, pero sólo <code>20px</code> en su parte inferior y al lado derecho ."
       ],
-      "nameDe": "Wegpunkt: Nutze die Notation im Uhrzeigersinn um den Außenabstand eines Elements zu bestimmen",
-      "descriptionDe": [
-        "Versuchen wir das noch einmal, aber diesmal mit dem Außenabstand – also <code>margin</code>. Nutze die Notation im Uhrzeigersinn – auch <code>Clockwise Notation</code> genannt – um einem Element 40 Pixel Außenabstand auf der oberen und linken Seite, aber nur 20 Pixel auf der unteren und rechten Seite zu verleihen.",
-        "Anstatt die Eigenschaften <code>margin-top</code>, <code>margin-right</code>, <code>margin-bottom</code> und <code>margin-left</code> zu verwenden, kannst du alle in eine Zeile schreiben: <code>margin: 10px 20px 10px 20px;</code>",
-        "Diese vier Werte funktionieren wieder wie eine Uhr: oben, rechts, unten und links. Sie meinen exakt das gleiche wie die seitenspezifischen Anweisungen."
-      ],
-     "namePtBR": "Use Notação em Sentido Horário para Especificar a Margem de um Elemento",
-     "descriptionPtBR": [
-        "Vamos praticar isso outra vez, mas desta vez será com a margem (<code>margin</code>).",
-        "Ao invés de especificar as propriedades <code>margin-top</code>, <code>margin-right</code>, <code>margin-bottom</code>, e <code>margin-left</code> de um elemento, você pode especificar todas elas em apenas uma linha assim:",
-        "<code>margin: 10px 20px 10px 20px;</code>",
-        "Estes quatro valores funcionam como um relógio: cima, direita, baixo e esquerda, e produzirão o mesmo resultado das quatro instruções de margem.",
-        "Use a <code>notação em sentido horário</code> para dar para a classe \"<code>.green-box</code>\" uma margem de <code>40px</code> nas partes superior e esquerda, mas de apenas <code>20px</code> em sua parte inferior e ao lado direito."
-      ],
-      "type": "waypoint"
+      "titleDe": "Wegpunkt: Nutze die Notation im Uhrzeigersinn um den Außenabstand eines Elements zu bestimmen",
+      "challengeType": 0
     },
     {
       "id": "bad87fee1348bd9aedf08736",
@@ -3374,26 +3374,25 @@
         "assert($(\"body\").css(\"background-color\") === \"rgb(0, 0, 0)\", 'message: Give your <code>body</code> element the <code>background-color</code> of black.');",
         "assert(code.match(/<style>\\s*body\\s*\\{\\s*background.*\\s*:\\s*.*;?\\s*\\}\\s*<\\/style>/i), 'message: Make sure your CSS rule is properly formatted with both opening and closing curly brackets.');"
       ],
+      "descriptionPtBR": [
+        "Agora vamos recomeçar e falar sobre herança em CSS.",
+        "Cada página HTML possui um corpo (<code>body</code>).",
+        "Podemos demonstrar que o elemento (<code>body</code>) existe aqui, ao dar a ele uma cor de fundo (<code>background-color</code>) preta.",
+        "Podemos fazer isso adicionando o seguinte ao nosso elemento <code>style</code>:",
+        "<code>body {</code>",
+        "<code>&nbsp;&nbsp;background-color: black;</code>",
+        "<code>}</code>"
+      ],
+      "namePtBR": "Dê Estilo ao Elemento Body em HTML",
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Da estilo en HTML al elemento cuerpo",
+      "titleEs": "Da estilo en HTML al elemento cuerpo",
       "descriptionEs": [
         "Ahora vamos a empezar de nuevo y hablaremos de herencia CSS.",
         "Cada página HTML tiene un cuerpo (<code>body</code>).",
         "Podemos demostrar que el elemento (<code>body</code>) existe aquí, dandole un color de fondo (<code>background-color</code>) negro.",
         "Podemos hacer esto añadiendo lo siguiente a nuestro elemento <code>style</code>:",
         "<blockquote>body {<br>&nbsp;&nbsp;background-color: black;<br>}</blockquote>"
-
-      ],
-     "namePtBR": "Dê Estilo ao Elemento Body em HTML",
-     "descriptionPtBR": [
-        "Agora vamos recomeçar e falar sobre herança em CSS.",
-        "Cada página HTML possui um corpo (<code>body</code>).",
-        "Podemos demonstrar que o elemento (<code>body</code>) existe aqui, ao dar a ele uma cor de fundo (<code>background-color</code>) preta.",
-        "Podemos fazer isso adicionando o seguinte ao nosso elemento <code>style</code>:",
-        "<code>body {</code>",
-        "<code>&nbsp;&nbsp;background-color: black;</code>",
-        "<code>}</code>"
       ]
     },
     {
@@ -3423,23 +3422,23 @@
         "assert(($(\"h1\").length > 0 && $(\"h1\").css(\"font-family\").match(/monospace/i)), 'message: Your <code>h1</code> element should inherit the font <code>Monospace</code> from your <code>body</code> element.');",
         "assert(($(\"h1\").length > 0 && $(\"h1\").css(\"color\") === \"rgb(0, 128, 0)\"), 'message: Your <code>h1</code> element should inherit the color green from your <code>body</code> element.');"
       ],
+      "descriptionPtBR": [
+        "Já demonstramos que cada página HTML possui um corpo (<code>body</code>), e que podemos dar estilo a ele através do CSS.",
+        "Observe que você pode dar estilo ao seu elemento <code>body</code> como a qualquer outro elemento HTML, e que todos os outros elementos herdarão os estilos de seu elemento <code>body</code>.",
+        "Em primeiro lugar, crie um elemento <code>h1</code> com o texto <code>Hello World</code>",
+        "Depois, dê a todos os elementos de sua página uma cor verde (<code>green</code>) adicionando <code>color: green;</code> na declaração de estilo de seu elemento <code>body</code>.",
+        "Por último, dê ao seu elemento <code>body</code> o tipo de fonte <code>Monospace</code> adicionando <code>font-family: Monospace;</code> na declaração de estilo de seu elemento <code>body</code>."
+      ],
+      "namePtBR": "Herde Estilos do Elemento Body",
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Hereda estilos del elemento cuerpo",
+      "titleEs": "Hereda estilos del elemento cuerpo",
       "descriptionEs": [
         "Ya hemos demostrado que cada página HTML tiene un cuerpo (<code>body</code>), y que puede dársele estilo CSS.",
         "Recuerda que puedes dar estilo de tu elemento <code>body</code> como a cualquier otro elemento HTML, y que todos tus otros elementos heredarán sus estilos de tu elemento <code>body</code>.",
         "En primer lugar, crea un elemento <code>h1</code> con el texto <code>Hello World</code>",
         "Después, vamos a darle a todos los elementos de tu página el color verde (<code>green</code>) añadiendo <code>color: green;</code> a la declaración de estilo de tu elemento <code>body</code>.",
         "Por último, da a tu elemento <code>body</code> el tipo de letra <code>Monospace</code> añadiendo <code>font-family: Monospace;</code> a la declaración del estilo de tu elemento <code>body</code>."
-      ],
-     "namePtBR": "Herde Estilos do Elemento Body",
-     "descriptionPtBR": [
-        "Já demonstramos que cada página HTML possui um corpo (<code>body</code>), e que podemos dar estilo a ele através do CSS.",
-        "Observe que você pode dar estilo ao seu elemento <code>body</code> como a qualquer outro elemento HTML, e que todos os outros elementos herdarão os estilos de seu elemento <code>body</code>.",
-        "Em primeiro lugar, crie um elemento <code>h1</code> com o texto <code>Hello World</code>",
-        "Depois, dê a todos os elementos de sua página uma cor verde (<code>green</code>) adicionando <code>color: green;</code> na declaração de estilo de seu elemento <code>body</code>.",
-        "Por último, dê ao seu elemento <code>body</code> o tipo de fonte <code>Monospace</code> adicionando <code>font-family: Monospace;</code> na declaração de estilo de seu elemento <code>body</code>."
       ]
     },
     {
@@ -3467,23 +3466,23 @@
         "assert(code.match(/\\.pink-text\\s*\\{\\s*color\\s*:\\s*pink\\s*;\\s*\\}/g), 'message: Your <code>&#60;style&#62;</code> should have a <code>pink-text</code> CSS class with its color set to pink.');",
         "assert($(\"h1\").css(\"color\") === \"rgb(255, 192, 203)\", 'message: Your <code>h1</code> element should be pink.');"
       ],
+      "descriptionPtBR": [
+        "As vezes os elementos HTML recebem múltiplos estilos que entram em conflito entre si.",
+        "Por exemplo, o elemento <code>h1</code> não pode ser verde e rosa ao mesmo tempo.",
+        "Vamos ver o que acontece quando criamos uma classe que faz com que o texto seja rosa e então o aplicamos a um elemento. Isso irá sobrepor (<code>override</code>) a propriedade CSS <code>color: green</code> do elemento <code>body</code> de nossa classe?",
+        "Crie uma classe CSS chamada <code>pink-text</code>, que dê a cor rosa a um elemento.",
+        "Depois, adicione a classe <code>pink-text</code> ao seu elemento <code>h1</code>."
+      ],
+      "namePtBR": "Priorize um Estilo Sobre o Outro",
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Priorizar un estilo sobre otro",
+      "titleEs": "Priorizar un estilo sobre otro",
       "descriptionEs": [
         "A veces los elementos HTML recibirán múltiples estilos que entran en conflicto entre sí.",
         "Por ejemplo, el elemento <code>h1</code> no puede ser verde y rosa al mismo tiempo.",
         "Vamos a ver lo que sucede cuando creamos una clase que hace rosado el texto y luego lo aplicamos a un elemento. ¿Anulará (<code>override</code>) nuestra clase la propiedad CSS <code>color: green</code> del elemento <code>body</code>?",
         "Crea una clase CSS llamada <code>pink-text</code> que le da a un elemento el color rosado.",
         "Ponle a tu elemento <code>h1</code> la clase de <code>pink-text</code>."
-      ],
-     "namePtBR": "Priorize um Estilo Sobre o Outro",
-     "descriptionPtBR": [
-        "As vezes os elementos HTML recebem múltiplos estilos que entram em conflito entre si.",
-        "Por exemplo, o elemento <code>h1</code> não pode ser verde e rosa ao mesmo tempo.",
-        "Vamos ver o que acontece quando criamos uma classe que faz com que o texto seja rosa e então o aplicamos a um elemento. Isso irá sobrepor (<code>override</code>) a propriedade CSS <code>color: green</code> do elemento <code>body</code> de nossa classe?",
-        "Crie uma classe CSS chamada <code>pink-text</code>, que dê a cor rosa a um elemento.",
-        "Depois, adicione a classe <code>pink-text</code> ao seu elemento <code>h1</code>."
       ]
     },
     {
@@ -3518,9 +3517,20 @@
         "assert($(\".pink-text\").hasClass(\"blue-text\"), 'message: Both <code>blue-text</code> and <code>pink-text</code> should belong to the same <code>h1</code> element.');",
         "assert($(\"h1\").css(\"color\") === \"rgb(0, 0, 255)\", 'message: Your <code>h1</code> element should be blue.');"
       ],
+      "descriptionPtBR": [
+        "Nossa classe \"pink-text\" anulou a declaração CSS de nosso elemento <code>body</code>!",
+        "Acabamos de demonstrar que nossas classes irão sobrepor o CSS do elemento <code>body</code>. Sendo assim, nossa seguinte pergunta lógica é: O que podemos fazer para sobrepor a nossa classe <code>pink-text</code>?",
+        "Crie uma classe tradicional com CSS chamada <code>texto-azul</code>, que possa dar a um elemento a cor azul. Tenha a certeza de deixá-la abaixo de sua declaração da classe <code>pink-text</code>.",
+        "Aplique a classe <code>blue-text</code> ao seu elemento <code>h1</code>, além da classe <code>pink-text</code>, e vamos ver qual delas ganhará.",
+        "Lembre que a adição de vários atributos de classe a um elemento HTML se faz utilizando espaços entre ambos, assim:",
+        "<code>class=\"class1 class2\"</code>",
+        "Nota: A ordem em que as classes são listadas em HTML não tem importância.",
+        "Contudo, a ordem de declarações de <code>classe</code> no <code>&#60;style&#62;</code> é importante. A segunda declaração sempre terá precedência pela primeira. Já que <code>.blue-text</code> é declarado depois, ele irá sobrepor os atributos de <code>.pink-text</code>."
+      ],
+      "namePtBR": "Sobreponha Estilos com CSS Posterior",
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Anula estilos con CSS posterior",
+      "titleEs": "Anula estilos con CSS posterior",
       "descriptionEs": [
         "¡Nuestra clase \"pink-text\" anuló la declaración CSS de nuestro elemento <code>body</code>!",
         "Acabamos de demostrar que nuestras clases anularán el CSS del elemento <code>body</code>. Así que la siguiente pregunta lógica es: ¿qué podemos hacer para anular nuestra clase <code>pink-text</code>?",
@@ -3530,17 +3540,6 @@
         "<code>class=\"clase1 clase2\"</code>",
         "Nota: No importa el orden en que las clases aparecen en el HTML.",
         "Sin embargo, el orden de las declaraciones <code>class</code> en la sección <code>&#60;style&#62;</code> sí son importantes. La segunda declaración siempre precederá a la primera. Debido a que <code>.blue-text</code> es declarada después, esta anula los atributos de <code>.pink-text</code>"
-      ],
-     "namePtBR": "Sobreponha Estilos com CSS Posterior",
-     "descriptionPtBR": [
-        "Nossa classe \"pink-text\" anulou a declaração CSS de nosso elemento <code>body</code>!",
-        "Acabamos de demonstrar que nossas classes irão sobrepor o CSS do elemento <code>body</code>. Sendo assim, nossa seguinte pergunta lógica é: O que podemos fazer para sobrepor a nossa classe <code>pink-text</code>?",
-        "Crie uma classe tradicional com CSS chamada <code>texto-azul</code>, que possa dar a um elemento a cor azul. Tenha a certeza de deixá-la abaixo de sua declaração da classe <code>pink-text</code>.",
-        "Aplique a classe <code>blue-text</code> ao seu elemento <code>h1</code>, além da classe <code>pink-text</code>, e vamos ver qual delas ganhará.",
-        "Lembre que a adição de vários atributos de classe a um elemento HTML se faz utilizando espaços entre ambos, assim:",
-        "<code>class=\"class1 class2\"</code>",
-        "Nota: A ordem em que as classes são listadas em HTML não tem importância.",
-        "Contudo, a ordem de declarações de <code>classe</code> no <code>&#60;style&#62;</code> é importante. A segunda declaração sempre terá precedência pela primeira. Já que <code>.blue-text</code> é declarado depois, ele irá sobrepor os atributos de <code>.pink-text</code>."
       ]
     },
     {
@@ -3581,9 +3580,20 @@
         "assert(!code.match(/<h1.*style.*>/gi), 'message: Do not give your <code>h1</code> any <code>style</code> attributes.');",
         "assert($(\"h1\").css(\"color\") === \"rgb(255, 165, 0)\", 'message: Your <code>h1</code> element should be orange.');"
       ],
+      "descriptionPtBR": [
+        "Acabamos de demonstrar que os navegadores fazem a leitura do CSS de cima para baixo. Isso significa que, em caso de um conflito, o navegador utilizará a última declaração CSS.",
+        "Mas ainda não terminamos, pois existem outras formas para sobrepor CSS. Você se lembra dos atributos <code>id</code>?",
+        "Vamos sobrepor suas classes <code>pink-text</code> e <code>blue-text</code>, e fazer com que seu elemento <code>h1</code> seja laranja. Faremos isso aplicando uma <code>id</code> para o elemento <code>h1</code> e então estilizando essa <code>id</code>.",
+        "Dê ao seu elemento <code>h1</code> o atributo <code>id</code> de nome <code>orange-text</code>. Relembre que os atributos id são assim:",
+        "<code>#brown-text {</code>",
+        "<code>&nbsp;&nbsp;color: brown;</code>",
+        "<code>}</code>",
+        "Nota: Não importa se você declara este CSS acima ou abaixo da classe de texto cor de rosa, já que atributos id sempre terão prioridade."
+      ],
+      "namePtBR": "Sobreponha a Declaração de Classes Estilizando Atributos ID",
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Anula la declaración de clases dando estilo a los atributos ID",
+      "titleEs": "Anula la declaración de clases dando estilo a los atributos ID",
       "descriptionEs": [
         "Acabamos de demostrar que los navegadores leen CSS de arriba hacia abajo. Eso significa que, en el caso de un conflicto, el navegador utilizará la última declaración CSS. ",
         "Pero no hemos terminado todavía. Hay otras maneras con las que puedes anular CSS. ¿Te acuerdas de los atributos id?",
@@ -3594,17 +3604,6 @@
         "Crea una declaración CSS para tu identificación <code>orange-text</code> en tu elemento <code>style</code>. He aquí un ejemplo de como se ve esto: ",
         "<blockquote>#brown-text {<br>&nbsp;&nbsp;color: brown;<br>}</blockquote>",
         "Nota: No importa si usted declara este css encima o debajo de la clase de texto de color rosa, ya atributo id siempre tendrá prioridad."
-      ],
-     "namePtBR": "Sobreponha a Declaração de Classes Estilizando Atributos ID",
-     "descriptionPtBR": [
-        "Acabamos de demonstrar que os navegadores fazem a leitura do CSS de cima para baixo. Isso significa que, em caso de um conflito, o navegador utilizará a última declaração CSS.",
-        "Mas ainda não terminamos, pois existem outras formas para sobrepor CSS. Você se lembra dos atributos <code>id</code>?",
-        "Vamos sobrepor suas classes <code>pink-text</code> e <code>blue-text</code>, e fazer com que seu elemento <code>h1</code> seja laranja. Faremos isso aplicando uma <code>id</code> para o elemento <code>h1</code> e então estilizando essa <code>id</code>.",
-        "Dê ao seu elemento <code>h1</code> o atributo <code>id</code> de nome <code>orange-text</code>. Relembre que os atributos id são assim:",
-        "<code>#brown-text {</code>",
-        "<code>&nbsp;&nbsp;color: brown;</code>",
-        "<code>}</code>",
-        "Nota: Não importa se você declara este CSS acima ou abaixo da classe de texto cor de rosa, já que atributos id sempre terão prioridade."
       ]
     },
     {
@@ -3643,23 +3642,23 @@
         "assert(code.match(/<h1[\\s\\S]*?style/gi) && code.match(/<h1[\\s\\S]*?style[\\s\\S]*?color\\s*?:/gi), 'message: Give your <code>h1</code> element the inline style of <code>color&#58; white</code>.');",
         "assert($(\"h1\").css(\"color\") === \"rgb(255, 255, 255)\", 'message: Your <code>h1</code> element should be white.');"
       ],
+      "descriptionPtBR": [
+        "Certo, nós demonstramos que declarações de id sobrepoem as declarações de classe, independente do lugar onde são declarados em seu elemento <code>style</code> no CSS.",
+        "Existem outras formas em que você pode sobrepor CSS. Você se lembra de estilos inline?",
+        "Use um estilo <code>inline</code> para tentar fazer com que nosso elemento <code>h1</code> tenha a cor branca. Relembre que estilos inline são assim:",
+        "<code>&#60;h1 style=\"color: green\"&#62;</code>",
+        "Deixe as classes <code>blue-text</code> e <code>pink-text</code> em seu elemento <code>h1</code>."
+      ],
+      "namePtBR": "Sobreponha a Declaração de Classes com Estilos Inline",
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Anula declaraciones de clase con estilos en línea",
+      "titleEs": "Anula declaraciones de clase con estilos en línea",
       "descriptionEs": [
         "Así que hemos demostrado que las declaraciones de identificadores anulan las declaraciones de clase, independientemente del lugar donde se declaran en tu elemento de estilo CSS <code>style</code>.",
         "Hay otras maneras en las que puedes anular CSS. ¿Te acuerdas de los estilos en línea?",
         "Utiliza un <code>estilo en línea</code> para tratar de hacer blanco nuestro elemento <code>h1</code>. Recuerda, los estilos en línea se ven así: ",
         "<code>&#60;h1 style=\"color: green\"&#62;</code>",
         "Deja las clases <code>blue-text</code> y <code>pink-text</code> en tu elemento <code>h1</code>."
-      ],
-     "namePtBR": "Sobreponha a Declaração de Classes com Estilos Inline",
-     "descriptionPtBR": [
-        "Certo, nós demonstramos que declarações de id sobrepoem as declarações de classe, independente do lugar onde são declarados em seu elemento <code>style</code> no CSS.",
-        "Existem outras formas em que você pode sobrepor CSS. Você se lembra de estilos inline?",
-        "Use um estilo <code>inline</code> para tentar fazer com que nosso elemento <code>h1</code> tenha a cor branca. Relembre que estilos inline são assim:",
-        "<code>&#60;h1 style=\"color: green\"&#62;</code>",
-        "Deixe as classes <code>blue-text</code> e <code>pink-text</code> em seu elemento <code>h1</code>."
       ]
     },
     {
@@ -3701,9 +3700,19 @@
         "assert(code.match(/pink.*\\!important;/gi), 'message: Your <code>pink-text</code> class should have the <code>!important</code> keyword to override all other declarations.');",
         "assert($(\"h1\").css(\"color\") === \"rgb(255, 192, 203)\", 'message: Your <code>h1</code> element should be pink.');"
       ],
+      "descriptionPtBR": [
+        "Isso! Demonstramos que os estilos inline irão sobrepor todas as declarações CSS de seu elemento <code>style</code>.",
+        "Mas, espere! Há uma última forma de sobrepor com CSS. Este é o método mais poderoso de todos. Contudo, antes de colocá-lo em prática, vamos falar sobre os motivos que podem fazer você querer sobrepor CSS.",
+        "Em diversas situações, você usará bibliotecas CSS. Pode ser que essas bibliotecas sobreponham acidentalmente o seu próprio CSS. Por isso, quando você precisar estar seguro de que um elemento possui um CSS específico, você poderá utilizar <code>!important</code>.",
+        "Certo, vamos voltar para a nossa declaração de classe <code>pink-text</code>. Relembre que nossa classe <code>pink-text</code> foi sobreposta pelas declarações de classe posteriores, por declarações id e por estilos inline.",
+        "Vamos adicionar nossa palavra-clave <code>!important</code> para sua declaração de cor de <code>pink-text</code> para que possamos estar 100% seguros que seu elemento <code>h1</code> será sempre cor de rosa.",
+        "Um exemplo para fazer isso é:",
+        "<code>color: red !important;</code>"
+      ],
+      "namePtBR": "Sobreponha Todos os Outros Elementos Utilizando Important",
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Anula todos los demás estilos utilizando Important",
+      "titleEs": "Anula todos los demás estilos utilizando Important",
       "descriptionEs": [
         "¡Hurra! Demostramos que los estilos en línea anularán todas las declaraciones CSS de tu elemento <code>style</code>. ",
         "¡Pero espera! Hay una última forma de anular CSS. Este es el método más poderoso de todos. Pero antes de hacerlo, vamos a hablar de por qué puedes querer anular CSS. ",
@@ -3712,16 +3721,6 @@
         "Vamos a añadir la palabra clave <code>!important</code> a tu declaración del color de <code>pink-text</code> para estar 100% seguros que tu elemento <code>h1</code> será rosado.",
         "Un ejemplo de cómo hacer esto es:",
         "<code>color: red !important;</code>"
-      ],
-     "namePtBR": "Sobreponha Todos os Outros Elementos Utilizando Important",
-     "descriptionPtBR": [
-        "Isso! Demonstramos que os estilos inline irão sobrepor todas as declarações CSS de seu elemento <code>style</code>.",
-        "Mas, espere! Há uma última forma de sobrepor com CSS. Este é o método mais poderoso de todos. Contudo, antes de colocá-lo em prática, vamos falar sobre os motivos que podem fazer você querer sobrepor CSS.",
-        "Em diversas situações, você usará bibliotecas CSS. Pode ser que essas bibliotecas sobreponham acidentalmente o seu próprio CSS. Por isso, quando você precisar estar seguro de que um elemento possui um CSS específico, você poderá utilizar <code>!important</code>.",
-        "Certo, vamos voltar para a nossa declaração de classe <code>pink-text</code>. Relembre que nossa classe <code>pink-text</code> foi sobreposta pelas declarações de classe posteriores, por declarações id e por estilos inline.",
-        "Vamos adicionar nossa palavra-clave <code>!important</code> para sua declaração de cor de <code>pink-text</code> para que possamos estar 100% seguros que seu elemento <code>h1</code> será sempre cor de rosa.",
-        "Um exemplo para fazer isso é:",
-        "<code>color: red !important;</code>"
       ]
     },
     {
@@ -3744,21 +3743,21 @@
         "assert($(\"body\").css(\"background-color\") === \"rgb(0, 0, 0)\", 'message: Give your <code>body</code> element the background-color of black.');",
         "assert(code.match(/body\\s*{(([\\s\\S]*;\\s*?)|\\s*?)background.*\\s*:\\s*?#000(000)?((\\s*})|(;[\\s\\S]*?}))/gi), 'message: Use the <code>hex code</code> for the color black instead of the word <code>black</code>. For example <code>body { color&#58; #000000; }</code>');"
       ],
+      "descriptionPtBR": [
+        "Você sabia que existem outras formas para representar as cores em CSS? Uma dessas formas é com o que chamamos de código hexadecimal, ou <code>código hex</code> para abreviar.",
+        "O sistema <code>Decimal</code> nos permite representar quantidades numéricas com os dígitos de zero a nove - assim como nós os utilizamos durante o nosso dia a dia. Já o sistema <code>Hexadecimal</code> inclui estes 10 dígitos e também as letras A, B, C, D, E e F. Isso significa que o Hexadecimal possui um total de 16 dígitos possíveis, ao invés dos 10 possíveis que podemos usar com nosso sistema numérico normal de base 10.",
+        "No CSS, utilizamos 6 dígitos hexadecimais para representar as cores. Por exemplo, <code>#000000</code> é o valor mais baixo possível, e representa a cor preta.",
+        "Substitua a palavra <code>black</code> na cor de fundo (<code>background-color</code>) de nosso elemento <code>body</code> pela sua representação hexadecimal <code>#000000</code>."
+      ],
+      "namePtBR": "Use Código Hexadecimal para Especificar Cores",
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Usa el código hexadecimal para especificar colores",
+      "titleEs": "Usa el código hexadecimal para especificar colores",
       "descriptionEs": [
         "¿Sabías que hay otras maneras de representar los colores en CSS? Una de estas formas es llamada código hexadecimal o <code>código hex</code> para abreviar. ",
         "El sistema <code>Decimal</code> se refiere al que nos permite representar cantidades empleando los dígitos del cero al nueve - los números que la gente usa en la vida cotidiana. El sistema <code>Hexadecimal</code> incluye estos 10 dígitos más las letras A, B, C, D, E y F. Esto significa que Hexadecimal tiene un total de 16 dígitos posibles, en lugar de las 10 posibles que nos da nuestro sistema numérico normal en base 10. ",
         "Con CSS, utilizamos 6 dígitos hexadecimales para representar los colores. Por ejemplo, <code>#000000</code> es el valor más bajo posible, y representa el color negro. ",
         "Reemplaza la palabra <code>black</code> en el color de fondo (<code>background-color</code>) de nuestro elemento <code>body</code> por su representación hexadecimal <code>#000000</code>"
-      ],
-     "namePtBR": "Use Código Hexadecimal para Especificar Cores",
-     "descriptionPtBR": [
-        "Você sabia que existem outras formas para representar as cores em CSS? Uma dessas formas é com o que chamamos de código hexadecimal, ou <code>código hex</code> para abreviar.",
-        "O sistema <code>Decimal</code> nos permite representar quantidades numéricas com os dígitos de zero a nove - assim como nós os utilizamos durante o nosso dia a dia. Já o sistema <code>Hexadecimal</code> inclui estes 10 dígitos e também as letras A, B, C, D, E e F. Isso significa que o Hexadecimal possui um total de 16 dígitos possíveis, ao invés dos 10 possíveis que podemos usar com nosso sistema numérico normal de base 10.",
-        "No CSS, utilizamos 6 dígitos hexadecimais para representar as cores. Por exemplo, <code>#000000</code> é o valor mais baixo possível, e representa a cor preta.",
-        "Substitua a palavra <code>black</code> na cor de fundo (<code>background-color</code>) de nosso elemento <code>body</code> pela sua representação hexadecimal <code>#000000</code>."
       ]
     },
     {
@@ -3780,19 +3779,19 @@
         "assert($(\"body\").css(\"background-color\") === \"rgb(255, 255, 255)\", 'message: Your <code>body</code> element should have the <code>background-color</code> of white.');",
         "assert(code.match(/body\\s*{(([\\s\\S]*;\\s*?)|\\s*?)background.*\\s*:\\s*?#FFF(FFF)?((\\s*})|(;[\\s\\S]*?}))/gi), 'message: Use the <code>hex code</code> for the color white instead of the word <code>white</code>. For example <code>body { color&#58; #FFFFFF; }</code>');"
       ],
+      "descriptionPtBR": [
+        "<code>0</code> é o dígito mais baixo em código hexadecimal, e representa a completa ausência de cor.",
+        "<code>F</code> é o dígito mais alto em código hexadecimal, e representa o máximo de claridade possível.",
+        "Vamos fazer com que a cor de fundo (<code>background-color</code>) em nosso elemento <code>body</code> seja branca, mudando seu código hexadecimal para <code>#FFFFFF</code>."
+      ],
+      "namePtBR": "Use Código Hexadecimal Para dar a Cor Branca a Elementos",
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Usa el código hexadecimal para colorear de blanco los elementos",
+      "titleEs": "Usa el código hexadecimal para colorear de blanco los elementos",
       "descriptionEs": [
         "<code>0</code> es el dígito más bajo en código hexadecimal, y representa una completa ausencia de color.",
         "<code>F</code> es el dígito más alto en código hexadecimal, y representa el máximo brillo posible.",
         "Volvamos blanco el color de fondo (<code>background-color</code>) de nuestro elemento <code>body</code>, cambiando su código hexadecimal por <code>#FFFFFF</code>"
-      ],
-     "namePtBR": "Use Código Hexadecimal Para dar a Cor Branca a Elementos",
-     "descriptionPtBR": [
-        "<code>0</code> é o dígito mais baixo em código hexadecimal, e representa a completa ausência de cor.",
-        "<code>F</code> é o dígito mais alto em código hexadecimal, e representa o máximo de claridade possível.",
-        "Vamos fazer com que a cor de fundo (<code>background-color</code>) em nosso elemento <code>body</code> seja branca, mudando seu código hexadecimal para <code>#FFFFFF</code>."
       ]
     },
     {
@@ -3816,23 +3815,23 @@
         "assert($(\"body\").css(\"background-color\") === \"rgb(255, 0, 0)\", 'message: Give your <code>body</code> element the <code>background-color</code> of red.');",
         "assert(code.match(/body\\s*{(([\\s\\S]*;\\s*?)|\\s*?)background.*\\s*:\\s*?#((F00)|(FF0000))((\\s*})|(;[\\s\\S]*?}))/gi), 'message: Use the <code>hex code</code> for the color red instead of the word <code>red</code>. For example <code>body { color&#58; #FF0000; }</code>');"
       ],
+      "descriptionPtBR": [
+        "Talvez você esteja se perguntando o motivo para usar 6 dígitos para representar uma cor ao invés de apenas um ou dois. Este motivo é que ao usar 6 dígitos, temos acesso a uma enorme variedade de cores.",
+        "Para que você tenha uma ideia, ter 16 valores e 6 posições significa que temos 16 elevado a 6. Isso dá um total de mais de 16 milhões de cores possíveis.",
+        "Os códigos hexadecimais seguem o formato vermelho-verde-azul (<em>red-green-blue</em>), ou formato <code>rgb</code>. Os dois primeiros dígitos do código hexadecimal representam a quantidade de vermelho na cor. O terceiro e o quarto representam a quantidade de verde. Já o quinto e o sexto representam a quantidade de azul.",
+        "Sendo assim, para conseguir um vermelho brilhante, basta que você use <code>F</code> (o dígito mais alto possível) para o primeiro e o segundo dígitos, e <code>0</code> (o dígito mais baixo possível) para o terceiro, quarto, quinto e sexto dígito.",
+        "Faça com que a cor de fundo (<code>background-color</code>) do elemento <code>body</code> seja vermelho, ao dar o código hexadecimal <code>#FF0000</code>."
+      ],
+      "namePtBR": "Use Código Hexadecimal Para dar a Cor Vermelha a Elementos",
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Usa el código hexadecimal para colorear de rojo los elementos",
+      "titleEs": "Usa el código hexadecimal para colorear de rojo los elementos",
       "descriptionEs": [
         "Te puedes estar preguntando por qué usamos 6 dígitos para representar un color en lugar de sólo uno o dos. La respuesta es que el uso de 6 dígitos nos da una enorme variedad. ",
         "¿Cuántos colores son posibles? 16 valores y 6 posiciones significa que tenemos 16 a la sexta potencia, o más de 16 millones de colores posibles. ",
         "Los códigos hexadecimales siguen el formato rojo-verde-azul (<em>red-green-blue</em>) o formato <code>rgb</code>. Los dos primeros dígitos del código hexadecimal representan la cantidad de rojo en el color. El tercer y cuarto dígitos representan la cantidad de verde. El quinto y sexto representan la cantidad de azul .",
         "Así que para conseguir el rojo absolutamente más brillante, basta que uses <code>F</code> para el primer y segundo dígitos (el valor más alto posible) y <code>0</code> para el tercero, cuarto, quinto y sexto dígitos (el valor más bajo posible).",
         "Haz que el color de fondo (<code>background-color</code>) del elemento <code>body</code> sea rojo dándole el código hexadecimal <code>#FF0000</code>"
-      ],
-     "namePtBR": "Use Código Hexadecimal Para dar a Cor Vermelha a Elementos",
-     "descriptionPtBR": [
-        "Talvez você esteja se perguntando o motivo para usar 6 dígitos para representar uma cor ao invés de apenas um ou dois. Este motivo é que ao usar 6 dígitos, temos acesso a uma enorme variedade de cores.",
-        "Para que você tenha uma ideia, ter 16 valores e 6 posições significa que temos 16 elevado a 6. Isso dá um total de mais de 16 milhões de cores possíveis.",
-        "Os códigos hexadecimais seguem o formato vermelho-verde-azul (<em>red-green-blue</em>), ou formato <code>rgb</code>. Os dois primeiros dígitos do código hexadecimal representam a quantidade de vermelho na cor. O terceiro e o quarto representam a quantidade de verde. Já o quinto e o sexto representam a quantidade de azul.",
-        "Sendo assim, para conseguir um vermelho brilhante, basta que você use <code>F</code> (o dígito mais alto possível) para o primeiro e o segundo dígitos, e <code>0</code> (o dígito mais baixo possível) para o terceiro, quarto, quinto e sexto dígito.",
-        "Faça com que a cor de fundo (<code>background-color</code>) do elemento <code>body</code> seja vermelho, ao dar o código hexadecimal <code>#FF0000</code>."
       ]
     },
     {
@@ -3854,19 +3853,19 @@
         "assert($(\"body\").css(\"background-color\") === \"rgb(0, 255, 0)\", 'message: Give your <code>body</code> element the <code>background-color</code> of <code>green</code>.');",
         "assert(code.match(/body\\s*{(([\\s\\S]*;\\s*?)|\\s*?)background.*\\s*:\\s*?#((0F0)|(00FF00))((\\s*})|(;[\\s\\S]*?}))/gi), 'message: Use the <code>hex code</code> for the color green instead of the word <code>green</code>. For example <code>body { color&#58; #00FF00; }</code>');"
       ],
+      "descriptionPtBR": [
+        "Relembre que códigos hexadecimais seguem o formato vermelho-verde-azul (<em>red-green-blue</em>), ou formato <code>rgb</code>. Os dois primeiros dígitos do código hexadecimal representam a quantidade de vermelho na cor. O terceiro e o quarto representam a quantidade de verde. Já o quinto e o sexto representam a quantidade de azul.",
+        "Sendo assim, para conseguir um verde brilhante, basta que você use <code>F</code> (o dígito mais alto possível) para o terceiro e o quarto dígito, e <code>0</code> (o dígito mais baixo possível) para todos os outros dígitos.",
+        "Faça com que a cor de fundo (<code>background-color</code>) do elemento <code>body</code> seja verde ao dar o código hexadecimal <code>#00FF00</code>."
+      ],
+      "namePtBR": "Use Código Hexadecimal para dar a Cor Verde a Elementos",
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Usa el código hexadecimal para colorear de verde los elementos",
+      "titleEs": "Usa el código hexadecimal para colorear de verde los elementos",
       "descriptionEs": [
         "Recuerda que el <code>código hexadecimal</code> sigue el formato rojo-verde-azul o <code>rgb</code>. Los dos primeros dígitos del código hexadecimal representan la cantidad de rojo en el color. El tercer y cuarto dígitos representan la cantidad de verde. El quinto y sexto representan la cantidad de azul.",
         "Así que para conseguir el verde absoluto más brillante, sólo debes usar <code>F</code> en el tercer y cuarto dígitos (el valor más alto posible) y <code>0</code> para todos los otros dígitos (el valor más bajo posible). ",
         "Haz que el color de fondo (<code>background-color</code>) del elemento <code>body</code> sea verde, dándole el código hexadecimal <code>#00FF00</code>"
-      ],
-     "namePtBR": "Use Código Hexadecimal para dar a Cor Verde a Elementos",
-     "descriptionPtBR": [
-        "Relembre que códigos hexadecimais seguem o formato vermelho-verde-azul (<em>red-green-blue</em>), ou formato <code>rgb</code>. Os dois primeiros dígitos do código hexadecimal representam a quantidade de vermelho na cor. O terceiro e o quarto representam a quantidade de verde. Já o quinto e o sexto representam a quantidade de azul.",
-        "Sendo assim, para conseguir um verde brilhante, basta que você use <code>F</code> (o dígito mais alto possível) para o terceiro e o quarto dígito, e <code>0</code> (o dígito mais baixo possível) para todos os outros dígitos.",
-        "Faça com que a cor de fundo (<code>background-color</code>) do elemento <code>body</code> seja verde ao dar o código hexadecimal <code>#00FF00</code>."
       ]
     },
     {
@@ -3888,19 +3887,19 @@
         "assert($(\"body\").css(\"background-color\") === \"rgb(0, 0, 255)\", 'message: Give your <code>body</code> element the <code>background-color</code> of blue.');",
         "assert(code.match(/body\\s*{(([\\s\\S]*;\\s*?)|\\s*?)background.*\\s*:\\s*?#((00F)|(0000FF))((\\s*})|(;[\\s\\S]*?}))/gi), 'message: Use the <code>hex code</code> for the color blue instead of the word <code>blue</code>. For example <code>body { color&#58; #0000FF; }</code>');"
       ],
+      "descriptionPtBR": [
+        "Relembre que códigos hexadecimais seguem o formato vermelho-verde-azul (<em>red-green-blue</em>), ou formato <code>rgb</code>. Os dois primeiros dígitos do código hexadecimal representam a quantidade de vermelho na cor. O terceiro e o quarto representam a quantidade de verde. Já o quinto e o sexto representam a quantidade de azul.",
+        "Para conseguir o azul mais brilhante, utilizamos <code>F</code> (o dígito mais alto possível) no quinto e no sexto dígito, e <code>0</code> (o dígito mais baixo possível) para todos os outros dígitos.",
+        "Faça com que a cor de fundo (<code>background-color</code>) do elemento <code>body</code> seja azul usando o código hexadecimal <code>#0000FF</code>."
+      ],
+      "namePtBR": "Use Código Hexadecimal para dar a Cor Azul a Elementos",
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Usa el código hexadecimal para colorear de azul los elementos",
+      "titleEs": "Usa el código hexadecimal para colorear de azul los elementos",
       "descriptionEs": [
         "Los códigos hexadecimales siguen el formato rojo-verde-azul o <code>rgb</code>. Los dos primeros dígitos del código hexadecimal representan la cantidad de rojo en el color. El tercer y cuarto dígitos representan la cantidad de verde. El quinto y sexto representan la cantidad de azul .",
         "Así que para conseguir el azul absoluto más brillante, utilizamos <code>F</code> para la quinta y sexta cifras (el valor más alto posible) y <code>0</code> para todos los otros dígitos (el valor más bajo posible ). ",
         "Haz que el color de fondo (<code>background-color</code>) del elemento <code>body</code> sea azul, dándole el código hexadecimal <code>#0000FF</code>"
-      ],
-     "namePtBR": "Use Código Hexadecimal para dar a Cor Azul a Elementos",
-     "descriptionPtBR": [
-        "Relembre que códigos hexadecimais seguem o formato vermelho-verde-azul (<em>red-green-blue</em>), ou formato <code>rgb</code>. Os dois primeiros dígitos do código hexadecimal representam a quantidade de vermelho na cor. O terceiro e o quarto representam a quantidade de verde. Já o quinto e o sexto representam a quantidade de azul.",
-        "Para conseguir o azul mais brilhante, utilizamos <code>F</code> (o dígito mais alto possível) no quinto e no sexto dígito, e <code>0</code> (o dígito mais baixo possível) para todos os outros dígitos.",
-        "Faça com que a cor de fundo (<code>background-color</code>) do elemento <code>body</code> seja azul usando o código hexadecimal <code>#0000FF</code>."
       ]
     },
     {
@@ -3922,19 +3921,19 @@
         "assert($(\"body\").css(\"background-color\") === \"rgb(255, 165, 0)\", 'message: Give your <code>body</code> element the <code>background-color</code> of orange.');",
         "assert(code.match(/body\\s*{(([\\s\\S]*;\\s*?)|\\s*?)background.*\\s*:\\s*?#FFA500((\\s*})|(;[\\s\\S]*?}))/gi), 'message: Use the <code>hex code</code> for the color orange instead of the word <code>orange</code>. For example <code>body { color&#58; #FFA500; }</code>');"
       ],
+      "descriptionPtBR": [
+        "A partir dessas três cores puras (vermelho, verde e azul), podemos criar 16 milhões de cores.",
+        "Por exemplo, o laranja é vermelho puro misturado com um pouco de verde, e sem nada de azul.",
+        "Faça com que a cor de fundo do elemento <code>body</code> seja alaranjada, usando o código hexadecimal <code>#FFA500</code>."
+      ],
+      "namePtBR": "Use Código Hexadecimal para Misturar Cores",
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Usa código hex para mezclar colores",
+      "titleEs": "Usa código hex para mezclar colores",
       "descriptionEs": [
         "A partir de estos tres colores puros (rojo, verde y azul), podemos crear 16 millones de colores.",
         "Por ejemplo, el naranja es rojo puro, mezclado con un poco de verde, y sin azul.",
         "Haz que el color de fondo del elemento <code>body</code> sea anaranjado, dándole el código hexadecimal <code>#FFA500</code>"
-      ],
-     "namePtBR": "Use Código Hexadecimal para Misturar Cores",
-     "descriptionPtBR": [
-        "A partir dessas três cores puras (vermelho, verde e azul), podemos criar 16 milhões de cores.",
-        "Por exemplo, o laranja é vermelho puro misturado com um pouco de verde, e sem nada de azul.",
-        "Faça com que a cor de fundo do elemento <code>body</code> seja alaranjada, usando o código hexadecimal <code>#FFA500</code>."
       ]
     },
     {
@@ -3956,19 +3955,19 @@
         "assert($(\"body\").css(\"background-color\") === \"rgb(128, 128, 128)\", 'message: Give your <code>body</code> element the <code>background-color</code> of gray.');",
         "assert(code.match(/body\\s*{(([\\s\\S]*;\\s*?)|\\s*?)background.*\\s*:\\s*?#808080((\\s*})|(;[\\s\\S]*?}))/gi), 'message: Use the <code>hex code</code> the color gray instead of the word <code>gray</code>. For example <code>body { color&#58; #808080; }</code>');"
       ],
+      "descriptionPtBR": [
+        "A partir dessas três cores puras (vermelho, verde e azul), podemos criar 16 milhões de cores.",
+        "Também podemos criar tons de cinza diferentes ao misturar essas três cores.",
+        "Faça com que a cor de fundo do elemento <code>body</code> seja cinza, usando o código hexadecimal <code>#808080</code>."
+      ],
+      "namePtBR": "Use Código Hexadecimal dar a Cor Cinza a Elementos",
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Usa el código hexadecimal para colorear de gris los elementos",
+      "titleEs": "Usa el código hexadecimal para colorear de gris los elementos",
       "descriptionEs": [
         "A partir de estos tres colores puros (rojo, verde y azul), podemos crear 16 millones de colores.",
         "También podemos crear diferentes tonos de gris mezclando uniformemente los tres colores.",
         "Haz que el color de fondo del elemento <code>body</code> sea gris, dándole el código hexadecimal <code>#808080</code>"
-      ],
-     "namePtBR": "Use Código Hexadecimal dar a Cor Cinza a Elementos",
-     "descriptionPtBR": [
-        "A partir dessas três cores puras (vermelho, verde e azul), podemos criar 16 milhões de cores.",
-        "Também podemos criar tons de cinza diferentes ao misturar essas três cores.",
-        "Faça com que a cor de fundo do elemento <code>body</code> seja cinza, usando o código hexadecimal <code>#808080</code>."
       ]
     },
     {
@@ -3989,17 +3988,17 @@
         "assert($(\"body\").css(\"background-color\") === \"rgb(17, 17, 17)\", 'message: Give your <code>body</code> element the <code>background-color</code> of a dark gray.');",
         "assert(code.match(/body\\s*{(([\\s\\S]*;\\s*?)|\\s*?)background.*\\s*:\\s*?#111(111)?((\\s*})|(;[\\s\\S]*?}))/gi), 'message: Use <code>hex code</code> to make a dark gray. For example <code>body { color&#58; #111111; }</code>');"
       ],
+      "descriptionPtBR": [
+        "Também podemos criar tons de cinza diferentes ao misturar essas três cores. Podemos chegar muito perto de um fundo completamente preto.",
+        "Faça com que a cor de fundo do elemento <code>body</code> seja cinza escuro através do código hexadecimal <code>#111111</code>."
+      ],
+      "namePtBR": "Use Código Hexadecimal dar Tons de Cinza a Elementos",
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Usa el código hexadecimal para colorear con tonos de gris",
+      "titleEs": "Usa el código hexadecimal para colorear con tonos de gris",
       "descriptionEs": [
         "También podemos crear otros tonos de gris mezclando uniformemente los tres colores. Podemos ir muy cerca del verdadero negro. ",
         "Haz que el color de fondo del elemento <code>body</code> sea gris oscuro dandole el código hexadecimal <code>#111111</code>"
-      ],
-     "namePtBR": "Use Código Hexadecimal dar Tons de Cinza a Elementos",
-     "descriptionPtBR": [
-        "Também podemos criar tons de cinza diferentes ao misturar essas três cores. Podemos chegar muito perto de um fundo completamente preto.",
-        "Faça com que a cor de fundo do elemento <code>body</code> seja cinza escuro através do código hexadecimal <code>#111111</code>."
       ]
     },
     {
@@ -4022,21 +4021,21 @@
         "assert($(\"body\").css(\"background-color\") === \"rgb(255, 0, 0)\", 'message: Give your <code>body</code> element the <code>background-color</code> of red.');",
         "assert(code.match(/body\\s*{(([\\s\\S]*;\\s*?)|\\s*?)background.*\\s*:\\s*?#F00((\\s*})|(\\s*;[\\s\\S]*?}))/gi), 'message: Use <code>abbreviated hex code</code> instead of a six-character <code>hex code</code>. For example <code>body { color&#58; #F00; }</code>');"
       ],
+      "descriptionPtBR": [
+        "Muitas pessoas se sentem confusas com as possibilidades de mais de 16 milhões de cores. Além disso, é difícil lembrar de códigos hexadecimais. Por sorte, podemos abreviá-lo.",
+        "Por exemplo, o vermelho que é <code>#FF0000</code> em código hexadecimal pode ser abreviado a <code>#F00</code>. Isso quer dizer que podemos usar um dígito para vermelho, um dígito para verde e um dígito para azul.",
+        "Fazer isso reduz o número total de possíveis cores para ao redor de 4.000. Apesar disso, os navegadores interpretarão <code>#FF0000</code> e <code>#F00</code> exatamente como a mesma cor.",
+        "Continue, tente usar <code>#F00</code> para fazer com que a cor de fundo do elemento <code>body</code> seja vermelha."
+      ],
+      "namePtBR": "Use Código Hexadecimal Abreviado",
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Uso código hex abreviado",
+      "titleEs": "Uso código hex abreviado",
       "descriptionEs": [
         "Mucha gente se siente abrumada por las posibilidades de más de 16 millones de colores. Y es difícil recordar el código hexadecimal. Afortunadamente puedes acortarlo. ",
         "Por ejemplo, el rojo, que es <code>#FF0000</code> en código hexadecimal, se puede abreviar a <code>#F00</code>. Es decir, un dígito para el rojo, un dígito para el verde, un dígito para el azul. ",
         "Esto reduce el número total de posibles colores a alrededor de 4.000. Pero los navegadores interpretarán <code>#FF0000</code> y <code>#F00</code> como exactamente el mismo color. ",
         "Adelante, intenta usar <code>#F00</code> para volver rojo el color de fondo del elemento <code>body</code>."
-      ],
-     "namePtBR": "Use Código Hexadecimal Abreviado",
-     "descriptionPtBR": [
-        "Muitas pessoas se sentem confusas com as possibilidades de mais de 16 milhões de cores. Além disso, é difícil lembrar de códigos hexadecimais. Por sorte, podemos abreviá-lo.",
-        "Por exemplo, o vermelho que é <code>#FF0000</code> em código hexadecimal pode ser abreviado a <code>#F00</code>. Isso quer dizer que podemos usar um dígito para vermelho, um dígito para verde e um dígito para azul.",
-        "Fazer isso reduz o número total de possíveis cores para ao redor de 4.000. Apesar disso, os navegadores interpretarão <code>#FF0000</code> e <code>#F00</code> exatamente como a mesma cor.",
-        "Continue, tente usar <code>#F00</code> para fazer com que a cor de fundo do elemento <code>body</code> seja vermelha."
       ]
     },
     {
@@ -4063,9 +4062,20 @@
         "assert($(\"body\").css(\"background-color\") === \"rgb(0, 0, 0)\", 'message: Your <code>body</code> element should have a black background.');",
         "assert(code.match(/rgb\\s*\\(\\s*0\\s*,\\s*0\\s*,\\s*0\\s*\\)/ig), 'message: Use <code>rgb</code> to give your <code>body</code> element the <code>background-color</code> of black. For example <code>body { background-color&#58; rgb&#40;0&#44; 0&#44; 0&#41;; }</code>');"
       ],
+      "descriptionPtBR": [
+        "Outra forma em que você pode representar cores em CSS é utilizando valores <code>rgb</code>.",
+        "O valor RGB para preto é assim:",
+        "<code>rgb(0, 0, 0)</code>",
+        "O valor RGB para branco é assim:",
+        "<code>rgb(255, 255, 255)</code>",
+        "Ao invés de utilizar 6 dígitos hexadecimais, com <code>rgb</code> você especifica o brilho de cada cor com um número entre 0 e 255.",
+        "Se você fizer a matemática, 16 vezes 16 é igual a 256 valores totais. Sendo assim, o <code>rgb</code>, que começa a contar desde zero, tem exatamente o mesmo número de valores possíveis que o código hexadecimal.",
+        "Vamos substituir o código hexadecimal da cor de fundo do nosso elemento <code>body</code> pelo valor RGB para preto: <code>rgb(0, 0, 0)</code>."
+      ],
+      "namePtBR": "Use Valores RBG para Colorir Elementos",
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Usa RGB para colorear elementos",
+      "titleEs": "Usa RGB para colorear elementos",
       "descriptionEs": [
         "Otra forma en la que puedes representar colores en CSS es usando valores <code>rgb</code>.",
         "El valor RGB para el negro, luce así:",
@@ -4075,17 +4085,6 @@
         "En lugar de utilizar seis dígitos hexadecimales, con <code>rgb</code> especificas el brillo de cada color con un número entre 0 y 255.",
         "Si haces la matemática, 16 veces 16 es 256 valores totales.  Así que <code>rgb</code>, que comienza a contar desde cero, tiene exactamente el mismo número de valores posibles que el código hexadecimal.",
         "Remplacemos el código hexadecimal del color de fondo de nuestro elemento <code>body</code> por el valor RGB para el negro: <code>rgb(0, 0, 0)</code>"
-      ],
-     "namePtBR": "Use Valores RBG para Colorir Elementos",
-     "descriptionPtBR": [
-        "Outra forma em que você pode representar cores em CSS é utilizando valores <code>rgb</code>.",
-        "O valor RGB para preto é assim:",
-        "<code>rgb(0, 0, 0)</code>",
-        "O valor RGB para branco é assim:",
-        "<code>rgb(255, 255, 255)</code>",
-        "Ao invés de utilizar 6 dígitos hexadecimais, com <code>rgb</code> você especifica o brilho de cada cor com um número entre 0 e 255.",
-        "Se você fizer a matemática, 16 vezes 16 é igual a 256 valores totais. Sendo assim, o <code>rgb</code>, que começa a contar desde zero, tem exatamente o mesmo número de valores possíveis que o código hexadecimal.",
-        "Vamos substituir o código hexadecimal da cor de fundo do nosso elemento <code>body</code> pelo valor RGB para preto: <code>rgb(0, 0, 0)</code>."
       ]
     },
     {
@@ -4110,9 +4109,18 @@
         "assert($(\"body\").css(\"background-color\") === \"rgb(255, 255, 255)\", 'message: Your <code>body</code> should have a white background.');",
         "assert(code.match(/rgb\\s*\\(\\s*255\\s*,\\s*255\\s*,\\s*255\\s*\\)/ig), 'message: Use <code>rgb</code> to give your <code>body</code> element the <code>background-color</code> of white. For example <code>body { background-color&#58; rgb&#40;255&#44; 255 &#44; 255&#41;; }</code>');"
       ],
+      "descriptionPtBR": [
+        "O valor RGB para preto é assim:",
+        "<code>rgb(0, 0, 0)</code>",
+        "O valor RGB para branco é assim:",
+        "<code>rgb(255, 255, 255)</code>",
+        "Ao invés de utilizar 6 dígitos hexadecimais, com <code>rgb</code> você especifica o brilho de cada cor com um número entre 0 e 255.",
+        "Substitua o código hexadecimal da cor de fundo do nosso elemento <code>body</code> que possui o valor RGB para preto, pelo valor <code>rgb</code> para branco: <code>rgb(255, 255, 255)</code>."
+      ],
+      "namePtBR": "Use Valores RGB para Dar a Cor Branca a Elementos",
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Usa RGB para colorear de blanco los elementos",
+      "titleEs": "Usa RGB para colorear de blanco los elementos",
       "descriptionEs": [
         "El valor RGB para el negro, luce así:",
         "<code>rgb(0, 0, 0)</code>",
@@ -4120,15 +4128,6 @@
         "<code>rgb(255, 255, 255)</code>",
         "En lugar de utilizar seis dígitos hexadecimales, con <code>rgb</code> especificas el brillo de cada color con un número entre 0 y 255.",
         "Cambia el color de fondo del elemento <code>body</code> del valor RGB para el negro al valor <code>rgb</code> para el blanco: <code>rgb(255, 255, 255)</code>"
-      ],
-     "namePtBR": "Use Valores RGB para Dar a Cor Branca a Elementos",
-     "descriptionPtBR": [
-        "O valor RGB para preto é assim:",
-        "<code>rgb(0, 0, 0)</code>",
-        "O valor RGB para branco é assim:",
-        "<code>rgb(255, 255, 255)</code>",
-        "Ao invés de utilizar 6 dígitos hexadecimais, com <code>rgb</code> você especifica o brilho de cada cor com um número entre 0 e 255.",
-        "Substitua o código hexadecimal da cor de fundo do nosso elemento <code>body</code> que possui o valor RGB para preto, pelo valor <code>rgb</code> para branco: <code>rgb(255, 255, 255)</code>."
       ]
     },
     {
@@ -4150,19 +4149,19 @@
         "assert($(\"body\").css(\"background-color\") === \"rgb(255, 0, 0)\", 'message: Your <code>body</code> should have a red background.');",
         "assert(code.match(/rgb\\s*\\(\\s*255\\s*,\\s*0\\s*,\\s*0\\s*\\)/ig), 'message: Use <code>rgb</code> to give your <code>body</code> element the <code>background-color</code> of red. For example <code>body { background-color&#58; rgb&#40;255&#44; 0&#44; 0&#41;; }</code>');"
       ],
+      "descriptionPtBR": [
+        "Da mesma forma que com códigos em hexadecimal, você pode representar cores diferentes em RGB através do uso de combinações com diferentes valores.",
+        "Esses valores seguem o padrão de RGB: O primeiro número representa vermelho, o segundo representa verde, e o terceiro representa azul.",
+        "Mude a cor de fundo do elemento <code>body</code> para vermelho usando seu valor RGB: <code>rgb(255, 0, 0)</code>."
+      ],
+      "namePtBR": "Use Valores RBG para Dar a Cor Vermelha a Elementos",
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Usa RGB para colorear de rojo los elementos",
+      "titleEs": "Usa RGB para colorear de rojo los elementos",
       "descriptionEs": [
         "Al igual que con el código hexadecimal, puedes representar diferentes colores en RGB mediante el uso de combinaciones de diferentes valores.",
         "Estos valores siguen el patrón de RGB: el primer número representa rojo, el segundo número representa el verde, y el tercer número representa azul.",
         "Cambia el color de fondo del elemento <code>body</code> al rojo usando su valor RGB: <code>rgb(255, 0, 0)</code>"
-      ],
-     "namePtBR": "Use Valores RBG para Dar a Cor Vermelha a Elementos",
-     "descriptionPtBR": [
-        "Da mesma forma que com códigos em hexadecimal, você pode representar cores diferentes em RGB através do uso de combinações com diferentes valores.",
-        "Esses valores seguem o padrão de RGB: O primeiro número representa vermelho, o segundo representa verde, e o terceiro representa azul.",
-        "Mude a cor de fundo do elemento <code>body</code> para vermelho usando seu valor RGB: <code>rgb(255, 0, 0)</code>."
       ]
     },
     {
@@ -4182,15 +4181,15 @@
         "assert($(\"body\").css(\"background-color\") === \"rgb(0, 255, 0)\", 'message: Your <code>body</code> element should have a green background.');",
         "assert(code.match(/rgb\\s*\\(\\s*0\\s*,\\s*255\\s*,\\s*0\\s*\\)/ig), 'message: Use <code>rgb</code> to give your <code>body</code> element the <code>background-color</code> of green. For example <code>body { background-color&#58; rgb&#40;0&#44; 255&#44; 0&#41;; }</code>');"
       ],
+      "descriptionPtBR": [
+        "Agora, mude a cor de fundo do elemento <code>body</code> para verde usando seu valor RGB: <code>rgb (0, 255, 0)</code>."
+      ],
+      "namePtBR": "Use Valores RBG para Dar a Cor Verde a Elementos",
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Usa RGB para colorear de verde los elementos",
+      "titleEs": "Usa RGB para colorear de verde los elementos",
       "descriptionEs": [
         "Ahora cambia el color de fondo del elemento <code>body</code> a verde usando su valor RGB: <code>rgb (0, 255, 0)</code>"
-      ],
-     "namePtBR": "Use Valores RBG para Dar a Cor Verde a Elementos",
-     "descriptionPtBR": [
-        "Agora, mude a cor de fundo do elemento <code>body</code> para verde usando seu valor RGB: <code>rgb (0, 255, 0)</code>."
       ]
     },
     {
@@ -4210,15 +4209,15 @@
         "assert($(\"body\").css(\"background-color\") === \"rgb(0, 0, 255)\", 'message: Your <code>body</code> element should have a blue background.');",
         "assert(code.match(/rgb\\s*\\(\\s*0\\s*,\\s*0\\s*,\\s*255\\s*\\)/ig), 'message: Use <code>rgb</code> to give your <code>body</code> element the <code>background-color</code> of blue. For example <code>body { background-color&#58; rgb&#40;0&#44; 0&#44; 255&#41;; }</code>');"
       ],
+      "descriptionPtBR": [
+        "Agora, mude a cor de fundo do elemento <code>body</code> para azul usando seu valor RGB: <code>rgb(0, 0, 255)</code>."
+      ],
+      "namePtBR": "Use Valores RBG para Dar a Cor Azul a Elementos",
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Usa RGB para colorear de azul los elementos",
+      "titleEs": "Usa RGB para colorear de azul los elementos",
       "descriptionEs": [
         "Cambia el color de fondo del elemento <code>body</code> a azul usando su valor RGB: <code>rgb(0, 0, 255)</code>"
-      ],
-     "namePtBR": "Use Valores RBG para Dar a Cor Azul a Elementos",
-     "descriptionPtBR": [
-        "Agora, mude a cor de fundo do elemento <code>body</code> para azul usando seu valor RGB: <code>rgb(0, 0, 255)</code>."
       ]
     },
     {
@@ -4239,17 +4238,17 @@
         "assert($(\"body\").css(\"background-color\") === \"rgb(255, 165, 0)\", 'message: Your <code>body</code> element should have an orange background.');",
         "assert(code.match(/rgb\\s*\\(\\s*255\\s*,\\s*165\\s*,\\s*0\\s*\\)/ig), 'message: Use <code>rgb</code> to give your <code>body</code> element the <code>background-color</code> of orange. For example <code>body { background-color&#58; rgb&#40;255&#44; 165&#44; 0&#41;; }</code>');"
       ],
+      "descriptionPtBR": [
+        "Assim como com código hexadecimal, você pode misturar as cores com RGB através do uso de combinações de valores diferentes.",
+        "Mude a cor de fundo do elemento <code>body</code> para alaranjado usando seu valor RGB: <code>rgb(255, 165, 0)</code>."
+      ],
+      "namePtBR": "Use Valores RBG para Misturar Cores",
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Usa RGB para mezclar colores",
+      "titleEs": "Usa RGB para mezclar colores",
       "descriptionEs": [
         "Al igual que con el código hexadecimal, puedes mezclar los colores en RGB mediante el uso de combinaciones de diferentes valores.",
         "Cambia el color de fondo del elemento <code>body</code> a anaranjado usando su valor RGB: <code>rgb(255, 165, 0)</code>"
-      ],
-     "namePtBR": "Use Valores RBG para Misturar Cores",
-     "descriptionPtBR": [
-        "Assim como com código hexadecimal, você pode misturar as cores com RGB através do uso de combinações de valores diferentes.",
-        "Mude a cor de fundo do elemento <code>body</code> para alaranjado usando seu valor RGB: <code>rgb(255, 165, 0)</code>."
       ]
     }
   ]
diff --git a/seed/challenges/01-front-end-development-certification/intermediate-bonfires.json b/seed/challenges/01-front-end-development-certification/intermediate-bonfires.json
index 20c9492..12977a8 100644
--- a/seed/challenges/01-front-end-development-certification/intermediate-bonfires.json
+++ b/seed/challenges/01-front-end-development-certification/intermediate-bonfires.json
@@ -19,6 +19,9 @@
         "",
         "sumAll([1, 4]);"
       ],
+      "solutions": [
+        "function sumAll(arr) {\n  var sum = 0;\n  arr.sort(function(a,b) {return a-b;});\n  for (var i = arr[0]; i <= arr[1]; i++) {\n    sum += i; \n  }\n  return sum;\n}"
+      ],
       "tests": [
         "assert(typeof sumAll([1, 4]) === 'number', 'message: <code>sumAll([1, 4])</code> should return a number.');",
         "assert.deepEqual(sumAll([1, 4]), 10, 'message: <code>sumAll([1, 4])</code> should return 10.');",
@@ -32,16 +35,13 @@
         "Math.min()",
         "Array.reduce()"
       ],
+      "isRequired": true,
       "challengeType": 5,
-      "nameEs": "Suma todos los números en un rango",
+      "titleEs": "Suma todos los números en un rango",
       "descriptionEs": [
         "Te pasaremos un vector que contiene dos números. Crea una función que devuelva la suma de esos dos números y todos los números entre ellos.",
         "El número menor no siempre será el primer elemento en el vector.",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
-      ],
-      "isRequired": true,
-      "solutions": [
-        "function sumAll(arr) {\n  var sum = 0;\n  arr.sort(function(a,b) {return a-b;});\n  for (var i = arr[0]; i <= arr[1]; i++) {\n    sum += i; \n  }\n  return sum;\n}"
       ]
     },
     {
@@ -60,6 +60,9 @@
         "",
         "diff([1, 2, 3, 5], [1, 2, 3, 4, 5]);"
       ],
+      "solutions": [
+        "function diff(arr1, arr2) {\n  var newArr = [];\n  var h1 = Object.create(null);\n  arr1.forEach(function(e) {\n    h1[e] = e;\n  });\n  \n  var h2 = Object.create(null);\n  arr2.forEach(function(e) {\n    h2[e] = e;\n  });\n  \n  Object.keys(h1).forEach(function(e) {\n     if (!(e in h2)) newArr.push(h1[e]);\n  });\n  Object.keys(h2).forEach(function(e) {\n     if (!(e in h1)) newArr.push(h2[e]);\n  });\n  // Same, same; but different.\n  return newArr;\n}"
+      ],
       "tests": [
         "assert(typeof diff([1, 2, 3, 5], [1, 2, 3, 4, 5]) === \"object\", 'message: <code>diff([1, 2, 3, 5], [1, 2, 3, 4, 5])</code> should return an array.');",
         "assert.sameMembers(diff([\"diorite\", \"andesite\", \"grass\", \"dirt\", \"pink wool\", \"dead shrub\"], [\"diorite\", \"andesite\", \"grass\", \"dirt\", \"dead shrub\"]), [\"pink wool\"], 'message: <code>[\"diorite\", \"andesite\", \"grass\", \"dirt\", \"pink wool\", \"dead shrub\"], [\"diorite\", \"andesite\", \"grass\", \"dirt\", \"dead shrub\"]</code> should return <code>[\"pink wool\"]</code>.');",
@@ -78,15 +81,12 @@
         "Array.indexOf()",
         "Array.concat()"
       ],
+      "isRequired": true,
       "challengeType": 5,
-      "nameEs": "Obtén la diferencia entre dos vectores",
+      "titleEs": "Obtén la diferencia entre dos vectores",
       "descriptionEs": [
         "Crea una función que compare dos vectores y que devuelva un nuevo vector que contenga los elementos que sólo se encuentre en uno de los vectores dados, pero no en ambos En otras palabras, devuelve la diferencia simétrica entre los dos vectores.",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
-      ],
-      "isRequired": true,
-      "solutions": [
-        "function diff(arr1, arr2) {\n  var newArr = [];\n  var h1 = Object.create(null);\n  arr1.forEach(function(e) {\n    h1[e] = e;\n  });\n  \n  var h2 = Object.create(null);\n  arr2.forEach(function(e) {\n    h2[e] = e;\n  });\n  \n  Object.keys(h1).forEach(function(e) {\n     if (!(e in h2)) newArr.push(h1[e]);\n  });\n  Object.keys(h2).forEach(function(e) {\n     if (!(e in h1)) newArr.push(h2[e]);\n  });\n  // Same, same; but different.\n  return newArr;\n}"
       ]
     },
     {
@@ -104,6 +104,9 @@
         "",
         "convert(36);"
       ],
+      "solutions": [
+        "function convert(num) {\n  var ref = [['M', 1000], ['CM', 900], ['D', 500], ['CD', 400], ['C', 100], ['XC', 90], ['L', 50], ['XL', 40], ['X', 10], ['IX', 9], ['V', 5], ['IV', 4], ['I', 1]];\n  var res = [];\n  ref.forEach(function(p) {\n    while (num >= p[1]) {\n      res.push(p[0]);\n      num -= p[1];\n    }\n  });\n  return res.join('');\n}"
+      ],
       "tests": [
         "assert.deepEqual(convert(2), \"II\", 'message: <code>convert(2)</code> should return \"II\".');",
         "assert.deepEqual(convert(3), \"III\", 'message: <code>convert(3)</code> should return \"III\".');",
@@ -138,16 +141,13 @@
         "Array.indexOf()",
         "Array.join()"
       ],
+      "isRequired": true,
       "challengeType": 5,
-      "nameEs": "Convertior de números romanos",
+      "titleEs": "Convertior de números romanos",
       "descriptionEs": [
         "Convierte el número dado en numeral romano.",
         "Todos los <a href=\"http://www.mathsisfun.com/roman-numerals.html\" target=\"_blank\">numerales romanos</a> en las respuestas deben estar en mayúsculas.",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
-      ],
-      "isRequired": true,
-      "solutions": [
-        "function convert(num) {\n  var ref = [['M', 1000], ['CM', 900], ['D', 500], ['CD', 400], ['C', 100], ['XC', 90], ['L', 50], ['XL', 40], ['X', 10], ['IX', 9], ['V', 5], ['IV', 4], ['I', 1]];\n  var res = [];\n  ref.forEach(function(p) {\n    while (num >= p[1]) {\n      res.push(p[0]);\n      num -= p[1];\n    }\n  });\n  return res.join('');\n}"
       ]
     },
     {
@@ -167,6 +167,9 @@
         "",
         "where([{ first: \"Romeo\", last: \"Montague\" }, { first: \"Mercutio\", last: null }, { first: \"Tybalt\", last: \"Capulet\" }], { last: \"Capulet\" });"
       ],
+      "solutions": [
+        "function where(collection, source) {\n  var arr = [];\n  var keys = Object.keys(source);\n  collection.forEach(function(e) {\n    if(keys.every(function(key) {return e[key] === source[key];})) {\n      arr.push(e);  \n    }\n  });\n  return arr;\n}"
+      ],
       "tests": [
         "assert.deepEqual(where([{ first: \"Romeo\", last: \"Montague\" }, { first: \"Mercutio\", last: null }, { first: \"Tybalt\", last: \"Capulet\" }], { last: \"Capulet\" }), [{ first: \"Tybalt\", last: \"Capulet\" }], 'message: <code>where([{ first: \"Romeo\", last: \"Montague\" }, { first: \"Mercutio\", last: null }, { first: \"Tybalt\", last: \"Capulet\" }], { last: \"Capulet\" })</code> should return <code>[{ first: \"Tybalt\", last: \"Capulet\" }]</code>.');",
         "assert.deepEqual(where([{ \"a\": 1 }, { \"a\": 1 }, { \"a\": 1, \"b\": 2 }], { \"a\": 1 }), [{ \"a\": 1 }, { \"a\": 1 }, { \"a\": 1, \"b\": 2 }], 'message: <code>where([{ \"a\": 1 }, { \"a\": 1 }, { \"a\": 1, \"b\": 2 }], { \"a\": 1 })</code> should return <code>[{ \"a\": 1 }, { \"a\": 1 }, { \"a\": 1, \"b\": 2 }]</code>.');",
@@ -179,16 +182,13 @@
         "Object.hasOwnProperty()",
         "Object.keys()"
       ],
+      "isRequired": true,
       "challengeType": 5,
-      "nameEs": "¿Dónde estás que no te veo?",
+      "titleEs": "¿Dónde estás que no te veo?",
       "descriptionEs": [
         "Crea una función que busque en un vector de objetos (primer argumento) y devuelva un vector con todos los objetos que compartan el valor indicado para una propiedad dada (segundo argumento). Cada pareja de propiedad y valor debe estar presente en el objeto de la colección para ser incluido en el vector devuelto por la función",
         "Por ejemplo, si el primer argumento es <code>[{ first: \"Romeo\", last: \"Montague\" }, { first: \"Mercutio\", last: null }, { first: \"Tybalt\", last: \"Capulet\" }]</code>, y el segundo argumento es <code>{ last: \"Capulet\" }</code>, entonces tu función debe devolver el tercer objeto del vector en el primer argumento, ya que contiene la propiedad y el valor indicados en el segundo argumento.",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
-      ],
-      "isRequired": true,
-      "solutions": [
-        "function where(collection, source) {\n  var arr = [];\n  var keys = Object.keys(source);\n  collection.forEach(function(e) {\n    if(keys.every(function(key) {return e[key] === source[key];})) {\n      arr.push(e);  \n    }\n  });\n  return arr;\n}"
       ]
     },
     {
@@ -209,6 +209,9 @@
         "",
         "myReplace(\"A quick brown fox jumped over the lazy dog\", \"jumped\", \"leaped\");"
       ],
+      "solutions": [
+        "function myReplace(str, before, after) {\n  if (before.charAt(0) === before.charAt(0).toUpperCase()) {\n    after = after.charAt(0).toUpperCase() + after.substring(1);\n  } else {\n    after = after.charAt(0).toLowerCase() + after.substring(1);\n  }\n  return str.replace(before, after);\n}"
+      ],
       "tests": [
         "assert.deepEqual(myReplace(\"Let us go to the store\", \"store\", \"mall\"), \"Let us go to the mall\", 'message: <code>myReplace(\"Let us go to the store\", \"store\", \"mall\")</code> should return \"Let us go to the mall\".');",
         "assert.deepEqual(myReplace(\"He is Sleeping on the couch\", \"Sleeping\", \"sitting\"), \"He is Sitting on the couch\", 'message: <code>myReplace(\"He is Sleeping on the couch\", \"Sleeping\", \"sitting\")</code> should return \"He is Sitting on the couch\".');",
@@ -222,8 +225,9 @@
         "String.replace()",
         "Array.join()"
       ],
+      "isRequired": true,
       "challengeType": 5,
-      "nameEs": "Buscar y reemplazar",
+      "titleEs": "Buscar y reemplazar",
       "descriptionEs": [
         "Crea una función que busque un fragmento en una frase dada y lo reemplace por otro fragmento, devolviendo la nueva frase.",
         "El primer argumento es la frase en la que se ejecutará la búsqueda y el reemplazo",
@@ -231,10 +235,6 @@
         "El tercer argumento es lo que reemplazará a la palabra indicada en el segundo argumento",
         "NOTA: Debes respetar mayúsculas y minúsculas de la palabra original cuando ejecutes el reemplazo. Por ejemplo, si quisieras reemplazar la palabra \"Libro\" con la palabra \"perro\", deberías insertar en vez la palabra \"Perro\"",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
-      ],
-      "isRequired": true,
-      "solutions": [
-        "function myReplace(str, before, after) {\n  if (before.charAt(0) === before.charAt(0).toUpperCase()) {\n    after = after.charAt(0).toUpperCase() + after.substring(1);\n  } else {\n    after = after.charAt(0).toLowerCase() + after.substring(1);\n  }\n  return str.replace(before, after);\n}"
       ]
     },
     {
@@ -253,6 +253,9 @@
         "",
         "translate(\"consonant\");"
       ],
+      "solutions": [
+        "function translate(str) {\n  if (isVowel(str.charAt(0))) return str + \"way\";\n  var front = [];\n  str = str.split('');\n  while (str.length && !isVowel(str[0])) {\n    front.push(str.shift());\n  }\n  return [].concat(str, front).join('') + 'ay';\n}\n\nfunction isVowel(c) {\n  return ['a', 'e', 'i', 'o', 'u'].indexOf(c.toLowerCase()) !== -1;\n}"
+      ],
       "tests": [
         "assert.deepEqual(translate(\"california\"), \"aliforniacay\", 'message: <code>translate(\"california\")</code> should return \"aliforniacay\".');",
         "assert.deepEqual(translate(\"paragraphs\"), \"aragraphspay\", 'message: <code>translate(\"paragraphs\")</code> should return \"aragraphspay\".');",
@@ -268,17 +271,14 @@
         "String.substr()",
         "String.split()"
       ],
+      "isRequired": true,
       "challengeType": 5,
-      "nameEs": "Latín de los cerdos",
+      "titleEs": "Latín de los cerdos",
       "descriptionEs": [
         "Traduce la cadena de texto que se te provee al Latín de los cerdos (Pig Latin)",
         "<a href=\"http://en.wikipedia.org/wiki/Pig_Latin\" target=\"_blank\">Pig Latin</a> toma la primera consonante (o grupo de consonantes) de una palabra en inglés, la mueve al final de la palabra y agrega un \"ay\".",
         "Si la palabra comienza con una vocal, simplemente añade \"way\" al final.",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
-      ],
-      "isRequired": true,
-      "solutions": [
-        "function translate(str) {\n  if (isVowel(str.charAt(0))) return str + \"way\";\n  var front = [];\n  str = str.split('');\n  while (str.length && !isVowel(str[0])) {\n    front.push(str.shift());\n  }\n  return [].concat(str, front).join('') + 'ay';\n}\n\nfunction isVowel(c) {\n  return ['a', 'e', 'i', 'o', 'u'].indexOf(c.toLowerCase()) !== -1;\n}"
       ]
     },
     {
@@ -299,6 +299,9 @@
         "",
         "pair(\"GCG\");"
       ],
+      "solutions": [
+        "var lookup = Object.create(null);\nlookup.A = 'T';\nlookup.T = 'A';\nlookup.C = 'G';\nlookup.G = 'C';\n\nfunction pair(str) {\n return str.split('').map(function(p) {return [p, lookup[p]];});\n}"
+      ],
       "tests": [
         "assert.deepEqual(pair(\"ATCGA\"),[[\"A\",\"T\"],[\"T\",\"A\"],[\"C\",\"G\"],[\"G\",\"C\"],[\"A\",\"T\"]], 'message: <code>pair(\"ATCGA\")</code> should return <code>[[\"A\",\"T\"],[\"T\",\"A\"],[\"C\",\"G\"],[\"G\",\"C\"],[\"A\",\"T\"]]</code>.');",
         "assert.deepEqual(pair(\"TTGAG\"),[[\"T\",\"A\"],[\"T\",\"A\"],[\"G\",\"C\"],[\"A\",\"T\"],[\"G\",\"C\"]], 'message: <code>pair(\"TTGAG\")</code> should return <code>[[\"T\",\"A\"],[\"T\",\"A\"],[\"G\",\"C\"],[\"A\",\"T\"],[\"G\",\"C\"]]</code>.');",
@@ -309,8 +312,9 @@
         "Array.push()",
         "String.split()"
       ],
+      "isRequired": true,
       "challengeType": 5,
-      "nameEs": "Emparejando bases de ADN",
+      "titleEs": "Emparejando bases de ADN",
       "descriptionEs": [
         "A la cadena de ADN que se te pasa le hace falta una hebra. Toma cada una de las letras, obtén su pareja correspondiente y devuelve los resultados en un segundo vector",
         "<a href=\"http://es.wikipedia.org/wiki/Apareamiento_de_bases\" target=\"_blank\">Parejas de bases</a> son pares de AT y CG. Encuentra el elemento que hace falta para cada una de las letras que se te presentan.",
@@ -318,10 +322,6 @@
         "Por ejemplo, si te pasáramos la cadena GCG, tu función debería devolver el vector: [[\"G\", \"C\"], [\"C\",\"G\"],[\"G\", \"C\"]]",
         "Cada letra que se te provee y su pareja deben estar contenidos en un vector, y cada uno de estos vectores debe estar contenidos en un vector.",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
-      ],
-      "isRequired": true,
-      "solutions": [
-        "var lookup = Object.create(null);\nlookup.A = 'T';\nlookup.T = 'A';\nlookup.C = 'G';\nlookup.G = 'C';\n\nfunction pair(str) {\n return str.split('').map(function(p) {return [p, lookup[p]];});\n}"
       ]
     },
     {
@@ -339,6 +339,9 @@
         "",
         "fearNotLetter(\"abce\");"
       ],
+      "solutions": [
+        "function fearNotLetter(str) {\n  var s = str.split('').map(function(c) {return c.charCodeAt(0);});\n  for (var i = 1; i < s.length; i++) {\n    if (s[i]-1 != s[i-1]) {\n      return String.fromCharCode(s[i]-1);\n    }\n  }\n}"
+      ],
       "tests": [
         "assert.deepEqual(fearNotLetter(\"abce\"), \"d\", 'message: <code>fearNotLetter(\"abce\")</code> should return \"d\".');",
         "assert.deepEqual(fearNotLetter(\"abcdefghjklmno\"), \"i\", 'message: <code>fearNotLetter(\"abcdefghjklmno\")</code> should return \"i\".');",
@@ -350,16 +353,13 @@
         "String.charCodeAt()",
         "String.fromCharCode()"
       ],
+      "isRequired": true,
       "challengeType": 5,
-      "nameEs": "Letras perdidas",
+      "titleEs": "Letras perdidas",
       "descriptionEs": [
         "Crea una función que devuelva la letra que falta en el rango de letras que se le pasa",
         "Si todas las letras en el rango están presentes, la función debe devolver undefined.",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
-      ],
-      "isRequired": true,
-      "solutions": [
-        "function fearNotLetter(str) {\n  var s = str.split('').map(function(c) {return c.charCodeAt(0);});\n  for (var i = 1; i < s.length; i++) {\n    if (s[i]-1 != s[i-1]) {\n      return String.fromCharCode(s[i]-1);\n    }\n  }\n}"
       ]
     },
     {
@@ -378,6 +378,9 @@
         "",
         "boo(null);"
       ],
+      "solutions": [
+        "function boo(bool) {\n  // What is the new fad diet for ghost developers? The Boolean.\n  return typeof bool === \"boolean\";\n}\n\nboo(null);"
+      ],
       "tests": [
         "assert.strictEqual(boo(true), true, 'message: <code>boo(true)</code> should return true.');",
         "assert.strictEqual(boo(false), true, 'message: <code>boo(false)</code> should return true.');",
@@ -394,16 +397,13 @@
       "MDNlinks": [
         "Boolean Objects"
       ],
+      "isRequired": true,
       "challengeType": 5,
-      "nameEs": "¡Bu!",
+      "titleEs": "¡Bu!",
       "descriptionEs": [
         "Crea una función que verifique si el valor que se le pasa es de tipo booleano. Haz que la función devuelva true o false según corresponda.",
         "Los primitivos booleanos primitivos son: true y false",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
-      ],
-      "isRequired": true,
-      "solutions": [
-        "function boo(bool) {\n  // What is the new fad diet for ghost developers? The Boolean.\n  return typeof bool === \"boolean\";\n}\n\nboo(null);"
       ]
     },
     {
@@ -423,6 +423,9 @@
         "",
         "unite([1, 3, 2], [5, 2, 1, 4], [2, 1]);"
       ],
+      "solutions": [
+        "function unite(arr1, arr2, arr3) {\n  return [].slice.call(arguments).reduce(function(a, b) {\n    return [].concat(a, b.filter(function(e) {return a.indexOf(e) === -1;}));\n  }, []);\n}"
+      ],
       "tests": [
         "assert.deepEqual(unite([1, 3, 2], [5, 2, 1, 4], [2, 1]), [1, 3, 2, 5, 4], 'message: <code>unite([1, 3, 2], [5, 2, 1, 4], [2, 1])</code> should return <code>[1, 3, 2, 5, 4]</code>.');",
         "assert.deepEqual(unite([1, 3, 2], [1, [5]], [2, [4]]), [1, 3, 2, [5], [4]], 'message: <code>unite([1, 3, 2], [1, [5]], [2, [4]])</code> should return <code>[1, 3, 2, [5], [4]]</code>.');",
@@ -434,18 +437,15 @@
         "Arguments object",
         "Array.reduce()"
       ],
+      "isRequired": true,
       "challengeType": 5,
-      "nameEs": "Intersección ordenada",
+      "titleEs": "Intersección ordenada",
       "descriptionEs": [
         "Escribe una función que tome dos o más vectores y que devuelva un nuevo vector con los valores únicos en el orden de aparición de los vectores que se te pasaron",
         "En otra palabras, todos los valores presentes en todos los vectores deben aparecer en el vector final en su orden original, pero sin duplicados.",
         "Los valores únicos deben aparecer en el orden original, pero el vector final no necesariamente debe mostrar los elementos en orden numérico.",
         "Puedes usar de referencia las pruebas de verificación si necesitas ejemplos.",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
-      ],
-      "isRequired": true,
-      "solutions": [
-        "function unite(arr1, arr2, arr3) {\n  return [].slice.call(arguments).reduce(function(a, b) {\n    return [].concat(a, b.filter(function(e) {return a.indexOf(e) === -1;}));\n  }, []);\n}"
       ]
     },
     {
@@ -463,6 +463,9 @@
         "",
         "convert(\"Dolce & Gabbana\");"
       ],
+      "solutions": [
+        "var MAP = { '&': '&amp;',\n            '<': '&lt;',\n            '>': '&gt;',\n            '\"': '&quot;',\n            \"'\": '&apos;'};\n\nfunction convert(str) {\n  return str.replace(/[&<>\"']/g, function(c) {\n    return MAP[c];\n  });\n}"
+      ],
       "tests": [
         "assert.match(convert(\"Dolce & Gabbana\"), /Dolce &amp; Gabbana/, 'message: <code>convert(\"Dolce & Gabbana\")</code> should return <code>Dolce &&#8203;amp; Gabbana</code>.');",
         "assert.match(convert(\"Hamburgers < Pizza < Tacos\"), /Hamburgers &lt; Pizza &lt; Tacos/, 'message: <code>convert(\"Hamburgers < Pizza < Tacos\")</code> should return <code>Hamburgers &&#8203;lt; Pizza &&#8203;lt; Tacos</code>.');",
@@ -477,15 +480,12 @@
         "RegExp",
         "HTML Entities"
       ],
+      "isRequired": true,
       "challengeType": 5,
-      "nameEs": "Convierte entidades HTML",
+      "titleEs": "Convierte entidades HTML",
       "descriptionEs": [
         "Convierte los caracteres <code>&</code>, <code>&lt;<code>, <code>&gt;<code>, <code>\"<code>' (comilla), y <code>'<code> (apóstrofe), contenidos en la cadena de texto que se te pasa, en sus entidades HTML correspondientes",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
-      ],
-      "isRequired": true,
-      "solutions": [
-        "var MAP = { '&': '&amp;',\n            '<': '&lt;',\n            '>': '&gt;',\n            '\"': '&quot;',\n            \"'\": '&apos;'};\n\nfunction convert(str) {\n  return str.replace(/[&<>\"']/g, function(c) {\n    return MAP[c];\n  });\n}"
       ]
     },
     {
@@ -504,6 +504,9 @@
         "",
         "spinalCase('This Is Spinal Tap');"
       ],
+      "solutions": [
+        "function spinalCase(str) {\n  // \"It's such a fine line between stupid, and clever.\"\n  // --David St. Hubbins\n  str = str.replace(/([a-z](?=[A-Z]))/g, '$1 ');\n  return str.toLowerCase().replace(/\\ |\\_/g, '-');\n}"
+      ],
       "tests": [
         "assert.deepEqual(spinalCase(\"This Is Spinal Tap\"), \"this-is-spinal-tap\", 'message: <code>spinalCase(\"This Is Spinal Tap\")</code> should return <code>\"this-is-spinal-tap\"</code>.');",
         "assert.strictEqual(spinalCase('thisIsSpinalTap'), \"this-is-spinal-tap\", 'message: <code>spinalCase(\"thisIsSpinalTap\")</code> should return <code>\"this-is-spinal-tap\"</code>.');",
@@ -515,15 +518,12 @@
         "RegExp",
         "String.replace()"
       ],
+      "isRequired": true,
       "challengeType": 5,
-      "nameEs": "separado-por-guiones",
+      "titleEs": "separado-por-guiones",
       "descriptionEs": [
         "Convierte la cadena de texto que se te pasa al formato spinal case. Spinal case es cuando escribes todas las palabras en-minúsculas-unidas-por-guiones.",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
-      ],
-      "isRequired": true,
-      "solutions": [
-        "function spinalCase(str) {\n  // \"It's such a fine line between stupid, and clever.\"\n  // --David St. Hubbins\n  str = str.replace(/([a-z](?=[A-Z]))/g, '$1 ');\n  return str.toLowerCase().replace(/\\ |\\_/g, '-');\n}"
       ]
     },
     {
@@ -542,6 +542,9 @@
         "",
         "sumFibs(4);"
       ],
+      "solutions": [
+        "function sumFibs(num) {\n  var a = 1; \n  var b = 1;\n  var s = 0;\n  while (a <= num) {\n    if (a % 2 !== 0) {   \n      s += a; \n    }\n    a = [b, b=b+a][0];\n  }\n  return s;\n}"
+      ],
       "tests": [
         "assert(typeof sumFibs(1) === \"number\", 'message: <code>sumFibs(1)</code> should return a number.');",
         "assert.deepEqual(sumFibs(1000), 1785, 'message: <code>sumFibs(1000)</code> should return 1785.');",
@@ -554,17 +557,14 @@
       "MDNlinks": [
         "Remainder"
       ],
+      "isRequired": true,
       "challengeType": 5,
-      "nameEs": "Suma todos los números de Fibonacci que son impares",
+      "titleEs": "Suma todos los números de Fibonacci que son impares",
       "descriptionEs": [
         "Crea una función que devuelva la suma de todos los números impares en la secuencia de Fibonacci hasta el número que se le pasa como argumento, incluyéndolo en caso de ser un número de la secuencia.",
         "Los primeros números de la secuencia son 1, 1, 2, 3, 5 y 8, y cada número siguiente es la suma de los dos números anteriores.",
         "Por ejemplo, si se te pasa el número 4, la función deberá devolver 5, ya que los números impares menores que 4 son 1, 1 y 3.",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
-      ],
-      "isRequired": true,
-      "solutions": [
-        "function sumFibs(num) {\n  var a = 1; \n  var b = 1;\n  var s = 0;\n  while (a <= num) {\n    if (a % 2 !== 0) {   \n      s += a; \n    }\n    a = [b, b=b+a][0];\n  }\n  return s;\n}"
       ]
     },
     {
@@ -583,6 +583,9 @@
         "",
         "sumPrimes(10);"
       ],
+      "solutions": [
+        "function eratosthenesArray(n) {\n    var primes = [];\n    if (n > 2) {\n        var half = n>>1;\n        var sieve = Array(half);\n        for (var i = 1, limit = Math.sqrt(n)>>1; i <= limit; i++) {\n            if (!sieve[i]) {\n                for (var step = 2*i+1, j = (step*step)>>1; j < half; j+=step) {\n                    sieve[j] = true;\n                }\n            }\n        }\n        primes.push(2);\n        for (var p = 1; p < half; p++) {\n            if (!sieve[p]) primes.push(2*p+1);\n        }\n    }\n    return primes;\n}\n\nfunction sumPrimes(num) {\n  return eratosthenesArray(num+1).reduce(function(a,b) {return a+b;}, 0);\n}\n\nsumPrimes(10);"
+      ],
       "tests": [
         "assert.deepEqual(typeof sumPrimes(10), 'number', 'message: <code>sumPrimes(10)</code> should return a number.');",
         "assert.deepEqual(sumPrimes(10), 17, 'message: <code>sumPrimes(10)</code> should return 17.');",
@@ -593,17 +596,14 @@
         "For Loops",
         "Array.push()"
       ],
+      "isRequired": true,
       "challengeType": 5,
-      "nameEs": "Suma todos los números primos",
+      "titleEs": "Suma todos los números primos",
       "descriptionEs": [
         "Suma todos los números primos hasta, e incluyendo, el número que se te pasa",
         "Números primos son todos aquellos que sólo son divisibles entre 1 y entre sí mismos. Por ejemplo, el número 2 es primo porque solo es divisible por 1 y por 2. Por el contrario, el número 1 no es primo, ya que sólo puede dividirse por sí mismo",
         "El número que se le provee a la función no puede ser primo",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
-      ],
-      "isRequired": true,
-      "solutions": [
-        "function eratosthenesArray(n) {\n    var primes = [];\n    if (n > 2) {\n        var half = n>>1;\n        var sieve = Array(half);\n        for (var i = 1, limit = Math.sqrt(n)>>1; i <= limit; i++) {\n            if (!sieve[i]) {\n                for (var step = 2*i+1, j = (step*step)>>1; j < half; j+=step) {\n                    sieve[j] = true;\n                }\n            }\n        }\n        primes.push(2);\n        for (var p = 1; p < half; p++) {\n            if (!sieve[p]) primes.push(2*p+1);\n        }\n    }\n    return primes;\n}\n\nfunction sumPrimes(num) {\n  return eratosthenesArray(num+1).reduce(function(a,b) {return a+b;}, 0);\n}\n\nsumPrimes(10);"
       ]
     },
     {
@@ -623,6 +623,9 @@
         "",
         "smallestCommons([1,5]);"
       ],
+      "solutions": [
+        "function gcd(a, b) {\n    while (b !== 0) {\n        a = [b, b = a % b][0];\n    }\n    return a;\n}\n\nfunction lcm(a, b) {\n    return (a * b) / gcd(a, b);\n}\n\nfunction smallestCommons(arr) {\n  arr.sort(function(a,b) {return a-b;});\n  var rng = [];\n  for (var i = arr[0]; i <= arr[1]; i++) {\n    rng.push(i);\n  }\n  return rng.reduce(lcm);\n}"
+      ],
       "tests": [
         "assert.deepEqual(typeof smallestCommons([1, 5]), 'number', 'message: <code>smallestCommons([1, 5])</code> should return a number.');",
         "assert.deepEqual(smallestCommons([1, 5]), 60, 'message: <code>smallestCommons([1, 5])</code> should return 60.');",
@@ -633,17 +636,14 @@
       "MDNlinks": [
         "Smallest Common Multiple"
       ],
+      "isRequired": true,
       "challengeType": 5,
-      "nameEs": "Mínimo común múltiplo",
+      "titleEs": "Mínimo común múltiplo",
       "descriptionEs": [
         "En el ejercicio se te provee un vector con dos números. Crea una función que encuentre el número más pequeño que sea divisible entre ambos números, así como entre todos los números enteros entre ellos.",
         "Tu función debe aceptar como argumento un vector con dos números, los cuales no necesariamente estarán en orden.",
         "Por ejemplo, si se te pasan los números 1 y 3, deberás encontrar el mínimo común múltiplo de 1 y 3 que es divisible por todos los números <em>entre</em> 1 y 3.",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
-      ],
-      "isRequired": true,
-      "solutions": [
-        "function gcd(a, b) {\n    while (b !== 0) {\n        a = [b, b = a % b][0];\n    }\n    return a;\n}\n\nfunction lcm(a, b) {\n    return (a * b) / gcd(a, b);\n}\n\nfunction smallestCommons(arr) {\n  arr.sort(function(a,b) {return a-b;});\n  var rng = [];\n  for (var i = arr[0]; i <= arr[1]; i++) {\n    rng.push(i);\n  }\n  return rng.reduce(lcm);\n}"
       ]
     },
     {
@@ -661,6 +661,9 @@
         "",
         "find([1, 2, 3, 4], function(num){ return num % 2 === 0; });"
       ],
+      "solutions": [
+        "function find(arr, func) {\n  var num;\n  arr.some(function(e) {\n    if (func(e)) {\n      num = e;\n      return true;\n    }\n  });\n  return num;\n}"
+      ],
       "tests": [
         "assert.strictEqual(find([1, 3, 5, 8, 9, 10], function(num) { return num % 2 === 0; }), 8, 'message: <code>find([1, 3, 5, 8, 9, 10], function(num) { return num % 2 === 0; })</code> should return 8.');",
         "assert.strictEqual(find([1, 3, 5, 9], function(num) { return num % 2 === 0; }), undefined, 'message: <code>find([1, 3, 5, 9], function(num) { return num % 2 === 0; })</code> should return undefined.');"
@@ -669,15 +672,12 @@
       "MDNlinks": [
         "Array.filter()"
       ],
+      "isRequired": true,
       "challengeType": 5,
-      "nameEs": "Buscando la verdad",
+      "titleEs": "Buscando la verdad",
       "descriptionEs": [
         "Crea una función que busque dentro de un vector (primer argumento) y que devuelva el primer elemento que pase una prueba de verdad (segundo argumento).",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
-      ],
-      "isRequired": true,
-      "solutions": [
-        "function find(arr, func) {\n  var num;\n  arr.some(function(e) {\n    if (func(e)) {\n      num = e;\n      return true;\n    }\n  });\n  return num;\n}"
       ]
     },
     {
@@ -696,6 +696,9 @@
         "",
         "drop([1, 2, 3], function(n) {return n < 3; });"
       ],
+      "solutions": [
+        "function drop(arr, func) {\n  // Drop them elements.\n  while (arr.length && !func(arr[0])) {\n    arr.shift();\n  }\n  return arr;\n}"
+      ],
       "tests": [
         "assert.deepEqual(drop([1, 2, 3, 4], function(n) {return n >= 3;}), [3, 4], 'message: <code>drop([1, 2, 3, 4], function(n) {return n >= 3;})</code> should return <code>[3, 4]</code>.');",
         "assert.deepEqual(drop([0, 1, 0, 1], function(n) {return n === 1;}), [1, 0, 1], 'message: <code>drop([0, 1, 0, 1], function(n) {return n === 1;})</code> should return <code>[1, 0, 1]</code>.');",
@@ -710,16 +713,13 @@
         "Array.shift()",
         "Array.slice()"
       ],
+      "isRequired": true,
       "challengeType": 5,
-      "nameEs": "¡Fuera de aquí!",
+      "titleEs": "¡Fuera de aquí!",
       "descriptionEs": [
         "Toma los elementos contenidos en el vector que se te provee en el primer argumento de la función y elimínalos uno por uno, hasta que la función provista en el segundo argumento devuelva true.",
         "Retorna el resto del vector, de lo contrario retorna un vector vacío.",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
-      ],
-      "isRequired": true,
-      "solutions": [
-        "function drop(arr, func) {\n  // Drop them elements.\n  while (arr.length && !func(arr[0])) {\n    arr.shift();\n  }\n  return arr;\n}"
       ]
     },
     {
@@ -737,6 +737,9 @@
         "",
         "steamroller([1, [2], [3, [[4]]]]);"
       ],
+      "solutions": [
+        "function steamroller(arr) {\n  if (!Array.isArray(arr)) {\n    return [arr];\n  }\n  var out = [];\n  arr.forEach(function(e) {\n    steamroller(e).forEach(function(v) {\n      out.push(v);\n    });\n  });\n  return out;\n}"
+      ],
       "tests": [
         "assert.deepEqual(steamroller([[[\"a\"]], [[\"b\"]]]), [\"a\", \"b\"], 'message: <code>steamroller([[[\"a\"]], [[\"b\"]]])</code> should return <code>[\"a\", \"b\"]</code>.');",
         "assert.deepEqual(steamroller([1, [2], [3, [[4]]]]), [1, 2, 3, 4], 'message: <code>steamroller([1, [2], [3, [[4]]]])</code> should return <code>[1, 2, 3, 4]</code>.');",
@@ -747,15 +750,12 @@
       "MDNlinks": [
         "Array.isArray()"
       ],
+      "isRequired": true,
       "challengeType": 5,
-      "nameEs": "Aplanadora",
+      "titleEs": "Aplanadora",
       "descriptionEs": [
         "Aplana el vector anidado que se te provee. Tu función debe poder aplanar vectores de cualquier forma.",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
-      ],
-      "isRequired": true,
-      "solutions": [
-        "function steamroller(arr) {\n  if (!Array.isArray(arr)) {\n    return [arr];\n  }\n  var out = [];\n  arr.forEach(function(e) {\n    steamroller(e).forEach(function(v) {\n      out.push(v);\n    });\n  });\n  return out;\n}"
       ]
     },
     {
@@ -773,6 +773,9 @@
         "",
         "binaryAgent(\"01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111\");"
       ],
+      "solutions": [
+        "function binaryAgent(str) {\n  return str.split(' ').map(function(s) { return parseInt(s, 2); }).map(function(b) { return String.fromCharCode(b);}).join('');\n}"
+      ],
       "tests": [
         "assert.deepEqual(binaryAgent('01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111'), \"Aren't bonfires fun!?\", 'message: <code>binaryAgent(\"01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111\")</code> should return \"Aren&#39;t bonfires fun!?\"');",
         "assert.deepEqual(binaryAgent('01001001 00100000 01101100 01101111 01110110 01100101 00100000 01000110 01110010 01100101 01100101 01000011 01101111 01100100 01100101 01000011 01100001 01101101 01110000 00100001'), \"I love FreeCodeCamp!\", 'message: <code>binaryAgent(\"01001001 00100000 01101100 01101111 01110110 01100101 00100000 01000110 01110010 01100101 01100101 01000011 01101111 01100100 01100101 01000011 01100001 01101101 01110000 00100001\")</code> should return \"I love FreeCodeCamp!\"');"
@@ -782,16 +785,13 @@
         "String.charCodeAt()",
         "String.fromCharCode()"
       ],
+      "isRequired": true,
       "challengeType": 5,
-      "nameEs": "Mensaje secreto",
+      "titleEs": "Mensaje secreto",
       "descriptionEs": [
         "Haz que la función devuelva el mensaje en inglés escondido en el código binario de la cadena de texto que se le pasa.",
         "La cadena de texto binaria estará separada por espacios.",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
-      ],
-      "isRequired": true,
-      "solutions": [
-        "function binaryAgent(str) {\n  return str.split(' ').map(function(s) { return parseInt(s, 2); }).map(function(b) { return String.fromCharCode(b);}).join('');\n}"
       ]
     },
     {
@@ -810,6 +810,9 @@
         "",
         "every([{\"user\": \"Tinky-Winky\", \"sex\": \"male\"}, {\"user\": \"Dipsy\", \"sex\": \"male\"}, {\"user\": \"Laa-Laa\", \"sex\": \"female\"}, {\"user\": \"Po\", \"sex\": \"female\"}], \"sex\");"
       ],
+      "solutions": [
+        "function every(collection, pre) {\n  // Does everyone have one of these?\n  return collection.every(function(e) { return e[pre]; });\n}"
+      ],
       "tests": [
         "assert.strictEqual(every([{\"user\": \"Tinky-Winky\", \"sex\": \"male\"}, {\"user\": \"Dipsy\", \"sex\": \"male\"}, {\"user\": \"Laa-Laa\", \"sex\": \"female\"}, {\"user\": \"Po\", \"sex\": \"female\"}], \"sex\"), true, 'message: <code>every([{\"user\": \"Tinky-Winky\", \"sex\": \"male\"}, {\"user\": \"Dipsy\", \"sex\": \"male\"}, {\"user\": \"Laa-Laa\", \"sex\": \"female\"}, {\"user\": \"Po\", \"sex\": \"female\"}], \"sex\")</code> should return true.');",
         "assert.strictEqual(every([{\"user\": \"Tinky-Winky\", \"sex\": \"male\"}, {\"user\": \"Dipsy\"}, {\"user\": \"Laa-Laa\", \"sex\": \"female\"}, {\"user\": \"Po\", \"sex\": \"female\"}], \"sex\"), false, 'message: <code>every([{\"user\": \"Tinky-Winky\", \"sex\": \"male\"}, {\"user\": \"Dipsy\"}, {\"user\": \"Laa-Laa\", \"sex\": \"female\"}, {\"user\": \"Po\", \"sex\": \"female\"}], \"sex\")</code> should return false.');",
@@ -821,17 +824,14 @@
         "assert.strictEqual(every([{\"single\": \"double\"}, {\"single\": undefined}], \"single\"), false, 'message: <code>every([{\"single\": \"double\"}, {\"single\": undefined}], \"single\")</code> should return false');",
         "assert.strictEqual(every([{\"single\": \"double\"}, {\"single\": NaN}], \"single\"), false, 'message: <code>every([{\"single\": \"double\"}, {\"single\": NaN}], \"single\")</code> should return false');"
       ],
+      "isRequired": true,
       "type": "bonfire",
       "challengeType": 5,
-      "nameEs": "Que todo sea verdadero",
+      "titleEs": "Que todo sea verdadero",
       "descriptionEs": [
         "Verifica si la función en el segundo argumento devuelve true para todos los elementos de la colección en el primer argumento.",
         "Recuerda que puedes accesar a las propiedades de un objeto, ya sea a través de la notación por punto o de la notación por corchete usando [].",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
-      ],
-      "isRequired": true,
-      "solutions": [
-        "function every(collection, pre) {\n  // Does everyone have one of these?\n  return collection.every(function(e) { return e[pre]; });\n}"
       ]
     },
     {
@@ -853,6 +853,9 @@
         "",
         "add(2,3);"
       ],
+      "solutions": [
+        "function add() {\n  var a = arguments[0];\n  if (toString.call(a) !== '[object Number]') return;  \n  if (arguments.length === 1) {\n    return function(b) {\n      if (toString.call(b) !== '[object Number]') return;\n      return a + b;\n    };\n  }\n  var b = arguments[1];\n  if (toString.call(b) !== '[object Number]') return;  \n  return a + arguments[1];\n}"
+      ],
       "tests": [
         "assert.deepEqual(add(2, 3), 5, 'message: <code>add(2, 3)</code> should return 5.');",
         "assert.deepEqual(add(2)(3), 5, 'message: <code>add(2)(3)</code> should return 5.');",
@@ -865,8 +868,9 @@
         "Closures",
         "Arguments object"
       ],
+      "isRequired": true,
       "challengeType": 5,
-      "nameEs": "Argumentos opcionales",
+      "titleEs": "Argumentos opcionales",
       "descriptionEs": [
         "Crea una función que sume dos argumentos. Si sólo se le pasa un argumento a la función, haz que devuelva otra función que acepte un argumento y que devuelva la suma correspondiente.",
         "Por ejemplo, <code>add(2, 3)</code> debe devolver <code>5</code>, y <code>add(2)</code> debe devolver una función.",
@@ -875,10 +879,6 @@
         "<code>sumTwoAnd(3)</code> devuelve <code>5</code>.",
         "Si alguno de los argumentos no es un número válido, haz que devuelva undefined.",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
-      ],
-      "isRequired": true,
-      "solutions": [
-        "function add() {\n  var a = arguments[0];\n  if (toString.call(a) !== '[object Number]') return;  \n  if (arguments.length === 1) {\n    return function(b) {\n      if (toString.call(b) !== '[object Number]') return;\n      return a + b;\n    };\n  }\n  var b = arguments[1];\n  if (toString.call(b) !== '[object Number]') return;  \n  return a + arguments[1];\n}"
       ]
     }
   ]
diff --git a/seed/challenges/01-front-end-development-certification/intermediate-ziplines.json b/seed/challenges/01-front-end-development-certification/intermediate-ziplines.json
index 1580df2..9ad5cee 100644
--- a/seed/challenges/01-front-end-development-certification/intermediate-ziplines.json
+++ b/seed/challenges/01-front-end-development-certification/intermediate-ziplines.json
@@ -22,7 +22,6 @@
       ],
       "tests": [],
       "type": "zipline",
-      "nameRu": "Создайте генератор случайных цитат",
       "descriptionRu": [
         "<span class='text-info'>Задание:</span> Создайте <a href='http://codepen.io' target='_blank'>CodePen.io</a> который успешно копирует вот этот: <a href='http://codepen.io/FreeCodeCamp/full/bELoPJ' target='_blank'>http://codepen.io/FreeCodeCamp/full/bELoPJ</a>.",
         "<span class='text-info'>Правило #1:</span> Не подсматривайте код приведенного на CodePen примера. Напишите его самостоятельно.",
@@ -36,7 +35,6 @@
         "Когда выполните задание кликните кнопку \"I've completed this challenge\" и добавьте ссылку на ваш CodePen. Если вы программировали с кем-то в паре, также добавьте имя вашего напарника.",
         "Если вы хотите получить немедленную оценку вашего проекта, нажмите эту кнопку и добавьте ссылку на ваш CodePen. В противном случае мы проверим его перед тем как вы приступите к проектам для некоммерческих организаций.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
       ],
-      "nameEs": "Crea una máquina de frases aleatorias",
       "descriptionEs": [
         "<span class='text-info'>Objetivo:</span> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a la de esta: <a href='http://codepen.io/FreeCodeCamp/full/bELoPJ' target='_blank'>http://codepen.io/FreeCodeCamp/full/bELoPJ</a>.",
         "<span class='text-info'>Regla #1:</span> No veas el código del proyecto de ejemplo en CodePen. Encuentra la forma de hacerlo por tu cuenta.",
@@ -48,7 +46,9 @@
         "Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiendolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
       ],
       "isRequired": true,
-      "challengeType": 3
+      "challengeType": 3,
+      "titleRu": "Создайте генератор случайных цитат",
+      "titleEs": "Crea una máquina de frases aleatorias"
     },
     {
       "id": "bd7158d8c442eddfaeb5bd10",
@@ -71,7 +71,6 @@
       "tests": [],
       "type": "zipline",
       "challengeType": 3,
-      "nameRu": "Покажите местную погоду",
       "descriptionRu": [
         "<span class='text-info'>Задание:</span> Создайте <a href='http://codepen.io' target='_blank'>CodePen.io</a> который успешно копирует вот этот: <a href='http://codepen.io/FreeCodeCamp/full/bELRjV' target='_blank'>http://codepen.io/FreeCodeCamp/full/bELRjV</a>.",
         "<span class='text-info'>Правило #1:</span> Не подсматривайте код приведенного на CodePen примера. Напишите его самостоятельно.",
@@ -86,7 +85,6 @@
         "Когда выполните задание кликните кнопку \"I've completed this challenge\" и добавьте ссылку на ваш CodePen. Если вы программировали с кем-то в паре, также добавьте имя вашего напарника.",
         "Если вы хотите получить немедленную оценку вашего проекта, нажмите эту кнопку и добавьте ссылку на ваш CodePen. В противном случае мы проверим его перед тем как вы приступите к проектам для некоммерческих организаций.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
       ],
-      "nameEs": "Muestra el clima local",
       "descriptionEs": [
         "<span class='text-info'>Objetivo:</span> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a la de esta: <a href='http://codepen.io/FreeCodeCamp/full/bELRjV' target='_blank'>http://codepen.io/FreeCodeCamp/full/bELRjV</a>.",
         "<span class='text-info'>Regla #1:</span> No veas el código del proyecto de ejemplo en CodePen. Encuentra la forma de hacerlo por tu cuenta.",
@@ -94,12 +92,14 @@
         "<span class='text-info'>Historia de usuario:</span> Pedo obtener información acerca del clima en mi localización actual.",
         "<span class='text-info'>Historia de usuario:</span> Puedo ver un icono diferente o una imagen de fondo diferente (e.g. montaña con nieve, desierto caliente) dependiendo del clima.",
         "<span class='text-info'>Historia de usuario:</span> Puedo pulsar un botón para cambiar la unidad de temperatura de grados Fahrenheit a Celsius y viceversa.",
-       "Recomendamos utilizar <a href='http://openweathermap.org/current#geo' target='_blank'>Open Weather API</a>. Al utilizarlo tendrás que crear una llave API gratuita. Normalmente debes evitar exponer llaves de API en CodePen, pero por el momento no hemos encontrado un API de clima que no requiera llave.",
+        "Recomendamos utilizar <a href='http://openweathermap.org/current#geo' target='_blank'>Open Weather API</a>. Al utilizarlo tendrás que crear una llave API gratuita. Normalmente debes evitar exponer llaves de API en CodePen, pero por el momento no hemos encontrado un API de clima que no requiera llave.",
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado.",
         "Cuando hayas terminado, pulsa el botón de \"I've completed this challenge\" e incluye un enlace a tu CodePen.",
         "Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiendolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
       ],
-      "isRequired": true
+      "isRequired": true,
+      "titleRu": "Покажите местную погоду",
+      "titleEs": "Muestra el clima local"
     },
     {
       "id": "bd7158d8c442eddfaeb5bd19",
@@ -123,13 +123,11 @@
       "tests": [],
       "type": "zipline",
       "challengeType": 3,
-      "nameEs": "Crea un buscador de Wikipedia",
       "descriptionEs": [
         "<span class='text-info'>Objetivo:</span> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a la de esta: <a href='http://codepen.io/FreeCodeCamp/full/pgNRvJ' target='_blank'>http://codepen.io/FreeCodeCamp/full/pgNRvJ</a>.",
         "<span class='text-info'>Regla #1:</span> No veas el código del proyecto de ejemplo en CodePen. Encuentra la forma de hacerlo por tu cuenta.",
         "<span class='text-info'>Regla #2:</span> Satisface las siguientes <a href='http://en.wikipedia.org/wiki/User_story' target='_blank'>historias de usuario</a>. Usa cualquier librería o APIs que necesites. Dale tu estilo personal.",
-
-          "<span class='text-info'>Historia de usuario:</span> Pedo obtener información acerca del clima en mi localización actual.",
+        "<span class='text-info'>Historia de usuario:</span> Pedo obtener información acerca del clima en mi localización actual.",
         "<span class='text-info'>Historia de usuario:</span> Puedo ver un icono diferente o una imagen de fondo diferente (e.g. montaña con nieve, desierto caliente) dependiendo del clima.",
         "<span class='text-info'>Historia de usuario:</span> Puedo pulsar un botón para cambiar la unidad de temperatura de grados Fahrenheit a Celsius y viceversa.",
         "<span class='text-info'>Historia de usuario:</span> Puedo buscar entradas en Wikipedia en un cuadro de búsqueda y ver las entradas de Wikipedia resultantes.",
@@ -141,7 +139,8 @@
         "Cuando hayas terminado, pulsa el botón de \"I've completed this challenge\" e incluye un enlace a tu CodePen.",
         "Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiendolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
       ],
-      "isRequired": true
+      "isRequired": true,
+      "titleEs": "Crea un buscador de Wikipedia"
     },
     {
       "id": "bd7158d8c442eddfaeb5bd1f",
@@ -167,7 +166,6 @@
       "tests": [],
       "type": "zipline",
       "challengeType": 3,
-      "nameRu": "Используйте Twitch.tv JSON API",
       "descriptionRu": [
         "<span class='text-info'>Задание:</span> Создайте <a href='http://codepen.io' target='_blank'>CodePen.io</a> который успешно копирует вот этот: <a href='http://codepen.io/FreeCodeCamp/full/adBpOw' target='_blank'>http://codepen.io/FreeCodeCamp/full/adBpOw</a>.",
         "<span class='text-info'>Правило #1:</span> Не подсматривайте код приведенного на CodePen примера. Напишите его самостоятельно.",
@@ -186,7 +184,6 @@
         "Когда выполните задание кликните кнопку \"I've completed this challenge\" и добавьте ссылку на ваш CodePen. Если вы программировали с кем-то в паре, также добавьте имя вашего напарника.",
         "Если вы хотите получить немедленную оценку вашего проекта, нажмите эту кнопку и добавьте ссылку на ваш CodePen. В противном случае мы проверим его перед тем как вы приступите к проектам для некоммерческих организаций.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
       ],
-      "nameEs": "Usa el API JSON de Twitch.tv",
       "descriptionEs": [
         "<span class='text-info'>Objetivo:</span> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a la de esta: <a href='http://codepen.io/FreeCodeCamp/full/adBpOw' target='_blank'>http://codepen.io/FreeCodeCamp/full/adBpOw</a>.",
         "<span class='text-info'>Regla #1:</span> No veas el código del proyecto de ejemplo en CodePen. Encuentra la forma de hacerlo por tu cuenta.",
@@ -202,7 +199,9 @@
         "Cuando hayas terminado, pulsa el botón de \"I've completed this challenge\" e incluye un enlace a tu CodePen.",
         "Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiendolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
       ],
-      "isRequired": true
+      "isRequired": true,
+      "titleRu": "Используйте Twitch.tv JSON API",
+      "titleEs": "Usa el API JSON de Twitch.tv"
     }
   ]
 }
diff --git a/seed/challenges/01-front-end-development-certification/jquery.json b/seed/challenges/01-front-end-development-certification/jquery.json
index 8768e24..ab5571e 100644
--- a/seed/challenges/01-front-end-development-certification/jquery.json
+++ b/seed/challenges/01-front-end-development-certification/jquery.json
@@ -50,7 +50,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Aprende cómo funcionan las etiquetas de programa y la función de documento listo.",
+      "titleEs": "Aprende cómo funcionan las etiquetas de programa y la función de documento listo.",
       "descriptionEs": [
         "Ahora estamos listos para aprender jQuery, la herramienta de JavaScript más popular de todos los tiempos. No te preocupes por JavaScript en si --lo cubriremos pronto.",
         "Antes de que podamos comenzar a usar jQuery, tenemos que añadir algunas cosas a nuestro HTML.",
@@ -109,7 +109,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Elige elementos HTML usando selectores y jQuery",
+      "titleEs": "Elige elementos HTML usando selectores y jQuery",
       "descriptionEs": [
         "Ya tenemos una <code>función de documento listo</code>.",
         "Ahora vamos a escribir nuestra primera instrucción jQuery. Todas las funciones de jQuery comienzan con un <code>$</code>, al que suele referirse como <code>operador dólar</code>, o simplemente como <code>bling</code>. ",
@@ -168,7 +168,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Elige elementos por su clase usando jQuery",
+      "titleEs": "Elige elementos por su clase usando jQuery",
       "descriptionEs": [
         "¿Viste como hicimos rebotar todos tus elementos <code>button</code>? Los seleccionamos con <code>$(\"button\")</code>, y luego les añadimos algunas clases CSS con <code>.addClass(\"animated bounce\");.</code> ",
         "Acabas de usar la función <code>addClass()</code> de jQuery, que te permite añadir clases a los elementos.",
@@ -230,7 +230,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Elige elementos por ID usando jQuery",
+      "titleEs": "Elige elementos por ID usando jQuery",
       "descriptionEs": [
         "También puedes elegir un elemento por su atributo id.",
         "Primero selecciona tu elemento <code>button</code> con el id <code>target3</code> mediante el uso del selector <code>$(\"#target3\")</code>.",
@@ -290,7 +290,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Elimina tus funciones jQuery",
+      "titleEs": "Elimina tus funciones jQuery",
       "descriptionEs": [
         "Estas animaciones eran divertidas al principio, pero ahora se están volviendo una distracción.",
         "Elimina esas tres funciones jQuery de tu <code>función de documento listo</code>, pero deja intacta la declaración de la <code>función de documento listo</code>."
@@ -348,7 +348,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Elige un mismo elemento con múltiples selectores jQuery",
+      "titleEs": "Elige un mismo elemento con múltiples selectores jQuery",
       "descriptionEs": [
         "Ahora ya sabes tres formas de seleccionar elementos: por tipo <code>$(\"button\")</code>, por clase <code>$(\".btn\")</code>, y por identificación <code>$(\"#target1\")</code>. ",
         "Aunque es posible agregar varias clases en una sola llamada a <code>.addClass()</code>, vamos a añadirlas al mismo elemento de tres maneras diferentes.",
@@ -408,7 +408,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Elimina clases de un elemento con jQuery",
+      "titleEs": "Elimina clases de un elemento con jQuery",
       "descriptionEs": [
         "De la misma manera que puedes agregar clases a un elemento con la función <code>addClass()</code> de jQuery, puedes eliminarlas con la función <code>removeClass()</code>.",
         "He aquí cómo puedes hacerlo para un botón específico:",
@@ -469,7 +469,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Cambia el CSS de un elemento usando jQuery",
+      "titleEs": "Cambia el CSS de un elemento usando jQuery",
       "descriptionEs": [
         "También podemos cambiar el CSS de un elemento HTML directamente con jQuery.",
         "jQuery tiene una función llamada <code>.css()</code> que te permite cambiar el CSS de un elemento.",
@@ -530,7 +530,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Desactiva un elemento usando jQuery",
+      "titleEs": "Desactiva un elemento usando jQuery",
       "descriptionEs": [
         "También puedes cambiar propiedades que no son CSS de los elementos HTML con jQuery. Por ejemplo, puedes desactivar los botones. ",
         "Al deshabilitar un botón, se volverá gris y no podrá pulsarse.",
@@ -591,7 +591,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Cambia el texto de un elemento usando jQuery",
+      "titleEs": "Cambia el texto de un elemento usando jQuery",
       "descriptionEs": [
         "Con jQuery, puedes cambiar el texto que está entre las etiquetas de apertura y cierre de un elemento.  Incluso puedes cambiar marcado HTML.",
         "jQuery tiene una función llamada <code>.html()</code> que te permite añadir etiquetas HTML y texto dentro de un elemento.  Cualquier contenido que estuviese previamente dentro del elemento será remplazado por completo con el contenido que proveas usando esta función.",
@@ -648,7 +648,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Elimina un elemento usando jQuery",
+      "titleEs": "Elimina un elemento usando jQuery",
       "descriptionEs": [
         "Ahora quitemos un elemento HTML de tu página usando jQuery.",
         "jQuery tiene una función llamada <code>.remove()</code> que eliminará un elemento HTML por completo",
@@ -706,7 +706,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Usa appendTo para mover elementos con jQuery",
+      "titleEs": "Usa appendTo para mover elementos con jQuery",
       "descriptionEs": [
         "Ahora intentemos mover elementos de un <code>div</code> a otro.",
         "jQuery tiene una función llamada <code>appendTo()</code> que te permite seleccionar elementos HTML y anexarlos a otro elemento.",
@@ -768,7 +768,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Clona un elemento usando jQuery",
+      "titleEs": "Clona un elemento usando jQuery",
       "descriptionEs": [
         "Además de mover elementos, puedes copiarlos de un sitio a otro.",
         "jQuery tiene una función llamada <code>clone()</code> que hace una copia de un elemento.",
@@ -835,7 +835,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Elige el padre de un elemento usando jQuery",
+      "titleEs": "Elige el padre de un elemento usando jQuery",
       "descriptionEs": [
         "Cada elemento HTML tiene un elemento <code>padre</code> del cual <code>hereda</code> propiedades.",
         "Por ejemplo, tu elemento <code>h3</code> <code>jQuery Playground</code> tiene el elemento padre <code>&#60;div class=\"container-fluid\"&#62</code>, que a su vez tiene el padre <code>body</code>. ",
@@ -900,7 +900,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Elige los hjos de un elemento usando jQuery",
+      "titleEs": "Elige los hjos de un elemento usando jQuery",
       "descriptionEs": [
         "Muchos elementos HTML tienen <code>hijos</code>, los cuales <code>heredan</code> sus propiedades de sus elementos padres",
         "Por ejemplo, cada elemento HTML es un hijo de tu elemento <code>body</code>, y tu elemento <code>h3</code> \"jQuery Playground\" es un hijo de tu elemento <code>&#60;div class=\"container-fluid\"&#62</code>.",
@@ -966,7 +966,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Elige un hijo específico de un elemento usando jQuery",
+      "titleEs": "Elige un hijo específico de un elemento usando jQuery",
       "descriptionEs": [
         "Seguramente habrás entendido porque los atributos id son tan convenientes para elegir con selectores jQuery. Pero no siempre contarás con estos agradables identificadores para trabajar. ",
         "Afortunadamente, jQuery tiene algunos otros trucos para elegir los elementos adecuados.",
@@ -1033,7 +1033,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Elige elementos con numeración par usando jQuery",
+      "titleEs": "Elige elementos con numeración par usando jQuery",
       "descriptionEs": [
         "También puedes elegir todos los elementos con numeración par.",
         "He aquí cómo elegirías todos los elementos impares con clase <code>target</code> y como les agregarías unas clases:",
@@ -1096,7 +1096,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Usa jQuery para modificar la página entera",
+      "titleEs": "Usa jQuery para modificar la página entera",
       "descriptionEs": [
         "Hemos terminado de jugar en nuestro patio de recreo jQuery. ¡Vamos a derribarlo!",
         "jQuery también puede elegir el elemento <code>body</code>.",
diff --git a/seed/challenges/01-front-end-development-certification/json-apis-and-ajax.json b/seed/challenges/01-front-end-development-certification/json-apis-and-ajax.json
index 7fd06a6..d9198a6 100644
--- a/seed/challenges/01-front-end-development-certification/json-apis-and-ajax.json
+++ b/seed/challenges/01-front-end-development-certification/json-apis-and-ajax.json
@@ -49,7 +49,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Activa eventos de pulsación con jQuery",
+      "titleEs": "Activa eventos de pulsación con jQuery",
       "descriptionEs": [
         "En esta sección, vamos a aprender cómo obtener datos de las APIs. Las APIs - o interfaces de programación de aplicaciones - son herramientas que utilizan los computadores para comunicarse entre sí.",
         "También aprenderemos cómo actualizar HTML con los datos que obtenemos de estas API usando una tecnología llamada Ajax.",
@@ -58,7 +58,7 @@
         "Antes de poder hacer esto, tenemos que implementar un <code>evento de pulsación</code> dentro de nuestra función <code>$(document).ready()</code>, añadiendo este código:",
         "<blockquote>$(\"#getMessage\").on(\"click\", function(){</br></br>});</blockquote>"
       ],
-      "namePt": "Ativando eventos de clique com jQuery",
+      "titlePt": "Ativando eventos de clique com jQuery",
       "descriptionPt": [
         "Nesta sessão, vamos aprender como obter dados de uma API. As APIS - Interface de Programação de Aplicativos - são ferramentas usadas pelos computadores  para se comunicarem entre si.",
         "Também aprenderemos como utilizar o HTML com os dados obtidos de uma API usando uma tecnologia chamada Ajax",
@@ -112,14 +112,14 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Cambia texto con eventos de pulsación",
+      "titleEs": "Cambia texto con eventos de pulsación",
       "descriptionEs": [
         "Cuando nuestro evento de pulsación ocurre, podemos utilizar jQuery para actualizar un elemento HTML.",
         "Hagamos que cuando un usuario pulse el botón \"Get Message\", el texto del elemento con la clase <code>message</code> cambie para decir \"Here is the message\".",
         "Podemos hacerlo añadiendo el siguiente código dentro de nuestro evento de pulsación:",
         "<code>$(\".message\").html(\"Here is the message\");</code>"
       ],
-      "namePt": "Mundando texto com eventos de clique",
+      "titlePt": "Mundando texto com eventos de clique",
       "descriptionPt": [
         "Quando nosso evento de clique ocorre, podemos utilizar o jQuery para atualixar um elemento HTML",
         "Vamos fazer que quando um usuário clicar no botão \"Get Message\", o texto do elemento com a classe <code>message</code> passe a dizer \"Here is the message\".",
@@ -183,7 +183,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Obtén JSON con el método getJSON de jQuery",
+      "titleEs": "Obtén JSON con el método getJSON de jQuery",
       "descriptionEs": [
         "También puedes solicitar los datos de una fuente externa. Aquí es donde entran en juego las API. ",
         "Recuerda que las API - o interfaces de programación de aplicaciones - son herramientas que utilizan los ordenadores para comunicarse entre sí.",
@@ -195,7 +195,7 @@
         "<blockquote>$.getJSON(\"/json/cats.json\", function(json) {</code></br>  $(\".message\").html(JSON.stringify(json));</br>});</blockquote>",
         "Una vez lo añadas, pulsa el botón \"Get Message\". Tu función Ajax sustituirá el texto \"The message will go here\" con la salida JSON en bruto de la API de fotos de gato de Free Code Camp."
       ],
-      "namePt": "Obter um JSON com o método getJSON do jQuery",
+      "titlePt": "Obter um JSON com o método getJSON do jQuery",
       "descriptionPt": [
         "Também é possivel solicitar os dados de uma fonte externa. É aqui onde as API's entram em jogo. ",
         "Lembre que as API's - Interface de Programação de Aplicativos - são ferramentas que os computadores usam para se comunicar entre si.",
@@ -263,7 +263,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Convierte datos JSON a datos HTML",
+      "titleEs": "Convierte datos JSON a datos HTML",
       "descriptionEs": [
         "Ahora que estamos obteniendo datos de una API JSON, mostremóslos en nuestro HTML.",
         "Podemos usar el método <code>.forEach()</code> para recorrer nuestros datos y modificar nuestros elementos HTML.",
@@ -272,7 +272,7 @@
         "Aquí está el código que hace esto:",
         "<blockquote>json.forEach(function(val) {</br>  var keys = Object.keys(val);</br>  html += \"&lt;div class = 'cat'&gt;\";</br>  keys.forEach(function(key) {</br>    html += \"&lt;b&gt;\" + key + \"&lt;/b&gt;: \" + val[key] + \"&lt;br&gt;\";</br>  });</br>  html += \"&lt;/div&gt;&lt;br&gt;\";</br>});</blockquote>"
       ],
-      "namePt": "Converter dados JSON para HTML",
+      "titlePt": "Converter dados JSON para HTML",
       "descriptionPt": [
         "Agora que estamos obtendo os dados de uma API JSON, vamos mostra-los em nosso HTML",
         "Podemos usar o método <code>.forEach()</code> para percorrer os nossos dados e modificar o elementos HTML.",
@@ -344,14 +344,14 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Presenta imágenes de fuentes de datos",
+      "titleEs": "Presenta imágenes de fuentes de datos",
       "descriptionEs": [
         "Hemos visto en las dos últimas lecciones que cada objeto en nuestro vector JSON contiene una llave <code>imageLink</code> con un valor que corresponde a la url de la imagen de un gato.",
         "Cuando estamos recorriendo estos objetos, usemos esta propiedad <code>imageLink</code> para visualizar la imagen en un elemento <code>img</code>.",
         "Aquí está el código que hace esto:",
         "<code>html += \"&lt;img src = '\" + val.imageLink + \"'&gt;\";</code>"
       ],
-      "namePt": "Apresentar as imagens da fonte de dados",
+      "titlePt": "Apresentar as imagens da fonte de dados",
       "descriptionPt": [
         "Como temos visto nas ultimas lições, cada objeto em nosso array JSON contém a chave <code>imageLink</code> com um valor que corresponde a url da imagem de um gato.",
         "Quando estamos percorrendo por estes objetos, usamos a propriedade <code>imageLink</code> para visualizar a imagem em um elemento <code>img</code>.",
@@ -423,14 +423,14 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Pre-filtra JSON",
+      "titleEs": "Pre-filtra JSON",
       "descriptionEs": [
         "Si no queremos presentar cada foto de gato que obtengamos de la API JSON de fotos de gato de Free Code Camp, podemos pre-filtrar el json antes de iterar a través de este.",
         "Vamos a filtrar el gato cuya llave \"id\" tiene un valor de 1.",
         "Aquí está el código para hacer esto:",
         "<blockquote>json = json.filter(function(val) {</br>  return (val.id !== 1);</br>});</blockquote>"
       ],
-      "namePt": "Pré-filtro JSON",
+      "titlePt": "Pré-filtro JSON",
       "descriptionPt": [
         "Se não queremos apresentar cada foto de gato que obtemos da API JSON de fotos de gatos do Free Code Camp, podemos realizar um pré-filtro o JSON  antes de iterar através dele.",
         "Vamos filtrar o gato cuja a chave \"id\" tenha o valor 1.",
@@ -467,7 +467,7 @@
       ],
       "type": "waypoint",
       "challengeType": 0,
-      "nameEs": "Recibir datos de Geo-localización",
+      "titleEs": "Recibir datos de Geo-localización",
       "descriptionEs": [
         "Otra cosa interesante que podemos hacer es acceder a la ubicación actual de nuestros usuarios. Todos los navegadores han incorporado un geo-localizador que nos puede dar esta información. ",
         "El navegador puede obtener la longitud y latitud actual de nuestros usuarios.",
@@ -476,7 +476,7 @@
         "Aquí hay un código que hace esto:",
         "<blockquote>if (navigator.geolocation) {</br>  navigator.geolocation.getCurrentPosition(function(position) {</br>    $(\"#data\").html(\"latitude: \" + position.coords.latitude + \"&lt;br&gt;longitude: \" + position.coords.longitude);</br>  });</br>}</blockquote>"
       ],
-      "namePt": "Receber dados de Geo-localização",
+      "titlePt": "Receber dados de Geo-localização",
       "descriptionPt": [
         "Outra coisa interessante que podemos fazer é acessar a atual localização do nosso usuário. Todos os navegadores tem implementado um geo-localizador que pode nos fornecer essa informação.",
         "O navegador pode obter a longitude e latitude atual de nossos usuários",
diff --git a/seed/challenges/01-front-end-development-certification/object-oriented-and-functional-programming.json b/seed/challenges/01-front-end-development-certification/object-oriented-and-functional-programming.json
index ba76819..82d1db2 100644
--- a/seed/challenges/01-front-end-development-certification/object-oriented-and-functional-programming.json
+++ b/seed/challenges/01-front-end-development-certification/object-oriented-and-functional-programming.json
@@ -46,7 +46,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Declara objetos de JavaScript como variables",
+      "titleEs": "Declara objetos de JavaScript como variables",
       "descriptionEs": [
         "Antes de sumergirnos en Programación Orientada a Objetos, vamos a revisar los objetos de JavaScript.",
         "Dale a tu objeto <code>motorBike</code> un atributo <code>wheels</code>, otro llamado <code>motors</code> y otro <code>seats</code> y asignales números."
@@ -92,7 +92,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Construye objetos de JavaScript con funciones",
+      "titleEs": "Construye objetos de JavaScript con funciones",
       "descriptionEs": [
         "También podemos crear objetos utilizando funciones <code>constructoras</code>.",
         "A cada función <code>constructora</code> se le da un nombre comenzando en mayúsculas para que quede claro que es una <code>constructora</code>.",
@@ -150,7 +150,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Crea instancias de objetos con funciones constructoras",
+      "titleEs": "Crea instancias de objetos con funciones constructoras",
       "descriptionEs": [
         "¡Ahora usemos esa gran <code>constructora</code> que hicimos en la última lección!",
         "Para utilizar una función <code>constructora</code> la llamamos con la palabra reservada <code>new</code> al frente, como:",
@@ -208,7 +208,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Crea objetos únicos pasando parámetros a la constructora",
+      "titleEs": "Crea objetos únicos pasando parámetros a la constructora",
       "descriptionEs": [
         "La <code>constructora</code> que tenemos es fabulosa, pero ¿qué hacer si no queremos crear siempre el mismo objeto?",
         "Para solucionar esto podemos añadir<code>parámetros</code>en nuestra <code>constructora</code>. Hacemos esto como en el siguiente ejemplo: ",
@@ -287,7 +287,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Crea propiedades privadas de un objeto",
+      "titleEs": "Crea propiedades privadas de un objeto",
       "descriptionEs": [
         "Los objetos tienen sus propios atributos, llamados <code>propiedades</code>, y sus propias funciones, llamadas<code>métodos</code>.",
         "En los desafíos anteriores, se utilizó la palabra reservada <code>this</code> para referenciar <code>propiedades públicas</code>del objeto actual.",
@@ -328,7 +328,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Iterar sobre vectores con .map",
+      "titleEs": "Iterar sobre vectores con .map",
       "descriptionEs": [
         "El método <code>map</code> es una manera conveniente de iterar sobre vectores. He aquí un ejemplo de uso: ",
         "<code>var porCuatro = vectorAntiguo.map(function(val){</code>",
@@ -368,7 +368,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Condensa vectores con .reduce",
+      "titleEs": "Condensa vectores con .reduce",
       "descriptionEs": [
         "El método <code>reduce</code> de un vector, se utiliza para iterar a través del vector y condensarlo en un valor.",
         "Para usar <code>reduce</code> tu le pasas una función de devolución de llamada cuyos argumentos sean un acumulador (en este caso, <code>valorPrevio</code>) y el valor actual (<code>valorActual</code>). ",
@@ -410,7 +410,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Filtrar vectores con .filter",
+      "titleEs": "Filtrar vectores con .filter",
       "descriptionEs": [
         "El método <code>filter</code> se utiliza para iterar a través de un vector y filtrar los elementos que hagan falsa un condición determinada.",
         "<code>filter</code> recibe una función de devolución de llamada que a su vez recibe como argumento el valor actual (que hemos llamado <code>val</code>).",
@@ -452,7 +452,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Ordena vectores con .sort",
+      "titleEs": "Ordena vectores con .sort",
       "descriptionEs": [
         "Puedes utilizar el método <code>sort</code> para ordenar alfabética o numéricamente los valores de un vector.",
         "A diferencia de los métodos de vector que hemos visto,<code>sort</code>en realidad altera el vector en su lugar. Sin embargo, también devuelve este vector ordenado. ",
@@ -493,7 +493,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Invierte vectores con .reverse",
+      "titleEs": "Invierte vectores con .reverse",
       "descriptionEs": [
         "Puedes utilizar el método <code>reverse</code> para invertir los elementos en un vector.",
         "<code>reverse</code> es otro método de vector que altera el vector mismo, y también devuelve el vector invertido.",
@@ -533,7 +533,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Concatena vectores con .concat",
+      "titleEs": "Concatena vectores con .concat",
       "descriptionEs": [
         "<code>concat</code> se puede utilizar para combinar el contenido de dos vectores en uno solo.",
         "<code>concat</code> recibe un vector como argumento y devuelve un nuevo vector con los elementos del vector que recibe concatenados al final.",
@@ -569,7 +569,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Divide cadenas con .split",
+      "titleEs": "Divide cadenas con .split",
       "descriptionEs": [
         "Puedes utilizar el método <code>split</code> para dividir una cadena en un vector.",
         "<code>split</code> utiliza el argumento que recibe como delimitador para determinar en qué puntos debe dividir la cadena.",
@@ -604,7 +604,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Une cadenas con .join",
+      "titleEs": "Une cadenas con .join",
       "descriptionEs": [
         "Podemos usar el método <code>join</code> para unir los elementos de un vector en una cadena, separándolos con el delimitador que proporciones como argumento.",
         "El siguiente es un ejemplo del uso de <code>join</code> para unir todos los elementos de un vector en una cadena con todos los elementos separados entre si por palabra` Na`: ",
diff --git a/seed/challenges/02-data-visualization-certification/d3.json b/seed/challenges/02-data-visualization-certification/d3.json
index 7835dc5..be5727b 100644
--- a/seed/challenges/02-data-visualization-certification/d3.json
+++ b/seed/challenges/02-data-visualization-certification/d3.json
@@ -13,9 +13,7 @@
       "tests": [],
       "type": "waypoint",
       "challengeType": 3,
-      "nameEs": "Desafios para aprender D3",
-      "descriptionEs": []
-
+      "titleEs": "Desafios para aprender D3"
     }
   ]
 }
diff --git a/seed/challenges/02-data-visualization-certification/data-visualization-certificate.json b/seed/challenges/02-data-visualization-certification/data-visualization-certificate.json
index f9e7123..c524e9f 100644
--- a/seed/challenges/02-data-visualization-certification/data-visualization-certificate.json
+++ b/seed/challenges/02-data-visualization-certification/data-visualization-certificate.json
@@ -92,7 +92,6 @@
       ],
       "type": "Waypoint",
       "challengeType": 7,
-      "nameEs": "Reclama tu certificado de Visualización de datos",
       "descriptionEs": [
         [
           "http://i.imgur.com/Et3iD74.jpg",
@@ -118,7 +117,8 @@
           "¡Felicitaciones! Hemos agregado tu certificado de Visualización de datos a tu portafolio. A menos que elijas no mostrar tus soluciones, este certificado será públicamente visible y verificable.",
           ""
         ]
-      ]
+      ],
+      "titleEs": "Reclama tu certificado de Visualización de datos"
     }
   ]
 }
diff --git a/seed/challenges/02-data-visualization-certification/data-visualization-projects.json b/seed/challenges/02-data-visualization-certification/data-visualization-projects.json
index 939afae..961b056 100644
--- a/seed/challenges/02-data-visualization-certification/data-visualization-projects.json
+++ b/seed/challenges/02-data-visualization-certification/data-visualization-projects.json
@@ -19,14 +19,15 @@
         "When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. ",
         "You can get feedback on your project from fellow campers by sharing it in our <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Code Review Chatroom</a>. You can also share it on Twitter and your city's Campsite (on Facebook)."
       ],
-      "releasedOn": "January 1, 2016",
       "challengeSeed": [
         "150324699"
       ],
       "tests": [],
+      "isRequired": true,
+      "releasedOn": "January 1, 2016",
       "type": "zipline",
       "challengeType": 3,
-      "nameEs": "Visualiza datos utilizando un gráfico de barras",
+      "titleEs": "Visualiza datos utilizando un gráfico de barras",
       "descriptionEs": [
         "<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/adBBWd' target='_blank'>http://codepen.io/FreeCodeCamp/full/adBBWd</a>.",
         "<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
@@ -38,8 +39,7 @@
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> si te sientes atascado.",
         "Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ",
         "Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
-      ],
-      "isRequired": true
+      ]
     },
     {
       "id": "bd7178d8c242eddfaeb5bd13",
@@ -56,14 +56,15 @@
         "When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. ",
         "You can get feedback on your project from fellow campers by sharing it in our <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Code Review Chatroom</a>. You can also share it on Twitter and your city's Campsite (on Facebook)."
       ],
-      "releasedOn": "January 1, 2016",
       "challengeSeed": [
         "150324700"
       ],
       "tests": [],
+      "isRequired": true,
+      "releasedOn": "January 1, 2016",
       "type": "zipline",
       "challengeType": 3,
-      "nameEs": "Visualiza datos utilizando un gráfico de dispersión",
+      "titleEs": "Visualiza datos utilizando un gráfico de dispersión",
       "descriptionEs": [
         "<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/GoNNEy' target='_blank'>http://codepen.io/FreeCodeCamp/full/GoNNEy</a>.",
         "<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
@@ -75,8 +76,7 @@
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> si te sientes atascado.",
         "Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ",
         "Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
-      ],
-      "isRequired": true
+      ]
     },
     {
       "id": "bd7188d8c242eddfaeb5bd13",
@@ -94,14 +94,15 @@
         "When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. ",
         "You can get feedback on your project from fellow campers by sharing it in our <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Code Review Chatroom</a>. You can also share it on Twitter and your city's Campsite (on Facebook)."
       ],
-      "releasedOn": "January 1, 2016",
       "challengeSeed": [
         "150324701"
       ],
       "tests": [],
+      "isRequired": true,
+      "releasedOn": "January 1, 2016",
       "type": "zipline",
       "challengeType": 3,
-      "nameEs": "Visualiza datos utilizando un mapa de calor",
+      "titleEs": "Visualiza datos utilizando un mapa de calor",
       "descriptionEs": [
         "<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/rxWWGa' target='_blank'>http://codepen.io/FreeCodeCamp/full/rxWWGa</a>.",
         "<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
@@ -114,8 +115,7 @@
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> si te sientes atascado.",
         "Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ",
         "Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
-      ],
-      "isRequired": true
+      ]
     },
     {
       "id": "bd7198d8c242eddfaeb5bd13",
@@ -135,14 +135,15 @@
         "When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. ",
         "You can get feedback on your project from fellow campers by sharing it in our <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Code Review Chatroom</a>. You can also share it on Twitter and your city's Campsite (on Facebook)."
       ],
-      "releasedOn": "January 1, 2016",
       "challengeSeed": [
         "150324458"
       ],
       "tests": [],
+      "isRequired": true,
+      "releasedOn": "January 1, 2016",
       "type": "zipline",
       "challengeType": 3,
-      "nameEs": "Muestra asociaciones utilizando un gráfico de fuerzas dirigidas",
+      "titleEs": "Muestra asociaciones utilizando un gráfico de fuerzas dirigidas",
       "descriptionEs": [
         "<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/KVNNXY' target='_blank'>http://codepen.io/FreeCodeCamp/full/KVNNXY</a>.",
         "<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
@@ -157,8 +158,7 @@
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> si te sientes atascado.",
         "Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ",
         "Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
-      ],
-      "isRequired": true
+      ]
     },
     {
       "id": "bd7108d8c242eddfaeb5bd13",
@@ -176,14 +176,15 @@
         "When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. ",
         "You can get feedback on your project from fellow campers by sharing it in our <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Code Review Chatroom</a>. You can also share it on Twitter and your city's Campsite (on Facebook)."
       ],
-      "releasedOn": "January 1, 2016",
       "challengeSeed": [
         "150324698"
       ],
       "tests": [],
+      "isRequired": true,
+      "releasedOn": "January 1, 2016",
       "type": "zipline",
       "challengeType": 3,
-      "nameEs": "Mapea datos a lo largo del Globo",
+      "titleEs": "Mapea datos a lo largo del Globo",
       "descriptionEs": [
         "<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/mVEJag' target='_blank'>http://codepen.io/FreeCodeCamp/full/mVEJag</a>.",
         "<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
@@ -196,8 +197,7 @@
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> si te sientes atascado.",
         "Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ",
         "Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
-      ],
-      "isRequired": true
+      ]
     }
   ]
 }
diff --git a/seed/challenges/02-data-visualization-certification/react-projects.json b/seed/challenges/02-data-visualization-certification/react-projects.json
index 0ffd41a..dcd3235 100644
--- a/seed/challenges/02-data-visualization-certification/react-projects.json
+++ b/seed/challenges/02-data-visualization-certification/react-projects.json
@@ -26,8 +26,9 @@
       ],
       "tests": [],
       "type": "zipline",
+      "isRequired": true,
       "challengeType": 3,
-      "nameRu": "Создайте предпросмотрщик языка разметки Markdown",
+      "titleRu": "Создайте предпросмотрщик языка разметки Markdown",
       "descriptionRu": [
         "<strong>Задание:</strong> Создайте приложение <a href='http://codepen.io' target='_blank'>CodePen.io</a>, функционал которого схож с этим: <a href='http://codepen.io/FreeCodeCamp/full/obYYqW' target='_blank'>http://codepen.io/FreeCodeCamp/full/obYYqW</a>.",
         "<strong>Правило #1:</strong> Не подсматривайте код приложения-примера. Напишите его самостоятельно.",
@@ -41,7 +42,7 @@
         "Когда закончите, нажмите кнопку \"I've completed this challenge\" и укажите ссылку на вашу работу на CodePen.",
         "Вы можете получить отзыв о вашем проекте от коллег, поделившись ссылкой на него в нашем <a href='//gitter.im/freecodecamp/codereview' target='_blank'>чате для рассмотрения кода</a>. Также вы можете поделиться ею через Twitter и на странице Free Code Camp вашего города на Facebook."
       ],
-      "nameEs": "Crea un visualizador de lenguaje de marcado (Markdown)",
+      "titleEs": "Crea un visualizador de lenguaje de marcado (Markdown)",
       "descriptionEs": [
         "<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/obYYqW' target='_blank'>http://codepen.io/FreeCodeCamp/full/obYYqW</a>.",
         "<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
@@ -54,8 +55,7 @@
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> si te sientes atascado.",
         "Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ",
         "Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
-      ],
-      "isRequired": true
+      ]
     },
     {
       "id": "bd7156d8c242eddfaeb5bd13",
@@ -80,8 +80,9 @@
       ],
       "tests": [],
       "type": "zipline",
+      "isRequired": true,
       "challengeType": 3,
-      "nameRu": "Создайте таблицу Кемперов-Лидеров",
+      "titleRu": "Создайте таблицу Кемперов-Лидеров",
       "descriptionRu": [
         "<strong>Задание:</strong> Создайте приложение <a href='http://codepen.io' target='_blank'>CodePen.io</a>, функционал которого схож с этим: <a href='http://codepen.io/FreeCodeCamp/full/qbqqJm/' target='_blank'>http://codepen.io/FreeCodeCamp/full/qbqqJm/</a>.",
         "<strong>Правило #1:</strong> Не подсматривайте код приложения-примера. Напишите его самостоятельно.",
@@ -96,7 +97,7 @@
         "Когда закончите, нажмите кнопку \"I've completed this challenge\" и укажите ссылку на вашу работу на CodePen.",
         "Вы можете получить отзыв о вашем проекте от коллег, поделившись ссылкой на него в нашем <a href='//gitter.im/freecodecamp/codereview' target='_blank'>чате для рассмотрения кода</a>. Также вы можете поделиться ею через Twitter и на странице Free Code Camp вашего города на Facebook."
       ],
-      "nameEs": "Crea un marcador para los campistas",
+      "titleEs": "Crea un marcador para los campistas",
       "descriptionEs": [
         "<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/qbqqJm/' target='_blank'>http://codepen.io/FreeCodeCamp/full/qbqqJm/</a>.",
         "<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
@@ -110,8 +111,7 @@
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> si te sientes atascado.",
         "Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ",
         "Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
-      ],
-      "isRequired": true
+      ]
     },
     {
       "id": "bd7155d8c242eddfaeb5bd13",
@@ -137,8 +137,9 @@
       ],
       "tests": [],
       "type": "zipline",
+      "isRequired": true,
       "challengeType": 3,
-      "nameRu": "Создайте хранилище рецептов",
+      "titleRu": "Создайте хранилище рецептов",
       "descriptionRu": [
         "<strong>Задание:</strong> Создайте приложение <a href='http://codepen.io' target='_blank'>CodePen.io</a>, функционал которого схож с этим: <a href='http://codepen.io/FreeCodeCamp/full/LGbbqj' target='_blank'>http://codepen.io/FreeCodeCamp/full/LGbbqj</a>.",
         "<strong>Правило #1:</strong> Не подсматривайте код приложения-примера. Напишите его самостоятельно.",
@@ -154,7 +155,7 @@
         "Когда закончите, нажмите кнопку \"I've completed this challenge\" и укажите ссылку на вашу работу на CodePen.",
         "Вы можете получить отзыв о вашем проекте от коллег, поделившись ссылкой на него в нашем <a href='//gitter.im/freecodecamp/codereview' target='_blank'>чате для рассмотрения кода</a>. Также вы можете поделиться ею через Twitter и на странице Free Code Camp вашего города на Facebook."
       ],
-      "nameEs": "Crea una caja de recetas",
+      "titleEs": "Crea una caja de recetas",
       "descriptionEs": [
         "<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/LGbbqj' target='_blank'>http://codepen.io/FreeCodeCamp/full/LGbbqj</a>.",
         "<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
@@ -169,8 +170,7 @@
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> si te sientes atascado.",
         "Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ",
         "Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
-      ],
-      "isRequired": true
+      ]
     },
     {
       "id": "bd7154d8c242eddfaeb5bd13",
@@ -198,8 +198,9 @@
       ],
       "tests": [],
       "type": "zipline",
+      "isRequired": true,
       "challengeType": 3,
-      "nameRu": "Создайте игру \"Жизнь\"",
+      "titleRu": "Создайте игру \"Жизнь\"",
       "descriptionRu": [
         "<strong>Задание:</strong> Создайте приложение <a href='http://codepen.io' target='_blank'>CodePen.io</a>, функционал которого схож с этим: <a href='http://codepen.io/FreeCodeCamp/full/dGOOrZ' target='_blank'>http://codepen.io/FreeCodeCamp/full/dGOOrZ</a>.",
         "<strong>Правило #1:</strong> Не подсматривайте код приложения-примера. Напишите его самостоятельно.",
@@ -217,7 +218,7 @@
         "Когда закончите, нажмите кнопку \"I've completed this challenge\" и укажите ссылку на вашу работу на CodePen.",
         "Вы можете получить отзыв о вашем проекте от коллег, поделившись ссылкой на него в нашем <a href='//gitter.im/freecodecamp/codereview' target='_blank'>чате для рассмотрения кода</a>. Также вы можете поделиться ею через Twitter и на странице Free Code Camp вашего города на Facebook."
       ],
-      "nameEs": "Crea un Juego de la vida",
+      "titleEs": "Crea un Juego de la vida",
       "descriptionEs": [
         "<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/dGOOrZ' target='_blank'>http://codepen.io/FreeCodeCamp/full/dGOOrZ</a>.",
         "<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
@@ -234,8 +235,7 @@
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> si te sientes atascado.",
         "Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ",
         "Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
-      ],
-      "isRequired": true
+      ]
     },
     {
       "id": "bd7153d8c242eddfaeb5bd13",
@@ -264,8 +264,9 @@
       ],
       "tests": [],
       "type": "zipline",
+      "isRequired": true,
       "challengeType": 3,
-      "nameRu": "Создайте Roguelike-подобную игру Подземелье",
+      "titleRu": "Создайте Roguelike-подобную игру Подземелье",
       "descriptionRu": [
         "<strong>Задание:</strong> Создайте приложение <a href='http://codepen.io' target='_blank'>CodePen.io</a>, функционал которого схож с этим: <a href='http://codepen.io/FreeCodeCamp/full/dGOOEJ/' target='_blank'>http://codepen.io/FreeCodeCamp/full/dGOOEJ/</a>.",
         "<strong>Правило #1:</strong> Не подсматривайте код приложения-примера. Напишите его самостоятельно.",
@@ -284,7 +285,7 @@
         "Когда закончите, нажмите кнопку \"I've completed this challenge\" и укажите ссылку на вашу работу на CodePen.",
         "Вы можете получить отзыв о вашем проекте от коллег, поделившись ссылкой на него в нашем <a href='//gitter.im/freecodecamp/codereview' target='_blank'>чате для рассмотрения кода</a>. Также вы можете поделиться ею через Twitter и на странице Free Code Camp вашего города на Facebook."
       ],
-      "nameEs": "Crea un juego de dragones al estilo Rogue",
+      "titleEs": "Crea un juego de dragones al estilo Rogue",
       "descriptionEs": [
         "<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/dGOOEJ/' target='_blank'>http://codepen.io/FreeCodeCamp/full/dGOOEJ/</a>.",
         "<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
@@ -302,8 +303,7 @@
         "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> si te sientes atascado.",
         "Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ",
         "Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
-      ],
-      "isRequired": true
+      ]
     }
   ]
 }
diff --git a/seed/challenges/02-data-visualization-certification/react.json b/seed/challenges/02-data-visualization-certification/react.json
index b941fde..aa26f13 100644
--- a/seed/challenges/02-data-visualization-certification/react.json
+++ b/seed/challenges/02-data-visualization-certification/react.json
@@ -13,8 +13,7 @@
       "tests": [],
       "type": "waypoint",
       "challengeType": 3,
-      "nameEs": "Desafios para aprender React",
-      "descriptionEs": []
+      "titleEs": "Desafios para aprender React"
     }
   ]
 }
diff --git a/seed/challenges/02-data-visualization-certification/sass.json b/seed/challenges/02-data-visualization-certification/sass.json
index e012634..265eca2 100644
--- a/seed/challenges/02-data-visualization-certification/sass.json
+++ b/seed/challenges/02-data-visualization-certification/sass.json
@@ -13,8 +13,7 @@
       "tests": [],
       "type": "waypoint",
       "challengeType": 3,
-      "nameEs": "Desafios para aprender Sass",
-      "descriptionEs": []
+      "titleEs": "Desafios para aprender Sass"
     }
   ]
 }
diff --git a/seed/challenges/03-back-end-development-certification/api-projects.json b/seed/challenges/03-back-end-development-certification/api-projects.json
index 0a2d324..017b18a 100644
--- a/seed/challenges/03-back-end-development-certification/api-projects.json
+++ b/seed/challenges/03-back-end-development-certification/api-projects.json
@@ -98,7 +98,7 @@
       "type": "Waypoint",
       "challengeType": 7,
       "isRequired": false,
-      "nameEs": "Prepárate para nuestros Proyectos de Desarrollo en el lado del servidor",
+      "titleEs": "Prepárate para nuestros Proyectos de Desarrollo en el lado del servidor",
       "descriptionEs": [
         [
           "http://i.imgur.com/4IZjWZ3.gif",
@@ -199,15 +199,15 @@
         "Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku.",
         "You can get feedback on your project from fellow campers by sharing it in our <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Code Review Chatroom</a>. You can also share it on Twitter and your city's Campsite (on Facebook)."
       ],
-      "releasedOn": "January 1, 2016",
       "challengeSeed": [
         "150324691"
       ],
       "tests": [],
+      "isRequired": true,
+      "releasedOn": "January 1, 2016",
       "type": "basejump",
       "challengeType": 4,
-      "isRequired": true,
-      "nameEs": "Microservicio de Marca Temporal",
+      "titleEs": "Microservicio de Marca Temporal",
       "descriptionEs": [
         "<strong>Objetivo:</strong> Desarolla una aplicación de Pila Completa en JavaScript que sea funcionalmente similar a esta: <a href='https://timestamp-ms.herokuapp.com/' target='_blank'>https://timestamp-ms.herokuapp.com/</a> y despliegala en Heroku.",
         "Ten en cuenta que para cada proyecto, deberías crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas como hacer esto, vuelve a visitar <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com//challenges/get-set-for-our-back-end-development-projects</a>.",
@@ -230,15 +230,15 @@
         "Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku.",
         "You can get feedback on your project from fellow campers by sharing it in our <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Code Review Chatroom</a>. You can also share it on Twitter and your city's Campsite (on Facebook)."
       ],
-      "releasedOn": "January 1, 2016",
       "challengeSeed": [
         "150324460"
       ],
       "tests": [],
+      "isRequired": true,
+      "releasedOn": "January 1, 2016",
       "type": "basejump",
       "challengeType": 4,
-      "isRequired": true,
-      "nameEs": "Microservicio para analizar el encabezado de una petición",
+      "titleEs": "Microservicio para analizar el encabezado de una petición",
       "descriptionEs": [
         "<strong>Objetivo:</strong> Desarrolla una aplicación de Pila Completa en JavaScript que sea funcionalmente similar a esta: <a href='https://cryptic-ridge-9197.herokuapp.com/api/whoami/' target='_blank'>https://cryptic-ridge-9197.herokuapp.com/api/whoami/</a> y despliegala en Heroku.",
         "Ten en cuenta que para cada proyecto, deberías crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas como hacer esto, vuelve a visitar <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com//challenges/get-set-for-our-back-end-development-projects</a>.",
@@ -261,15 +261,15 @@
         "Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku.",
         "You can get feedback on your project from fellow campers by sharing it in our <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Code Review Chatroom</a>. You can also share it on Twitter and your city's Campsite (on Facebook)."
       ],
-      "releasedOn": "January 1, 2016",
       "challengeSeed": [
         "150324692"
       ],
       "tests": [],
+      "isRequired": true,
+      "releasedOn": "January 1, 2016",
       "type": "basejump",
       "challengeType": 4,
-      "isRequired": true,
-      "nameEs": "Microservicio para acortar URLs",
+      "titleEs": "Microservicio para acortar URLs",
       "descriptionEs": [
         "<strong>Objetivo:</strong> Desarrolla una aplicación de Pila Completa en JavaScript que sea funcionalmente similar a esta: <a href='https://shurli.herokuapp.com/' target='_blank'>https://shurli.herokuapp.com/</a> y despliegala en Heroku.",
         "Ten en cuenta que para cada proyecto, deberías crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas como hacer esto, vuelve a visitar <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com//challenges/get-set-for-our-back-end-development-projects</a>.",
@@ -280,7 +280,6 @@
         "Una vez que hayas terminado de implementar estas historias de usuarios, pulsa el botón \"I've completed this challenge\" e introduce los URLs de tu repositorio en GitHub y de tu aplicación en vivo en Heroku.",
         "Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiendolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
       ]
-
     },
     {
       "id": "bd7158d8c443edefaeb5bdee",
@@ -295,15 +294,15 @@
         "Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku.",
         "You can get feedback on your project from fellow campers by sharing it in our <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Code Review Chatroom</a>. You can also share it on Twitter and your city's Campsite (on Facebook)."
       ],
-      "releasedOn": "January 1, 2016",
       "challengeSeed": [
         "150324461"
       ],
       "tests": [],
+      "isRequired": true,
+      "releasedOn": "January 1, 2016",
       "type": "basejump",
       "challengeType": 4,
-      "isRequired": true,
-      "nameEs": "Capa de abstracción para buscar imágenes",
+      "titleEs": "Capa de abstracción para buscar imágenes",
       "descriptionEs": [
         "<strong>Objetivo:</strong> Desarolla una aplicación de Pila Completa en JavaScript que te permite buscar imágenes como esta: <a href='https://cryptic-ridge-9197.herokuapp.com/api/imagesearch/lolcats%20funny?offset=10' target='_blank'>https://cryptic-ridge-9197.herokuapp.com/api/imagesearch/lolcats%20funny?offset=10</a> y examinar las búsquedas recientes como esta: <a href='https://cryptic-ridge-9197.herokuapp.com/api/latest/imagesearch/' target='_blank'>https://cryptic-ridge-9197.herokuapp.com/api/latest/imagesearch/</a>. Después, despliegala en Heroku.",
         "Ten en cuenta que para cada proyecto, deberías crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas como hacer esto, vuelve a visitar <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com//challenges/get-set-for-our-back-end-development-projects</a>.",
@@ -328,15 +327,15 @@
         "Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku.",
         "You can get feedback on your project from fellow campers by sharing it in our <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Code Review Chatroom</a>. You can also share it on Twitter and your city's Campsite (on Facebook)."
       ],
-      "releasedOn": "January 1, 2016",
       "challengeSeed": [
         "150324457"
       ],
       "tests": [],
+      "isRequired": true,
+      "releasedOn": "January 1, 2016",
       "type": "basejump",
       "challengeType": 4,
-      "isRequired": true,
-      "nameEs": "Microservicio de metadatos de archivos",
+      "titleEs": "Microservicio de metadatos de archivos",
       "descriptionEs": [
         "<strong>Objetivo:</strong> Desarrolla una aplicación de Pila Completa en JavaScript que sea funcionalmente similar a esta: <a href='https://cryptic-ridge-9197.herokuapp.com/' target='_blank'>https://cryptic-ridge-9197.herokuapp.com/</a>  y despliegala en Heroku.",
         "Ten en cuenta que para cada proyecto, deberías crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas como hacer esto, vuelve a visitar <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com//challenges/get-set-for-our-back-end-development-projects</a>.",
diff --git a/seed/challenges/03-back-end-development-certification/automated-testing-and-debugging.json b/seed/challenges/03-back-end-development-certification/automated-testing-and-debugging.json
index 8c1e7eb..a272a35 100644
--- a/seed/challenges/03-back-end-development-certification/automated-testing-and-debugging.json
+++ b/seed/challenges/03-back-end-development-certification/automated-testing-and-debugging.json
@@ -23,7 +23,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Utiliza la consola de JavaScript",
+      "titleEs": "Utiliza la consola de JavaScript",
       "descriptionEs": [
         "Tanto Chrome como Firefox tienen excelentes consolas JavaScript, también conocidas como DevTools, para depurar tu código JavaScript.",
         "Puedes encontrar las Herramientas para desarrolladores (<code>Developer tools</code>) en el menú de Chrome o la Consola web (<code>Web Console</code>) en el menú de FireFox. Si estás utilizando un navegador diferente, o un dispositivo móvil, nuestra recomendación es que cambies a la versión de escritorio de Firefox o Chrome.",
@@ -56,7 +56,7 @@
       ],
       "type": "waypoint",
       "challengeType": 1,
-      "nameEs": "Usando typeof",
+      "titleEs": "Usando typeof",
       "descriptionEs": [
         "Puedes usar <code>typeof</code> para verificar la <code>estructura de datos</code>, o el tipo, de una variable.",
         "Ten en cuenta que, en JavaScript, los vectores son técnicamente un tipo de objeto.",
diff --git a/seed/challenges/03-back-end-development-certification/back-end-development-certificate.json b/seed/challenges/03-back-end-development-certification/back-end-development-certificate.json
index 03342d3..4d3c385 100644
--- a/seed/challenges/03-back-end-development-certification/back-end-development-certificate.json
+++ b/seed/challenges/03-back-end-development-certification/back-end-development-certificate.json
@@ -92,7 +92,6 @@
       ],
       "type": "Waypoint",
       "challengeType": 7,
-      "nameEs": "Reclama tu certificado de desarrollo del lado del servidor",
       "descriptionEs": [
         [
           "http://i.imgur.com/8v3t84p.jpg",
@@ -118,7 +117,8 @@
           "¡Felicitaciones! Hemos agregado tu certificado de desarrollo del lado del servidor. A menos que elijas no mostrar tus soluciones, este certificado será públicamente visible y verificable.",
           ""
         ]
-      ]
+      ],
+      "titleEs": "Reclama tu certificado de desarrollo del lado del servidor"
     }
   ]
 }
diff --git a/seed/challenges/03-back-end-development-certification/dynamic-web-applications.json b/seed/challenges/03-back-end-development-certification/dynamic-web-applications.json
index 6c8c834..f58e56e 100644
--- a/seed/challenges/03-back-end-development-certification/dynamic-web-applications.json
+++ b/seed/challenges/03-back-end-development-certification/dynamic-web-applications.json
@@ -28,7 +28,6 @@
       "tests": [],
       "type": "basejump",
       "challengeType": 4,
-      "nameEs": "Crea una aplicación de votaciones",
       "descriptionEs": [
         "<strong>Objetivo:</strong> Construye una aplicación de pila completa (full stack) en JavaScript que funcione de forma similar al siguiente proyecto: <a href='https://fcc-voting-arthow4n.herokuapp.com/' target='_blank'>https://fcc-voting-arthow4n.herokuapp.com/</a> y despliégala en Heroku.",
         "Ten en cuenta que para cada proyecto, debes crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas cómo hacerlo, visita de nuevo <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com/challenges/get-set-for-our-back-end-development-projects</a>.",
@@ -44,7 +43,8 @@
         "Una vez hayas terminado de implementar estas historias de usuario, pulsa el botón de \"I've completed this challenge\" e incluye las URLs de tu repositorio GitHub y de tu aplicación corriendo en Heroku.",
         "Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
       ],
-      "isRequired": true
+      "isRequired": true,
+      "titleEs": "Crea una aplicación de votaciones"
     },
     {
       "id": "bd7158d8c443eddfaeb5bdff",
@@ -67,7 +67,6 @@
       "tests": [],
       "type": "basejump",
       "challengeType": 4,
-      "nameEs": "Crea una aplicación de coordinación de vida nocturna",
       "descriptionEs": [
         "<strong>Objetivo:</strong> Construye una aplicación de pila completa (full stack) en JavaScript que funcione de forma similar al siguiente proyecto: <a href='http://whatsgoinontonight.herokuapp.com/' target='_blank'>http://whatsgoinontonight.herokuapp.com/</a> y despliégala en Heroku.",
         "Ten en cuenta que para cada proyecto, debes crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas cómo hacerlo, visita de nuevo <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com/challenges/get-set-for-our-back-end-development-projects</a>.",
@@ -80,7 +79,8 @@
         "Una vez hayas terminado de implementar estas historias de usuario, pulsa el botón de \"I've completed this challenge\" e incluye las URLs de tu repositorio GitHub y de tu aplicación corriendo en Heroku.",
         "Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
       ],
-      "isRequired": true
+      "isRequired": true,
+      "titleEs": "Crea una aplicación de coordinación de vida nocturna"
     },
     {
       "id": "bd7158d8c443eddfaeb5bd0e",
@@ -102,7 +102,6 @@
       "tests": [],
       "type": "basejump",
       "challengeType": 4,
-      "nameEs": "Grafica el mercado de acciones",
       "descriptionEs": [
         "<strong>Objetivo:</strong> Construye una aplicación de pila completa (full stack) en JavaScript que funcione de forma similar al siguiente proyecto: <a href='http://watchstocks.herokuapp.com/' target='_blank'>http://watchstocks.herokuapp.com/</a> y despliégalo en Heroku.",
         "Ten en cuenta que para cada proyecto, debes crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas cómo hacerlo, visita de nuevo <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com/challenges/get-set-for-our-back-end-development-projects</a>.",
@@ -114,7 +113,8 @@
         "Una vez hayas terminado de implementar estas historias de usuario, pulsa el botón de \"I've completed this challenge\" e incluye las URLs de tu repositorio GitHub y de tu aplicación corriendo en Heroku.",
         "Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
       ],
-      "isRequired": true
+      "isRequired": true,
+      "titleEs": "Grafica el mercado de acciones"
     },
     {
       "id": "bd7158d8c443eddfaeb5bd0f",
@@ -136,7 +136,6 @@
       "tests": [],
       "type": "basejump",
       "challengeType": 4,
-      "nameEs": "Administra un club de intercambio de libros",
       "descriptionEs": [
         "<strong>Objetivo:</strong> Construye una aplicación de pila completa (full stack) en JavaScript que funcione de forma similar al siguiente proyecto: <a href='http://bookjump.herokuapp.com/' target='_blank'>http://bookjump.herokuapp.com/</a> y despliégalo en Heroku.",
         "Ten en cuenta que para cada proyecto, debes crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas cómo hacerlo, visita de nuevo <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com/challenges/get-set-for-our-back-end-development-projects</a>.",
@@ -148,7 +147,8 @@
         "Una vez hayas terminado de implementar estas historias de usuario, pulsa el botón de \"I've completed this challenge\" e incluye las URLs de tu repositorio GitHub y de tu aplicación corriendo en Heroku.",
         "Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
       ],
-      "isRequired": true
+      "isRequired": true,
+      "titleEs": "Administra un club de intercambio de libros"
     },
     {
       "id": "bd7158d8c443eddfaeb5bdee",
@@ -173,7 +173,6 @@
       "tests": [],
       "type": "basejump",
       "challengeType": 4,
-      "nameEs": "Crea un clon de Pinterest",
       "descriptionEs": [
         "<strong>Objetivo:</strong> Construye una aplicación de pila completa (full stack) en JavaScript que funcione de forma similar al siguiente proyecto: <a href='http://pintech.herokuapp.com/' target='_blank'>http://pintech.herokuapp.com/</a> y despliégalo en Heroku.",
         "Ten en cuenta que para cada proyecto, debes crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas cómo hacerlo, visita de nuevo <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com/challenges/get-set-for-our-back-end-development-projects</a>.",
@@ -188,7 +187,8 @@
         "Una vez hayas terminado de implementar estas historias de usuario, pulsa el botón de \"I've completed this challenge\" e incluye las URLs de tu repositorio GitHub y de tu aplicación corriendo en Heroku.",
         "Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
       ],
-      "isRequired": true
+      "isRequired": true,
+      "titleEs": "Crea un clon de Pinterest"
     }
   ]
 }
diff --git a/seed/challenges/03-back-end-development-certification/git.json b/seed/challenges/03-back-end-development-certification/git.json
index 21ac4a4..cfe57f7 100644
--- a/seed/challenges/03-back-end-development-certification/git.json
+++ b/seed/challenges/03-back-end-development-certification/git.json
@@ -40,7 +40,7 @@
       "tests": [],
       "type": "waypoint",
       "challengeType": 2,
-      "nameEs": "Guarda las revisiones de tu código por siempre con Git",
+      "titleEs": "Guarda las revisiones de tu código por siempre con Git",
       "descriptionEs": [
         "Haremos este desafío en Cloud 9, un poderoso editor en línea con un ambiente de trabajo Ubuntu Linux completo, corriendo totalmente en la nube.",
         "Si todavía no tienes una cuenta en Cloud 9, crea una ahora en <a href='http://c9.io' target='_blank'>http://c9.io</a>.",
diff --git a/seed/challenges/03-back-end-development-certification/mongodb.json b/seed/challenges/03-back-end-development-certification/mongodb.json
index bdad9d5..c9e7f73 100644
--- a/seed/challenges/03-back-end-development-certification/mongodb.json
+++ b/seed/challenges/03-back-end-development-certification/mongodb.json
@@ -39,7 +39,7 @@
       "tests": [],
       "type": "waypoint",
       "challengeType": 2,
-      "nameEs": "Guarda tus datos en MongoDB",
+      "titleEs": "Guarda tus datos en MongoDB",
       "descriptionEs": [
         "Haremos este desafío en Cloud 9, un poderoso editor en línea con un ambiente de trabajo Ubuntu Linux completo, corriendo totalmente en la nube.",
         "Si todavía no tienes una cuenta en Cloud 9, crea una ahora en <a href='http://c9.io' target='_blank'>http://c9.io</a>.",
diff --git a/seed/challenges/03-back-end-development-certification/nodejs-and-expressjs.json b/seed/challenges/03-back-end-development-certification/nodejs-and-expressjs.json
index 604d87e..b4b0f4f 100644
--- a/seed/challenges/03-back-end-development-certification/nodejs-and-expressjs.json
+++ b/seed/challenges/03-back-end-development-certification/nodejs-and-expressjs.json
@@ -42,7 +42,7 @@
       "tests": [],
       "type": "waypoint",
       "challengeType": 2,
-      "nameEs": "Administrando paquetes con NPM",
+      "titleEs": "Administrando paquetes con NPM",
       "descriptionEs": [
         "Haremos este desafío en Cloud 9, un poderoso editor en línea con un ambiente de trabajo Ubuntu Linux completo, corriendo totalmente en la nube.",
         "Si todavía no tienes una cuenta en Cloud 9, crea una ahora en <a href='http://c9.io' target='_blank'>http://c9.io</a>.",
@@ -105,7 +105,7 @@
       "tests": [],
       "type": "waypoint",
       "challengeType": 2,
-      "nameEs": "Inicia un servidor en Node.js",
+      "titleEs": "Inicia un servidor en Node.js",
       "descriptionEs": [
         "Haremos este desafío en Cloud 9, un poderoso editor en línea con un ambiente de trabajo Ubuntu Linux completo, corriendo totalmente en la nube.",
         "Si todavía no tienes una cuenta en Cloud 9, crea una ahora en <a href='http://c9.io' target='_blank'>http://c9.io</a>.",
@@ -149,7 +149,7 @@
       "tests": [],
       "type": "waypoint",
       "challengeType": 2,
-      "nameEs": "Continuemos trabajando con servidores en Node.js",
+      "titleEs": "Continuemos trabajando con servidores en Node.js",
       "descriptionEs": [
         "Sigamos con el desafío de LearnYouNode de Node School. Para este Waypoint, trabajaremos con las lecciones 11 a 13.",
         "Asegúrate de que siempre te encuentres en el directorio \"workspace\" de tu proyecto. Puedes regresar a este directorio cuando quieras usando el comando: <code>cd ~/workspace</code>.",
@@ -180,7 +180,7 @@
       "tests": [],
       "type": "waypoint",
       "challengeType": 2,
-      "nameEs": "Terminemos de trabajar con servidores en Node.js",
+      "titleEs": "Terminemos de trabajar con servidores en Node.js",
       "descriptionEs": [
         "Sigamos con el desafío de LearnYouNode de Node School. Para este Waypoint, trabajaremos con las lecciones 11 a 13.",
         "Asegúrate de que siempre te encuentres en el directorio \"workspace\" de tu proyecto. Puedes regresar a este directorio cuando quieras usando el comando: <code>cd ~/workspace</code>.",
@@ -225,7 +225,7 @@
       "tests": [],
       "type": "waypoint",
       "challengeType": 2,
-      "nameEs": "Creando Web Apps con Express.js",
+      "titleEs": "Creando Web Apps con Express.js",
       "descriptionEs": [
         "Haremos este desafío en Cloud 9, un poderoso editor en línea con un ambiente de trabajo Ubuntu Linux completo, corriendo totalmente en la nube.",
         "Si todavía no tienes una cuenta en Cloud 9, crea una ahora en <a href='http://c9.io' target='_blank'>http://c9.io</a>.",
diff --git a/seed/challenges/04-video-challenges/bigonotation.json b/seed/challenges/04-video-challenges/bigonotation.json
index 492ab20..acd37f7 100644
--- a/seed/challenges/04-video-challenges/bigonotation.json
+++ b/seed/challenges/04-video-challenges/bigonotation.json
@@ -32,7 +32,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Notación O mayúscula: ¿Qué es y porque te debe interesar?",
       "descriptionEs": [
         "La complejidad temporal es una forma de discutir cunto tiempo toma un algoritmo específico.  Esto es útil al ajustar software para que opere tan rápido como sea posible.",
         "Cuando escribes código, debes tener en cuenta cuanto se va a demorar su ejecución. Nadie quiere crear un producto que fruste a los usuarios por su lentitud.",
@@ -42,7 +41,8 @@
         "Además, pueden haber preguntas en entrevistas sobre la notación O mayúscula y de complejidad temporal.",
         "Tu empleador podrá querer saber que el código que escribes no tardará demasiado en cargar en la página de los usuarios, y el conocimiento de la notación O mayúscula muestra que reconoces esto mientras escribies tu código.",
         "Lo que esperamos que te quede de este video es que la notación O mayúscula te ayuda a identificar cuando podría haber problemas (en ocasiones problemas MAYÚSCULOS) en velocidad y memoria cuando tu sitio o aplicación crezcan."
-      ]
+      ],
+      "titleEs": "Notación O mayúscula: ¿Qué es y porque te debe interesar?"
     },
     {
       "id": "56b15f15632298c12f31517a",
@@ -84,7 +84,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Notación O mayúscula: Unos pocos ejemplos",
       "descriptionEs": [
         "La complejidad en tiempo comunmente se estima contando la cantidad de operaciones elementales que un algoritmo efectua (una operación elemental es una cuya ejecución requiere una cantidad de tiempo fijo).",
         "La complejidad temporal se clasifica por la naturaleza de la función T(n) donde T representa una función matemática para el tiempo que tarda el algoritmo y n representa la cantidad de elementos sobre los que actua el algoritmo.",
@@ -104,7 +103,8 @@
         "bigocheatsheet.com/",
         "El curso de Coursera de Princeton no es para débiles de corazón. Con ejemplos y prácticas en Java, este curso cubre iteración sobre los datos especifcamente algoritmos de ordenamiento y búsqueda.",
         "coursera.org/course/algs4partI"
-      ]
+      ],
+      "titleEs": "Notación O mayúscula: Unos pocos ejemplos"
     }
   ]
 }
diff --git a/seed/challenges/04-video-challenges/chromedevtools.json b/seed/challenges/04-video-challenges/chromedevtools.json
index 3f37946..3684e48 100644
--- a/seed/challenges/04-video-challenges/chromedevtools.json
+++ b/seed/challenges/04-video-challenges/chromedevtools.json
@@ -32,7 +32,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Herramientas de desarrollo de Chrome: Elementos",
       "descriptionEs": [
         "Esta es información básica y una mini-lección sobre la pestaña Elements en las herramientas de desarrollo de Chrome. Echa un vistazo a la documentación más detallada aquí: developers.google.com/web/tools/iterate/inspect-styles/basics ",
         "Vamos a utilizar la página web mckellen.com/ por sugerencia del usuario de FreeCodeCamp kmiasko.",
@@ -42,7 +41,8 @@
         "También hay que señalar que todo el código que veas en ese 'árbol' es código HTML actual, no el original que había cuando se cargó la página. Si utilizas jQuery o JavaScript para cambiar algo, esté árbol se actualizará.",
         "El relleno, los bordes y los márgenes se inspeccionan fácilmente y puedes editarlos usando la caja con colores que encontrarás al lado derecho o en la parte de abajo.",
         "Por favor, echa un vistazo a la documentación de las herramientas de desarrollo de Chrome en developers.google.com/web/tools/chrome-devtools/"
-      ]
+      ],
+      "titleEs": "Herramientas de desarrollo de Chrome: Elementos"
     },
     {
       "id": "56b15f15632298c12f315183",
@@ -71,7 +71,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Herramientas de desarrollo de Chrome: red",
       "descriptionEs": [
         "La pestaña network (red) ayuda a responder preguntas como '¿Qué elemento o parte de la página fue el más demorado?' o '¿Qué inició una petición?'",
         "El panel de red registra información detallada sobre cuánto tarda en cargar cada elemento de su página o aplicación.",
@@ -80,7 +79,8 @@
         "Cuanto más larga sea la línea de un color determinado, tanto más tiempo tomó ese tipo de contenido en la solicitud. En últimas quieres líneas cortas, y si cualquier solicitud tiene largas líneas, sabes que puede estar ralentizando la página web.",
         "Si pulsas sobre una solicitud en la bitácora, podrás obtener información más detallada.",
         "Consulta más documentación detallada aquí: developers.google.com/web/tools/profile-performance/network-performance/resource-loading"
-      ]
+      ],
+      "titleEs": "Herramientas de desarrollo de Chrome: red"
     },
     {
       "id": "56b15f15632298c12f315182",
@@ -111,7 +111,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Herramientas de desarrollo de Chrome: Fuentes",
       "descriptionEs": [
         "La pestaña 'fuentes' es más útil para la depuración de JavaScript. Cuanto más grande sea tu proyecto, tanto más difícil resulta encontrar exactamente dónde se produce un problema. ",
         "Puedes seleccionar diferentes partes del código para ser 'puntos de interrupción', puestos de control que detendrán la ejecución del código en ese preciso momento. ",
@@ -121,7 +120,8 @@
         "Una vez has establecido todos los puntos de interrupción, puedes recorrer el código y examinar el estado de tu página o aplicación en cada punto de interrupción.",
         "Al igual que con los elementos, puedes editar en vivo mediante las herramientas de desarrollo, pero recuerda que debes guardar esos cambios para que no pierdas tu progreso.",
         "Revisa documentación más detallada aquí: developers.google.com/web/tools/javascript/breakpoints/"
-      ]
+      ],
+      "titleEs": "Herramientas de desarrollo de Chrome: Fuentes"
     },
     {
       "id": "56b15f15632298c12f315181",
@@ -152,7 +152,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Herramientas de desarrollo de Chrome: Línea de tiempo",
       "descriptionEs": [
         "El panel Línea de tiempo te permite grabar y analizar toda la actividad en tu aplicación mientras se ejecuta. Es el mejor lugar para comenzar a investigar los problemas de rendimiento que percibas en tu aplicación. ",
         "Al igual que usas el panel de red para averiguar cuánto tiempo toman las partes de la página para comunicarse con el Internet y utilizas fuentes para averiguar dónde algo se daña, puedes utilizar la línea de tiempo para averiguar con más detalle lo que está pasando y el tiempo que tarda.",
@@ -162,9 +161,8 @@
         "Cuando uses la línea de tiempo, recuerda que debes utilizar el botón 'limpiar' (clear) para iniciar la grabación y antes de cargar la página, dependiendo de lo que desees capturar.",
         "Te darás cuenta de que cuando grabas eventos JS, al pulsar en el título o en una 'llamada a una función' al lado izquierdo, te llevará al documento y a la línea de esa función en el panel de recursos. ",
         "Revisa documentación más detallada aquí: developers.google.com/web/tools/profile-performance/evaluate-performance/timeline-tool"
-      ]
-
-
+      ],
+      "titleEs": "Herramientas de desarrollo de Chrome: Línea de tiempo"
     },
     {
       "id": "56b15f15632298c12f315180",
@@ -192,14 +190,14 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Herramientas de desarrollo de Chrome: Perfiles",
       "descriptionEs": [
         "El panel Perfiles te permite perfilar el tiempo de ejecución y el uso de memoria de una aplicación web o de una página. Esto se aplica principalmente a la ejecución de JavaScript en su página o aplicación. ",
         "Hay tres tipos de perfiles que se pueden recolectar: el perfil de la CPU, instantáneas de la memoria con estructura montón (Heap), y el perfil de la memoria con estructura montón. Los perfiles de memoria en estructura montón tienen más que ver con el uso de memoria, mientras que un perfil de la CPU tiene más que ver con el rendimiento de JavaScript. ",
         "Un perfilador llamado V8 se usa mientras se ejecuta el código para identificar lo que en el JavaScript toma mucho tiempo, facilitándote de esta forma optimizar tu código.",
         "Cada uno de estos perfiles se puede ver a la izquierda, y se puede tomar múltiples perfiles de cada uno. En general, la pestaña de perfiles es muy útil cuando deseas optimizar tu código. ",
         "Revisa documentación más detallada aquí: developers.google.com/web/tools/profile-performance/rendering-tools/js-execution"
-      ]
+      ],
+      "titleEs": "Herramientas de desarrollo de Chrome: Perfiles"
     },
     {
       "id": "56b15f15632298c12f31517f",
@@ -221,13 +219,13 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Herramientas de desarrollo de Chrome: Recursos",
       "descriptionEs": [
         "El panel de Recursos te permite inspeccionar los recursos que se cargan en la página, incluyendo IndexedDB o bases de datos SQL Web, almacenamiento local y de sesión, las galletas (cookies), memoria caché de aplicaciones, imágenes, fuentes y hojas de estilo.",
         "Puedes ver y editar toda esta información dentro del navegador.",
         "A medida que vayas construyendo aplicaciones web más avanzadas, juega con el panel de recursos y verás cómo te ayudará a entender los requisitos de tu aplicación y de tu página en tiempo real.",
         "Revisa documentación más detallada aquí: developers.google.com/web/tools/iterate/manage-data/index"
-      ]
+      ],
+      "titleEs": "Herramientas de desarrollo de Chrome: Recursos"
     },
     {
       "id": "56b15f15632298c12f31517e",
@@ -256,7 +254,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Herramientas de desarrollo de Chrome: Las auditorías",
       "descriptionEs": [
         "La herramienta de auditoría te guía para mejorar tu página paso a paso.",
         "En este vídeo, se utiliza esta herramienta con un generador de citas aleatorias desarrollado como uno de los proyectos de desarrollo de interfaces.",
@@ -264,7 +261,8 @@
         "Es importante tenerlas en cuenta para contextualizarlos con el resto de conocimiento que tienes de tu sitio.",
         "A veces, puede ser que sea lo acertado, pero en ocasiones, por tu situación las sugerencias que da son equivocadas.",
         "Usa esta herramienta cuando desees mejorar tu sitio o aplicación, pero no sepas por dónde empezar."
-      ]
+      ],
+      "titleEs": "Herramientas de desarrollo de Chrome: Las auditorías"
     },
     {
       "id": "56b15f15632298c12f31517d",
@@ -294,7 +292,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Herramientas de desarrollo de Chrome: Consola",
       "descriptionEs": [
         "El panel de la consola ofrece dos funciones principales: registro de datos de diagnóstico en el proceso de desarrollo y proporcionar un intérprete de órdenes que puedes utilizar para interactuar con el documento y las Herramientas de desarrollo",
         "Al utilizar la consola, puedes ver los datos en bruto o estructurados mediante instrucciones estándar JS y órdenes específicas para la consola.",
@@ -303,7 +300,8 @@
         "Hay diferentes órdenes que registrarán en bitácoras de manera diferente, como console.log() para registrar información básica, console.error() y console.warn() para registrar en bitácoras 'información llamativa'.",
         "La consola puede realizar un seguimiento de excepciones, que básicamente registra cuando algo sale mal. Puede incluso hacer una pausa en el código durante esas excepciones, función que posiblemente recuerdes de la pestaña 'Fuente'. ",
         "Revisa documentación más detallada aquí: developers.google.com/web/tools/javascript/console/"
-      ]
+      ],
+      "titleEs": "Herramientas de desarrollo de Chrome: Consola"
     },
     {
       "id": "56b15f15632298c12f31517c",
@@ -324,13 +322,12 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Herramientas de desarrollo de Chrome: Resumen",
       "descriptionEs": [
         ", Las herramientas de desarrollo de Chrome son impresionantes, y cuanto más te puedas sumergir y tratar de utilizarlas, más rápido aumentará tu nivel. ",
         ", Utiliza la documentación, incluso si nunca has leído documentación antes: developers.google.com/web/tools/chrome-devtools/ ",
         ", Una vez que comiences a sentirte cómodo en una pestaña, rétate aprendiendo a usar una diferente. Trabajar eficazmente con todas las pestañas te servirá exponencialmente más que pegarte en tu zona de confort."
-      ]
+      ],
+      "titleEs": "Herramientas de desarrollo de Chrome: Resumen"
     }
   ]
 }
-
diff --git a/seed/challenges/04-video-challenges/computer-basics.json b/seed/challenges/04-video-challenges/computer-basics.json
index 689bd0e..37e60e7 100644
--- a/seed/challenges/04-video-challenges/computer-basics.json
+++ b/seed/challenges/04-video-challenges/computer-basics.json
@@ -42,7 +42,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Fundamentes básicos del computador: Las 4 partes básicas de un computador",
       "descriptionEs": [
         "Una máquina necesita por lo menos cuatro partes básicas para ser considerada un computador.",
         "Hoy vamos a hablar acerca de conceptos básicos de hardware.",
@@ -57,7 +56,8 @@
         "Ahora, la CPU tiene acceso exclusivo a esta memoria.",
         "No se puede llegar a la memoria desde la entrada o desde la salida sin el uso de la CPU.",
         "Por lo tanto, sólo para repasar, tenemos 4 partes básicas de la computadora: los dispositivos de entrada, los dispositivos de salida, la CPU y la memoria."
-      ]
+      ],
+      "titleEs": "Fundamentes básicos del computador: Las 4 partes básicas de un computador"
     },
     {
       "id": "bd7127d8c441eddfbeb5bddf",
@@ -97,7 +97,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Fundamentos básicos del computador: Más Hardware",
       "descriptionEs": [
         "En este video cubrimos las funciones básicas de una placa base, tarjetas de expansión, y la fuente de poder.",
         "Vamos a revisar rápidamente - las 4 partes básicas de un computador son dispositivos de entrada, como el ratón o el teclado, dispositivos de salida, monitor o altavoces, la CPU, la unidad central de procesamiento, y la memoria.",
@@ -111,7 +110,8 @@
         "Por lo general es la parte que tiene un ventilador en él para evitar que se sobrecaliente.",
         "Así que vamos a hacer un repaso rápido.",
         "Además de las cuatro partes básicas dispositivos de entrada, dispositivos de salida, CPU, y la memoria, también por lo general tenemos una placa base, las tarjetas de expansión, y una fuente de poder."
-      ]
+      ],
+      "titleEs": "Fundamentos básicos del computador: Más Hardware"
     },
     {
       "id": "bd7129d8a441eddfbeb5bddf",
@@ -149,7 +149,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Fundamentos básicos del computador: Chips y la Ley de Moore",
       "descriptionEs": [
         "Discutiremos lo que constituye un chip y por qué la tecnología se vuelve más barata cada año.",
         "En este video vamos a estar hablando sobre chips y algo que se llama la Ley de Moore.",
@@ -161,7 +160,8 @@
         "Lo que hace que estos chips sean más grandes o más rápidos es la cantidad de transistores en un solo chip.",
         "La Ley de Moore es la observación de que la cantidad de transistores que caben en un chip se ha duplicado cada dos años desde 1965.",
         "Esto es importante porque hace que la tecnología sea más económica y accesible."
-      ]
+      ],
+      "titleEs": "Fundamentos básicos del computador: Chips y la Ley de Moore"
     },
     {
       "id": "bd7126d8c441eddfbeb5bddf",
@@ -195,7 +195,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Fundamentos básicos del computador: Introducción a código binario",
       "descriptionEs": [
         "Cómo se ve lo binario, y lo que puede significar.",
         "Los 0s y 1s pueden interpretarse como datos mucho más complejos.",
@@ -204,7 +203,8 @@
         "Aquellos 1s y 0s pueden ser casi cualquier cosa, pero por lo general son sólo números, letras y símbolos.",
         "Vamos a revisar cómo decodificar un número en binario, pero como podrás adivinar, la traducción binaria se puede hacer con una rápida búsqueda en Google.",
         "La parte más importante de esto es que entiendas el concepto de que incluso cosas simples como 1s y 0s se pueden traducir en algo muy complejo, que es la base para todos los lenguajes de programación existentes en la actualidad."
-      ]
+      ],
+      "titleEs": "Fundamentos básicos del computador: Introducción a código binario"
     },
     {
       "id": "bd7125d8c441eddfbeb5bddf",
@@ -240,7 +240,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Fundamentos básicos del computador: decodificar un número binario",
       "descriptionEs": [
         "En este vídeo, decodificaremos un número escrito en notación binaria.",
         "Hablemos sobre el sistema de numeración binario, también conocido como un montón de 1s y 0s una y otra vez.",
@@ -251,7 +250,8 @@
         "Si hay un 1, dejamos el número (2 a la potencia de la posición) y lo agregamos a los números de otras posiciones que estén en  \"1\" o \"encendidas\".",
         "Si es un 0, hacemos caso omiso del número de esa posición.",
         "En este video, la suma de los números da 75."
-      ]
+      ],
+      "titleEs": "Fundamentos básicos del computador: decodificar un número binario"
     },
     {
       "id": "bd7124d8c441eddfbeb5bddf",
@@ -290,7 +290,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Fundamentos básicos del computador: Cómo medir el tamaño de los datos",
       "descriptionEs": [
         "¿Cómo se mide el tamaño/cantidad de datos, a partir de un bit y continuando hasta un petabyte.",
         "Hoy vamos a estar hablando de tamaño de los datos.",
@@ -304,7 +303,8 @@
         "Después de eso no hay Megabyte, o 1024 bytes a la potencia de dos.",
         "Entonces es Gigabyte, 1024 Bytes a la tercera potencia; Terabyte, 1024 bytes a la cuarta potencia y petabyte que es 1024 a la quinta potencia.",
         "!Crecieron realmente rápidamente!"
-      ]
+      ],
+      "titleEs": "Fundamentos básicos del computador: Cómo medir el tamaño de los datos"
     },
     {
       "id": "bd7123d8c441eddfbeb5bddf",
@@ -338,7 +338,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Fundamentos básicos del computador: medición de la velocidad de datos",
       "descriptionEs": [
         "La velocidad de datos y el tamaño de los datos se miden de manera diferente.",
         "En este video, cubrimos cómo se mide la velocidad de los datos.",
@@ -351,7 +350,8 @@
         "En la velocidad de red, hablamos de gigabits por segundo (¡mil millones de bits por segundo!).",
         "La conclusión principal es que la velocidad se mide generalmente en bits mientras que el tamaño se mide en bytes.",
         "Además, si tienes una velocidad de internet de cierta cantidad de bits por segundo, ten en cuenta que te están hablando de algo que es la octava parte de la cantidad en bytes, que es la manera típica como mides tamaños de datos."
-      ]
+      ],
+      "titleEs": "Fundamentos básicos del computador: medición de la velocidad de datos"
     },
     {
       "id": "bd7122d8c441eddfbeb5bddf",
@@ -385,7 +385,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Fundamentos básicos del computador: Bytes en binario",
       "descriptionEs": [
         "En binario se puede hacer más que representar números - mediante bytes, puede simbolizar todos los símbolos alfanuméricos, los cuales pueden ser interpretados en códigos más complejos",
         "Vamos a hablar sobre el nivel más básico que un computador puede comprender otros lenguajes como JavaScript.",
@@ -394,7 +393,8 @@
         "Todos los números (255 y menos), las letras y símbolos se pueden traducir en bytes que el computador puede entender.",
         "Por lo tanto, todos los números, letras y símbolos en su código JavaScript se puede traducir.",
         "Hay una gran cantidad de lenguajes con los cuales los computadores pueden operar, y lo que quiero que te quede de este video es que todos los datos en tu computador se reducen a bytes binarios."
-      ]
+      ],
+      "titleEs": "Fundamentos básicos del computador: Bytes en binario"
     },
     {
       "id": "bd7121d8c441eddfbeb5bddf",
@@ -433,7 +433,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Fundamentos básicos del computador: Tipos de Computadores",
       "descriptionEs": [
         "Este video cubre los conceptos básicos de los supercomputadores, servidores, estaciones de trabajo, PC y microcontroladores.",
         "Vamos a discutir los diferentes tipos de computadores.",
@@ -447,7 +446,8 @@
         "Tal vez has oído \"¡Soy un Mac!\" o \"¡Soy un PC!\", Algo que indica que son diferentes, pero en realidad mi propio MacBook personal sigue siendo un PC, un computador personal.",
         "Es a la vez un Mac y un PC.",
         "El último tipo de equipo del que hablaremos es un microcontrolador, el tipo de equipo que puedes tener en tu carro que es realmente bueno en una pequeña tarea especializada, pero no se utilizaría la misma forma que un PC."
-      ]
+      ],
+      "titleEs": "Fundamentos básicos del computador: Tipos de Computadores"
     },
     {
       "id": "bd7120d8c441eddfbeb5bddf",
@@ -488,7 +488,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Fundamentos básicos del computador: Más sobre la placa base",
       "descriptionEs": [
         "Un poco más de detalle sobre lo que constituye una placa base y sus funciones estándar en un computador.",
         "Hoy vamos a hablar más sobre la placa base.",
@@ -504,7 +503,8 @@
         "Además de las ranuras de expansión, las placas base tienen puertos.",
         "En tu computador, probablemente sabes que hay un lugar para conectar USB, FireWire, tarjeta SD, Ethernet, e incluso un plug-in de audio para escuchar a través de auriculares.",
         "Todos estos son considerados puertos, un lugar en la placa base donde puedes conectar la CPU a algun dispositivo externo bien para obtener o para dar información."
-      ]
+      ],
+      "titleEs": "Fundamentos básicos del computador: Más sobre la placa base"
     },
     {
       "id": "bd712fd8c441eddfbeb5bddf",
@@ -545,7 +545,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Fundamentos básicos del computador: Redes de datos",
       "descriptionEs": [
         "Este video cubre los conceptos básicos de redes de área local, redes de área amplia y redes privadas virtuales.",
         "En este vídeo se habla de redes de datos.",
@@ -560,7 +559,8 @@
         "Podrían utilizar una WAN.",
         "Podrías pensar que estas es posible conectarlas usando Internet, y en el caso de una VPN (red privada virtual, que conceptualmente es básicamente lo mismo que una una WAN), tendrías la razón.",
         "Sin embargo, por lo general una WAN alquila un cable de una empresa de Internet para crear la conexión."
-      ]
+      ],
+      "titleEs": "Fundamentos básicos del computador: Redes de datos"
     },
     {
       "id": "bd712ed8c441eddfbeb5bddf",
@@ -594,7 +594,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Fundamentos básicos del computador: Direcciones IP",
       "descriptionEs": [
         "Cada dispositivo tiene una dirección IP.",
         "Las direcciones IP se asignan en función de la ubicación, y son vitales para que Internet funcione.",
@@ -608,7 +607,8 @@
         "Este número no es lo suficientemente específico como para que llames al 911, les des tu dirección IP, y así les permitas saber donde vives.",
         "Sin embargo, es lo suficientemente específico como para buscar en Google \"¿Dónde está el mejor helado cerca de mí\" y Google podría darte información cercana a tu ubicación.",
         "Esto se hace utilizando tu dirección IP."
-      ]
+      ],
+      "titleEs": "Fundamentos básicos del computador: Direcciones IP"
     },
     {
       "id": "bd712dd8c441eddfbeb5bddf",
@@ -644,7 +644,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Fundamentos básicos del computador: ¿Cómo funciona Internet",
       "descriptionEs": [
         "Esta es una descripción breve y descripción de cómo funciona Internet.",
         "Para una explicación más en profundidad, dale un vistazo a web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm",
@@ -659,7 +658,8 @@
         "Lo que quiero que te lleves de este video es que tu dispositivo, que tiene una dirección IP, puede enviar una petición de información, y que esa información regresará a tu dispositivo por medio de servidores y enrutadores que componen el Internet.",
         "Ahora bien, esta explicación es realmente básica.",
         "Para obtener más información, echa un vistazo a web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm."
-      ]
+      ],
+      "titleEs": "Fundamentos básicos del computador: ¿Cómo funciona Internet"
     },
     {
       "id": "bd712cd8c441eddfbeb5bddf",
@@ -685,7 +685,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Fundamentos básicos del computador: Software",
       "descriptionEs": [
         "Diferenciamos entre hardware y software, y también discutimos las diferencias entre el sistema operativo y el software de aplicación.",
         "En este video, vamos a discutir los fundamentos del software.",
@@ -695,7 +694,8 @@
         "Los dos tipos de software de los cuales vamos a hablar hoy son el sistema operativo y las aplicaciones.",
         "Hay tres sistemas operativos principales: Windows, Mac y Linux.",
         "Las aplicaciones comprenden el resto del software, como tu navegador web, juegos, cosas como Photoshop, con lo que ves tu correo, o con lo que editas documentos, etc."
-      ]
+      ],
+      "titleEs": "Fundamentos básicos del computador: Software"
     },
     {
       "id": "56b15f15632298c12f31510f",
@@ -729,7 +729,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Fundamentos básicos del computador: Redes de distribución de contenido",
       "descriptionEs": [
         "Una red de distribución de contenido  (del inglés <em>Content Delivery Network</em>) es un sistema (red) de servidores distribuidos que sirven páginas web y otros contenidos web a los usuarios en función de su ubicación geográfica, el origen de la página web y un servidor de entrega de contenido.",
         "El objetivo de una RDC (CDN) es establecer conexiones de red de mayor calidad.",
@@ -742,7 +741,8 @@
         "Como usuario, es probable que utilices RDC  todo el tiempo sin darte cuenta.",
         "Como desarrollador, es posible que desees utilizar RDCs como las bibliotecas de Google para ayudar a que tu página cargue más rápido.",
         "Como empresa, una RDC sería útil si quieres que tu producto o sitio llegue a los usuarios de manera más eficiente en el esquema más grande de su red y en Internet en su conjunto."
-      ]
+      ],
+      "titleEs": "Fundamentos básicos del computador: Redes de distribución de contenido"
     },
     {
       "id": "bd7129d80441eddfbeb5bddf",
@@ -778,7 +778,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Analógico vs digital y compresión de archivos",
       "descriptionEs": [
         "¿Cómo los computadores pueden volver sonido analógico en archivos digitales, y los pros y los contras de la compresión de datos?",
         "Vamos a discutir datos anàlogos frente a datos digitales en un nivel muy básico.",
@@ -793,7 +792,8 @@
         "Otra forma es tomando una medida desde un punto medio y no desde 0, de forma que los número registrados sean más pequeños.",
         "En imágenes, se hace midiendo grupos de a 16 píxeles en lugar de hacer mediciones individuales.",
         "Lo que te llevas de este video es que querrás utilizar archivos digitales pues son de mayor calidad, y cuando te fijes en compresión, tendrás que decidir qué tan lejos estás dispuesto a ir para garantizar que el usuario tenga la mejor experiencia posible."
-      ]
+      ],
+      "titleEs": "Analógico vs digital y compresión de archivos"
     },
     {
       "id": "bd7129d8b441eddfbeb5bddf",
@@ -845,7 +845,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Enrutadores y paquetes",
       "descriptionEs": [
         "En este video, vamos a entrar en más detalle respecto a enrutadores y paquetes, conceptos importantes para entender cómo funciona Internet.",
         "Vamos a hablar más acerca de los enrutadores y cómo se relacionan con la creación de redes.",
@@ -871,7 +870,8 @@
         "Las tramas no tienen que recorrer la misma ruta hasta el destino final.",
         "Pueden tomar cualquier ruta abierta, la que sea más rápida, y dado que tienen la dirección IP final, todos los enrutadores saben dónde enviarlos.",
         "Una vez que llegan al destino final, ese computador sabe cómo poner junta toda la información."
-      ]
+      ],
+      "titleEs": "Enrutadores y paquetes"
     },
     {
       "id": "bd7029d8c441eddfbeb5bddf",
@@ -916,7 +916,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Código Fuente",
       "descriptionEs": [
         "En este video se discute lo que es código fuente, intérpretes y compiladores, y lo que significa fuentes abiertas.",
         "Vamos a hablar sobre el código fuente: lo que el código fuente es, donde lo puedes ver, y cómo el computador lo entiende.",
@@ -936,7 +935,8 @@
         "Podrías preguntarte, \"¿y eso qué?\", pero lo que es increíble es que si deseas cambiar o mejorar FreeCodeCamp, puedes describir la mejora y tal vez implementarla.",
         "Es una gran manera para los sitios web y para el software de crecer de forma fuerte y rápida debido a la comunidad que trabaja en conjunto para mejorarlo.",
         "Una regla no escrita al contribuir a proyectos de fuentes abiertas es que en general deberías compartir tus mejoras para que también sean de fuentes abiertas, y al retornar esa mejora al público también les permites a otros utilizar tus mejoras."
-      ]
+      ],
+      "titleEs": "Código Fuente"
     },
     {
       "id": "bd7119d8c441eddfbeb5bddf",
@@ -966,7 +966,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "Las variables en el código",
       "descriptionEs": [
         "Las variables se utilizan con frecuencia en Javascript y  en muchos otros lenguajes de programación.",
         "En este video, vamos a hablar acerca de las variables en el código.",
@@ -975,7 +974,8 @@
         "Cuando se ejecute <code>console.log(x)</code> presentará \"Briana\".",
         "Pero ten cuidado - si pones <code>console.log(\"x\")</code>, con la <code>x</code> entre comillas, se presentará la \"x\".",
         "Lo que yo quiero que te lleves con este video es que existen las variables en el código, y que puedes almacenar todo, desde una simple cadena hasta una función, todo con un simple nombre."
-      ]
+      ],
+      "titleEs": "Las variables en el código"
     },
     {
       "id": "bd712bd8c441eddfbeb5bddf",
@@ -1012,7 +1012,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "¿Qué hacen los programadores?",
       "descriptionEs": [
         "Los programadores (también conocidos como codificadores, desarrolladores, o ingenieros de software) resuelven problemas convirtiendo grandes ideas en pequeños pasos que un computador puede entender.",
         "En este video, vamos a discutir lo que hacen  los programadores.",
@@ -1024,7 +1023,8 @@
         "Todo se hace secuencialmente, de manera directa, por lo que hacer referencia a algo que está por debajo y que todavía no ha sucedido dará lugar a un problema.",
         "Los computadores sólo leen de arriba hacía abajo, como tu leerías un libro.",
         "Los programadores son los responsables de dividir sus ideas en  pequeños pasos y escribirlos de una manera que las computadoras pueden entenderlos."
-      ]
+      ],
+      "titleEs": "¿Qué hacen los programadores?"
     },
     {
       "id": "bd712ad8c441eddfbeb5bddf",
@@ -1110,8 +1110,7 @@
         ]
       ],
       "type": "hike",
-      "challengeType": 6, 
-      "nameEs": "Seguridad en los computadores",
+      "challengeType": 6,
       "descriptionEs": [
         "Lo fundamental de la seguridad en los computadores y cómo proteger su información.",
         "Echemos una mirada a la seguridad en los computadores.",
@@ -1140,7 +1139,8 @@
         "Una de las formas en que se puede comprometer tu información es cuando los 'los chicos malos' encuentran huecos en las versiones viejas de los programas",
         "Estos defectos se corrigen en las versiones nuevas, por lo que evitarás problemas si mantienes el software actualizado.",
         "Estas son algunas cosas muy básicas que debes saber acerca de cómo proteger la información de tu computador."
-      ]
+      ],
+      "titleEs": "Seguridad en los computadores"
     }
   ]
 }
diff --git a/seed/challenges/04-video-challenges/dom.json b/seed/challenges/04-video-challenges/dom.json
index d56a3fe..04d2d67 100644
--- a/seed/challenges/04-video-challenges/dom.json
+++ b/seed/challenges/04-video-challenges/dom.json
@@ -30,7 +30,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "El DOM: ¿Qué es el Modelo de objetos del documento?",
       "descriptionEs": [
         "El DOM es la representación interna y programática de una página web del navegador. Lenguajes como javascript te permiten modificar el DOM, y por lo tanto el sitio web, sin editar el código HTML de la página.",
         "Técnicamente, el DOM es un API (interfaz de programación de aplicaciones). Hay varios tipos de APIs, pero este API en particular interactúa con documentos XML y HTML. Está a cargo de cómo se accesan y se manipulan esos documentos.",
@@ -38,7 +37,8 @@
         "Puedes insertar nuevos elementos, o cambiar el estilo o contenido de los elementos previamente existentes.",
         "Esto se puede hacer con javascript puro, como: document.getElementById(id), element.getElementsByTagName(name), o document.createElement(name).",
         "También puedes usar librerías como jQuery para simplificar, estandarizar y automatizar la manipulación del DOM, como por ejemplo: $('#caja2').append('Esto se agregará a caja2!')"
-      ]
+      ],
+      "titleEs": "El DOM: ¿Qué es el Modelo de objetos del documento?"
     },
     {
       "id": "56b15f15632298c12f31518e",
@@ -66,14 +66,14 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "El DOM: Estilo en el encabezado, código al pie de página",
       "descriptionEs": [
         "Creo que ya te habrán dicho que los enlaces a código de estilo (CSS) deben ser incluidos en el encabezado (<code>header</code>) y que los enlaces al código (JS) deben estar incluidos al pie de página (<code>footer</code>). ¿Alguna vez te preguntaste por qué?",
         "Si alguna vez has visto una página web que carga el texto primero, y después de un momento carga el formato y el estilo, entonces era una página que no tenía los enlaces hacia el estilo y el código en los lugares correctos.",
         "Esto tiene que ver con la forma en que el navegador decide si ha cargado suficiente información para mostrar. Hay un evento llamado 'DOMContentLoaded', y una vez que ese evento ocurre, lo que sea que se haya cargado hasta entonces será mostrado.",
         "El DOM le dirá al navegador que está listo una vez que el código HTML ha sido cargado, y a veces el CSS y JS no se han alcanzado a cargar. Si pones el CSS en el encabezado y el JS al pie de página, puedes estar seguro que todo el contenido será cargado antes que el DOM desencadene el evento 'DOMContentLoaded', el cual muestra tu contenido al usuario.",
         "Esta es una explicación simplificada, al igual que la que encontrarás en el resto de estos videos. Si quieres más información, creo que el siguiente enlace es de bastante ayuda: ablogaboutcode.com/2011/06/14/how-javascript-loading-works-domcontentloaded-and-onload/"
-      ]
+      ],
+      "titleEs": "El DOM: Estilo en el encabezado, código al pie de página"
     }
   ]
 }
diff --git a/seed/challenges/04-video-challenges/jslingo.json b/seed/challenges/04-video-challenges/jslingo.json
index 1f0494c..465df0a 100644
--- a/seed/challenges/04-video-challenges/jslingo.json
+++ b/seed/challenges/04-video-challenges/jslingo.json
@@ -30,7 +30,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "JavaScript Lingo: MDN y Documentación",
       "descriptionEs": [
         "Esta es una introducción básica a MDN y el concepto de la documentación.",
         "MDN, Mozilla Developer Network, es una fantástica colaboración de fuentes abiertas que documenta no sólo JavaScript, sino muchos otros lenguajes y temas. Si no has oído hablar de ellos, deberías darles un vistazo ahora. Personalmente obtengo mucha información de developer.mozilla.org/en-US/docs/Web/JavaScript ",
@@ -38,7 +37,8 @@
         "A medida que continúes aprendiendo JavaScript, jQuery, y prácticamente cualquier otro lenguaje o servicio para desarrollo o programación, la documentación será tu amiga.",
         "Cuanto más rápido te sientas cómodo leyendo y referenciando documentación, más rápido crecerás como desarrollador.",
         "Estos vídeos no van a enseñarte JavaScript - te presentan términos y conceptos que serán valiosos a medida que continúes practicando y aprendiendo."
-      ]
+      ],
+      "titleEs": "JavaScript Lingo: MDN y Documentación"
     },
     {
       "id": "56b15f15632298c12f31518d",
@@ -65,13 +65,13 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "JavaScript Lingo: Tipos de valores",
       "descriptionEs": [
         "Aprende sobre los tres tipos más básicos de valores: Booleanos, cadenas y números",
         "Un booleano es un valor <code>true</code> (verdadero) o <code>false</code> (falso). Estas palabras son especiales y reservadas. No puedes nombrar a una variable como \"true\", porque esa palabra es ya universal como un valor lógico (así como lo es \"false\"). ",
         "Una cadena es un conjunto de caracteres que se establecen entre apóstrofes (') o entre comillas (\"). Una cadena puede ser \"true\", siempre y cuando sea con comillas o con apóstrofes. ",
         "Los números se explican por sí mismos - un número es un valor que se compone sólo de dígitos, aunque también puede contener un decimal o un signo negativo."
-      ]
+      ],
+      "titleEs": "JavaScript Lingo: Tipos de valores"
     },
     {
       "id": "56b15f15632298c12f31518b",
@@ -101,7 +101,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "JavaScript Lingo: Variables y capitalizaciónCamello",
       "descriptionEs": [
         "Vamos a cubrir lo que constituye una variable, y el razonamiento detrás de la capitalizaciónCamello (<em>camelCase</em>).",
         "Una variable, también conocida como una 'var', es el nombre o el espacio para un booleano, una cadena, un número, u otra pieza de información estática.",
@@ -109,7 +108,8 @@
         "Tu 'declaras' variables por primera vez con <code>var</code> en frente de ella, pero después puedes referenciarla más adelante en tu programa.",
         "capitalizaciónCamello es una forma en la que juntas varias palabras y aún así las mantienes legibles. La primera letra de la primera palabra va en minúsculas al igual que el resto de la primera palabra, pero la primera letra de cada palabra que siga se escribe en mayúsculas. No hay espacios. Ejemplos: brianaAmaSusMascotas, laMejorComidaEsElQueso, y valeLaPenaAprenderProgramacion.",
         "Al asignar un nombre de variable, usa capitalizaciónCamello. Además, trata de mantener los nombres descriptivos y cortos para que los demás (¡e incluso tu!) puedan entender a lo que se refiere la variable simplemente por el nombre."
-      ]
+      ],
+      "titleEs": "JavaScript Lingo: Variables y capitalizaciónCamello"
     },
     {
       "id": "56b15f15632298c12f31518a",
@@ -138,7 +138,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "JavaScript Lingo: Vectores y objetos",
       "descriptionEs": [
         "Si desea almacenar más de una pieza de información en una variable, puedes hacerlo mediante la creación de un vector o de un objeto.",
         "** Exención de responsabilidad: Los objetos de JS no son exactamente lo mismo que los objetos en otros lenguajes. Vamos a discutir aquí objetos con respecto a JS. ",
@@ -146,7 +145,8 @@
         "Los objetos son un tipo de datos que pueden verse o comportarse como un vector, en la medida que se trata de más valores almacenados en una variable de una manera organizada. Oirás que un objeto se puede representar en JSON, y con frecuencia cuando haces llamadas a la API de algunos sitios (para obtener información que necesitas mostrar en tu propia página) está será devuelta en JSON. ",
         "Un ejemplo de la notación de objetos es:  <code>var obj = { 'nombre': 'Briana', 'comida': 'queso', 'perro': 'Maurice'};</code>",
         "Fíjate que un objeto se encierra entre llaves { ... }, que los diferentes atributos se separan por comas, que cada atributo consta de una palabra llave y de un valor. Por ejemplo son llaves 'nombre', 'comida' y 'perro' y sus respectivos valores son 'Briana', 'queso' y 'Maurice'. En este ejmplo todos los valores fueron cadenas, aunque también son válidos booleanos, números y otros tipos de datos."
-      ]
+      ],
+      "titleEs": "JavaScript Lingo: Vectores y objetos"
     },
     {
       "id": "56b15f15632298c12f315189",
@@ -173,12 +173,12 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "JavaScript Lingo: Encontrando e indexando valores en vectores",
       "descriptionEs": [
         "Hay muchas razones por las que puedes necesitar acceder a una determinada pieza de información al interior de un conjunto más amplio, lo cual haces referenciando su índice.",
         "No vamos a entrar en la sintaxis, pero debes saber que el primer elemento en un vector tiene en realidad el índice 0.",
         "Esto también aplica para cadenas y objetos. Todos estos índices comienzan en 0, por lo que si en tu programa usas <code>miVector[2]</code>, realmente vas a obtener la tercera pieza de información del vector <code>miVector</code>."
-      ]
+      ],
+      "titleEs": "JavaScript Lingo: Encontrando e indexando valores en vectores"
     },
     {
       "id": "56b15f15632298c12f315188",
@@ -208,7 +208,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "JavaScript Lingo: Manipulación de los datos",
       "descriptionEs": [
         "Métodos y funciones son formas con las que puedes modificar variables u otros conjuntos de información.",
         "Los métodos están integrados en JavaScript, y te familiarizarás con estos cuando realices los desafíos sobre algoritmos.",
@@ -217,7 +216,8 @@
         "Las funciones, al igual que las variables, son algo que tu defines y creas.",
         "Durante tu práctica con algoritmos en FreeCodeCamp, vas a crear funciones que reciben una determinada pieza de información y la manipulan de la forma que elijas.",
         "Vas a estar más familiarizado con la sintaxis, pero por ahora, sólo recuerda que con los métodos y funciones puedes hacer casi cualquier cosa con tu código."
-      ]
+      ],
+      "titleEs": "JavaScript Lingo: Manipulación de los datos"
     },
     {
       "id": "56b15f15632298c12f315187",
@@ -247,7 +247,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "JavaScript Lingo: Matemáticas",
       "descriptionEs": [
         "Hay un objeto estático de nombre 'Math' en JS con muchos propiedades y métodos incluidos.",
         "Vas a querer investigar más de este cuando manipules números. Consulta la documentación de MDN antes de escribir tus propias funciones, pues ya podrían estar definidas allí. ",
@@ -256,7 +255,8 @@
         "Cuando trabajes con números, también debes estar consciente de que JS tiene un atributo interesante llamado 'formato de coma flotante'.",
         "Dependiendo de la cantidad de números, su tamaño y la cantidad de cálculos, JS puede devolver un número que es inexacto en 0,00004.",
         "Hay maneras de evitar esto, y en general no plantean problemas, pero es algo que debes tener en cuenta si te encuentras con algunos problemas que parecen no tienen sentido."
-      ]
+      ],
+      "titleEs": "JavaScript Lingo: Matemáticas"
     },
     {
       "id": "56b15f15632298c12f315186",
@@ -283,12 +283,12 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "nameEs": "JavaScript Lingo: Ciclos",
       "descriptionEs": [
         "Si hay un conjunto de valores (vamos a utilizar un vector en este ejemplo, pero no tiene que ser así) y deseas realizar la misma operación a cada valor del conjunto, puedes usar algo llamado ciclo. ",
         "Los ciclos tienen una sintaxis compleja a la que inicialmente es difícil acostumbrarse, pero una vez que la entiendas, son de gran utilidad. Yo usé ciclos en muchas de mis soluciones. ",
         "No es necesario que entiendas todo aquí - sólo que sepas que existen ciclos cuando necesitas recorrer un conjunto de datos y que pueden reducir la cantidad de código que debes escribir."
-      ]
+      ],
+      "titleEs": "JavaScript Lingo: Ciclos"
     },
     {
       "id": "56b15f15632298c12f315185",
@@ -318,8 +318,6 @@
       ],
       "type": "hike",
       "challengeType": 6,
-      "id": "56b15f15632298c12f315185",
-      "nameEs": "JavaScript Lingo: expresiones regulares (RegExp)",
       "descriptionEs": [
         "Las RegExp no siguen el formato del resto de JS, y pueden requerir una curva de aprendizaje.",
         "Las epresiones regulares (abreviado <em>RegExp</em>) también pueden ser una herramienta muy útil y eficiente.",
@@ -328,7 +326,8 @@
         "Si quisieras crear una página de registro que verifique las contraseñas para que contengan al menos un número y una letra mayúscula, puedes usar expresiones regulares.",
         "Si quieres asegurarte de que las fechas introducidas en una página sean todas fechas válidas en el futuro, puedes usar RegExp.",
         "Si bien hay infinitas maneras de utilizar RegExp, muchas de estas incluyen validaciones o ediciones automáticas de información."
-      ]
+      ],
+      "titleEs": "JavaScript Lingo: expresiones regulares (RegExp)"
     }
   ]
 }

From e54e83494f689cebdf1b289fd6421e6e976b1931 Mon Sep 17 00:00:00 2001
From: Andre Alonzo <aalonzo@192.168.1.122>
Date: Mon, 14 Mar 2016 22:50:24 -0700
Subject: [PATCH 04/33] Updated example code fo r Accessing Nested Arrays in
 JSON

---
 .../01-front-end-development-certification/basic-javascript.json        | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/seed/challenges/01-front-end-development-certification/basic-javascript.json b/seed/challenges/01-front-end-development-certification/basic-javascript.json
index fac504c..e87af0f 100644
--- a/seed/challenges/01-front-end-development-certification/basic-javascript.json
+++ b/seed/challenges/01-front-end-development-certification/basic-javascript.json
@@ -4419,7 +4419,7 @@
       "description": [
         "As we have seen in earlier examples, JSON objects can contain both nested objects and nested arrays. Similar to accessing nested objects, Array bracket notation can be chained to access nested arrays.",
         "Here is an example of how to access a nested array:",
-        "<blockquote>var ourPets = { <br>  \"cats\": [<br>    \"Meowzer\",<br>    \"Fluffy\",<br>    \"Kit-Cat\"<br>  ],<br>  \"dogs\": [<br>    \"Spot\",<br>    \"Bowser\",<br>    \"Frankie\"<br>  ]<br>};<br>ourPets.cats[1]; // \"Fluffy\"<br>ourPets.dogs[0]; // \"Spot\"</blockquote>",
+        "<blockquote>var ourPets = [<br>  {<br>    animalType: \"cat\",<br>    names: [<br>      \"Meowzer\",<br>      \"Fluffy\",<br>      \"Kit-Cat\"<br>    ]<br>  },<br>  {<br>    animalType: \"dog\",<br>    names: [<br>      \"Spot\",<br>      \"Bowser\",<br>      \"Frankie\"<br>    ]<br>  }<br>];<br>ourPets[0].names[1]; // \"Fluffy\"<br>ourPets[1].names[0]; // \"Spot\"</blockquote>",
         "<h4>Instructions</h4>",
         "Retrieve the second tree from the variable <code>myPlants</code> using object dot and array bracket notation."
       ],

From d47aed485021ad9b2dd2c011a22616b41c11dfea Mon Sep 17 00:00:00 2001
From: Quincy Larson <michaelqlarson@gmail.com>
Date: Sun, 13 Mar 2016 16:06:04 -0700
Subject: [PATCH 05/33] factor out settings page with email settings

---
 client/less/main.less              |   4 ++
 common/models/user.json            |   8 +++
 server/boot/user.js                |  61 +++++++++++++++++++++-
 server/views/account/settings.jade | 104 +++++++++++++++++++++++++++++++++++++
 server/views/account/show.jade     |  54 +------------------
 5 files changed, 176 insertions(+), 55 deletions(-)
 create mode 100644 server/views/account/settings.jade

diff --git a/client/less/main.less b/client/less/main.less
index 8ae2225..9170725 100644
--- a/client/less/main.less
+++ b/client/less/main.less
@@ -170,6 +170,10 @@ ul {
   margin-top: 15px;
 }
 
+.positive-20 {
+  margin-top: 20px;
+}
+
 .positive-15-bottom {
   margin-bottom: 15px;
 }
diff --git a/common/models/user.json b/common/models/user.json
index 4aa1617..f696b49 100644
--- a/common/models/user.json
+++ b/common/models/user.json
@@ -110,6 +110,14 @@
       "type": "boolean",
       "default": true
     },
+    "sendNotificationEmail": {
+      "type": "boolean",
+      "default": true
+    },
+    "sendQuincyEmail": {
+      "type": "boolean",
+      "default": true
+    },
     "isLocked": {
       "type": "boolean",
       "default": false,
diff --git a/server/boot/user.js b/server/boot/user.js
index 8af387b..6a83080 100644
--- a/server/boot/user.js
+++ b/server/boot/user.js
@@ -153,6 +153,21 @@ module.exports = function(app) {
     sendNonUserToMap,
     toggleLockdownMode
   );
+  router.get(
+    '/toggle-announcement-email-mode',
+    sendNonUserToMap,
+    toggleReceivesAnnouncementEmails
+  );
+  router.get(
+    '/toggle-notification-email-mode',
+    sendNonUserToMap,
+    toggleReceivesNotificationEmails
+  );
+  router.get(
+    '/toggle-quincy-email-mode',
+    sendNonUserToMap,
+    toggleReceivesQuincyEmails
+  );
   router.post(
     '/account/delete',
     ifNoUser401,
@@ -163,6 +178,11 @@ module.exports = function(app) {
     sendNonUserToMap,
     getAccount
   );
+  router.get(
+    '/settings',
+    sendNonUserToMap,
+    getSettings
+  );
   router.get('/vote1', vote1);
   router.get('/vote2', vote2);
 
@@ -228,6 +248,10 @@ module.exports = function(app) {
     return res.redirect('/' + username);
   }
 
+  function getSettings(req, res, next) {
+    res.render('account/settings');
+  }
+
   function returnUser(req, res, next) {
     const username = req.params.username.toLowerCase();
     const { user, path } = req;
@@ -406,7 +430,7 @@ module.exports = function(app) {
             section at the bottom of this page.
           `
         });
-        return res.redirect('/' + req.user.username);
+        res.redirect('/settings');
       });
     }
     req.user.isLocked = true;
@@ -420,7 +444,40 @@ module.exports = function(app) {
           section at the bottom of this page.
         `
       });
-      return res.redirect('/' + req.user.username);
+      res.redirect('/settings');
+    });
+  }
+
+  function toggleReceivesAnnouncementEmails(req, res, next) {
+    return User.findById(req.accessToken.userId, function(err, user) {
+      if (err) { return next(err); }
+      user.updateAttribute('sendMonthlyEmail', typeof user.sendMonthlyEmail !== "undefined" ? !user.sendMonthlyEmail : true, function(err) {
+        if (err) { return next(err); }
+        req.flash('info', { msg: 'Email preferences updated successfully.' });
+        res.redirect('/settings');
+      });
+    });
+  }
+
+  function toggleReceivesQuincyEmails(req, res, next) {
+    return User.findById(req.accessToken.userId, function(err, user) {
+      if (err) { return next(err); }
+      user.updateAttribute('sendQuincyEmail', typeof user.sendQuincyEmail !== "undefined" ? !user.sendQuincyEmail : true, function(err) {
+        if (err) { return next(err); }
+        req.flash('info', { msg: 'Email preferences updated successfully.' });
+        res.redirect('/settings');
+      });
+    });
+  }
+
+  function toggleReceivesNotificationEmails(req, res, next) {
+    return User.findById(req.accessToken.userId, function(err, user) {
+      if (err) { return next(err); }
+      user.updateAttribute('sendNotificationEmail', typeof user.sendNotificationEmail !== "undefined" ? !user.sendNotificationEmail : true, function(err) {
+        if (err) { return next(err); }
+        req.flash('info', { msg: 'Email preferences updated successfully.' });
+        res.redirect('/settings');
+      });
     });
   }
 
diff --git a/server/views/account/settings.jade b/server/views/account/settings.jade
new file mode 100644
index 0000000..1b81011
--- /dev/null
+++ b/server/views/account/settings.jade
@@ -0,0 +1,104 @@
+extends ../layout
+block content
+        h1.text-center Settings for your Account
+        hr
+        h2.text-center Actions  
+        .row
+          .col-xs-12
+              a.btn.btn-lg.btn-block.btn-primary.btn-link-social(href='/logout')
+                  | Sign me out of Free Code Camp
+          .col-xs-12
+              a.btn.btn-lg.btn-block.btn-primary.btn-link-social(href='mailto:team@freecodecamp.com')
+                  | Email us at team@freecodecamp.com
+        .spacer
+        h2.text-center Account Settings
+        .row
+          .col-xs-12
+            a.btn.btn-lg.btn-block.btn-primary.btn-link-social(href='/commit')
+                | Edit my pledge
+        .spacer
+        h2.text-center Privacy Settings  
+        .row
+          .col-xs-12.col-sm-8.col-sm-offset-2.col-md-6.col-md-offset-3
+            .row
+              .col-xs-9
+                p.large-p Make all of my solutions private 
+                  br
+                  | (this disables your certificates)
+              if (user.isLocked)
+                .col-xs-3
+                  a.btn.btn-lg.btn-primary.btn-block.active.positive-20(href='/toggle-lockdown-mode') On
+              else
+                .col-xs-3
+                  a.btn.btn-lg.btn-primary.btn-block.positive-20(href='/toggle-lockdown-mode') Off
+
+        .spacer
+        h2.text-center Email settings
+        .row
+          .col-xs-12.col-sm-8.col-sm-offset-2.col-md-6.col-md-offset-3
+            .row
+              .col-xs-9
+                p.large-p Send me announcement emails
+                  br
+                  | (we'll send you these every Thursday)
+              if (user.sendMonthlyEmail)
+                .col-xs-3
+                  a.btn.btn-lg.btn-primary.btn-block.active.positive-20(href='/toggle-announcement-email-mode') On
+              else
+                .col-xs-3
+                  a.btn.btn-lg.btn-primary.btn-block.positive-20(href='/toggle-announcement-email-mode') Off
+
+            .row
+              .col-xs-9
+                p.large-p Send me notification emails
+                  br
+                  | (these will pertain to your account)
+              if (user.sendNotificationEmail)
+                .col-xs-3
+                  a.btn.btn-lg.btn-primary.btn-block.active.positive-20(href='/toggle-notification-email-mode') On
+              else
+                .col-xs-3
+                  a.btn.btn-lg.btn-primary.btn-block.positive-20(href='/toggle-notification-email-mode') Off
+
+            .row
+              .col-xs-9
+                p.large-p Send me Quincy's weekly email
+                  br
+                  | (with new articles every Tuesday)
+              if (user.sendQuincyEmail)
+                .col-xs-3
+                  a.btn.btn-lg.btn-primary.btn-block.active.positive-20(href='/toggle-quincy-email-mode') On
+              else
+                .col-xs-3
+                  a.btn.btn-lg.btn-primary.btn-block.positive-20(href='/toggle-quincy-email-mode') Off
+
+        .spacer
+        h2.text-center Danger Zone
+        .row
+          .col-xs-12
+              a.btn.btn-lg.btn-block.btn-danger.btn-link-social.confirm-deletion
+                  | Delete my Free Code Camp account
+              script.
+                  $('.confirm-deletion').on("click", function () {
+                      $('#modal-dialog').modal('show');
+                  });
+          #modal-dialog.modal.animated.wobble
+              .modal-dialog
+                  .modal-content
+                      .modal-header
+                          a.close(href='#', data-dismiss='modal', aria-hidden='true') ×
+                          h3 You don't really want to delete your account, do you?
+                      .modal-body
+                          p This will really delete all your data, including all your progress, news stories and brownie points.
+                          p We won't be able to recover any of it for you later, even if you change your mind.
+                          p If there's something we could do better, send us an email instead and we'll do our best: &thinsp;
+                              a(href="mailto:team@freecodecamp.com") team@freecodecamp.com
+                              | .
+                      .modal-footer
+                          a.btn.btn-success.btn-block(href='#', data-dismiss='modal', aria-hidden='true')
+                              | Nevermind, I don't want to delete all of my progress
+                          .spacer
+                          form(action='/account/delete', method='POST')
+                              input(type='hidden', name='_csrf', value=_csrf)
+                              button.btn.btn-danger.btn-block(type='submit')
+                                  | I am 100% sure I want to delete my account and all of my progress
\ No newline at end of file
diff --git a/server/views/account/show.jade b/server/views/account/show.jade
index 8d3e4bc..c7c3050 100644
--- a/server/views/account/show.jade
+++ b/server/views/account/show.jade
@@ -187,56 +187,4 @@ block content
                                     if (challenge.solution)
                                         a(href='/challenges/' + removeOldTerms(challenge.name) + '?solution=' + encodeURIComponent(encodeFcc(challenge.solution)), target='_blank')= removeOldTerms(challenge.name)
                                     else
-                                        a(href='/challenges/' + removeOldTerms(challenge.name))= removeOldTerms(challenge.name)
-
-    if (user && user.username === username)
-        h1.text-center Manage your account
-        hr
-        .col-xs-12
-            a.btn.btn-lg.btn-block.btn-primary.btn-link-social(href='/logout')
-                | Sign me out of Free Code Camp
-        .col-xs-12
-            a.btn.btn-lg.btn-block.btn-primary.btn-link-social(href='mailto:team@freecodecamp.com')
-                | Email us at team@freecodecamp.com
-        if (!user.isLocked)
-            .col-xs-12
-                a.btn.btn-lg.btn-block.btn-primary.btn-link-social(href='/toggle-lockdown-mode')
-                    | Hide all my solutions from other people
-                    br
-                    | (this will disable your certificates)
-        else
-            .col-xs-12
-                a.btn.btn-lg.btn-block.btn-primary.btn-link-social(href='/toggle-lockdown-mode')
-                    | Let other people see all my solutions
-                    br
-                    | (this will enable your certificates)
-        .col-xs-12
-            a.btn.btn-lg.btn-block.btn-primary.btn-link-social(href='/commit')
-                | Edit my pledge
-        .col-xs-12
-            a.btn.btn-lg.btn-block.btn-danger.btn-link-social.confirm-deletion
-                | Delete my Free Code Camp account
-            script.
-                $('.confirm-deletion').on("click", function () {
-                    $('#modal-dialog').modal('show');
-                });
-        #modal-dialog.modal.animated.wobble
-            .modal-dialog
-                .modal-content
-                    .modal-header
-                        a.close(href='#', data-dismiss='modal', aria-hidden='true') ×
-                        h3 You don't really want to delete your account, do you?
-                    .modal-body
-                        p This will really delete all your data, including all your progress, news stories and brownie points.
-                        p We won't be able to recover any of it for you later, even if you change your mind.
-                        p If there's something we could do better, send us an email instead and we'll do our best: &thinsp;
-                            a(href="mailto:team@freecodecamp.com") team@freecodecamp.com
-                            | .
-                    .modal-footer
-                        a.btn.btn-success.btn-block(href='#', data-dismiss='modal', aria-hidden='true')
-                            | Nevermind, I don't want to delete all of my progress
-                        .spacer
-                        form(action='/account/delete', method='POST')
-                            input(type='hidden', name='_csrf', value=_csrf)
-                            button.btn.btn-danger.btn-block(type='submit')
-                                | I am 100% sure I want to delete my account and all of my progress
+                                        a(href='/challenges/' + removeOldTerms(challenge.name))= removeOldTerms(challenge.name)
\ No newline at end of file

From 2285d1826083412f833fecb787de852835349d98 Mon Sep 17 00:00:00 2001
From: Quincy Larson <michaelqlarson@gmail.com>
Date: Sun, 13 Mar 2016 16:57:39 -0700
Subject: [PATCH 06/33] refactor show view to have a settings button

---
 server/views/account/settings.jade | 27 ++++++++++++++++++++++++++-
 server/views/account/show.jade     | 35 ++++++++---------------------------
 2 files changed, 34 insertions(+), 28 deletions(-)

diff --git a/server/views/account/settings.jade b/server/views/account/settings.jade
index 1b81011..f7b8d70 100644
--- a/server/views/account/settings.jade
+++ b/server/views/account/settings.jade
@@ -2,9 +2,34 @@ extends ../layout
 block content
         h1.text-center Settings for your Account
         hr
-        h2.text-center Actions  
+        h2.text-center Actions
         .row
           .col-xs-12
+              if (!user.isGithubCool)
+                  a.btn.btn-lg.btn-block.btn-github.btn-link-social(href='/link/github')
+                      i.fa.fa-github
+                      | Link my GitHub to unlock my portfolio
+              else
+                  a.btn.btn-lg.btn-block.btn-github.btn-link-social(href='/link/github')
+                      i.fa.fa-github
+                      | Update my portfolio from GitHub
+                  if (!user.twitter)
+                      a.btn.btn-lg.btn-block.btn-twitter.btn-link-social(href='/link/twitter')
+                          i.fa.fa-twitter
+                          | Add my Twitter to my portfolio
+                  if (!user.facebook)
+                      a.btn.btn-lg.btn-block.btn-facebook.btn-link-social(href='/link/facebook')
+                          i.fa.fa-facebook
+                          | Add my Facebook to my portfolio
+                  if (!user.linkedin)
+                      a.btn.btn-lg.btn-block.btn-linkedin.btn-link-social(href='/link/linkedin')
+                          i.fa.fa-linkedin
+                          | Add my LinkedIn to my portfolio
+                  if (!user.google)
+                      a.btn.btn-lg.btn-block.btn-google-plus.btn-link-social(href='/link/google')
+                          i.fa.fa-google-plus
+                          | Add my Google+ to my portfolio
+          .col-xs-12
               a.btn.btn-lg.btn-block.btn-primary.btn-link-social(href='/logout')
                   | Sign me out of Free Code Camp
           .col-xs-12
diff --git a/server/views/account/show.jade b/server/views/account/show.jade
index c7c3050..9297d4c 100644
--- a/server/views/account/show.jade
+++ b/server/views/account/show.jade
@@ -4,33 +4,14 @@ block content
     script.
         var challengeName = 'Profile View';
     if (user && user.username === username)
-        h1.text-center Update your code portfolio
-        .row
-            .col-xs-12
-                if (!user.isGithubCool)
-                    a.btn.btn-lg.btn-block.btn-github.btn-link-social(href='/link/github')
-                        i.fa.fa-github
-                        | Link my GitHub to unlock my portfolio
-                else
-                    a.btn.btn-lg.btn-block.btn-github.btn-link-social(href='/link/github')
-                        i.fa.fa-github
-                        | Update my portfolio from GitHub
-                    if (!user.twitter)
-                        a.btn.btn-lg.btn-block.btn-twitter.btn-link-social(href='/link/twitter')
-                            i.fa.fa-twitter
-                            | Add my Twitter to my portfolio
-                    if (!user.facebook)
-                        a.btn.btn-lg.btn-block.btn-facebook.btn-link-social(href='/link/facebook')
-                            i.fa.fa-facebook
-                            | Add my Facebook to my portfolio
-                    if (!user.linkedin)
-                        a.btn.btn-lg.btn-block.btn-linkedin.btn-link-social(href='/link/linkedin')
-                            i.fa.fa-linkedin
-                            | Add my LinkedIn to my portfolio
-                    if (!user.google)
-                        a.btn.btn-lg.btn-block.btn-google-plus.btn-link-social(href='/link/google')
-                            i.fa.fa-google-plus
-                            | Add my Google+ to my portfolio
+      .row
+        if (!user.isGithubCool)
+          a.btn.btn-lg.btn-block.btn-github.btn-link-social(href='/link/github')
+              i.fa.fa-github
+              | Link my GitHub to unlock my portfolio
+        .col-xs-12
+            a.btn.btn-lg.btn-block.btn-primary.btn-link-social(href='/settings')
+                | Update your settings
         .spacer
     h1.text-center #{username}'s code portfolio
     hr

From f16234d9c6d7dd0171da56b976b1276a668f9233 Mon Sep 17 00:00:00 2001
From: Quincy Larson <michaelqlarson@gmail.com>
Date: Sun, 13 Mar 2016 16:58:08 -0700
Subject: [PATCH 07/33] refactor make account private action to use
 updateAttribute instead of save

---
 server/boot/user.js | 28 ++++------------------------
 1 file changed, 4 insertions(+), 24 deletions(-)

diff --git a/server/boot/user.js b/server/boot/user.js
index 6a83080..3da0486 100644
--- a/server/boot/user.js
+++ b/server/boot/user.js
@@ -418,33 +418,13 @@ module.exports = function(app) {
   }
 
   function toggleLockdownMode(req, res, next) {
-    if (req.user.isLocked === true) {
-      req.user.isLocked = false;
-      return req.user.save(function(err) {
+    return User.findById(req.accessToken.userId, function(err, user) {
+      if (err) { return next(err); }
+      user.updateAttribute('isLocked', typeof user.isLocked !== "undefined" ? !user.isLocked : true, function(err) {
         if (err) { return next(err); }
-
-        req.flash('success', {
-          msg: dedent`
-            Other people can now view all your challenge solutions.
-            You can change this back at any time in the "Manage My Account"
-            section at the bottom of this page.
-          `
-        });
+        req.flash('info', { msg: 'Privacy preferences updated successfully.' });
         res.redirect('/settings');
       });
-    }
-    req.user.isLocked = true;
-    return req.user.save(function(err) {
-      if (err) { return next(err); }
-
-      req.flash('success', {
-        msg: dedent`
-          All your challenge solutions are now hidden from other people.
-          You can change this back at any time in the "Manage My Account"
-          section at the bottom of this page.
-        `
-      });
-      res.redirect('/settings');
     });
   }
 

From 71b213d7d410d14e6a064d7dda2151b1ee524047 Mon Sep 17 00:00:00 2001
From: Quincy Larson <michaelqlarson@gmail.com>
Date: Mon, 14 Mar 2016 23:54:59 -0700
Subject: [PATCH 08/33] make notification text more friendly

---
 server/boot/user.js | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/server/boot/user.js b/server/boot/user.js
index 3da0486..95fda41 100644
--- a/server/boot/user.js
+++ b/server/boot/user.js
@@ -350,7 +350,7 @@ module.exports = function(app) {
         user => {
           if (!user) {
             req.flash('errors', {
-              msg: `We couldn't find the user with the username ${username}`
+              msg: `We couldn't find a user with the username ${username}`
             });
             return res.redirect('/');
           }
@@ -422,7 +422,7 @@ module.exports = function(app) {
       if (err) { return next(err); }
       user.updateAttribute('isLocked', typeof user.isLocked !== "undefined" ? !user.isLocked : true, function(err) {
         if (err) { return next(err); }
-        req.flash('info', { msg: 'Privacy preferences updated successfully.' });
+        req.flash('info', { msg: 'We\'ve successfully updated your Privacy preferences.' });
         res.redirect('/settings');
       });
     });
@@ -433,7 +433,7 @@ module.exports = function(app) {
       if (err) { return next(err); }
       user.updateAttribute('sendMonthlyEmail', typeof user.sendMonthlyEmail !== "undefined" ? !user.sendMonthlyEmail : true, function(err) {
         if (err) { return next(err); }
-        req.flash('info', { msg: 'Email preferences updated successfully.' });
+        req.flash('info', { msg: 'We\'ve successfully updated your Email preferences.' });
         res.redirect('/settings');
       });
     });
@@ -444,7 +444,7 @@ module.exports = function(app) {
       if (err) { return next(err); }
       user.updateAttribute('sendQuincyEmail', typeof user.sendQuincyEmail !== "undefined" ? !user.sendQuincyEmail : true, function(err) {
         if (err) { return next(err); }
-        req.flash('info', { msg: 'Email preferences updated successfully.' });
+        req.flash('info', { msg: 'We\'ve successfully updated your Email preferences.' });
         res.redirect('/settings');
       });
     });
@@ -455,7 +455,7 @@ module.exports = function(app) {
       if (err) { return next(err); }
       user.updateAttribute('sendNotificationEmail', typeof user.sendNotificationEmail !== "undefined" ? !user.sendNotificationEmail : true, function(err) {
         if (err) { return next(err); }
-        req.flash('info', { msg: 'Email preferences updated successfully.' });
+        req.flash('info', { msg: 'We\'ve successfully updated your Email preferences.' });
         res.redirect('/settings');
       });
     });
@@ -465,7 +465,7 @@ module.exports = function(app) {
     User.destroyById(req.user.id, function(err) {
       if (err) { return next(err); }
       req.logout();
-      req.flash('info', { msg: 'Your account has been deleted.' });
+      req.flash('info', { msg: 'You\'ve successfully deleted your account.' });
       return res.redirect('/');
     });
   }
@@ -496,7 +496,7 @@ module.exports = function(app) {
         if (err) { return next(err); }
 
         debug('password reset processed successfully');
-        req.flash('info', { msg: 'password reset processed successfully' });
+        req.flash('info', { msg: 'You\'ve successfully reset your password.' });
         return res.redirect('/');
       });
     });

From cdc44e4b7e0b2d9cb3d7a1655d237279aa43a702 Mon Sep 17 00:00:00 2001
From: Quincy Larson <michaelqlarson@gmail.com>
Date: Mon, 14 Mar 2016 23:57:04 -0700
Subject: [PATCH 09/33] update unsubscribe paths

---
 server/boot/randomAPIs.js | 39 ++++++++++++++++++++++++++++-----------
 1 file changed, 28 insertions(+), 11 deletions(-)

diff --git a/server/boot/randomAPIs.js b/server/boot/randomAPIs.js
index f7237bf..6a1a646 100644
--- a/server/boot/randomAPIs.js
+++ b/server/boot/randomAPIs.js
@@ -26,7 +26,9 @@ module.exports = function(app) {
   router.get('/pmi-acp-agile-project-managers-form', agileProjectManagersForm);
   router.get('/nonprofits', nonprofits);
   router.get('/nonprofits-form', nonprofitsForm);
-  router.get('/unsubscribe/:email', unsubscribe);
+  router.get('/unsubscribe/:email', unsubscribeMonthly);
+  router.get('/unsubscribe-notifications/:email', unsubscribeNotifications);
+  router.get('/unsubscribe-quincy/:email', unsubscribeQuincy);  
   router.get('/unsubscribed', unsubscribed);
   router.get('/get-started', getStarted);
   router.get('/submit-cat-photo', submitCatPhoto);
@@ -279,18 +281,33 @@ module.exports = function(app) {
     res.redirect('https://twitch.tv/freecodecamp');
   }
 
-  function unsubscribe(req, res, next) {
+  function unsubscribeMonthly(req, res, next) {
     User.findOne({ where: { email: req.params.email } }, function(err, user) {
-      if (user) {
+      user.updateAttribute('sendMonthlyEmail', false, function(err) {
         if (err) { return next(err); }
-        user.sendMonthlyEmail = false;
-        return user.save(function() {
-          if (err) { return next(err); }
-          return res.redirect('/unsubscribed');
-        });
-      } else {
-        return res.redirect('/unsubscribed');
-      }
+        req.flash('info', { msg: 'We\'ve successfully updated your Email preferences.' });
+        res.redirect('/unsubscribed');
+      });
+    });
+  }
+
+  function unsubscribeNotifications(req, res, next) {
+    User.findOne({ where: { email: req.params.email } }, function(err, user) {
+      user.updateAttribute('sendNotificationEmail', false, function(err) {
+        if (err) { return next(err); }
+        req.flash('info', { msg: 'We\'ve successfully updated your Email preferences.' });
+        res.redirect('/unsubscribed');
+      });
+    });
+  }
+
+  function unsubscribeQuincy(req, res, next) {
+    User.findOne({ where: { email: req.params.email } }, function(err, user) {
+      user.updateAttribute('sendQuincyEmail', false, function(err) {
+        if (err) { return next(err); }
+        req.flash('info', { msg: 'We\'ve successfully updated your Email preferences.' });
+        res.redirect('/unsubscribed');
+      });
     });
   }
 

From 891c0c2e5a10dbda8dd75d5170b883360f68defd Mon Sep 17 00:00:00 2001
From: Quincy Larson <michaelqlarson@gmail.com>
Date: Tue, 15 Mar 2016 00:00:53 -0700
Subject: [PATCH 10/33] remove trailing whitespace

---
 server/boot/randomAPIs.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/boot/randomAPIs.js b/server/boot/randomAPIs.js
index 6a1a646..34adb26 100644
--- a/server/boot/randomAPIs.js
+++ b/server/boot/randomAPIs.js
@@ -28,7 +28,7 @@ module.exports = function(app) {
   router.get('/nonprofits-form', nonprofitsForm);
   router.get('/unsubscribe/:email', unsubscribeMonthly);
   router.get('/unsubscribe-notifications/:email', unsubscribeNotifications);
-  router.get('/unsubscribe-quincy/:email', unsubscribeQuincy);  
+  router.get('/unsubscribe-quincy/:email', unsubscribeQuincy);
   router.get('/unsubscribed', unsubscribed);
   router.get('/get-started', getStarted);
   router.get('/submit-cat-photo', submitCatPhoto);

From fa18f967d9ba315daf592af6635010272e0868f2 Mon Sep 17 00:00:00 2001
From: Eric Leung <eric@erictleung.com>
Date: Tue, 15 Mar 2016 01:05:16 -0700
Subject: [PATCH 11/33] Make Friendly Date Ranges function name unique

---
 .../advanced-bonfires.json                         | 24 +++++++++++-----------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/seed/challenges/01-front-end-development-certification/advanced-bonfires.json b/seed/challenges/01-front-end-development-certification/advanced-bonfires.json
index f997f84..108a1eb 100644
--- a/seed/challenges/01-front-end-development-certification/advanced-bonfires.json
+++ b/seed/challenges/01-front-end-development-certification/advanced-bonfires.json
@@ -265,28 +265,28 @@
         "Do not display information that is redundant or that can be inferred by the user: if the date range ends in less than a year from when it begins, do not display the ending year. If the range ends in the same month that it begins, do not display the ending year or month.",
         "Additionally, if the date range begins in the current year and ends within one year, the year should not be displayed at the beginning of the friendly range.",
         "Examples:",
-        "<code>friendly([\"2016-07-01\", \"2016-07-04\"])</code> should return <code>[\"July 1st\",\"4th\"]</code>",
-        "<code>friendly([\"2016-07-01\", \"2018-07-04\"])</code> should return <code>[\"July 1st, 2016\", \"July 4th, 2018\"]</code>.",
+        "<code>makeFriendlyDates([\"2016-07-01\", \"2016-07-04\"])</code> should return <code>[\"July 1st\",\"4th\"]</code>",
+        "<code>makeFriendlyDates([\"2016-07-01\", \"2018-07-04\"])</code> should return <code>[\"July 1st, 2016\", \"July 4th, 2018\"]</code>.",
         "Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> if you get stuck. Try to pair program. Write your own code."
       ],
       "challengeSeed": [
-        "function friendly(arr) {",
+        "function makeFriendlyDates(arr) {",
         "  return arr;",
         "}",
         "",
-        "friendly(['2016-07-01', '2016-07-04']);"
+        "makeFriendlyDates(['2016-07-01', '2016-07-04']);"
       ],
       "solutions": [
-        "function friendly(str) {\n  var thisYear = new Date().getFullYear();\n  var dates = str.map(function(s) {return s.split('-').map(Number);});\n  var start = dates[0];\n  var end = dates[1];\n  if (str[0] === str[1]) {\n     return [readable(start)];\n  }\n  if (start[0] !== end[0]) {\n    if (start[0] + 1 === end[0]){\n      if (start[1] > end[1]){\n        end[0] = undefined;\n      }\n      if (start[1] === end[1] && start[2] > end[2]){\n        end[0] = undefined;\n      }\n      if (start[0] === thisYear){\n        start[0] = undefined;\n      }\n    }\n    return dates.map(readable);\n  }\n  end[0] = undefined;\n  if (start[0] === thisYear){\n    start[0] = undefined;\n  }\n  if (start[1] === end[1]) {\n    end[1] = undefined;\n  }\n  return dates.map(readable);\n}\n\nfunction readable(arr) {\n  var ordD = arr[2] + nth(arr[2]);\n  if (!arr[1]) {\n    return ordD;\n  }\n  return MONTH[arr[1]] + \" \" + ordD + (!arr[0] ? \"\" : \", \" + arr[0]);\n}\n\nvar MONTH = {1: \"January\",\n             2: \"February\",\n             3: \"March\",\n             4: \"April\",\n             5: \"May\",\n             6: \"June\",\n             7: \"July\",\n             8: \"August\",\n             9: \"September\",\n             10: \"October\",\n             11: \"November\",\n             12: \"December\"};\n\nfunction nth(d) {\n  if(d>3 && d<21) return 'th';\n  switch (d % 10) {\n    case 1: return \"st\";\n    case 2: return \"nd\";\n    case 3: return \"rd\";\n    default: return \"th\";\n  }\n}"
+        "function makeFriendlyDates(str) {\n  var thisYear = new Date().getFullYear();\n  var dates = str.map(function(s) {return s.split('-').map(Number);});\n  var start = dates[0];\n  var end = dates[1];\n  if (str[0] === str[1]) {\n     return [readable(start)];\n  }\n  if (start[0] !== end[0]) {\n    if (start[0] + 1 === end[0]){\n      if (start[1] > end[1]){\n        end[0] = undefined;\n      }\n      if (start[1] === end[1] && start[2] > end[2]){\n        end[0] = undefined;\n      }\n      if (start[0] === thisYear){\n        start[0] = undefined;\n      }\n    }\n    return dates.map(readable);\n  }\n  end[0] = undefined;\n  if (start[0] === thisYear){\n    start[0] = undefined;\n  }\n  if (start[1] === end[1]) {\n    end[1] = undefined;\n  }\n  return dates.map(readable);\n}\n\nfunction readable(arr) {\n  var ordD = arr[2] + nth(arr[2]);\n  if (!arr[1]) {\n    return ordD;\n  }\n  return MONTH[arr[1]] + \" \" + ordD + (!arr[0] ? \"\" : \", \" + arr[0]);\n}\n\nvar MONTH = {1: \"January\",\n             2: \"February\",\n             3: \"March\",\n             4: \"April\",\n             5: \"May\",\n             6: \"June\",\n             7: \"July\",\n             8: \"August\",\n             9: \"September\",\n             10: \"October\",\n             11: \"November\",\n             12: \"December\"};\n\nfunction nth(d) {\n  if(d>3 && d<21) return 'th';\n  switch (d % 10) {\n    case 1: return \"st\";\n    case 2: return \"nd\";\n    case 3: return \"rd\";\n    default: return \"th\";\n  }\n}"
       ],
       "tests": [
-        "assert.deepEqual(friendly(['2016-07-01', '2016-07-04']), ['July 1st','4th'], 'message: <code>friendly([\"2016-07-01\", \"2016-07-04\"])</code> should return <code>[\"July 1st\",\"4th\"]</code>.');",
-        "assert.deepEqual(friendly(['2016-12-01', '2017-02-03']), ['December 1st','February 3rd'], 'message: <code>friendly([\"2016-12-01\", \"2017-02-03\"])</code> should return <code>[\"December 1st\",\"February 3rd\"]</code>.');",
-        "assert.deepEqual(friendly(['2016-12-01', '2018-02-03']), ['December 1st, 2016','February 3rd, 2018'], 'message: <code>friendly([\"2016-12-01\", \"2018-02-03\"])</code> should return <code>[\"December 1st, 2016\",\"February 3rd, 2018\"]</code>.');",
-        "assert.deepEqual(friendly(['2017-03-01', '2017-05-05']), ['March 1st, 2017','May 5th'], 'message: <code>friendly([\"2017-03-01\", \"2017-05-05\"])</code> should return <code>[\"March 1st, 2017\",\"May 5th\"]</code>');",
-        "assert.deepEqual(friendly(['2018-01-13', '2018-01-13']), ['January 13th, 2018'], 'message: <code>friendly([\"2018-01-13\", \"2018-01-13\"])</code> should return <code>[\"January 13th, 2018\"]</code>.');",
-        "assert.deepEqual(friendly(['2022-09-05', '2023-09-04']), ['September 5th, 2022','September 4th'], 'message: <code>friendly([\"2022-09-05\", \"2023-09-04\"])</code> should return <code>[\"September 5th, 2022\",\"September 4th\"]</code>.');",
-        "assert.deepEqual(friendly(['2022-09-05', '2023-09-05']), ['September 5th, 2022','September 5th, 2023'], 'message: <code>friendly([\"2022-09-05\", \"2023-09-05\"])</code> should return <code>[\"September 5th, 2022\",\"September 5th, 2023\"]</code>.');"
+        "assert.deepEqual(makeFriendlyDates(['2016-07-01', '2016-07-04']), ['July 1st','4th'], 'message: <code>makeFriendlyDates([\"2016-07-01\", \"2016-07-04\"])</code> should return <code>[\"July 1st\",\"4th\"]</code>.');",
+        "assert.deepEqual(makeFriendlyDates(['2016-12-01', '2017-02-03']), ['December 1st','February 3rd'], 'message: <code>makeFriendlyDates([\"2016-12-01\", \"2017-02-03\"])</code> should return <code>[\"December 1st\",\"February 3rd\"]</code>.');",
+        "assert.deepEqual(makeFriendlyDates(['2016-12-01', '2018-02-03']), ['December 1st, 2016','February 3rd, 2018'], 'message: <code>makeFriendlyDates([\"2016-12-01\", \"2018-02-03\"])</code> should return <code>[\"December 1st, 2016\",\"February 3rd, 2018\"]</code>.');",
+        "assert.deepEqual(makeFriendlyDates(['2017-03-01', '2017-05-05']), ['March 1st, 2017','May 5th'], 'message: <code>makeFriendlyDates([\"2017-03-01\", \"2017-05-05\"])</code> should return <code>[\"March 1st, 2017\",\"May 5th\"]</code>');",
+        "assert.deepEqual(makeFriendlyDates(['2018-01-13', '2018-01-13']), ['January 13th, 2018'], 'message: <code>makeFriendlyDates([\"2018-01-13\", \"2018-01-13\"])</code> should return <code>[\"January 13th, 2018\"]</code>.');",
+        "assert.deepEqual(makeFriendlyDates(['2022-09-05', '2023-09-04']), ['September 5th, 2022','September 4th'], 'message: <code>makeFriendlyDates([\"2022-09-05\", \"2023-09-04\"])</code> should return <code>[\"September 5th, 2022\",\"September 4th\"]</code>.');",
+        "assert.deepEqual(makeFriendlyDates(['2022-09-05', '2023-09-05']), ['September 5th, 2022','September 5th, 2023'], 'message: <code>makeFriendlyDates([\"2022-09-05\", \"2023-09-05\"])</code> should return <code>[\"September 5th, 2022\",\"September 5th, 2023\"]</code>.');"
       ],
       "type": "bonfire",
       "MDNlinks": [

From ee6ca2c5ae7fd533182d663acc76fc37348e1875 Mon Sep 17 00:00:00 2001
From: Quincy Larson <michaelqlarson@gmail.com>
Date: Tue, 15 Mar 2016 11:22:54 -0700
Subject: [PATCH 12/33] address eslint errors from refactor

---
 server/boot/randomAPIs.js | 36 +++++++++++++++++++++-----------
 server/boot/user.js       | 52 +++++++++++++++++++++++++++++++----------------
 2 files changed, 58 insertions(+), 30 deletions(-)

diff --git a/server/boot/randomAPIs.js b/server/boot/randomAPIs.js
index 34adb26..d9ef88f 100644
--- a/server/boot/randomAPIs.js
+++ b/server/boot/randomAPIs.js
@@ -282,31 +282,43 @@ module.exports = function(app) {
   }
 
   function unsubscribeMonthly(req, res, next) {
-    User.findOne({ where: { email: req.params.email } }, function(err, user) {
-      user.updateAttribute('sendMonthlyEmail', false, function(err) {
+    req.checkParams('email', 'Must send a valid email').isEmail();
+    return User.findOne({ where: { email: req.params.email } }, (err, user) => {
+      if (err) { return next(err); }
+      return user.updateAttribute('sendMonthlyEmail', false, (err) => {
         if (err) { return next(err); }
-        req.flash('info', { msg: 'We\'ve successfully updated your Email preferences.' });
-        res.redirect('/unsubscribed');
+        req.flash('info', {
+          msg: 'We\'ve successfully updated your Email preferences.'
+        });
+        return res.redirect('/unsubscribed');
       });
     });
   }
 
   function unsubscribeNotifications(req, res, next) {
-    User.findOne({ where: { email: req.params.email } }, function(err, user) {
-      user.updateAttribute('sendNotificationEmail', false, function(err) {
+    req.checkParams('email', 'Must send a valid email').isEmail();
+    return User.findOne({ where: { email: req.params.email } }, (err, user) => {
+      if (err) { return next(err); }
+      return user.updateAttribute('sendNotificationEmail', false, (err) => {
         if (err) { return next(err); }
-        req.flash('info', { msg: 'We\'ve successfully updated your Email preferences.' });
-        res.redirect('/unsubscribed');
+        req.flash('info', {
+          msg: 'We\'ve successfully updated your Email preferences.'
+        });
+        return res.redirect('/unsubscribed');
       });
     });
   }
 
   function unsubscribeQuincy(req, res, next) {
-    User.findOne({ where: { email: req.params.email } }, function(err, user) {
-      user.updateAttribute('sendQuincyEmail', false, function(err) {
+    req.checkParams('email', 'Must send a valid email').isEmail();
+    return User.findOne({ where: { email: req.params.email } }, (err, user) => {
+      if (err) { return next(err); }
+      return user.updateAttribute('sendQuincyEmail', false, (err) => {
         if (err) { return next(err); }
-        req.flash('info', { msg: 'We\'ve successfully updated your Email preferences.' });
-        res.redirect('/unsubscribed');
+        req.flash('info', {
+          msg: 'We\'ve successfully updated your Email preferences.'
+        });
+        return res.redirect('/unsubscribed');
       });
     });
   }
diff --git a/server/boot/user.js b/server/boot/user.js
index 95fda41..fc3986d 100644
--- a/server/boot/user.js
+++ b/server/boot/user.js
@@ -248,7 +248,7 @@ module.exports = function(app) {
     return res.redirect('/' + username);
   }
 
-  function getSettings(req, res, next) {
+  function getSettings(req, res) {
     res.render('account/settings');
   }
 
@@ -420,10 +420,12 @@ module.exports = function(app) {
   function toggleLockdownMode(req, res, next) {
     return User.findById(req.accessToken.userId, function(err, user) {
       if (err) { return next(err); }
-      user.updateAttribute('isLocked', typeof user.isLocked !== "undefined" ? !user.isLocked : true, function(err) {
+      return user.updateAttribute('isLocked', !user.isLocked, function(err) {
         if (err) { return next(err); }
-        req.flash('info', { msg: 'We\'ve successfully updated your Privacy preferences.' });
-        res.redirect('/settings');
+        req.flash('info', {
+          msg: 'We\'ve successfully updated your Privacy preferences.'
+        });
+        return res.redirect('/settings');
       });
     });
   }
@@ -431,32 +433,46 @@ module.exports = function(app) {
   function toggleReceivesAnnouncementEmails(req, res, next) {
     return User.findById(req.accessToken.userId, function(err, user) {
       if (err) { return next(err); }
-      user.updateAttribute('sendMonthlyEmail', typeof user.sendMonthlyEmail !== "undefined" ? !user.sendMonthlyEmail : true, function(err) {
-        if (err) { return next(err); }
-        req.flash('info', { msg: 'We\'ve successfully updated your Email preferences.' });
-        res.redirect('/settings');
-      });
+      return user.updateAttribute(
+        'sendMonthlyEmail',
+        !user.sendMonthlyEmail,
+        (err) => {
+          if (err) { return next(err); }
+          req.flash('info', {
+            msg: 'We\'ve successfully updated your Email preferences.'
+          });
+          return res.redirect('/settings');
+        });
     });
   }
 
   function toggleReceivesQuincyEmails(req, res, next) {
     return User.findById(req.accessToken.userId, function(err, user) {
       if (err) { return next(err); }
-      user.updateAttribute('sendQuincyEmail', typeof user.sendQuincyEmail !== "undefined" ? !user.sendQuincyEmail : true, function(err) {
-        if (err) { return next(err); }
-        req.flash('info', { msg: 'We\'ve successfully updated your Email preferences.' });
-        res.redirect('/settings');
-      });
+      return user.updateAttribute('sendQuincyEmail', !user.sendQuincyEmail,
+        (err) => {
+          if (err) { return next(err); }
+          req.flash('info', {
+            msg: 'We\'ve successfully updated your Email preferences.'
+          });
+          return res.redirect('/settings');
+        }
+      );
     });
   }
 
   function toggleReceivesNotificationEmails(req, res, next) {
     return User.findById(req.accessToken.userId, function(err, user) {
       if (err) { return next(err); }
-      user.updateAttribute('sendNotificationEmail', typeof user.sendNotificationEmail !== "undefined" ? !user.sendNotificationEmail : true, function(err) {
-        if (err) { return next(err); }
-        req.flash('info', { msg: 'We\'ve successfully updated your Email preferences.' });
-        res.redirect('/settings');
+      return user.updateAttribute(
+        'sendNotificationEmail',
+        !user.sendNotificationEmail,
+        function(err) {
+          if (err) { return next(err); }
+          req.flash('info', {
+            msg: 'We\'ve successfully updated your Email preferences.'
+          });
+          return res.redirect('/settings');
       });
     });
   }

From 9d5a5d953c6337f5264834e683cbca7fc6d21dbd Mon Sep 17 00:00:00 2001
From: Kalanosh <davidclausen2051@gmail.com>
Date: Tue, 15 Mar 2016 14:53:54 -0500
Subject: [PATCH 13/33] changed expire time for currentChallengeId cookie to
 'never' instead of session

---
 server/boot/challenge.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/server/boot/challenge.js b/server/boot/challenge.js
index b5350d4..cd8d38c 100644
--- a/server/boot/challenge.js
+++ b/server/boot/challenge.js
@@ -515,7 +515,8 @@ module.exports = function(app) {
           }
           var view = challengeView[data.challengeType];
           if (data.id) {
-            res.cookie('currentChallengeId', data.id);
+            res.cookie('currentChallengeId', data.id, {
+              expires: new Date(2147483647000)});
           }
           return res.render(view, data);
         },

From c13e234ff7f9991e0af06e9a0f63c045aef179e3 Mon Sep 17 00:00:00 2001
From: "Alister N. Mada" <alistermada@gmail.com>
Date: Wed, 16 Mar 2016 12:51:08 +0700
Subject: [PATCH 14/33] Fix links in video descriptions

---
 common/app/routes/Hikes/components/Lecture.jsx     |  5 ++-
 .../04-video-challenges/bigonotation.json          |  8 ++---
 .../04-video-challenges/chromedevtools.json        | 36 +++++++++++-----------
 .../04-video-challenges/computer-basics.json       | 12 ++++----
 seed/challenges/04-video-challenges/dom.json       |  4 +--
 seed/challenges/04-video-challenges/jslingo.json   |  8 ++---
 6 files changed, 36 insertions(+), 37 deletions(-)

diff --git a/common/app/routes/Hikes/components/Lecture.jsx b/common/app/routes/Hikes/components/Lecture.jsx
index 8e8a40a..c042536 100644
--- a/common/app/routes/Hikes/components/Lecture.jsx
+++ b/common/app/routes/Hikes/components/Lecture.jsx
@@ -57,9 +57,8 @@ export class Lecture extends React.Component {
     return transcript.map((line, index) => (
       <p
         className='lead text-left'
-        key={ dashedName + index }>
-        { line }
-      </p>
+        key={ dashedName + index }
+        dangerouslySetInnerHTML={{__html: line}} />
     ));
   }
 
diff --git a/seed/challenges/04-video-challenges/bigonotation.json b/seed/challenges/04-video-challenges/bigonotation.json
index acd37f7..ce2e4ce 100644
--- a/seed/challenges/04-video-challenges/bigonotation.json
+++ b/seed/challenges/04-video-challenges/bigonotation.json
@@ -63,9 +63,9 @@
         "If your algorithm slows down exponentially with the input, you're going to want to look for a more efficient way to solve that problem.",
         "Whenever you’re coding loops within loops, you want to be especially mindful of time complexity.",
         "Big O Cheat Sheet is the place to look once you can classify your algorithm, like as a 'merge-sort' or a 'quick-sort'.",
-        "bigocheatsheet.com/",
+        "<a href='http://bigocheatsheet.com/' target='_blank'>bigocheatsheet.com/</a>",
         "Princeton Coursera course is NOT for the faint of heart. With examples and practice in Java, this course will cover iterating over data specifically with Java, sorting, and searching algorithms.",
-        "coursera.org/course/algs4partI"
+        "<a href='http://coursera.org/course/algs4partI' target='_blank'>coursera.org/course/algs4partI</a>"
       ],
       "challengeSeed": [
         "139877627"
@@ -100,9 +100,9 @@
         "Si tu algoritmo se hace más lento de manera exponencial a medida que aumenta la entrada, querrás buscar una forma más eficiente de resolver el problema.",
         "Siempre que programes ciclos dentro de ciclos, querrás ser especialmente cuidadoso de la complejidad temporal.",
         "La hoja de copialina de la notación O mayúscula es el lugar donde mirar para clasificar tu algoritmo, como el de un 'ordenamiento por mezcla' o un 'ordenamiento rápido'.",
-        "bigocheatsheet.com/",
+        "<a href='http://bigocheatsheet.com/' target='_blank'>bigocheatsheet.com/</a>",
         "El curso de Coursera de Princeton no es para débiles de corazón. Con ejemplos y prácticas en Java, este curso cubre iteración sobre los datos especifcamente algoritmos de ordenamiento y búsqueda.",
-        "coursera.org/course/algs4partI"
+        "<a href='http://coursera.org/course/algs4partI' target='_blank'>coursera.org/course/algs4partI</a>"
       ],
       "titleEs": "Notación O mayúscula: Unos pocos ejemplos"
     }
diff --git a/seed/challenges/04-video-challenges/chromedevtools.json b/seed/challenges/04-video-challenges/chromedevtools.json
index 3684e48..af0eb3e 100644
--- a/seed/challenges/04-video-challenges/chromedevtools.json
+++ b/seed/challenges/04-video-challenges/chromedevtools.json
@@ -7,14 +7,14 @@
       "id": "56b15f15632298c12f315184",
       "title": "Chrome Dev Tools: Elements",
       "description": [
-        "This is basic info and a mini-lesson on the Elements tab of Chrome Dev Tools. Check out more in-depth documentation here: developers.google.com/web/tools/iterate/inspect-styles/basics",
+        "This is basic info and a mini-lesson on the Elements tab of Chrome Dev Tools. Check out more in-depth documentation here: <a href='http://developers.google.com/web/tools/iterate/inspect-styles/basics' target='_blank'>developers.google.com/web/tools/iterate/inspect-styles/basics</a>",
         "We will be using the webpage mckellen.com/ per suggestion of Free Code Camp user kmiasko.",
         "If you right click and select 'Inspect element', you can have access to the elements tab. You can change text, background color, text color, and any other CSS or HTML you'd like!",
         "These changes don't set up automatically, so don't use this as an IDE or a place to create or edit anything you want to save. You can set up something called 'persistent authoring' to save.",
         "Cascade, inherit, and other CSS rules still apply, so keep that in mind as you play around. Additionally, overridden styles will be shown as having a strike through them.",
         "It should also be noted that all of the code you're seeing in this 'tree' is current HTML, not the original when the page loaded. If you use JavaScript or jQuery to change something, it will be updated on this tree.",
         "Padding, border, and margins are easily inspected and edited using the colorful box on the right or bottom side.",
-        "Please check out the Chrome Dev Tools documentation at developers.google.com/web/tools/chrome-devtools/"
+        "Please check out the Chrome Dev Tools documentation at <a href='http://developers.google.com/web/tools/chrome-devtools/' target='_blank'>http://developers.google.com/web/tools/chrome-devtools/</a>"
       ],
       "challengeSeed": [
         "137186237"
@@ -33,14 +33,14 @@
       "type": "hike",
       "challengeType": 6,
       "descriptionEs": [
-        "Esta es información básica y una mini-lección sobre la pestaña Elements en las herramientas de desarrollo de Chrome. Echa un vistazo a la documentación más detallada aquí: developers.google.com/web/tools/iterate/inspect-styles/basics ",
+        "Esta es información básica y una mini-lección sobre la pestaña Elements en las herramientas de desarrollo de Chrome. Echa un vistazo a la documentación más detallada aquí: <a href='http://developers.google.com/web/tools/iterate/inspect-styles/basics' target='_blank'>developers.google.com/web/tools/iterate/inspect-styles/basics</a>",
         "Vamos a utilizar la página web mckellen.com/ por sugerencia del usuario de FreeCodeCamp kmiasko.",
         "Si pulsas con el botón derecho y seleccionas 'Inspeccionar elemento', tendrás acceso a la pestaña elements. ¡Puedes cambiar el texto, el color de fondo, el color de texto y cualquier otra propiedad CSS o elemento HTML que desees!",
         "Estos cambios no se establecen de forma automática, por lo que no debes usar el inspector como un IDE o como un lugar para crear o editar cualquier cosa que desees guardar. Puedes configurar algo que se llama 'autoría persistente' para salvar.",
         "Las reglas de CSS como cascada, herencia y otras se aplican, así que tenlo en cuenta a medida que juegas. Además, los estilos anulados se muestran con un tachado sobre ellos. ",
         "También hay que señalar que todo el código que veas en ese 'árbol' es código HTML actual, no el original que había cuando se cargó la página. Si utilizas jQuery o JavaScript para cambiar algo, esté árbol se actualizará.",
         "El relleno, los bordes y los márgenes se inspeccionan fácilmente y puedes editarlos usando la caja con colores que encontrarás al lado derecho o en la parte de abajo.",
-        "Por favor, echa un vistazo a la documentación de las herramientas de desarrollo de Chrome en developers.google.com/web/tools/chrome-devtools/"
+        "Por favor, echa un vistazo a la documentación de las herramientas de desarrollo de Chrome en <a href='http://developers.google.com/web/tools/chrome-devtools/' target='_blank'>http://developers.google.com/web/tools/chrome-devtools/</a>"
       ],
       "titleEs": "Herramientas de desarrollo de Chrome: Elementos"
     },
@@ -54,7 +54,7 @@
         "If you look at the line on the side, you'll notice a pattern of colors. Those colors each represent a different type of content in the request.",
         "The longer the line is a certain color, the longer that type of content took in that request. Ultimately, you want short lines, and if any request has long lines, you know what may be slowing down the web page.",
         "If you click a request in the log, you can get even more detailed information.",
-        "Check out more in-depth documentation here: developers.google.com/web/tools/profile-performance/network-performance/resource-loading"
+        "Check out more in-depth documentation here: <a href='http://developers.google.com/web/tools/profile-performance/network-performance/resource-loading' target='_blank'>developers.google.com/web/tools/profile-performance/network-performance/resource-loading</a>"
       ],
       "challengeSeed": [
         "137187539"
@@ -78,7 +78,7 @@
         "Si te fijas en la línea al lado derecho, te darás cuenta de un patrón de colores. Cada color representa un tipo diferente de contenido en la solicitud. ",
         "Cuanto más larga sea la línea de un color determinado, tanto más tiempo tomó ese tipo de contenido en la solicitud. En últimas quieres líneas cortas, y si cualquier solicitud tiene largas líneas, sabes que puede estar ralentizando la página web.",
         "Si pulsas sobre una solicitud en la bitácora, podrás obtener información más detallada.",
-        "Consulta más documentación detallada aquí: developers.google.com/web/tools/profile-performance/network-performance/resource-loading"
+        "Consulta más documentación detallada aquí: <a href='http://developers.google.com/web/tools/profile-performance/network-performance/resource-loading' target='_blank'>developers.google.com/web/tools/profile-performance/network-performance/resource-loading</a>"
       ],
       "titleEs": "Herramientas de desarrollo de Chrome: red"
     },
@@ -93,7 +93,7 @@
         "By slowing everything down and giving yourself a chance to examine what's happening at every spot you've set, you can keep track of exactly what's happening in the page or app.",
         "Once all of the breakpoints are set, you can step through the code and examine the state of your page or app at every breakpoint.",
         "Just like with elements, you can live-edit through Dev Tools, but remember to save those changes however you can so your progress isn't lost.",
-        "Check out more in-depth documentation here: developers.google.com/web/tools/javascript/breakpoints/"
+        "Check out more in-depth documentation here: <a href='http://developers.google.com/web/tools/javascript/breakpoints/' target='_blank'>developers.google.com/web/tools/javascript/breakpoints/</a>"
       ],
       "challengeSeed": [
         "137188025"
@@ -119,7 +119,7 @@
         "Al reducir la velocidad de todo y darte la oportunidad de examinar lo que está sucediendo en cada punto que hayas configurado, podrás controlar exactamente lo que está sucediendo en la página o aplicación.",
         "Una vez has establecido todos los puntos de interrupción, puedes recorrer el código y examinar el estado de tu página o aplicación en cada punto de interrupción.",
         "Al igual que con los elementos, puedes editar en vivo mediante las herramientas de desarrollo, pero recuerda que debes guardar esos cambios para que no pierdas tu progreso.",
-        "Revisa documentación más detallada aquí: developers.google.com/web/tools/javascript/breakpoints/"
+        "Revisa documentación más detallada aquí: <a href='http://developers.google.com/web/tools/javascript/breakpoints/' target='_blank'>developers.google.com/web/tools/javascript/breakpoints/</a>"
       ],
       "titleEs": "Herramientas de desarrollo de Chrome: Fuentes"
     },
@@ -134,7 +134,7 @@
         "All of this will help you to better understand what's happening in the browser, particularly which events require more browser memory than others.",
         "When you're using timeline, remember to use this 'clear' button and to start recording before you load the page, depending on what you want to capture.",
         "You'll notice that when you record JS events, clicking on the title or 'function call' on the left will take you to the document and line of that function using the resource panel.",
-        "Check out more in-depth documentation here: developers.google.com/web/tools/profile-performance/evaluate-performance/timeline-tool"
+        "Check out more in-depth documentation here: <a href='http://developers.google.com/web/tools/profile-performance/evaluate-performance/timeline-tool' target='_blank'>developers.google.com/web/tools/profile-performance/evaluate-performance/timeline-tool</a>"
       ],
       "challengeSeed": [
         "137188786"
@@ -160,7 +160,7 @@
         "Todo esto te ayudará a entender mejor lo que está pasando en el navegador, en particular cuáles eventos requieren más memoria del navegador.",
         "Cuando uses la línea de tiempo, recuerda que debes utilizar el botón 'limpiar' (clear) para iniciar la grabación y antes de cargar la página, dependiendo de lo que desees capturar.",
         "Te darás cuenta de que cuando grabas eventos JS, al pulsar en el título o en una 'llamada a una función' al lado izquierdo, te llevará al documento y a la línea de esa función en el panel de recursos. ",
-        "Revisa documentación más detallada aquí: developers.google.com/web/tools/profile-performance/evaluate-performance/timeline-tool"
+        "Revisa documentación más detallada aquí: <a href='http://developers.google.com/web/tools/profile-performance/evaluate-performance/timeline-tool' target='_blank'>developers.google.com/web/tools/profile-performance/evaluate-performance/timeline-tool</a>"
       ],
       "titleEs": "Herramientas de desarrollo de Chrome: Línea de tiempo"
     },
@@ -172,7 +172,7 @@
         "There are three types of profiles you can collect: CPU profile, HEAP snapshot, and HEAP profile. HEAP profiles have more to do with memory usage, while a CPU profile has more to do with JavaScript performance.",
         "A profiler called V8 is used while your code runs to pinpoint what in the JavaScript takes the most time, making it easy to optimize your code.",
         "Each of these profiles can be viewed on the left, and you can take multiple profiles of each. Overall, the profiles tab is helpful when optimizing code.",
-        "Check out more in-depth documentation here: developers.google.com/web/tools/profile-performance/rendering-tools/js-execution"
+        "Check out more in-depth documentation here: <a href='http://developers.google.com/web/tools/profile-performance/rendering-tools/js-execution' target='_blank'>developers.google.com/web/tools/profile-performance/rendering-tools/js-execution</a>"
       ],
       "challengeSeed": [
         "137189330"
@@ -195,7 +195,7 @@
         "Hay tres tipos de perfiles que se pueden recolectar: el perfil de la CPU, instantáneas de la memoria con estructura montón (Heap), y el perfil de la memoria con estructura montón. Los perfiles de memoria en estructura montón tienen más que ver con el uso de memoria, mientras que un perfil de la CPU tiene más que ver con el rendimiento de JavaScript. ",
         "Un perfilador llamado V8 se usa mientras se ejecuta el código para identificar lo que en el JavaScript toma mucho tiempo, facilitándote de esta forma optimizar tu código.",
         "Cada uno de estos perfiles se puede ver a la izquierda, y se puede tomar múltiples perfiles de cada uno. En general, la pestaña de perfiles es muy útil cuando deseas optimizar tu código. ",
-        "Revisa documentación más detallada aquí: developers.google.com/web/tools/profile-performance/rendering-tools/js-execution"
+        "Revisa documentación más detallada aquí: <a href='http://developers.google.com/web/tools/profile-performance/rendering-tools/js-execution' target='_blank'>developers.google.com/web/tools/profile-performance/rendering-tools/js-execution</a>"
       ],
       "titleEs": "Herramientas de desarrollo de Chrome: Perfiles"
     },
@@ -206,7 +206,7 @@
         "The Resources panel lets you inspect resources that are loaded in the inspected page including IndexedDB or Web SQL databases, local and session storage, cookies, Application Cache, images, fonts, and style sheets.",
         "You can view and edit all of this information within the browser.",
         "As you get into more advanced web building, play around with the resources panel and see how it can help you understand the requirements of your app and page in real time.",
-        "Check out more in-depth documentation here: developers.google.com/web/tools/iterate/manage-data/index"
+        "Check out more in-depth documentation here: <a href='http://developers.google.com/web/tools/iterate/manage-data/index' target='_blank'>developers.google.com/web/tools/iterate/manage-data/index</a>"
       ],
       "challengeSeed": [
         "137193676"
@@ -223,7 +223,7 @@
         "El panel de Recursos te permite inspeccionar los recursos que se cargan en la página, incluyendo IndexedDB o bases de datos SQL Web, almacenamiento local y de sesión, las galletas (cookies), memoria caché de aplicaciones, imágenes, fuentes y hojas de estilo.",
         "Puedes ver y editar toda esta información dentro del navegador.",
         "A medida que vayas construyendo aplicaciones web más avanzadas, juega con el panel de recursos y verás cómo te ayudará a entender los requisitos de tu aplicación y de tu página en tiempo real.",
-        "Revisa documentación más detallada aquí: developers.google.com/web/tools/iterate/manage-data/index"
+        "Revisa documentación más detallada aquí: <a href='http://developers.google.com/web/tools/iterate/manage-data/index' target='_blank'>developers.google.com/web/tools/iterate/manage-data/index</a>"
       ],
       "titleEs": "Herramientas de desarrollo de Chrome: Recursos"
     },
@@ -274,7 +274,7 @@
         "You should know that messages stack up, and you can clear them by typing and entering 'clear()'. You can also save the log by selecting 'Preserve Log'.",
         "There are different commands that will log differently, like console.log() for basic logging, console.error() & console.warn() for 'eye catching stuff'.",
         "The console can track exceptions, which basically means when something goes wrong. It can even pause the code during those exceptions, a function that you might remember from the 'Source' tab.",
-        "Check out more in-depth documentation here: developers.google.com/web/tools/javascript/console/"
+        "Check out more in-depth documentation here: <a href='http://developers.google.com/web/tools/javascript/console/' target='_blank'>developers.google.com/web/tools/javascript/console/</a>"
       ],
       "challengeSeed": [
         "137194773"
@@ -299,7 +299,7 @@
         "Debes saber que los mensajes se apilan y que puedes limpiarlos escribiendo <code>clear()</code>. También puedes guardar la bitácora seleccionando 'Preserve Log'. ",
         "Hay diferentes órdenes que registrarán en bitácoras de manera diferente, como console.log() para registrar información básica, console.error() y console.warn() para registrar en bitácoras 'información llamativa'.",
         "La consola puede realizar un seguimiento de excepciones, que básicamente registra cuando algo sale mal. Puede incluso hacer una pausa en el código durante esas excepciones, función que posiblemente recuerdes de la pestaña 'Fuente'. ",
-        "Revisa documentación más detallada aquí: developers.google.com/web/tools/javascript/console/"
+        "Revisa documentación más detallada aquí: <a href='http://developers.google.com/web/tools/javascript/console/' target='_blank'>developers.google.com/web/tools/javascript/console/</a>"
       ],
       "titleEs": "Herramientas de desarrollo de Chrome: Consola"
     },
@@ -308,7 +308,7 @@
       "title": "Chrome Dev Tools: Summary",
       "description": [
         "1.) Chrome Dev Tools are awesome, and the more you can dive in and try to use them, the faster your skill level will grow.",
-        "2.) Use the documentation, even if you've never read documentation before: developers.google.com/web/tools/chrome-devtools/",
+        "2.) Use the documentation, even if you've never read documentation before: <a href='http://developers.google.com/web/tools/chrome-devtools/' target='_blank'>developers.google.com/web/tools/chrome-devtools/</a>",
         "3.) Once you start to get comfortable in one tab, stretch yourself. Working effectively with all of the tabs will serve you exponentially more than sticking in your comfort zone."
       ],
       "challengeSeed": [
@@ -324,7 +324,7 @@
       "challengeType": 6,
       "descriptionEs": [
         ", Las herramientas de desarrollo de Chrome son impresionantes, y cuanto más te puedas sumergir y tratar de utilizarlas, más rápido aumentará tu nivel. ",
-        ", Utiliza la documentación, incluso si nunca has leído documentación antes: developers.google.com/web/tools/chrome-devtools/ ",
+        ", Utiliza la documentación, incluso si nunca has leído documentación antes: <a href='http://developers.google.com/web/tools/chrome-devtools/' target='_blank'>developers.google.com/web/tools/chrome-devtools/</a> ",
         ", Una vez que comiences a sentirte cómodo en una pestaña, rétate aprendiendo a usar una diferente. Trabajar eficazmente con todas las pestañas te servirá exponencialmente más que pegarte en tu zona de confort."
       ],
       "titleEs": "Herramientas de desarrollo de Chrome: Resumen"
diff --git a/seed/challenges/04-video-challenges/computer-basics.json b/seed/challenges/04-video-challenges/computer-basics.json
index 37e60e7..758b91b 100644
--- a/seed/challenges/04-video-challenges/computer-basics.json
+++ b/seed/challenges/04-video-challenges/computer-basics.json
@@ -615,7 +615,7 @@
       "title": "Computer Basics: How the Internet Works",
       "description": [
         "This is a brief and basic overview of how the internet works.",
-        "For a more in-depth explanation, check out web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm",
+        "For a more in-depth explanation, check out <a href='http://web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm' target='_blank'>web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm</a>.",
         "Let's talk a little more about how the internet works.",
         "We've already established that every device and router on the internet has its own IP address, which is assigned based on location.",
         "Using these IP addresses, your device can talk to your modem, then to a router, which is set up by a web service.",
@@ -626,7 +626,7 @@
         "It's really amazing.",
         "What I want you take away from this video is that your device, since it has an IP address, can send out a request for information, and that information will get back to your device via servers and routers that comprise the internet.",
         "Now, this explanation is really quite basic.",
-        "For more information, check out web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm."
+        "For more information, check out <a href='http://web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm' target='_blank'>web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm</a>."
       ],
       "challengeSeed": [
         "132548579"
@@ -646,7 +646,7 @@
       "challengeType": 6,
       "descriptionEs": [
         "Esta es una descripción breve y descripción de cómo funciona Internet.",
-        "Para una explicación más en profundidad, dale un vistazo a web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm",
+        "Para una explicación más en profundidad, dale un vistazo a <a href='http://web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm' target='_blank'>web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm</a>.",
         "Vamos a hablar un poco más acerca de cómo funciona el Internet.",
         "Ya hemos establecido que todos los dispositivos y enrutadores en Internet tienen su propia dirección IP, que se asigna en función de la ubicación.",
         "Usando estas direcciones IP, tu dispositivo puede hablar con tu módem, y después con un enrutador, el cual debió ser configurado por ejemplo con un servicio web con el que te intentas conectar.",
@@ -657,7 +657,7 @@
         "Es realmente increíble.",
         "Lo que quiero que te lleves de este video es que tu dispositivo, que tiene una dirección IP, puede enviar una petición de información, y que esa información regresará a tu dispositivo por medio de servidores y enrutadores que componen el Internet.",
         "Ahora bien, esta explicación es realmente básica.",
-        "Para obtener más información, echa un vistazo a web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm."
+        "Para obtener más información, echa un vistazo a <a href='http://web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm' target='_blank'>web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm</a>."
       ],
       "titleEs": "Fundamentos básicos del computador: ¿Cómo funciona Internet"
     },
@@ -706,7 +706,7 @@
         "CDNs accomplish this by providing effective routes between their own servers that can fast-track users to their destination, or if its faster and/or cheaper, another copy of that website destination that is being hosted on another server.",
         "This concept and type of service is not new, but is becoming more popular as the internet grows.",
         "Websites contract and pay a CDN service, who in turn pays an internet provider to use their servers for their data.",
-        "An example of CDNs are Google's Hosted Libraries. -- developers.google.com/speed/libraries/#jquery",
+        "An example of CDNs are Google's Hosted Libraries. -- <a href='http://developers.google.com/speed/libraries/#jquery' target='_blank'>developers.google.com/speed/libraries/#jquery</a>",
         "Google hosts these libraries so that your users can load them into your own site much more quickly than if you host them yourself.",
         "There's a chance the user's browser is even storing a cached version from visiting a previous page, making the process even quicker. If you aren't familiar with the term 'cache', don't worry, we'll cover that in future videos.",
         "As a user, you probably use CDNs all the time without realizing it.",
@@ -735,7 +735,7 @@
         "Las RDC logran esto proporcionando rutas eficaces entre sus propios servidores que pueden encaminar rápidamente a los usuarios a sus destinos, o si resulta más rápido o económico, a otra copia del sitio web destino, la cual se aloja en otro servidor.",
         "Este concepto y tipo de servicio no es nuevo, pero es cada vez más popular a medida que crece Internet.",
         "Los sitios web contratan y pagan un servicio a las RDC, quienes a su vez le pagan a proveedores de Internet para utilizar sus servidores y almacenar en estos sus datos.",
-        "Un ejemplo de CDN son las Bibliotecas alojadas de Google - developers.google.com/speed/libraries/#jquery",
+        "Un ejemplo de CDN son las Bibliotecas alojadas de Google - <a href='http://developers.google.com/speed/libraries/#jquery' target='_blank'>developers.google.com/speed/libraries/#jquery</a>",
         "Google organiza estas bibliotecas para que tus usuarios puedan cargarlas en tus propios sitio web mucho más rápido que si las alojaras tu mismo.",
         "Hay incluso una posibilidad de que el navegador del usuario le presente  una copia en `caché' (almacenamiento local temporal) realizada durante una visita previa, haciendo que el proceso sea aún más rápido. Si no estás familiarizado con el término 'caché', no te preocupes, vamos a cubrirlo en videos futuros. ",
         "Como usuario, es probable que utilices RDC  todo el tiempo sin darte cuenta.",
diff --git a/seed/challenges/04-video-challenges/dom.json b/seed/challenges/04-video-challenges/dom.json
index 04d2d67..ecdcdf0 100644
--- a/seed/challenges/04-video-challenges/dom.json
+++ b/seed/challenges/04-video-challenges/dom.json
@@ -48,7 +48,7 @@
         "If you've ever seen a webpage that loads the text first, then after a bit loads the formatting and style, you've seen a page that didn't have the links to style and script in the correct places.",
         "This all has to do with how the browser decides it's loaded enough information to display. There's an event called 'DOMContentLoaded', and once that event happens, whatever is loaded will be displayed.",
         "The DOM will tell the browser it's ready once the HTML is loaded, and sometimes the CSS and JS hasn't caught up. However, if you place the CSS in the header and the JS in the footer, you can ensure that all content will be loaded before the DOM triggers the 'DOMContentLoaded' event, the event that shows the user your content.",
-        "This is a simple explanation, as most of these videos are. For more information, I really liked this resource: ablogaboutcode.com/2011/06/14/how-javascript-loading-works-domcontentloaded-and-onload/"
+        "This is a simple explanation, as most of these videos are. For more information, I really liked this resource: <a href='http://ablogaboutcode.com/2011/06/14/how-javascript-loading-works-domcontentloaded-and-onload' target='_blank'>ablogaboutcode.com/2011/06/14/how-javascript-loading-works-domcontentloaded-and-onload</a>"
       ],
       "challengeSeed": [
         "139879984"
@@ -71,7 +71,7 @@
         "Si alguna vez has visto una página web que carga el texto primero, y después de un momento carga el formato y el estilo, entonces era una página que no tenía los enlaces hacia el estilo y el código en los lugares correctos.",
         "Esto tiene que ver con la forma en que el navegador decide si ha cargado suficiente información para mostrar. Hay un evento llamado 'DOMContentLoaded', y una vez que ese evento ocurre, lo que sea que se haya cargado hasta entonces será mostrado.",
         "El DOM le dirá al navegador que está listo una vez que el código HTML ha sido cargado, y a veces el CSS y JS no se han alcanzado a cargar. Si pones el CSS en el encabezado y el JS al pie de página, puedes estar seguro que todo el contenido será cargado antes que el DOM desencadene el evento 'DOMContentLoaded', el cual muestra tu contenido al usuario.",
-        "Esta es una explicación simplificada, al igual que la que encontrarás en el resto de estos videos. Si quieres más información, creo que el siguiente enlace es de bastante ayuda: ablogaboutcode.com/2011/06/14/how-javascript-loading-works-domcontentloaded-and-onload/"
+        "Esta es una explicación simplificada, al igual que la que encontrarás en el resto de estos videos. Si quieres más información, creo que el siguiente enlace es de bastante ayuda: <a href='http://ablogaboutcode.com/2011/06/14/how-javascript-loading-works-domcontentloaded-and-onload' target='_blank'>ablogaboutcode.com/2011/06/14/how-javascript-loading-works-domcontentloaded-and-onload</a>"
       ],
       "titleEs": "El DOM: Estilo en el encabezado, código al pie de página"
     }
diff --git a/seed/challenges/04-video-challenges/jslingo.json b/seed/challenges/04-video-challenges/jslingo.json
index 465df0a..5568909 100644
--- a/seed/challenges/04-video-challenges/jslingo.json
+++ b/seed/challenges/04-video-challenges/jslingo.json
@@ -8,7 +8,7 @@
       "title": "JavaScript Lingo: MDN and Documentation",
       "description": [
         "This is a basic intro to MDN and the concept of documentation.",
-        "MDN, Mozilla Developer Network, is a fantastic open source collaboration that documents not only JavaScript, but many other languages and topics. If you haven't heard of them, you should check them out now. I get lots of information from developer.mozilla.org/en-US/docs/Web/JavaScript",
+        "MDN, Mozilla Developer Network, is a fantastic open source collaboration that documents not only JavaScript, but many other languages and topics. If you haven't heard of them, you should check them out now. I get lots of information from <a href='http://developer.mozilla.org/en-US/docs/Web/JavaScript' target='_blank'>developer.mozilla.org/en-US/docs/Web/JavaScript</a>",
         "When I say documentation, I am talking about information that is provided about the product to its users. The documentation at MDN isn't necessarily written by the people behind JS. Brendan Eich created JS in 1995, but it's now a community driven project that continues to grow.",
         "As you continue to learn JavaScript, jQuery, and pretty much any languages or services for development or programming, documentation is your friend. ",
         "The faster you get comfortable reading and referencing documentation, the faster you will grow as a developer.",
@@ -32,7 +32,7 @@
       "challengeType": 6,
       "descriptionEs": [
         "Esta es una introducción básica a MDN y el concepto de la documentación.",
-        "MDN, Mozilla Developer Network, es una fantástica colaboración de fuentes abiertas que documenta no sólo JavaScript, sino muchos otros lenguajes y temas. Si no has oído hablar de ellos, deberías darles un vistazo ahora. Personalmente obtengo mucha información de developer.mozilla.org/en-US/docs/Web/JavaScript ",
+        "MDN, Mozilla Developer Network, es una fantástica colaboración de fuentes abiertas que documenta no sólo JavaScript, sino muchos otros lenguajes y temas. Si no has oído hablar de ellos, deberías darles un vistazo ahora. Personalmente obtengo mucha información de <a href='http://developer.mozilla.org/es/docs/Web/JavaScript' target='_blank'>developer.mozilla.org/es/docs/Web/JavaScript</a>",
         "Cuando digo documentación, estoy hablando acerca de la información que se proporciona sobre el producto a sus usuarios. La documentación de MDN no necesariamente está escrita por la gente detrás de JS. Brendan Eich creó JS en 1995, pero hoy en día el proyecto continúa creciendo gracias a un esfuerzo comunitario. ",
         "A medida que continúes aprendiendo JavaScript, jQuery, y prácticamente cualquier otro lenguaje o servicio para desarrollo o programación, la documentación será tu amiga.",
         "Cuanto más rápido te sientas cómodo leyendo y referenciando documentación, más rápido crecerás como desarrollador.",
@@ -186,7 +186,7 @@
       "description": [
         "Methods and functions are ways you can manipulate variables or other sets of information.",
         "Methods are built in to JavaScript, and you will become more familiar with these as you write functions for the bonfires.",
-        "I'd suggest looking through the MDN (Mozilla Developer Network that we discussed in the first video) to familiarize yourself with the sheer amount and general potential for the methods that exist. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Methods_Index",
+        "I'd suggest looking through the MDN (Mozilla Developer Network that we discussed in the first video) to familiarize yourself with the sheer amount and general potential for the methods that exist. <a href='http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Methods_Index' target='_blank'>developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Methods_Index</a>",
         "Examples include '.split(' ')', which will turn a string into an array and can do so in many different ways. Methods are powerful - many times when you want your script to do something, there's a method for that.",
         "Functions, like variables, are something you define and create.",
         "During your algorithm practice at Free Code Camp, you will create functions that take a certain piece of information and manipulate it in whatever way you choose.",
@@ -211,7 +211,7 @@
       "descriptionEs": [
         "Métodos y funciones son formas con las que puedes modificar variables u otros conjuntos de información.",
         "Los métodos están integrados en JavaScript, y te familiarizarás con estos cuando realices los desafíos sobre algoritmos.",
-        "Me gustaría sugerirte dar un vistazo a MDN (Mozilla Developer Network que discutimos en el primer video) para que te familiarices con la cantidad y el potencial general de los métodos que existen. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Methods_Index",
+        "Me gustaría sugerirte dar un vistazo a MDN (Mozilla Developer Network que discutimos en el primer video) para que te familiarices con la cantidad y el potencial general de los métodos que existen. <a href='http://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Methods_Index' target='_blank'>developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Methods_Index</a>",
         "Los ejemplos incluyen <code>.split (' ')</code>, que convertirá una cadena en un vector y puede hacerlo de muchas maneras diferentes. Los métodos son de gran alcance - muchas veces cuando quieres que tu programa haga algo, ya habrá un método para eso.",
         "Las funciones, al igual que las variables, son algo que tu defines y creas.",
         "Durante tu práctica con algoritmos en FreeCodeCamp, vas a crear funciones que reciben una determinada pieza de información y la manipulan de la forma que elijas.",

From e9683bb318645ec7289eb7d78478d47818853bbb Mon Sep 17 00:00:00 2001
From: Eric Leung <eric@erictleung.com>
Date: Tue, 15 Mar 2016 23:54:56 -0700
Subject: [PATCH 15/33] Make Confirm the Ending function name unique

- Change `end` function name to `confirmEnding`
- Add clarity on arguments used in function
---
 .../basic-bonfires.json                            | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/seed/challenges/01-front-end-development-certification/basic-bonfires.json b/seed/challenges/01-front-end-development-certification/basic-bonfires.json
index eb11c40..8a77de4 100644
--- a/seed/challenges/01-front-end-development-certification/basic-bonfires.json
+++ b/seed/challenges/01-front-end-development-certification/basic-bonfires.json
@@ -321,31 +321,31 @@
       "id": "acda2fb1324d9b0fa741e6b5",
       "title": "Confirm the Ending",
       "description": [
-        "Check if a string (first argument) ends with the given target string (second argument).",
+        "Check if a string (first argument, <code>str</code>) ends with the given target string (second argument, <code>target</code>).",
         "Remember to use <a href=\"//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck\" target=\"_blank\">Read-Search-Ask</a> if you get stuck. Write your own code."
       ],
       "challengeSeed": [
-        "function end(str, target) {",
+        "function confirmEnding(str, target) {",
         "  // \"Never give up and good luck will find you.\"",
         "  // -- Falcor",
         "  return str;",
         "}",
         "",
-        "end(\"Bastian\", \"n\");"
+        "confirmEnding(\"Bastian\", \"n\");"
       ],
       "tests": [
-        "assert(end(\"Bastian\", \"n\") === true, 'message: <code>end(\"Bastian\", \"n\")</code> should return true.');",
-        "assert(end(\"Connor\", \"n\") === false, 'message: <code>end(\"Connor\", \"n\")</code> should return false.');",
-        "assert(end(\"Walking on water and developing software from a specification are easy if both are frozen\", \"specification\") === false, 'message: <code>end(\"Walking on water and developing software from a specification are easy if both are frozen\"&#44; \"specification\"&#41;</code> should return false.');",
-        "assert(end(\"He has to give me a new name\", \"name\") === true, 'message: <code>end(\"He has to give me a new name\", \"name\")</code> should return true.');",
-        "assert(end(\"He has to give me a new name\", \"me\") === true, 'message: <code>end(\"He has to give me a new name\", \"me\")</code> should return true.');",
-        "assert(end(\"He has to give me a new name\", \"na\") === false, 'message: <code>end(\"He has to give me a new name\", \"na\")</code> should return false.');",
-        "assert(end(\"If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing\", \"mountain\") === false, 'message: <code>end(\"If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing\", \"mountain\")</code> should return false.');"
+        "assert(confirmEnding(\"Bastian\", \"n\") === true, 'message: <code>confirmEnding(\"Bastian\", \"n\")</code> should return true.');",
+        "assert(confirmEnding(\"Connor\", \"n\") === false, 'message: <code>confirmEnding(\"Connor\", \"n\")</code> should return false.');",
+        "assert(confirmEnding(\"Walking on water and developing software from a specification are easy if both are frozen\", \"specification\") === false, 'message: <code>confirmEnding(\"Walking on water and developing software from a specification are easy if both are frozen\"&#44; \"specification\"&#41;</code> should return false.');",
+        "assert(confirmEnding(\"He has to give me a new name\", \"name\") === true, 'message: <code>confirmEnding(\"He has to give me a new name\", \"name\")</code> should return true.');",
+        "assert(confirmEnding(\"He has to give me a new name\", \"me\") === true, 'message: <code>confirmEnding(\"He has to give me a new name\", \"me\")</code> should return true.');",
+        "assert(confirmEnding(\"He has to give me a new name\", \"na\") === false, 'message: <code>confirmEnding(\"He has to give me a new name\", \"na\")</code> should return false.');",
+        "assert(confirmEnding(\"If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing\", \"mountain\") === false, 'message: <code>confirmEnding(\"If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing\", \"mountain\")</code> should return false.');"
       ],
       "type": "bonfire",
       "isRequired": true,
       "solutions": [
-        "function end(str, target) {\n  return str.substring(str.length-target.length) === target;\n};\n"
+        "function confirmEnding(str, target) {\n  return str.substring(str.length-target.length) === target;\n};\n"
       ],
       "MDNlinks": [
         "String.substr()"

From 69ee345d5cd9625f6464bdb9209dc267b2151cb2 Mon Sep 17 00:00:00 2001
From: Quincy Larson <michaelqlarson@gmail.com>
Date: Wed, 16 Mar 2016 00:27:19 -0700
Subject: [PATCH 16/33] incorporate feedback

---
 .../resources/how-nonprofit-projects-work.jade     | 102 ++++++++++++---------
 1 file changed, 58 insertions(+), 44 deletions(-)

diff --git a/server/views/resources/how-nonprofit-projects-work.jade b/server/views/resources/how-nonprofit-projects-work.jade
index e781072..8c1f890 100644
--- a/server/views/resources/how-nonprofit-projects-work.jade
+++ b/server/views/resources/how-nonprofit-projects-work.jade
@@ -1,47 +1,61 @@
 extends ../layout
 block content
     .col-xs-12.col-sm-8.col-sm-offset-2.col-md-6.col-md-offset-3
-        html.
-            <h2 class='text-center'>How our Nonprofit Projects Work</h2>
-            <hr>
-            <p>Building nonprofit projects is the main way that our campers learn full stack JavaScript and agile software development. You’ll begin this process once you’ve earned your Front End Development, Data Visualization, and Back End Development Certifications.</p>
-            <h3>Starting with the end in mind</h3>
-            <p>Our goal at Free Code Camp is to help you land a job as a junior software developer (or, if you prefer, a ‘pivot job’ that leads your current career in a more technical direction).</p>
-            <p>You’ll continue to work on nonprofit projects until you’ve built a sufficiently impressive portfolio and references to start your job search. Your portfolio will ultimately have four nonprofit projects. We estimate that the 800 hours of nonprofit projects and 80 hours of interview prep you’re going to complete, in addition to the 1200 hours of challenges you’ve already completed by this point, will be more than enough to qualify you for your first coding job.</p>
-            <h3>Your first Nonprofit Project</h3>
-            <p>We generally scope Nonprofit Projects to 200 hours, or about 10 weeks at 20 hours per week of development per camper. These are only rough estimates. You’ll only work on one project at a time.</p>
-            <p>You will choose another camper to partner with on this projects. You should choose your pair based on:</p>
-            <p>Your estimated time commitments (10, 20 or 40 hours per week) Your time zones (Will you be able to pair program together?) Prior coding experience (we’d like both campers to be able to contribute equally) Do not take age or gender into account. This will provide you with valuable experience in meshing with diverse teams, which is a reality of the contemporary workplace.</p>
-            <p>Then, you’ll email <a href="mailto:team@freecodecamp.com">team@freecodecamp.com</a> with:</p>
-            <ol>
-                  <li>Names</li>
-                  <li>Contact information</li>
-                  <li>Links to each of your Code Portfolios</li>
-                  <li>Timezones</li>
-                  <li>Hours pledged per week</li>
-            </ol>
-            <p>We’ll send you a list of 3 nonprofit projects that need your help, and together you will choose one to begin work on. While you do this, our team will code review each of your Code Portfolios to ensure all user stories have been completed, and that there are no signs of academic dishonesty.</p>
-            <h3>Beginning the Project</h3>
-            <p>We’ll set an initial meeting with representatives from Free Code Camp, the two campers, and the stakeholder. If the stakeholder and both campers shows up promptly, and seem enthusiastic and professional, we’ll start the project. This lengthy process serves an important purpose: it reduces the likelihood that any of our campers or stakeholders will waste their precious time.</p>
-            <h3>Nonprofit Stakeholders</h3>
-            <p>Each nonprofit project was submitted by a nonprofit. A representative from this nonprofit has agreed to serve as a “stakeholder” - an authorative person who understands the organization and its needs for this particular project.</p>
-            <p>Stakeholders have a deep understanding of their organizations’ needs. Campers will work with them to figure out the best solutions to these needs.</p>
-            <p>When you and your pair partner first speak with your nonprofit stakeholder, you’ll:</p>
-            <p>talk at length to better understand their needs. create a new Trello board and use it to prioritize what needs to be built. and establish deadlines based on your weekly time commitment, and how long you think each task will take. Ideally, we’ll scope each project to be completed in 10 sprints. It’s notoriously difficult to estimate how long building software projects will take, so feel free to ask our volunteer team for help.</p>
-            <p>You’ll continue to meet with your stakeholder weekly using the conference software GoToMeeting. You will also correspond with the team on the project’s Trello board.</p>
-            <p>Getting “blocked” on a task can take away your sense of forward momentum, so be sure to proactively seek answers to any ambiguities you encounter.</p>
-            <p>Ultimately, the project will be considered complete once both the stakeholder’s needs have been met, and you and your pair are happy with the project. Then you can add it to your portfolio!</p>
-            <h3>Working with your Pair</h3>
-            <p>You and your pair will pair program (code together on the same computer virtually) about half of the time, and work independently the other half of the time.</p>
-            <p>Here are our recommended ways of collaborating:</p>
-            <p>Gitter has robust private messaging functionality. It’s the main way our team communicates, and we recommend it over email. Trello is great for managing projects. Work with your stakeholder to create Trello cards, and update these cards regularly as you make progress on them. Screen Hero or Team Viewer - These are the ideal way to pair program. Tools like TMUX are good, but difficult to use. We discourage you from using screen sharing tools where only one person has control of the keyboard and mouse - that isn’t real pair programming. Write clear and readable code, commit messages, branch names, and pull request messages.</p>
-            <h3>Hosting Apps</h3>
-            <p>Unless your stakeholder has an existing modern host (AWS, Digital Ocean), you’ll need to transition them over to a new platform. We believe Heroku is the best choice for a vast majority of web projects. It’s free, easy to use, and has both browser and command line interfaces. It’s owned by Salesforce and used by a ton of companies, so it’s accountable and unlikely to go away.</p>
-            <p>If you need help convincing your stakeholder that Heroku is the ideal platform, we’ll be happy to talk with them.</p>
-            <h3>Maintaining Apps</h3>
-            <p>Once you complete a nonprofit project, your obligation to its stakeholder is finished. Your goal is to leave behind a well documented solution that can be easily maintained by a contract JavaScript developer (or even a less-technical “super user”).</p>
-            <p>While you will no longer need to help with feature development, we encourage you to consider helping your stakeholder with occasional patches down the road. After all, this project will be an important piece of your portfolio, and you’ll want it to remain in good shape for curious future employers.</p>
-            <h3>Pledging to Finish the Project</h3>
-            <p>Your nonprofit stakeholder, your pair partner, and our volunteer team are all counting on you to finish your nonprofit project. If you walk away from an unfinished nonprofit project, you’ll become ineligible to ever be assigned another one.</p>
-            <p>To confirm that you understand the seriousness of this commitment, we require that all campers sign this pledge before starting on their nonprofit projects.</p>
-            <p>There will likely be times of confusion or frustration. This is normal in software development. The most important thing is that you do not give up and instead persevere through these setbacks. As Steve Jobs famously said, “Real artists ship.” And you are going to ship one successful nonprofit project after another until you feel ready to take the next step in your promising career.</p>
+        h2.text-center How our Nonprofit Projects Work
+        hr
+        p Building nonprofit projects is the main way that our campers learn full stack JavaScript and agile software development. You’ll begin this process once you’ve earned your Front End Development, Data Visualization, and Back End Development certifications.
+        h3 Starting with the end in mind
+        p Our goal at Free Code Camp is to help you land a job as a software developer or get promoted in your current company to a more technical role.
+        p You’ll continue to work on nonprofit projects until you’ve built a sufficiently impressive portfolio and references to start your job search. Your portfolio will ultimately have four nonprofit projects. We estimate that the 800 hours of nonprofit projects and 80 hours of interview prep you’re going to complete, in addition to the 1,200 hours of challenges you’ve already completed by this point, will be more than enough to qualify you for your first coding job.
+        h3 Your first Nonprofit Project
+        p We generally scope Nonprofit Projects to 200 hours, or about 10 weeks at 20 hours per week of development per camper. These are only rough estimates. You’ll only work on one project at a time.
+        p You will choose another camper to partner with on this projects. You should choose your them based on:
+        ol
+            li How many hours you can pledge (around 10, 20, or 40 hours per week)
+            li Your time zones (Will you be able to pair program together?)
+            li Prior coding experience (we’d like both campers to be able to contribute equally)
+        p We don't take age or gender into account. This will provide you with valuable experience in meshing with diverse teams, which is a reality of the contemporary workplace.
+        p Then, you’ll email&thinsp;
+            a(href="mailto:team@freecodecamp.com") team@freecodecamp.com
+            |&thinsp; with:
+        ol
+              li Names
+              li Contact information
+              li Links to each of your Free Code Camp code portfolios
+              li Timezones
+              li Hours pledged per week
+        p We’ll send you a list of 3 nonprofit projects that need your help, and together you will choose one to begin work on. While you do this, our team will code review each of your code portfolios to ensure that all user stories have been completed, and that there are no signs of academic dishonesty.
+        h3 Beginning the Project
+        p We’ll set an initial meeting with representatives from Free Code Camp, the two campers, and the stakeholder. If the stakeholder and both campers show up promptly, and seem enthusiastic and professional, we’ll start the project. This lengthy process serves an important purpose: it reduces the likelihood that any of our campers or stakeholders will waste their precious time.
+        h3 Nonprofit Stakeholders
+        p Each nonprofit project was submitted by a nonprofit. A representative from this nonprofit has agreed to serve as a "stakeholder" - an authorative person who understands the organization and its needs for this particular project.
+        p Stakeholders have a deep understanding of their organizations’ needs. Campers will work with them to figure out the best solutions to these needs.
+        p When you and your pair partner first speak with your nonprofit stakeholder, you’ll:
+        ol
+            li talk at length to better understand their needs
+            li create a new Trello board and use it to prioritize what needs to be built
+            li establish deadlines based on your weekly time commitment, and how long you think each task will take
+        p Ideally, we’ll scope each project to be completed in 10 sprints. It’s notoriously difficult to estimate how long building software projects will take, so feel free to ask our volunteer team for help.
+        p You’ll continue to meet with your stakeholder weekly using the conference software GoToMeeting. You will also correspond with the team on the project’s Trello board.
+        p Getting "blocked" on a task can take away your sense of forward momentum, so be sure to proactively seek answers to any ambiguities you encounter.
+        p Ultimately, the project will be considered complete once the stakeholder’s needs have been met, and you and your partner are happy with the project. Then you can add it to your portfolio!
+        h3 Working with your Partner
+        p You and your partner will pair program (code together on the same computer virtually) about half of the time, and work independently the other half of the time.
+        p Here are our recommended ways of collaborating:
+        ol
+            li Gitter has robust private messaging functionality. It’s the main way our team communicates, and we recommend it over email.
+            li Trello is great for managing projects. Work with your stakeholder to create Trello cards, and update these cards regularly as you make progress on them.
+            li Screen Hero or Team Viewer - These are the ideal way to pair program. Tools like TMUX are good, but difficult to use. We discourage you from using screen sharing tools where only one person has control of the keyboard and mouse - that isn’t real pair programming.
+            li Write clear and readable code, commit messages, branch names, and pull request messages.
+        h3 Hosting Apps
+        p Unless your stakeholder has an existing modern host (AWS, Digital Ocean), you’ll need to transition them over to a new platform. We believe Heroku is the best choice for a vast majority of web projects. It’s free for hosting non-production apps, easy to use, and has both browser and command line interfaces. It’s owned by Salesforce and used by a ton of companies, so it’s accountable and unlikely to go away.
+        p If you need help convincing your stakeholder that Heroku is the ideal platform, we’ll be happy to talk with them.
+        h3 Maintaining Apps
+        p Once you complete a nonprofit project, your obligation to its stakeholder is finished. Your goal is to leave behind a well documented solution that can be easily maintained by a contract JavaScript developer (or even a less-technical "super user").
+        p While you will no longer need to help with feature development, we encourage you to consider helping your stakeholder with occasional patches down the road. After all, this project will be an important piece of your portfolio, and you’ll want it to remain in good shape for curious future employers.
+        h3 Pledging to Finish the Project
+        p Your nonprofit stakeholder, your partner, and our volunteer team are all counting on you to finish your nonprofit project. If you walk away from an unfinished nonprofit project, you’ll become ineligible to ever be assigned another one.
+        p To confirm that you understand the seriousness of this commitment, we require that all campers sign&thinsp;
+            a(href='http://goo.gl/forms/ZMn96z2QqY' target='_blank') this pledge
+            | &thinsp;before starting on their nonprofit projects.
+        p There will likely be times of confusion or frustration. This is normal in software development. The most important thing is that you do not give up and instead persevere through these setbacks. As Steve Jobs famously said, "Real artists ship." And you are going to ship one successful nonprofit project after another until you feel ready to take the next step in your promising career.

From 5d4138a49512e3d954f3325ffcd7a70fef0c87ab Mon Sep 17 00:00:00 2001
From: Eric Leung <eric@erictleung.com>
Date: Sun, 13 Mar 2016 15:11:57 -0700
Subject: [PATCH 17/33] Make Inventory Update function name unique

- Change `inventory` function name to `updateInventory` in seeded code,
  solution, and tests
- Update instructions to be more clear
---
 .../advanced-bonfires.json                           | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/seed/challenges/01-front-end-development-certification/advanced-bonfires.json b/seed/challenges/01-front-end-development-certification/advanced-bonfires.json
index f997f84..362062e 100644
--- a/seed/challenges/01-front-end-development-certification/advanced-bonfires.json
+++ b/seed/challenges/01-front-end-development-certification/advanced-bonfires.json
@@ -168,11 +168,11 @@
       "id": "a56138aff60341a09ed6c480",
       "title": "Inventory Update",
       "description": [
-        "Compare and update inventory stored in a 2d array against a second 2d array of a fresh delivery. Update current inventory item quantity, and if an item cannot be found, add the new item and quantity into the inventory array in alphabetical order.",
+        "Compare and update the inventory stored in a 2D array against a second 2D array of a fresh delivery. Update the current existing inventory item quantities (in <code>arr1</code>). If an item cannot be found, add the new item and quantity into the inventory array. The returned inventory array should be in alphabetical order by item.",
         "Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> if you get stuck. Try to pair program. Write your own code."
       ],
       "challengeSeed": [
-        "function inventory(arr1, arr2) {",
+        "function updateInventory(arr1, arr2) {",
         "    // All inventory must be accounted for or you're fired!",
         "    return arr1;",
         "}",
@@ -192,18 +192,18 @@
         "    [7, \"Toothpaste\"]",
         "];",
         "",
-        "inventory(curInv, newInv);"
+        "updateInventory(curInv, newInv);"
       ],
       "solutions": [
-        "function inventory(arr1, arr2) {\n  arr2.forEach(function(item) {\n    createOrUpdate(arr1, item);\n  });\n  // All inventory must be accounted for or you're fired!\n  return arr1;\n}\n\nfunction createOrUpdate(arr1, item) {\n  var index = -1;\n  while (++index < arr1.length) {\n    if (arr1[index][1] === item[1]) {\n      arr1[index][0] += item[0];\n      return;\n    }\n    if (arr1[index][1] > item[1]) {\n      break;\n    }\n  }\n  arr1.splice(index, 0, item);\n}\n\n// Example inventory lists\nvar curInv = [\n    [21, 'Bowling Ball'],\n    [2, 'Dirty Sock'],\n    [1, 'Hair Pin'],\n    [5, 'Microphone']\n];\n\nvar newInv = [\n    [2, 'Hair Pin'],\n    [3, 'Half-Eaten Apple'],\n    [67, 'Bowling Ball'],\n    [7, 'Toothpaste']\n];\n\ninventory(curInv, newInv);\n"
+        "function updateInventory(arr1, arr2) {\n  arr2.forEach(function(item) {\n    createOrUpdate(arr1, item);\n  });\n  // All inventory must be accounted for or you're fired!\n  return arr1;\n}\n\nfunction createOrUpdate(arr1, item) {\n  var index = -1;\n  while (++index < arr1.length) {\n    if (arr1[index][1] === item[1]) {\n      arr1[index][0] += item[0];\n      return;\n    }\n    if (arr1[index][1] > item[1]) {\n      break;\n    }\n  }\n  arr1.splice(index, 0, item);\n}\n\n// Example inventory lists\nvar curInv = [\n    [21, 'Bowling Ball'],\n    [2, 'Dirty Sock'],\n    [1, 'Hair Pin'],\n    [5, 'Microphone']\n];\n\nvar newInv = [\n    [2, 'Hair Pin'],\n    [3, 'Half-Eaten Apple'],\n    [67, 'Bowling Ball'],\n    [7, 'Toothpaste']\n];\n\nupdateInventory(curInv, newInv);\n"
       ],
       "tests": [
-        "assert.isArray(inventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]]), 'message: <code>inventory()</code> should return an array.');",
-        "assert.equal(inventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]]).length, 6, 'message: <code>inventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]]).length</code> should return an array with a length of 6.');",
-        "assert.deepEqual(inventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]]), [[88, \"Bowling Ball\"], [2, \"Dirty Sock\"], [3, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [5, \"Microphone\"], [7, \"Toothpaste\"]], 'message: <code>inventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]])</code> should return <code>[[88, \"Bowling Ball\"], [2, \"Dirty Sock\"], [3, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [5, \"Microphone\"], [7, \"Toothpaste\"]]</code>.');",
-        "assert.deepEqual(inventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], []), [[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], 'message: <code>inventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], [])</code> should return <code>[[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]]</code>.');",
-        "assert.deepEqual(inventory([], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]]), [[67, \"Bowling Ball\"], [2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [7, \"Toothpaste\"]], 'message: <code>inventory([], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]])</code> should return <code>[[67, \"Bowling Ball\"], [2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [7, \"Toothpaste\"]]</code>.');",
-        "assert.deepEqual(inventory([[0, \"Bowling Ball\"], [0, \"Dirty Sock\"], [0, \"Hair Pin\"], [0, \"Microphone\"]], [[1, \"Hair Pin\"], [1, \"Half-Eaten Apple\"], [1, \"Bowling Ball\"], [1, \"Toothpaste\"]]), [[1, \"Bowling Ball\"], [0, \"Dirty Sock\"], [1, \"Hair Pin\"], [1, \"Half-Eaten Apple\"], [0, \"Microphone\"], [1, \"Toothpaste\"]], 'message: <code>inventory([[0, \"Bowling Ball\"], [0, \"Dirty Sock\"], [0, \"Hair Pin\"], [0, \"Microphone\"]], [[1, \"Hair Pin\"], [1, \"Half-Eaten Apple\"], [1, \"Bowling Ball\"], [1, \"Toothpaste\"]])</code> should return <code>[[1, \"Bowling Ball\"], [0, \"Dirty Sock\"], [1, \"Hair Pin\"], [1, \"Half-Eaten Apple\"], [0, \"Microphone\"], [1, \"Toothpaste\"]]</code>.');"
+        "assert.isArray(updateInventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]]), 'message: <code>updateInventory()</code> should return an array.');",
+        "assert.equal(updateInventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]]).length, 6, 'message: <code>updateInventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]]).length</code> should return an array with a length of 6.');",
+        "assert.deepEqual(updateInventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]]), [[88, \"Bowling Ball\"], [2, \"Dirty Sock\"], [3, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [5, \"Microphone\"], [7, \"Toothpaste\"]], 'message: <code>updateInventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]])</code> should return <code>[[88, \"Bowling Ball\"], [2, \"Dirty Sock\"], [3, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [5, \"Microphone\"], [7, \"Toothpaste\"]]</code>.');",
+        "assert.deepEqual(updateInventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], []), [[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], 'message: <code>updateInventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], [])</code> should return <code>[[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]]</code>.');",
+        "assert.deepEqual(updateInventory([], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]]), [[67, \"Bowling Ball\"], [2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [7, \"Toothpaste\"]], 'message: <code>updateInventory([], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]])</code> should return <code>[[67, \"Bowling Ball\"], [2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [7, \"Toothpaste\"]]</code>.');",
+        "assert.deepEqual(updateInventory([[0, \"Bowling Ball\"], [0, \"Dirty Sock\"], [0, \"Hair Pin\"], [0, \"Microphone\"]], [[1, \"Hair Pin\"], [1, \"Half-Eaten Apple\"], [1, \"Bowling Ball\"], [1, \"Toothpaste\"]]), [[1, \"Bowling Ball\"], [0, \"Dirty Sock\"], [1, \"Hair Pin\"], [1, \"Half-Eaten Apple\"], [0, \"Microphone\"], [1, \"Toothpaste\"]], 'message: <code>updateInventory([[0, \"Bowling Ball\"], [0, \"Dirty Sock\"], [0, \"Hair Pin\"], [0, \"Microphone\"]], [[1, \"Hair Pin\"], [1, \"Half-Eaten Apple\"], [1, \"Bowling Ball\"], [1, \"Toothpaste\"]])</code> should return <code>[[1, \"Bowling Ball\"], [0, \"Dirty Sock\"], [1, \"Hair Pin\"], [1, \"Half-Eaten Apple\"], [0, \"Microphone\"], [1, \"Toothpaste\"]]</code>.');"
       ],
       "type": "bonfire",
       "MDNlinks": [

From 6d055723a8d7c8ed7f1a797e3539ac797e9b74e3 Mon Sep 17 00:00:00 2001
From: Eric Leung <eric@erictleung.com>
Date: Wed, 16 Mar 2016 14:17:27 -0700
Subject: [PATCH 18/33] Make Repeat a String function name unique

---
 .../basic-bonfires.json                                | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/seed/challenges/01-front-end-development-certification/basic-bonfires.json b/seed/challenges/01-front-end-development-certification/basic-bonfires.json
index 8a77de4..7f7d1de 100644
--- a/seed/challenges/01-front-end-development-certification/basic-bonfires.json
+++ b/seed/challenges/01-front-end-development-certification/basic-bonfires.json
@@ -365,25 +365,25 @@
         "Remember to use <a href=\"//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck\" target=\"_blank\">Read-Search-Ask</a> if you get stuck. Write your own code."
       ],
       "challengeSeed": [
-        "function repeat(str, num) {",
+        "function repeatStringNumTimes(str, num) {",
         "  // repeat after me",
         "  return str;",
         "}",
         "",
-        "repeat(\"abc\", 3);"
+        "repeatStringNumTimes(\"abc\", 3);"
       ],
       "tests": [
-        "assert(repeat(\"*\", 3) === \"***\", 'message: <code>repeat(\"*\", 3)</code> should return <code>\"***\"</code>.');",
-        "assert(repeat(\"abc\", 3) === \"abcabcabc\", 'message: <code>repeat(\"abc\", 3)</code> should return <code>\"abcabcabc\"</code>.');",
-        "assert(repeat(\"abc\", 4) === \"abcabcabcabc\", 'message: <code>repeat(\"abc\", 4)</code> should return <code>\"abcabcabcabc\"</code>.');",
-        "assert(repeat(\"abc\", 1) === \"abc\", 'message: <code>repeat(\"abc\", 1)</code> should return <code>\"abc\"</code>.');",
-        "assert(repeat(\"*\", 8) === \"********\", 'message: <code>repeat(\"*\", 8)</code> should return <code>\"********\"</code>.');",
-        "assert(repeat(\"abc\", -2) === \"\", 'message: <code>repeat(\"abc\", -2)</code> should return <code>\"\"</code>.');"
+        "assert(repeatStringNumTimes(\"*\", 3) === \"***\", 'message: <code>repeatStringNumTimes(\"*\", 3)</code> should return <code>\"***\"</code>.');",
+        "assert(repeatStringNumTimes(\"abc\", 3) === \"abcabcabc\", 'message: <code>repeatStringNumTimes(\"abc\", 3)</code> should return <code>\"abcabcabc\"</code>.');",
+        "assert(repeatStringNumTimes(\"abc\", 4) === \"abcabcabcabc\", 'message: <code>repeatStringNumTimes(\"abc\", 4)</code> should return <code>\"abcabcabcabc\"</code>.');",
+        "assert(repeatStringNumTimes(\"abc\", 1) === \"abc\", 'message: <code>repeatStringNumTimes(\"abc\", 1)</code> should return <code>\"abc\"</code>.');",
+        "assert(repeatStringNumTimes(\"*\", 8) === \"********\", 'message: <code>repeatStringNumTimes(\"*\", 8)</code> should return <code>\"********\"</code>.');",
+        "assert(repeatStringNumTimes(\"abc\", -2) === \"\", 'message: <code>repeatStringNumTimes(\"abc\", -2)</code> should return <code>\"\"</code>.');"
       ],
       "type": "bonfire",
       "isRequired": true,
       "solutions": [
-        "function repeat(str, num) {\n  if (num < 0) return '';\n  return num === 1 ? str : str + repeat(str, num-1);\n}\n\nrepeat('abc', 3);\n"
+        "function repeatStringNumTimes(str, num) {\n  if (num < 0) return '';\n  return num === 1 ? str : str + repeatStringNumTimes(str, num-1);\n}\n\nrepeatStringNumTimes('abc', 3);\n"
       ],
       "MDNlinks": [
         "Global String Object"

From d02bc605a2fc917960cce222a891633e513f863a Mon Sep 17 00:00:00 2001
From: Blanca Acosta <blanca@pasosdejesus.org>
Date: Mon, 29 Feb 2016 17:24:44 -0500
Subject: [PATCH 19/33] Translation of challenge console and logging in 
 computer-basics

Update computer-basics.json
---
 seed/challenges/04-video-challenges/computer-basics.json | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/seed/challenges/04-video-challenges/computer-basics.json b/seed/challenges/04-video-challenges/computer-basics.json
index a5e79f6..6354b73 100644
--- a/seed/challenges/04-video-challenges/computer-basics.json
+++ b/seed/challenges/04-video-challenges/computer-basics.json
@@ -761,7 +761,20 @@
         ]
       ],
       "type": "hike",
-      "challengeType": 6
+      "challengeType": 6,
+      "nameEs": "Consola y Logging",
+      "descriptionEs": [
+       "Nosotros discutimos que es la consola (y donde está), porque es útil y mostrar un poco de como trabaja.",
+       	"La consola: que es, donde la puedes encontrar, y para que la usas.",
+       	"La consola es usada comunmente para mostrar los mensajes administrativos del sistema.",
+       	"Una vez te familiarices con esta, encontraras una útil y poderosa herramienta.",
+        "En Javascript, la consola es usada como una gran herramienta para depurar y encontrar donde hay un error en tu código ",
+      	"Uno de los términos mas importantes para recordar es \"console.log()\".",
+        "El proceso para usarla es, es ponerlo en cualquier parte entre las líneas del código para ayudar a encontrar, identificar, y en últimas solucionar problemas especificos",
+        "Usando el navegador Chrome y la consola de Chrome, si nosotros escribimos <code>console.log(\"Free Code Camp es muy bueno!\");</code>, la consola literalmente mostrará \"Free Code Camp es muy bueno!\".",
+        "Además esto funcionará con números y booleanos, cuyos valores posibles son verdadro/falso",
+        "Cuando se envian palabras a la consola, es importante ponerlas dentro de comillas para reconocer que es una cadena."
+      ]
     },
     {
       "id": "bd7129d89441eddfbeb5bddf",

From fcf866906b9dbf7f2cd982d98063665e5b04ff98 Mon Sep 17 00:00:00 2001
From: Jacob Bearden <jacob@bearden.io>
Date: Wed, 16 Mar 2016 20:32:12 -0600
Subject: [PATCH 20/33] fix image protocol

---
 common/app/routes/Jobs/components/JobTotal.jsx     |   2 +-
 common/app/routes/Jobs/components/Jobs.jsx         |   2 +-
 .../00-getting-started/getting-started.json        | 206 ++++++++++-----------
 .../basic-bonfires.json                            |  16 +-
 .../basic-javascript.json                          |   8 +-
 .../basic-ziplines.json                            |  36 ++--
 .../bootstrap.json                                 |  16 +-
 .../front-end-development-certificate.json         |  16 +-
 .../gear-up-for-success.json                       |  24 +--
 .../html5-and-css.json                             |  18 +-
 .../data-visualization-certificate.json            |  16 +-
 .../api-projects.json                              |  56 +++---
 .../back-end-development-certificate.json          |  16 +-
 server/resources/labs.json                         |  10 +-
 server/resources/testimonials.json                 | 160 ++++++++--------
 server/utils/commit.json                           |  12 +-
 server/views/certificate/back-end.jade             |   2 +-
 server/views/certificate/data-vis.jade             |   2 +-
 server/views/certificate/front-end.jade            |   2 +-
 server/views/certificate/full-stack.jade           |   2 +-
 server/views/commit/pledge.jade                    |   2 +-
 server/views/home.jade                             |   6 +-
 server/views/resources/nonprofits.jade             |   6 +-
 server/views/resources/shop.jade                   |   2 +-
 24 files changed, 319 insertions(+), 319 deletions(-)

diff --git a/common/app/routes/Jobs/components/JobTotal.jsx b/common/app/routes/Jobs/components/JobTotal.jsx
index 97b3db9..df54040 100644
--- a/common/app/routes/Jobs/components/JobTotal.jsx
+++ b/common/app/routes/Jobs/components/JobTotal.jsx
@@ -287,7 +287,7 @@ export class JobTotal extends PureComponent {
                     <img
                       alt='An array of credit cards'
                       border='0'
-                      src='http://i.imgur.com/Q2SdSZG.png'
+                      src='//i.imgur.com/Q2SdSZG.png'
                       style={{
                         width: '100%'
                       }} />
diff --git a/common/app/routes/Jobs/components/Jobs.jsx b/common/app/routes/Jobs/components/Jobs.jsx
index f12e0ff..a8480a3 100644
--- a/common/app/routes/Jobs/components/Jobs.jsx
+++ b/common/app/routes/Jobs/components/Jobs.jsx
@@ -115,7 +115,7 @@ export class Jobs extends PureComponent {
                   engineer through Free Code Camp
                   `}
                   className='img-responsive testimonial-image-jobs img-center'
-                  src='http://i.imgur.com/tGcAA8H.jpg' />
+                  src='//i.imgur.com/tGcAA8H.jpg' />
               </Col>
               <Col
                 md={ 10 }
diff --git a/seed/challenges/00-getting-started/getting-started.json b/seed/challenges/00-getting-started/getting-started.json
index 3ce4710..5e3e7d9 100644
--- a/seed/challenges/00-getting-started/getting-started.json
+++ b/seed/challenges/00-getting-started/getting-started.json
@@ -9,73 +9,73 @@
       "title": "Learn how Free Code Camp Works",
       "description": [
         [
-          "http://i.imgur.com/6ibIavQ.jpg",
+          "//i.imgur.com/6ibIavQ.jpg",
           "A picture of Free Code Camp's 4 benefits: Get connected, Learn JavaScript, Build your Portfolio, Help nonprofits",
           "Welcome to Free Code Camp. We're an open source community of busy people who learn to code and help nonprofits.",
           ""
         ],
         [
-          "http://i.imgur.com/Elb3dfj.jpg",
+          "//i.imgur.com/Elb3dfj.jpg",
           "A screenshot of some of our campers coding together in Toronto.",
           "<bold>Learning to code is hard.</bold> To succeed, you'll need lots of practice and support. That's why we've created a rigorous curriculum and supportive community.",
           ""
         ],
         [
-          "http://i.imgur.com/D7Y5luw.jpg",
+          "//i.imgur.com/D7Y5luw.jpg",
           "A graph of the rate of job growth against growth in computer science degree graduates. There are 1.4 million jobs and only 400 thousand people to fill them.",
           "There are thousands of coding jobs currently going unfilled, and the demand for coders grows every year.",
           ""
         ],
         [
-          "http://i.imgur.com/WD3STY6.jpg",
+          "//i.imgur.com/WD3STY6.jpg",
           "Photos of three campers who've gotten jobs after learning to code at Free Code Camp.",
           "Free Code Camp is a proven path to your first coding job. In fact, no one has actually completed our entire program, because campers get jobs before they're able to.",
           ""
         ],
         [
-          "http://i.imgur.com/vLNso6h.jpg",
+          "//i.imgur.com/vLNso6h.jpg",
           "An illustration showing that you will learn HTML5, CSS3, JavaScript, Databases, Git, Node.js, React and D3.",
           "We have hundreds of optional coding challenges that will teach you fundamental web development technologies like HTML5, Node.js and databases.",
           ""
         ],
         [
-          "http://i.imgur.com/UVB9hxp.jpg",
+          "//i.imgur.com/UVB9hxp.jpg",
           "An image of a camper at a cafe building projects on Free Code Camp.",
           "We believe humans learn best by doing. So you'll spend most of your time actually building projects. We'll give you a list of specifications (agile user stories), and you'll figure out how to build apps that fulfill those specifications.",
           ""
         ],
         [
-          "http://i.imgur.com/pbW7K5S.jpg",
+          "//i.imgur.com/pbW7K5S.jpg",
           "An image of showing our front end, back end, and data visualization certifications (400 hours each), our nonprofit projects (800 hours), and interview prep (80 hours) for a total of 2,080 hours of coding experience.",
           "Our curriculum is divided into 4 certifications. These certifications are standardized, and instantly verifiable by your freelance clients and future employers. Like everything else at Free Code Camp, these certifications are free. We recommend doing them in order, but you are free to jump around. The first three certifications take 400 hours each, and the final certification takes 800 hours, and involves building real-life projects for nonprofits.",
           ""
         ],
         [
-          "http://i.imgur.com/k8btNUB.jpg",
+          "//i.imgur.com/k8btNUB.jpg",
           "A screenshot of our Front End Development Certificate",
           "To earn our verified Front End Development Certification, you'll build 10 projects using HTML, CSS, jQuery, and JavaScript.",
           ""
         ],
         [
-          "http://i.imgur.com/Et3iD74.jpg",
+          "//i.imgur.com/Et3iD74.jpg",
           "A screenshot of our Data Visualization Certificate",
           "To earn our Data Visualization Certification, you'll build 10 projects using React, Sass and D3.js.",
           ""
         ],
         [
-          "http://i.imgur.com/8v3t84p.jpg",
+          "//i.imgur.com/8v3t84p.jpg",
           "A screenshot of our Back End Development Certificate",
           "To earn our Back End Development Certification, you'll build 10 projects using Node.js, Express, and MongoDB. You'll use Git and Heroku to deploy them to the cloud.",
           ""
         ],
         [
-          "http://i.imgur.com/yXyxbDd.jpg",
+          "//i.imgur.com/yXyxbDd.jpg",
           "A screen shot of our nonprofit project directory.",
           "After you complete all three of these certificates, you'll team up with another camper and use agile software development methodologies to build two real-life projects for nonprofits. You'll also add functionality to two legacy code nonprofit projects. By the time you finish, you'll have a portfolio of real apps that people use every day.",
           ""
         ],
         [
-          "http://i.imgur.com/PDGQ9ZM.jpg",
+          "//i.imgur.com/PDGQ9ZM.jpg",
           "An image of campers building projects together in a cafe in Seoul.",
           "If you complete all 2,080 hours worth of challenges and projects, you'll earn our Full Stack Development Certification. We'll offer you free coding interview practice. We even offer a job board where employers specifically hire campers who've earned Free Code Camp certifications.",
           ""
@@ -88,73 +88,73 @@
       "titleFr": "Apprenez comment FreeCodeCamp fonctionne",
       "descriptionFr": [
         [
-          "http://i.imgur.com/6ibIavQ.jpg",
+          "//i.imgur.com/6ibIavQ.jpg",
           "Une idée des avantages de Free Code Camp: restez connecté , apprenez le JavaScript , construisez votre portfolio , Aidez les organismes sans but lucratif",
           "Bienvenue sur Free Code Camp . Nous sommes une communauté opensource de gens passionnés qui apprend à coder et aide les organisations à but non lucratif.",
           ""
         ],
         [
-          "http://i.imgur.com/Elb3dfj.jpg",
+          "//i.imgur.com/Elb3dfj.jpg",
           "Une capture d'écran de certains de nos développeurs réunis à Toronto.",
           "<bold>Apprendre à code est dur.</bold> Pour réussir, vous aurez besoin de beaucoup de pratique et de soutien. Voilà pourquoi nous avons créé un programme rigoureux et une communauté de soutien.",
           ""
         ],
         [
-          "http://i.imgur.com/D7Y5luw.jpg",
+          "//i.imgur.com/D7Y5luw.jpg",
           "Un graphique de la vitesse de croissance de l'emploi face à la croissance du nombre de diplômés en études d'informatique . Il y a 1,4 million d'emplois et seulement 400 000 personnes pour les occuper.",
           "Il y a des milliers d'emplois de développeurs actuellement vacants, et la demande pour les développeurs augmente chaque année.",
           ""
         ],
         [
-          "http://i.imgur.com/WD3STY6.jpg",
+          "//i.imgur.com/WD3STY6.jpg",
           "Photos de trois développeurs qui ont obtenu un emploi après l'apprentissage de code au Free Code Camp.",
           "Free Code Camp est une voie éprouvée pour obtenir votre premier job de développeur. En fait , personne n'a jamais accompli l'ensemble de notre programme , car nos développeurs ont trouvé un emploi avant qu'ils ne soient en mesure de le finir notre parcours.",
           ""
         ],
         [
-          "http://i.imgur.com/vLNso6h.jpg",
+          "//i.imgur.com/vLNso6h.jpg",
           "Une illustration montrant que vous allez apprendre HTML5 , CSS3 , JavaScript , bases de données , Git , Node.js , React et D3.",
           "Nous avons des centaines de défis de codage optionnels qui vous apprendront les fondamentaux du développement web comme HTML5 , Node.js et les bases de données.",
           ""
         ],
         [
-          "http://i.imgur.com/UVB9hxp.jpg",
+          "//i.imgur.com/UVB9hxp.jpg",
           "Une image d'un développeur dans un café projets sur Camp Code Free.",
           "Nous croyons que les êtres humains apprennent mieux par la pratique . De sorte que vous passerez la plupart de votre temps à construire efficacement des projets. Nous allons vous donner une liste de spécifications ( des témoignages d'utilisateurs agiles ) , et vous allez comprendre comment construire des applications qui répondent à ces spécifications.",
           ""
         ],
         [
-          "http://i.imgur.com/pbW7K5S.jpg",
+          "//i.imgur.com/pbW7K5S.jpg",
           "Une image pour montrer notre front-end, back end, et data visualisation certificat ( 400 heures chacun) , nos projets à but non lucratif (800 heures) , et l'interview de préparation ( 80 heures ) pour un total de 2080 heures d'expérience de codage.",
           "Notre programme est divisé en 4 certifications . Ces certifications sont standardisés , et immédiatement vérifiable par vos clients indépendants et les futurs employeurs . Comme tout le reste au Code Camp gratuit, ces certifications sont gratuits. Nous vous recommandons de les faire dans l'ordre, mais vous êtes libre d'en sauter . Les trois premièrs certifications prennent 400 heures chacune , et la certification finale prend 800 heures , et implique la construction de projets concrets pour les organisations caritatives.",
           ""
         ],
         [
-          "http://i.imgur.com/k8btNUB.jpg",
+          "//i.imgur.com/k8btNUB.jpg",
           "Une capture d'écran de notre certificat développeur Front-End",
           "Pour réussir notre certificat Front-End vérifié, vous allez construire 10 projets utilisant HTML , CSS , jQuery et JavaScript.",
           ""
         ],
         [
-          "http://i.imgur.com/Et3iD74.jpg",
+          "//i.imgur.com/Et3iD74.jpg",
           "Une capture d'écran de notre certificat de visualisation de données",
           "Pour gagner notre certification de visualisation de données , vous allez construire 10 projets utilisant Réagir, Sass et D3.js.",
           ""
         ],
         [
-          "http://i.imgur.com/8v3t84p.jpg",
+          "//i.imgur.com/8v3t84p.jpg",
           "Une capture d'écran de notre certificat Back-End",
           "Pour gagner notre certification de développeur Back-End, vous allez construire 10 projets utilisant Node.js , Express, et MongoDB . Vous allez utiliser Git et Heroku de les déployer dans le cloud.",
           ""
         ],
         [
-          "http://i.imgur.com/yXyxbDd.jpg",
+          "//i.imgur.com/yXyxbDd.jpg",
           "Une capture d'écran de notre répertoire de projet à but non lucratif.",
           "Après avoir effectué tous les trois de ces certificats , vous faites équipe avec un autre développeur et utilisez agiles méthodologies de développement de logiciel pour construire deux projets de la vie réelle pour les organismes sans but lucratif . Vous aurez également d'ajouter des fonctionnalités à deux projets à but non lucratif de code hérité. Au moment où vous avez terminé, vous aurez un portefeuille de véritables applications que les gens utilisent tous les jours.",
           ""
         ],
         [
-          "http://i.imgur.com/PDGQ9ZM.jpg",
+          "//i.imgur.com/PDGQ9ZM.jpg",
           "Une image de campeurs construction des projets ensemble dans un café de Séoul ",
           "Si vous finissez les 2.080 heures de défis et projets, vous gagnerez notre certification complète Stack développement . Nous vous offrons gratuitement la pratique d'entrevue de codage . Nous offrons même un accès à notre si d'emploi où les employeurs embauchent spécifiquement les développeurs qui ont obtenu des certificats de Free Code Camp.",
           ""
@@ -163,73 +163,73 @@
       "titleEs": "Aprende como funciona Free Code Camp",
       "descriptionEs": [
         [
-          "http://i.imgur.com/6ibIavQ.jpg",
+          "//i.imgur.com/6ibIavQ.jpg",
           "Una imagen de los 4 beneficios de Free Code Camp: Conéctate, Aprende JavaScript, Construye tu  Portafolio, Ayuda organizaciones sin ánimo de lucro",
           "Bienvenido a Free Code Camp. Somos una comunidad de código abierto formada por personas ocupadas quienes aprenden a programar y ayudan a organizaciones sin ánimo de lucro.",
           ""
         ],
         [
-          "http://i.imgur.com/Elb3dfj.jpg",
+          "//i.imgur.com/Elb3dfj.jpg",
           "Una imagen de algunos de nuestros campistas programando juntos en Toronto.",
           "<bold>Aprender a programar es difícil.</bold> Para tener éxito, necesitarás mucha práctica y apoyo. Por eso es que hemos creado un riguroso currículo y una comunidad de apoyo.",
           ""
         ],
         [
-          "http://i.imgur.com/D7Y5luw.jpg",
+          "//i.imgur.com/D7Y5luw.jpg",
           "Una gráfica del crecimiento de trabajos en comparación con los graduados en un pregrado de ciencias de la computación. Hay 1.4 millones de empleos y solo 400 mil personas para ocuparlos.",
           "Actualmente, hay miles de trabajos de programación sin ocupar, y la demanda de programadores crece cada año.",
           ""
         ],
         [
-          "http://i.imgur.com/WD3STY6.jpg",
+          "//i.imgur.com/WD3STY6.jpg",
           "Fotos de tres campistas quienes obtuvieron trabajos después de aprender a programar en Free Code Camp.",
           "Free Code Camp es un camino probado para que obtengas tu primer trabajo de programación. De hecho, nadie actualmente ha completado nuestro programa entero, porque los campistas obtienen trabajos antes de poder hacerlo.",
           ""
         ],
         [
-          "http://i.imgur.com/vLNso6h.jpg",
+          "//i.imgur.com/vLNso6h.jpg",
           "Una ilustración mostrando que aprenderás HTML5, CSS3, JavaScript, Bases de Datos, Git, Node.js, react y D3.",
           "Tenemos cientos de desafíos de programación opcionales que te enseñarán las tecnologías fundamentales para el desarrollo web como HTML5, Node.js y bases de datos.",
           ""
         ],
         [
-          "http://i.imgur.com/UVB9hxp.jpg",
+          "//i.imgur.com/UVB9hxp.jpg",
           "Una foto de un campista en un café construyendo proyectos con Free Code Camp.",
           "Creemos que los humanos aprender mejor haciendo.  Así que en realidad emplearás la mayoría de tu tiempo construyendo proyectos.  Te daremos una lista de especificaciones (historias de usuario ágiles), y te las ingeniarás para construir aplicaciones que cumplan esas especificaciones.",
           ""
         ],
         [
-          "http://i.imgur.com/pbW7K5S.jpgk",
+          "//i.imgur.com/pbW7K5S.jpgk",
           "Una imagen de los tiempos de nuestras certificaciones para desarrollo de interfaces, desarrollo al lado del servidor y visualización de datos (400 horas cada uno), para nuestros proyectos sin ánimo de lucro (800 horas) y preparación para entrevistas (80 horas) que dan un total de 2,080 horas e experiencia programando.",
           "Nuestro currículo se divide en 4 certificaciones.  Estas certificaciones están estandarizadas, y son verificables al instante por sus clientes como trabajador independiente y por sus futuros empleadores.  Tal como todo lo demás en Free Code Camp, estas certificaciones son gratuitas.  Recomendamos hacerlas en orden, pero usted es libre de saltar de una a otra.  Las primeras tres certificaciones requieren 400 horas cada una, y la certificación final requiere 800 horas, e involucra construir proyectos de la vida real para organizaciones sin ánimo de lucro.",
           ""
         ],
         [
-          "http://i.imgur.com/k8btNUB.jpg",
+          "//i.imgur.com/k8btNUB.jpg",
           "Una imagen de nuestro Certificado de Desarrollo de Interfaces",
           "Para obtener nuestra certificación verificada de Desarrollo de Interfaces, construirás 10 proyectos usando HTML, CSS, jQuery y JavaScript.",
           ""
         ],
         [
-          "http://i.imgur.com/Et3iD74.jpg",
+          "//i.imgur.com/Et3iD74.jpg",
           "Una imagen de nuestro Certificado de Visualización de Datos",
           "Para obtener nuestra certificación en Visualización de Datos, construirás 10 proyectos usando React, Sass y D3.js.",
           ""
         ],
         [
-          "http://i.imgur.com/8v3t84p.jpg",
+          "//i.imgur.com/8v3t84p.jpg",
           "Una imagen de nuestro Certificado de Desarrollo al Lado del Servidor",
           "Para obtener nuestro Certificado de Desarrollo al Lado del Servidor, construirás 10 proyectos empleando Node.js, Express y MongoDB. Usarás Git y Heroku para desplegarlos en la nube.",
           ""
         ],
         [
-          "http://i.imgur.com/yXyxbDd.jpg",
+          "//i.imgur.com/yXyxbDd.jpg",
           "Una imagen de nuestro directorio de organizaciones sin ánimo de lucro.",
           "Después de completar todos los tres certificados, harás equipo con otro campista y usarás metodologías de desarrollo ágil para construir dos proyectos de la vida real para organizaciones sin ánimo de lucro. También añadirás funcionalidad a dos proyectos de fuentes legadas de organizaciones sin ánimo de lucro.  Cuando termines esto, tendrás un portafolio de aplicaciones reales que la gente usa a diario. ",
           ""
         ],
         [
-          "http://i.imgur.com/PDGQ9ZM.jpg",
+          "//i.imgur.com/PDGQ9ZM.jpg",
           "Una imagen de nuestros campistas construyendo proyectos juntos en un café en Seoul.",
           "Si completas todas las 2,080 horas de desafíos y proyectos, obtendrás un Certificado de Desarrollo de Pila Completa.  Te ofreceremos gratuitamente una práctica en entrevistas para desarrolladores. Incluso ofrecemos un directorio de trabajos donde los empleadores contratan específicamente campistas que han recibido certificaciones de Free Code Camp.",
           ""
@@ -240,55 +240,55 @@
       "id": "560add37cb82ac38a17513bf",
       "descriptionJa": [
         [
-          "http://i.imgur.com/EAR7Lvh.jpg",
+          "//i.imgur.com/EAR7Lvh.jpg",
           "Gitterチャットルームの一場面です。",
           "コーディングを始める前に、Free Code Camp のチャットルームに参加してください。いつでも、雑談や質問ができたりペアプログラミングをするための仲間を見つけ流ことができます。最初に Github アカウントが必要です。",
           ""
         ],
         [
-          "http://i.imgur.com/n6GeSEm.gif",
+          "//i.imgur.com/n6GeSEm.gif",
           "この gif は Github を開始するまでの流れを表しています。必要な欄に情報を入れて登録をしてください。そして Github からあなたのメールアドレス宛にメールが届きますのでアカウントを承認してください。",
           "\"Open link in new tab\"をクリックして Github を開いてください。 必要な欄に情報を入力して GitHub アカウントを作ってください。実際に使われている email アドレスかを確認してください( GitHub にはこの情報が保存されます )。メールアドレス宛に GitHub からメールが来たことを確認してください。 メールにある\"verify email address\"をクリックして開いてください。<br><div class=\"small\">注意： もしすでに GitHub アカウントを持っていたら、あなたは \"Open link in new tab\" をクリックすることでこのステップを飛ばすことができます、新しく開かれたタブを閉じて \"go to my next step\" をクリックしてください。私たちはこの大事なステップが飛ばされてしまうのを防ぐために \"このステップを飛ばす\" ボタンは削除してあります。</div>",
           "https://github.com/join"
         ],
         [
-          "http://i.imgur.com/hFqAEr8.gif",
+          "//i.imgur.com/hFqAEr8.gif",
           "この gif は Github の右上にあるプロフィール画像をクリックする方法です。あなたの写真をアップロードするか、自動で生成されるピクセルアートを利用してください。そして、残りの欄に情報を入力し submit ボタンを押してください。",
           "GitHub の右上に表示されているピクセルアートをクリックしてください、そして settings を選んでください。あなたの画像をアップロードしてください。画像はあなたの顔が写っていると良いです。他のキャンパーズの仲間たちがチャットルームであなたを見かけるようになります。住んでいる場所や名前を登録することもできます",
           "https://github.com/settings/profile"
         ],
         [
-          "http://i.imgur.com/pYk0wOk.gif",
+          "//i.imgur.com/pYk0wOk.gif",
           "この gif は GitHub のレポジトリへのスターをつける方法です。",
           "オープンソースの Free Code Camp のレポジトリを開いてください。これは私たちボランティアチームの協力者が Free Code Camp で作っているものです。あなたは \"star\" を私たちのリポジトリに付けることができます。\"star を付けること\"は GitHub での \"いいね\" と一緒です。",
           "https://github.com/freecodecamp/freecodecamp"
         ],
         [
-          "http://i.imgur.com/OmRmLB4.gif",
+          "//i.imgur.com/OmRmLB4.gif",
           "この git は私たちのチャットルームへのリンクをクリックして、\"sign in with GitHub\" ボタンをクリックしています。そして、テキストを入力してキャンパーズの仲間へメッセージを送る方法を表しています。",
           "あなたは Github のアカウントを持っているので、私たちのチャットルームへ GitHub を利用してログインできます。\"Hellow world!\" と言って自己紹介をし、あなたがどうやって Free Code Camp を見つけたかや何故プログラミングを学びたいのかを私たちに話してください。",
           "https://gitter.im/FreeCodeCamp/FreeCodeCamp"
         ],
         [
-          "http://i.imgur.com/Ecs5XAd.gif",
+          "//i.imgur.com/Ecs5XAd.gif",
           "この gif は右上の settings ボタンを押すことで、通知の設定を変更する方法を表しています。",
           "私たちのチャットルームはとても活発です。あなたは誰かがあなたに対してメンションを送った時にだけ通知してもらうように設定を変更した方が良いでしょう。",
           ""
         ],
         [
-          "http://i.imgur.com/T0bGJPe.gif",
+          "//i.imgur.com/T0bGJPe.gif",
           "この gif はどうやって該当するユーザに向けて個人的なメーッセージを送れるようにするかを表しています。",
           "私たちのチャットルームは全て公開されているので、もしあなたが個人的な情報(メールアドレスや電話番号)を共有したい場合には、プライベートメッセージを利用してください。",
           ""
         ],
         [
-          "http://i.imgur.com/vDTMJSh.gif",
+          "//i.imgur.com/vDTMJSh.gif",
           "この gif はチャレンジとチャットルームへの行き来がタブを戻すことでできることを表しています。",
           "私たちのチャレンジを通して作業をしている間はチャットルームを開いておくと良いでしょう。そうすることで、必要な時に助けを求めることができます。あなたは休憩をしているかのように他のキャンパーズと関わりを持てるでしょう。",
           ""
         ],
         [
-          "http://i.imgur.com/WvQvNGN.gif",
+          "//i.imgur.com/WvQvNGN.gif",
           "この gif は、チャットルームアプリをあなたのコンピュータに直接インストールするためにダウンロードする方法を表しています。",
           "チャットルームのアプリをスマホや自分のパソコンにダウンロードして使うことができます。",
           "https://gitter.im/apps"
@@ -297,55 +297,55 @@
       "title": "Create a GitHub Account and Join our Chat Rooms",
       "description": [
         [
-          "http://i.imgur.com/EAR7Lvh.jpg",
+          "//i.imgur.com/EAR7Lvh.jpg",
           "A screenshot of our one of our Gitter chat rooms.",
           "Before we start coding, let's join Free Code Camp's chat rooms. You can come here any time of day to hang out, ask questions, or find another camper to pair program with. First you'll need a GitHub account.",
           ""
         ],
         [
-          "http://i.imgur.com/n6GeSEm.gif",
+          "//i.imgur.com/n6GeSEm.gif",
           "A gif showing you to click the link below to go to GitHub. Fill in the necessary fields and click submit. Then check your email inbox for an email from GitHub so you can verify your account.",
           "Click the \"Open link in new tab\" button below to open up GitHub. Create a GitHub account by filling in the form. Be sure to use your real email address - GitHub will keep this private. Then check your email inbox for an email from GitHub. Open it and click the \"verify email address\" button inside it. <br><div class=\"small\">Note: If you already have a GitHub account, you can skip this step by clicking \"Open link in new tab\", closing the new tab that opens, then clicking \"go to my next step\". We removed our \"skip step\" button because many people would just click it repeatedly without doing these important steps.</div>",
           "https://github.com/join"
         ],
         [
-          "http://i.imgur.com/hFqAEr8.gif",
+          "//i.imgur.com/hFqAEr8.gif",
           "A gif showing you how to click the profile image in the upper right hand corner of GitHub. Upload a photo of yourself or you will continue to use the automatically generated pixel art. Then fill in the remaining form fields and click submit.",
           "Click the pixel art in the upper right hand corner of GitHub, then choose settings. Upload a picture of yourself. A picture of your face works best. This is how your fellow campers will see you in our chat rooms, so look your best. You can add your city and your name if you want.",
           "https://github.com/settings/profile"
         ],
         [
-          "http://i.imgur.com/pYk0wOk.gif",
+          "//i.imgur.com/pYk0wOk.gif",
           "A gif showing how you can star a GitHub repo.",
           "Open Free Code Camp's open-source repository. This is where our volunteer team collaborates on building Free Code Camp. You can \"star\" our repository. \"Starring\" is the GitHub equivalent of \"liking\" something.",
           "https://github.com/freecodecamp/freecodecamp"
         ],
         [
-          "http://i.imgur.com/OmRmLB4.gif",
+          "//i.imgur.com/OmRmLB4.gif",
           "A gif showing you how to click the link below to go to our chat room and click the \"sign in with GitHub\" button. Then you can click into the text input field and type a message to your fellow campers.",
           "Now that you have a GitHub account, you can join our main chat room by logging in with GitHub. Introduce yourself by saying \"Hello world!\" Tell your fellow campers how you found Free Code Camp. Also tell us why you want to learn to code.",
           "https://gitter.im/FreeCodeCamp/FreeCodeCamp"
         ],
         [
-          "http://i.imgur.com/Ecs5XAd.gif",
+          "//i.imgur.com/Ecs5XAd.gif",
           "A gif showing you how you can click the settings button in the upper right hand corner and modify your notification settings.",
           "Our chat rooms are extremely active. You should change your settings so you're only notified if someone mentions you.",
           ""
         ],
         [
-          "http://i.imgur.com/T0bGJPe.gif",
+          "//i.imgur.com/T0bGJPe.gif",
           "A gif showing how you can click on a user profile image to initiate a private message with that user.",
           "Please note that all of our chat rooms are visible to the public. If you need to share sensitive information, such as an email address or phone number, do it in a private message.",
           ""
         ],
         [
-          "http://i.imgur.com/vDTMJSh.gif",
+          "//i.imgur.com/vDTMJSh.gif",
           "A gif showing that you can tab back and forth between challenges and our chat rooms.",
           "Keep our chat room open while you work through our challenges. That way, you can ask for help if you get stuck. You can also socialize with other campers when you feel like taking a break.",
           ""
         ],
         [
-          "http://i.imgur.com/WvQvNGN.gif",
+          "//i.imgur.com/WvQvNGN.gif",
           "A gif showing how you can click the link below to download a native chat room app for your computer.",
           "You can also download the chat room app to your computer or phone.",
           "https://gitter.im/apps"
@@ -357,55 +357,55 @@
       "titleFr": "Créer un compte GitHub et rejoignez nos Salons de chat",
       "descriptionFr": [
         [
-          "http://i.imgur.com/EAR7Lvh.jpg",
+          "//i.imgur.com/EAR7Lvh.jpg",
           "Une capture d'écran de notre l'un de nos Gitter salles de chat.",
           "Avant de commencer à coder, nous allons rejoindre les salles de chat de Camp Code Free . Vous pouvez venir ici tout moment de la journée pour se détendre , poser des questions , ou trouver un autre camping de jumeler programme avec. D'abord, vous aurez besoin d'un compte GitHub.",
           ""
         ],
         [
-          "http://i.imgur.com/n6GeSEm.gif",
+          "//i.imgur.com/n6GeSEm.gif",
           "Un gif vous montrant à cliquer sur le lien ci-dessous pour aller à GitHub . Remplissez les champs nécessaires et cliquez sur soumettre . Ensuite, vérifiez votre boîte de réception pour un courriel de GitHub sorte que vous pouvez vérifier votre compte.",
           "Cliquez sur le \"lien Ouvrir dans une nouvelle touche de tabulation\" ci-dessous pour ouvrir GitHub. Créer un compte GitHub en remplissant le formulaire . Assurez-vous d'utiliser votre adresse email réelle - GitHub gardera cette privé. Ensuite, vérifiez votre boîte de réception pour un courriel de GitHub. Ouvrez-le et cliquez sur \"l'adresse email sur vérifier\" l'intérieur. <br><div class=\"small\">Remarque: Si vous avez déjà un compte GitHub , vous pouvez sauter cette étape en cliquant sur \"Ouvrir le lien dans un nouvel onglet\", fermeture le nouvel onglet qui ouvre, puis en cliquant \"aller à ma prochaine étape\". Nous avons retiré notre bouton de \"l'étape de saut\" , car beaucoup de gens il suffit de cliquer à plusieurs reprises sans faire ces étapes importantes.</div>",
           "https://github.com/join"
         ],
         [
-          "http://i.imgur.com/hFqAEr8.gif",
+          "//i.imgur.com/hFqAEr8.gif",
           "Un gif vous montrant comment cliquez sur l' image de profil dans le coin supérieur droit de GitHub. Télécharger une photo de vous-même ou vous allez continuer à utiliser l'art de pixel généré automatiquement . Ensuite, remplissez les champs du formulaire restants et cliquez sur soumettre.",
           "Cliquez sur le pixel art dans le coin supérieur droit de GitHub , puis choisissez les paramètres . Télécharger une photo de vous-même. Une photo de votre visage qui fonctionne le mieux . Voici comment les autres campeurs vous voir dans nos salles de chat , donc regarder votre meilleur . Vous pouvez ajouter votre ville et votre nom si vous voulez.",
           "https://github.com/settings/profile"
         ],
         [
-          "http://i.imgur.com/pYk0wOk.gif",
+          "//i.imgur.com/pYk0wOk.gif",
           "Un gif montrant comment vous pouvez activer un repo GitHub.",
           "Ouvrez open-source du dépôt central de Camp Code Free . Ceci est où notre équipe de bénévoles collabore à la construction de Camp Code Free. Vous pouvez \"star\" notre référentiel. Mettant en \"vedette\" est la GitHub équivalent de \"goût\" quelque chose.",
           "https://github.com/freecodecamp/freecodecamp"
         ],
         [
-          "http://i.imgur.com/OmRmLB4.gif",
+          "//i.imgur.com/OmRmLB4.gif",
           "Un gif vous montrant comment Cliquez sur le lien ci-dessous pour accéder à notre salle de chat et cliquez sur \"Se connecter avec\" bouton GitHub. Puis vous pouvez cliquer dans le champ de saisie de texte et saisissez un message à vos amis campeurs.",
           "Maintenant que vous avez une GitHub compte, vous pouvez vous joindre à notre principale salle de chat en vous connectant à GitHub. Présentez-vous en disant \"Hello World!\" avertissez votre amis campeurs comment vous avez trouvé Libre Code Camp. Aussi nous dire pourquoi vous voulez apprendre à code.",
           "https://gitter.im/FreeCodeCamp/FreeCodeCamp"
         ],
         [
-          "http://i.imgur.com/Ecs5XAd.gif",
+          "//i.imgur.com/Ecs5XAd.gif",
           "Un gif vous montrant comment vous pouvez cliquez sur le bouton Réglages dans le coin supérieur droit et modifier vos paramètres de notification.",
           "Nos salles de chat sont extrêmement actifs. Vous devez modifier vos paramètres pour vous're notifié que si quelqu'un vous mentionne.",
           ""
         ],
         [
-          "http://i.imgur.com/T0bGJPe.gif",
+          "//i.imgur.com/T0bGJPe.gif",
           "Un gif montrant comment vous pouvez cliquer sur une image de profil utilisateur pour lancer un message privé avec cet utilisateur.",
           "Veuillez noter que tous nos salons de chat sont visibles pour le public. Si vous avez besoin de partager des informations sensibles, comme un numéro de téléphone ou l'adresse e-mail, faites-le dans un message privé.",
           ""
         ],
         [
-          "http://i.imgur.com/vDTMJSh.gif",
+          "//i.imgur.com/vDTMJSh.gif",
           "Un gif montrant que vous pouvez Tab et retour entre défis et nos salles de chat.",
           "Garder notre salle de discussion ouverte pendant que vous travaillez à travers nos défis. De cette façon, vous pouvez demander de l'aide si vous êtes coincé. Vous pouvez également socialiser avec d'autres campeurs lorsque vous sentez comme prendre une pause.",
           ""
         ],
         [
-          "http://i.imgur.com/WvQvNGN.gif",
+          "//i.imgur.com/WvQvNGN.gif",
           "Un gif montrant comment vous pouvez cliquer sur le lien ci-dessous pour télécharger un natif salle de chat app pour votre ordinateur.",
           "Vous pouvez également télécharger la salle de chat app pour votre ordinateur ou votre téléphone.",
           "https://gitter.im/apps"
@@ -414,56 +414,56 @@
       "titleEs": "Crea una Cuenta de GitHub y Únete a nuestras Salas de Chat",
       "descriptionEs": [
         [
-          "http://i.imgur.com/EAR7Lvh.jpg",
+          "//i.imgur.com/EAR7Lvh.jpg",
           "Una imagen de una de nuestras salas de chat en Gitter.",
           "Ahora únete a las salas de chat de Free Code Camp. Puedes venir aquí en cualquier momento para charlar, hacer preguntas, o encontrar otro campista para programar juntos. Primero necesitarás una cuenta de GitHub.",
           ""
         ],
         [
-          "http://i.imgur.com/n6GeSEm.gif",
+          "//i.imgur.com/n6GeSEm.gif",
           "Una imagen mostrándote como pulsar en el enlace inferior para ir a GitHub, llenar los campos necesarios y enviarlos.",
           "Crea una cuenta en GitHub. Asegúrate de usar tu dirección de correo real - GitHub mantendrá esto en privado.",
           "https://github.com/join"
         ],
         [
-          "http://i.imgur.com/hFqAEr8.gif",
+          "//i.imgur.com/hFqAEr8.gif",
           "Un gif mostrándote como pulsar en la imagen de perfil en la esquina superior derecha de GitHub. Sube una foto tuya o continuaras usando la imagen de píxeles generada automáticamente. Entonces llena los campos restantes y haz clic en enviar.",
           "En la esquina superior derecha pulsa sobre la imagen de píxeles, entonces selecciona configuraciones. Sube una imagen tuya. Una foto de tu cara es mejor. Así es como tus compañeros campistas te verán en nuestras salas de chat, así que toma tu mejor ángulo. Puedes añadir tu ciudad y tu nombre si lo deseas.",
           "https://github.com/settings/profile"
         ],
         [
-          "http://i.imgur.com/pYk0wOk.gif",
+          "//i.imgur.com/pYk0wOk.gif",
           "Un gif mostrándote como puedes dar una estrella a un repositorio de GitHub.",
           "Ve al repositorio de código libre de Free Code Camp y dale una \"estrella\". Las \"estrellas\" son el equivalente en GitHub de los \"me gusta\".",
           "Si quieres, ve al repositorio de código libre de Free Code Camp y dale una \"estrella\". Las \"estrellas\" son el equivalente en GitHub de los \"me gusta\".",
           "https://github.com/freecodecamp/freecodecamp"
         ],
         [
-          "http://i.imgur.com/OmRmLB4.gif",
+          "//i.imgur.com/OmRmLB4.gif",
           "Un gif mostrándote como pulsar en el enlace inferior para ir a nuestra sala de chat y pulsar en el botón de \"iniciar sesión con GitHub\". Entonces puedes pulsar en el próximo campo de texto y escribir un mensaje a tus compañeros campistas.",
           "Ahora que tienes una cuenta de GitHub, puedes unirte a nuestro chat principal al iniciar sesión con GitHub. Preséntate diciendo \"Hello world!\" Cuéntales a los tus compañeros campistas como encontraste Free Code Camp. Además cuéntanos porque deseas aprender a programar.",
           "https://gitter.im/FreeCodeCamp/FreeCodeCamp"
         ],
         [
-          "http://i.imgur.com/Ecs5XAd.gif",
+          "//i.imgur.com/Ecs5XAd.gif",
           "Un gif mostrándote como puedes pulsar en el botón de configuraciones en la esquina superior derecha y modificar tus configuraciones de notificaciones.",
           "Nuestras salas de chat son extremadamente activas. Deberías cambiar tus configuraciones para ser notificado únicamente si alguien te menciona.",
           ""
         ],
         [
-          "http://i.imgur.com/T0bGJPe.gif",
+          "//i.imgur.com/T0bGJPe.gif",
           "Un gif mostrándote como puedes pulsar en la imagen de perfil de un usuario para iniciar una conversación privada con ese usuario.",
           "Por favor nota que todas nuestras salas de chat son visibles para el público. Si necesitas compartir información privada, como una dirección de correo o un número de teléfono, hazlo en un mensaje privado.",
           ""
         ],
         [
-          "http://i.imgur.com/vDTMJSh.gif",
+          "//i.imgur.com/vDTMJSh.gif",
           "Un gif mostrándote que puedes cambiar entre desafíos y nuestras salas de chat.",
           "Mantén nuestra sala de chat abierta mientras trabajas en nuestros desafíos. De esta manera, puedes pedir ayuda si quedas atascado. Además puedes socializar con otros campistas cuando quieras tomar un descanso.",
           ""
         ],
         [
-          "http://i.imgur.com/WvQvNGN.gif",
+          "//i.imgur.com/WvQvNGN.gif",
           "Un gif mostrándote como puedes pulsar abajo para descargar una aplicación de chat nativa para tu computadora.",
           "También puedes descargar la aplicación de chat para tu computadora o teléfono móvil.",
           "https://gitter.im/apps"
@@ -477,7 +477,7 @@
       "title": "Configure your Code Portfolio",
       "description": [
         [
-          "http://i.imgur.com/tP2ccTE.gif",
+          "//i.imgur.com/tP2ccTE.gif",
           "A gif showing how you can click your profile image in your upper right hand corner to your code portfolio and connect GitHub.",
           "Check out your code portfolio. Click your picture in your upper right hand corner. To activate your code portfolio, you'll need to link your GitHub account with Free Code Camp. Your code portfolio shows your progress and how many Brownie Points you have. You can get Brownie Points by completing challenges and by helping other campers in our chat rooms. If you get Brownie Points on several days in a row, you'll get a streak.",
           ""
@@ -490,7 +490,7 @@
       "titleEs": "Configura tu portafolio de código",
       "descriptionEs": [
         [
-          "http://i.imgur.com/tP2ccTE.gif",
+          "//i.imgur.com/tP2ccTE.gif",
           "Un gif mostrándote como puedes pulsar en tu imagen de perfil en la esquina superior derecha conectar tu portafolio y GitHub.",
           "Dale un vistazo de tu portafolio de código. Pulsa en tu imagen en la esquina superior derecha. Para activar tu portafolio de código, necesitaras conectar tu cuenta de GitHub con Free Code Camp. Tu portafolio de código muestra tu progreso y cuantos Puntos Cafés tienes. Puedes obtener Puntos Cafés completando desafíos y ayudando a otros campistas en nuestras salas de chat. Si obtienes Puntos Cafés varios días consecutivos, obtendrás una racha.",
           ""
@@ -502,13 +502,13 @@
       "title": "Join a Campsite in Your City",
       "description": [
         [
-          "http://i.imgur.com/XugIMb4.jpg",
+          "//i.imgur.com/XugIMb4.jpg",
           "A picture of some of our campers meeting in a local cafe.",
           "Our Campsites are Facebook groups that help you meet other campers in your city. You can use these groups to plan and attend casual \"coffee-and-code\" events, where you meet other campers at a café and code together.",
           ""
         ],
         [
-          "http://i.imgur.com/fTFMjwf.gif",
+          "//i.imgur.com/fTFMjwf.gif",
           "A gif showing how you can click the link below, find your city on the list of Campsites, then click on the Facebook link for your city and join your city's Facebook group.",
           "Find your city on this list and click it. This will take you to your city's Campsite's Facebook group. Click the \"Join group\" button to apply to join your city's Facebook group. Someone from the campsite should approve you shortly. If your city isn't on this list, scroll to the bottom of the wiki article for instructions for how you can create your city's Campsite.",
           "https://github.com/FreeCodeCamp/freecodecamp/wiki/List-of-Free-Code-Camp-city-based-Campsites"
@@ -521,7 +521,7 @@
       "titleFr": "Configurer votre code portefeuille",
       "descriptionFr": [
         [
-          "http://i.imgur.com/tP2ccTE.gif",
+          "//i.imgur.com/tP2ccTE.gif",
           "Un gif montrant comment vous pouvez cliquez sur l'image de votre profil dans votre coin supérieur droit à votre code portefeuille et connectez GitHub.",
           "Vérifiez votre code portefeuille. Cliquez sur votre photo dans votre coin supérieur droit. Pour activer votre code portefeuille, vous'll nécessité de lier votre compte avec code sans GitHub Camp. Votre code portefeuille affiche votre progression et combien de bons points vous avez. Vous pouvez obtenir de bons points par remplir les défis et en aidant d'autres campeurs dans nos salles de chat. Si vous obtenez Brownie Points sur plusieurs jours d'affilée, vous'll obtenez une rayure.",
           ""
@@ -530,13 +530,13 @@
       "titleEs": "Únete a un Campamento en Tu Ciudad",
       "descriptionEs": [
         [
-          "http://i.imgur.com/NAOFJWN.jpg",
+          "//i.imgur.com/NAOFJWN.jpg",
           "Una imagen de algunos de nuestros campistas compartiendo en un café local. 3 hombres y 3 mujeres están sentados alrededor de una mesa con portátiles afuera, y están sonriendo y programando.",
           "Nuestros Campamentos te ayudan a programar con otros campistas en tu ciudad. Puedes coordinar grupos de estudio o atender eventos de programación locales juntos.",
           ""
         ],
         [
-          "http://i.imgur.com/fTFMjwf.gif",
+          "//i.imgur.com/fTFMjwf.gif",
           "Un gif mostrándote como puedes pulsar en el enlace inferior, encontrar tu ciudad en la lista de Campamentos, entonces haz clic en el enlace de Facebook para tu ciudad y unirte al grupo de Facebook de tu ciudad.",
           "Encuentra tu ciudad en esta lista y haz clic en esta. Esto te llevara al grupo de Facebook del Campamento de tu ciudad. Da clic en el botón de \"Unirse al grupo\" para unirte a el grupo. Alguien del mismo campamento debería aprobarte en breve. Si tu ciudad no esta en esta lista, ve al final del articulo de la wiki para ver instrucciones de como crear un campamento para tu ciudad.",
           "https://github.com/FreeCodeCamp/freecodecamp/wiki/List-of-Free-Code-Camp-city-based-Campsites"
@@ -548,49 +548,49 @@
       "title": "Learn What to Do If You Get Stuck",
       "description": [
         [
-          "http://i.imgur.com/lzKvwU2.jpg",
+          "//i.imgur.com/lzKvwU2.jpg",
           "The text \"Coding is hard.\"",
           "Coding is hard. You will get stuck. Even experienced coders get stuck. The key is knowing how to get unstuck.",
           ""
         ],
         [
-          "http://i.imgur.com/sfsidp6.jpg",
+          "//i.imgur.com/sfsidp6.jpg",
           "The text \"It takes time to get good at coding.\"",
           "It takes time to get good at coding. You wouldn't expect to beat a chess master after playing for 3 months. Don't expect to build the next Facebook after coding for 3 months.",
           ""
         ],
         [
-          "http://i.imgur.com/EoTfOyC.jpg",
+          "//i.imgur.com/EoTfOyC.jpg",
           "An image of some of our campers coding together in Montreal.",
           "Keep practicing coding every day and hanging out with other people who code, and you will become a job-ready coder.",
           ""
         ],
         [
-          "http://i.imgur.com/EWWZBag.jpg",
+          "//i.imgur.com/EWWZBag.jpg",
           "An image with the text \"1. Read the error 2. Search Google 3. Ask for help.",
           "Any time you get stuck or don't know what to do next: Read-Search-Ask.",
           ""
         ],
         [
-          "http://i.imgur.com/99BfAcK.jpg",
+          "//i.imgur.com/99BfAcK.jpg",
           "An image showing jQuery documentation",
           "First, read the documentation or error message. A key skill that good coders have is the ability to interpret and then follow instructions.",
           ""
         ],
         [
-          "http://i.imgur.com/GxvrsFb.gif",
+          "//i.imgur.com/GxvrsFb.gif",
           "A gif showing you how to do an advanced Google search. First, we enter the query \"jquery doesn't run when my page loads\". Then we click search tools button and change the \"Any time\" select box to \"within the last year\". Then we click on a result and read through the article and find our answer.",
           "If that didn't help, search Google. Good Google queries take a lot of practice. When you search Google, you usually want to include the language or framework you're using. You also want to limit the results to a recent period.",
           ""
         ],
         [
-          "http://i.imgur.com/LZYU7p2.gif",
+          "//i.imgur.com/LZYU7p2.gif",
           "A gif showing us following the link below to go to the help chat room and ask \"jquery doesn't run when my page loads\".",
           "If that didn't help, ask your friends. If you have trouble, you can ask your fellow campers in our help chat room.",
           "https://gitter.im/FreeCodeCamp/Help"
         ],
         [
-          "http://i.imgur.com/ZRgXraT.gif",
+          "//i.imgur.com/ZRgXraT.gif",
           "A gif showing us scrolling through our challenge map.",
           "Now you're ready to start coding. The \"Map\" button in your upper right hand corner will show you our challenge map. We recommend that you complete these from top to bottom, at a sustainable pace. Our open source community is constantly improving our challenges, so don't be surprised if they change or move around. Don't worry about going back - just keep moving forward. You can always go to your most recent challenge by clicking the \"Learn\" button.",
           ""
@@ -603,49 +603,49 @@
       "titleFr": "Apprenez quoi faire quand vous êtes bloqué ?",
       "descriptionFr": [
         [
-          "http://i.imgur.com/lzKvwU2.jpg",
+          "//i.imgur.com/lzKvwU2.jpg",
           "Le texte \"Coder est difficile.\"",
           "Coder est difficile. Vous serez bloqué un jour ou l'autre. Même les développeurs expérimentés peuvent être bloqués. La solution est de savoir comment se débloquer.",
           ""
         ],
         [
-          "http://i.imgur.com/sfsidp6.jpg",
+          "//i.imgur.com/sfsidp6.jpg",
           "Le texte \"Etre un bon développeur prend du temps.\"",
           "Etre un bon développeur prend du temps. Vous ne pouvez pas vous attendre à battre un maitre des echecs aprés 3 mois d'apprentissage. Ne vous attendez pas de construire le prochain Facebook aprés 3 mois de coding.",
           ""
         ],
         [
-          "http://i.imgur.com/EoTfOyC.jpg",
+          "//i.imgur.com/EoTfOyC.jpg",
           "Une image de quelques uns de nos développeurs codant ensemble à Montreal.",
           "Continuez de développer tous les jours et fréquentez d'autres développeurs et vous deviendrez un développeur prêt à l'emploi.",
           ""
         ],
         [
-          "http://i.imgur.com/EWWZBag.jpg",
+          "//i.imgur.com/EWWZBag.jpg",
           "Une image avec le texte \"1. Lisez l'erreur 2. Cherchez sur Google 3. Demandez de l'aide.",
           "Chaque fois que vous êtes bloqué ou que vous ne savez pas quoi faire : Lisez-Cherchez-Demandez.",
           ""
         ],
         [
-          "http://i.imgur.com/99BfAcK.jpg",
+          "//i.imgur.com/99BfAcK.jpg",
           "Une image montrant la document jQuery",
           "Lisez d'abord la documentation ou les messages d'erreurs. Le principal atout que les bon développeurs ont est la capacité d'interpréter et ensuite de suivre les instructions.",
           ""
         ],
         [
-          "http://i.imgur.com/GxvrsFb.gif",
+          "//i.imgur.com/GxvrsFb.gif",
           "Une image vous montrant comment fiare des recherches avancées sur Google. On commence par rentrer la requète \"jquery ne fonctionne pas lors du chargement de ma page\". Puis nous cliquons sur la barre de recherche et changeons la case à cocher \"Any time\" cochons la case \"au cours de l'année précédente\". Puis nous cliquons sur le résultat et lisons l'article et trouvons notre réponse.",
           "Si cela ne vous aide pas, recherchez sur Google. De bonnes recherches sur Google demande pas mal de pratique. Quand vous recherchez sur Google, vous devez inclure le langage ou le framework que vous utilisez. Vous voulez aussi limiter vos résultats a une période récente.",
           ""
         ],
         [
-          "http://i.imgur.com/LZYU7p2.gif",
+          "//i.imgur.com/LZYU7p2.gif",
           "Une image vous montrant le lien ci-dessous pour rejoindre le char et demander \"jquery ne fonctionne pas lors du chargement de ma page\".",
           "Si cela ne vous aide pas, demande à vos amis. Si vous avez des difficultés, vous pouvez demander aux autres développeurs sur le chat.",
           "https://gitter.im/FreeCodeCamp/Help"
         ],
         [
-          "http://i.imgur.com/ZRgXraT.gif",
+          "//i.imgur.com/ZRgXraT.gif",
           "Une image vous montrant le cursus de notre carte des défis.",
           "Maintenant vous être prêt pour commencer à coder. Le boutton \"Map\" situé en haut à droite de votre écran vous montrera notre carte des défis. Nous vous recommandons de les completer du début jusqu'à la fin, régulièrement. Notre communauté open source continue de d'améliorer nos défis, ne soyez donc pas surpris si ils changent ou évoluent. Ce n'est pas la peine de revenir en arrière, continuez à progresser. Vous pouvez toujours accéder à nos derniers défis juste en cliquant sur le boutton \"Learn\".",
           ""
@@ -654,49 +654,49 @@
       "titleEs": "Aprende que hacer si te quedas atascado",
       "descriptionEs": [
         [
-          "http://i.imgur.com/lzKvwU2.jpg",
+          "//i.imgur.com/lzKvwU2.jpg",
           "El texto \"Programar es difícil.\"",
           "Programar es difícil. Quedarás atascado. Incluso programadores experimentados quedan atascados. La clave es saber como desatascarse.",
           ""
         ],
         [
-          "http://i.imgur.com/sfsidp6.jpg",
+          "//i.imgur.com/sfsidp6.jpg",
           "El texto \"Volverse bueno programando requiere tiempo.\"",
           "Volverse bueno programando requiere tiempo. No esperarías derrotar a un maestro del ajedrez después de jugar por 3 meses. No esperes crear el próximo Facebook después de programar 3 meses.",
           ""
         ],
         [
-          "http://i.imgur.com/EoTfOyC.jpg",
+          "//i.imgur.com/EoTfOyC.jpg",
           "Una imagen de algunos de nuestros campistas programando juntos en Montreal.",
           "Sigue practicando programación cada día y sal con otras personas que programen, y te volverás un programador listo para un trabajo.",
           ""
         ],
         [
-          "http://i.imgur.com/EWWZBag.jpg",
+          "//i.imgur.com/EWWZBag.jpg",
           "Una imagen con el texto \"1. Lee el error 2. Busca en Google 3. Pide ayuda.",
           "En cualquier momento en el que te quedes atascado o no sepas que hacer a continuación: Lee-Busca-Pregunta.",
           ""
         ],
         [
-          "http://i.imgur.com/99BfAcK.jpg",
+          "//i.imgur.com/99BfAcK.jpg",
           "Una imagen mostrando la documentación de jQuery",
           "Primero, lee la documentación o el mensaje de error. Una habilidad clave que los buenos programadores poseen es el poder interpretar y seguir instrucciones.",
           ""
         ],
         [
-          "http://i.imgur.com/GxvrsFb.gif",
+          "//i.imgur.com/GxvrsFb.gif",
           "Un gif mostrándote como hacer una búsqueda avanzada en Google. Primero, escribimos la consulta \"jquery no corre cuando mi página carga\". Entonces damos clic en el botón de herramientas y cambiamos la selección de \"En cualquier momento\" a \"en el último año\". Entonces hacemos clic en un resultado o leemos a través del artículo y encontramos nuestra respuesta.",
           "Si eso no ayudo, busca en Google. Realizar buenas búsquedas en Google requiere mucha práctica. Cuando buscas en Google, usualmente querrás incluir el lenguaje o entorno (framework) que estás usando. También querrás limitar los resultados a un período reciente.",
           ""
         ],
         [
-          "http://i.imgur.com/LZYU7p2.gif",
+          "//i.imgur.com/LZYU7p2.gif",
           "Un gif mostrándonos como seguir el enlace inferior para ir a nuestra sala de chat de ayuda y preguntar \"jquery no corre cuando mi página carga\".",
           "Si eso no te ayudó, pregúntale a tus amigos. Si tienes problemas, puedes preguntar a tus compañeros campistas en nuestra sala de chat.",
           "https://gitter.im/FreeCodeCamp/Help"
         ],
         [
-          "http://i.imgur.com/ZRgXraT.gif",
+          "//i.imgur.com/ZRgXraT.gif",
           "Un gif mostrándonos nuestro mapa de desafíos.",
           "Ahora estas listo para empezar a programar. El botón de  \"Mapa\" en tu esquina superior derecha te mostrará nuestro mapa de desafíos. Te recomendaos que completes los desafíos de arriba hacía abajo, a un ritmo sostenible. Nuestra comunidad de código abierto esta constantemente mejorando nuestros desafíos, así que no te sorprendas si cambian o se mueven alrededor. No te preocupes por volver hacia atrás - solo continúa avanzando. Siempre puedes ir a tu desafío más reciente pulsando el botón de \"Aprender\".",
           ""
diff --git a/seed/challenges/01-front-end-development-certification/basic-bonfires.json b/seed/challenges/01-front-end-development-certification/basic-bonfires.json
index 8a77de4..1cf13be 100644
--- a/seed/challenges/01-front-end-development-certification/basic-bonfires.json
+++ b/seed/challenges/01-front-end-development-certification/basic-bonfires.json
@@ -9,25 +9,25 @@
       "title": "Get Set for our Algorithm Challenges",
       "description": [
         [
-          "http://i.imgur.com/sJkp30a.png",
+          "//i.imgur.com/sJkp30a.png",
           "An image of a algorithm challenge showing directions, tests, and the code editor.",
           "Our algorithm challenges will teach you how to think like a programmer.",
           ""
         ],
         [
-          "http://i.imgur.com/d8LuRNh.png",
+          "//i.imgur.com/d8LuRNh.png",
           "A mother bird kicks a baby bird out of her nest.",
           "Our previous challenges introduced you to programming concepts. But for these algorithm challenges, you'll now need to apply what you learned to solve open-ended problems.",
           ""
         ],
         [
-          "http://i.imgur.com/WBetuBa.jpg",
+          "//i.imgur.com/WBetuBa.jpg",
           "A programmer punching through his laptop screen in frustration.",
           "Our algorithm challenges are hard. Some of them may take you several hours to solve. You will get frustrated. But don't quit.",
           ""
         ],
         [
-          "http://i.imgur.com/p2TpOQd.jpg",
+          "//i.imgur.com/p2TpOQd.jpg",
           "A cute dog jumping over a hurdle and winking and pointing his paw at you.",
           "When you get stuck, just use the Read-Search-Ask methodology.<br>Don't worry - you've got this.",
           ""
@@ -39,25 +39,25 @@
       "challengeType": 7,
       "descriptionEs": [
         [
-          "http://i.imgur.com/sJkp30a.png",
+          "//i.imgur.com/sJkp30a.png",
           "Una imagen de un desafio sobre algoritmos que presenta instrucciones, pruebas y el editor de código.",
           "Nuestros desafios sobre algoritmos te enseñarán como pensar como un programador.",
           ""
         ],
         [
-          "http://i.imgur.com/d8LuRNh.png",
+          "//i.imgur.com/d8LuRNh.png",
           "Una mamá pájaro saca un bebé pájaro fuer de su nido.",
           "Nuestros desafios anteriores te introdujeron a los conceptos de programación. Pero para estos desafios sobre algoritmos, ahora necesitarás aplicar lo que has aprendido y resolver problemas de respuesta abierta",
           ""
         ],
         [
-          "http://i.imgur.com/WBetuBa.jpg",
+          "//i.imgur.com/WBetuBa.jpg",
           "Un programador frustado golpeando la pantalla de su computador.",
           "Nuestros desafíos sobre algortimos son difíciles.  Algunos pueden requerir muchas horas para resolverse.  Podrás frustarte, pero no te rindas.",
           ""
         ],
         [
-          "http://i.imgur.com/p2TpOQd.jpg",
+          "//i.imgur.com/p2TpOQd.jpg",
           "Un tierno perro que salta sobre un obstáculo, pica el ojo y te apunta con su pata.",
           "Cuando te atasques, usa la metodología Leer-Buscar-Preguntar.<br>No te preocupes -  ya lo has entendido.",
           ""
diff --git a/seed/challenges/01-front-end-development-certification/basic-javascript.json b/seed/challenges/01-front-end-development-certification/basic-javascript.json
index 30e3948..e633511 100644
--- a/seed/challenges/01-front-end-development-certification/basic-javascript.json
+++ b/seed/challenges/01-front-end-development-certification/basic-javascript.json
@@ -5332,7 +5332,7 @@
         "    var slotTwo;",
         "    var slotThree;",
         "   ",
-        "    var images = [\"http://i.imgur.com/9H17QFk.png\", \"http://i.imgur.com/9RmpXTy.png\", \"http://i.imgur.com/VJnmtt5.png\"];",
+        "    var images = [\"//i.imgur.com/9H17QFk.png\", \"//i.imgur.com/9RmpXTy.png\", \"//i.imgur.com/VJnmtt5.png\"];",
         "   ",
         "    // Only change code below this line.",
         "    ",
@@ -5502,7 +5502,7 @@
         "    var slotTwo;",
         "    var slotThree;",
         "    ",
-        "    var images = [\"http://i.imgur.com/9H17QFk.png\", \"http://i.imgur.com/9RmpXTy.png\", \"http://i.imgur.com/VJnmtt5.png\"];",
+        "    var images = [\"//i.imgur.com/9H17QFk.png\", \"//i.imgur.com/9RmpXTy.png\", \"//i.imgur.com/VJnmtt5.png\"];",
         "    ",
         "    slotOne = Math.floor(Math.random() * (3 - 1 + 1)) + 1;",
         "    slotTwo = Math.floor(Math.random() * (3 - 1 + 1)) + 1;",
@@ -5674,7 +5674,7 @@
         "    var slotTwo;",
         "    var slotThree;",
         "    ",
-        "    var images = [\"http://i.imgur.com/9H17QFk.png\", \"http://i.imgur.com/9RmpXTy.png\", \"http://i.imgur.com/VJnmtt5.png\"];",
+        "    var images = [\"//i.imgur.com/9H17QFk.png\", \"//i.imgur.com/9RmpXTy.png\", \"//i.imgur.com/VJnmtt5.png\"];",
         "    ",
         "    slotOne = Math.floor(Math.random() * (3 - 1 + 1)) + 1;",
         "    slotTwo = Math.floor(Math.random() * (3 - 1 + 1)) + 1;",
@@ -5851,7 +5851,7 @@
         "    var slotTwo;",
         "    var slotThree;",
         "    ",
-        "    var images = [\"http://i.imgur.com/9H17QFk.png\", \"http://i.imgur.com/9RmpXTy.png\", \"http://i.imgur.com/VJnmtt5.png\"];",
+        "    var images = [\"//i.imgur.com/9H17QFk.png\", \"//i.imgur.com/9RmpXTy.png\", \"//i.imgur.com/VJnmtt5.png\"];",
         "    ",
         "    slotOne = Math.floor(Math.random() * (3 - 1 + 1)) + 1;",
         "    slotTwo = Math.floor(Math.random() * (3 - 1 + 1)) + 1;",
diff --git a/seed/challenges/01-front-end-development-certification/basic-ziplines.json b/seed/challenges/01-front-end-development-certification/basic-ziplines.json
index ad28416..18028b3 100644
--- a/seed/challenges/01-front-end-development-certification/basic-ziplines.json
+++ b/seed/challenges/01-front-end-development-certification/basic-ziplines.json
@@ -9,37 +9,37 @@
       "title": "Get Set for our Front End Development Projects",
       "description": [
         [
-          "http://i.imgur.com/OAD6SJz.png",
+          "//i.imgur.com/OAD6SJz.png",
           "An image of a Simon game, one our front end projects.",
           "Our front end development projects will give you a chance to apply the front end skills you've developed up to this point. We'll use a popular browser-based code editor called CodePen.",
           ""
         ],
         [
-          "http://i.imgur.com/WBetuBa.jpg",
+          "//i.imgur.com/WBetuBa.jpg",
           "A programmer punching through his laptop screen in frustration.",
           "These projects are hard. It takes most campers several days to build each project. You will get frustrated. But don't quit. This gets easier with practice.",
           ""
         ],
         [
-          "http://i.imgur.com/p2TpOQd.jpg",
+          "//i.imgur.com/p2TpOQd.jpg",
           "A cute dog jumping over a hurdle and winking and pointing his paw at you.",
           "When you get stuck, just use the Read-Search-Ask methodology. Don't worry - you've got this.",
           ""
         ],
         [
-          "http://i.imgur.com/G1saeDt.gif",
+          "//i.imgur.com/G1saeDt.gif",
           "A gif showing how to create a Codepen account.",
           "For our front end project challenges, we'll use a popular browser-based code editor called CodePen. Click the \"Open link in new tab\" button below to open CodePen's signup page. Fill out the form and click \"Sign up\". <br><div class=\"small\">Note: If you already have a CodePen account, you can skip this step by clicking \"Open link in new tab\", closing the new tab that opens, then clicking \"go to my next step\". We removed our \"skip step\" button because many people would just click it repeatedly without doing these important steps.</div>",
           "http://codepen.io/signup/free"
         ],
         [
-          "http://i.imgur.com/U4y9RJ1.gif",
+          "//i.imgur.com/U4y9RJ1.gif",
           "A gif showing that you can type \"hello world\" will output \"hello world\" in the preview window. You can also drag windows to resize them, and change their orientation.",
           "In the HTML box, create an h1 element with the text \"Hello World\". You can drag the frames around to resize them. You can also click the \"Change View\" button and change the orientation of the frames.",
           ""
         ],
         [
-          "http://i.imgur.com/G9KFQDL.gif",
+          "//i.imgur.com/G9KFQDL.gif",
           "A gif showing the process of adding Bootstrap to your pen.",
           "Click the gear in the upper left hand corner of the CSS box, then scroll down to \"Quick add\" and choose Bootstrap. Now give your h1 element the class of \"text-primary\" to change its color and prove that Bootstrap is now available.",
           ""
@@ -53,37 +53,37 @@
       "titleRu": "Приготовьтесь к разработке фронтенд проектов",
       "descriptionRu": [
         [
-          "http://i.imgur.com/OAD6SJz.png",
+          "//i.imgur.com/OAD6SJz.png",
           "Игра Саймона - один из фронтенд проектов.",
           "Наши фронтенд проекты дадут вам шанс применить полученные к этому моменту знания по фронтенд разработке. Мы будем использовать популярный браузерный редактор кода - CodePen.",
           ""
         ],
         [
-          "http://i.imgur.com/WBetuBa.jpg",
+          "//i.imgur.com/WBetuBa.jpg",
           "Программист от отчаяния кулаком пробивает экран своего ноутбука.",
           "Это трудные проекты. Разработка каждого занимает у большинства кэмперов несколько дней. У вас может возникнуть чувство отчаяния. Несмотря на это не сдавайтесь. С практикой этот процесс станет проще.",
           ""
         ],
         [
-          "http://i.imgur.com/p2TpOQd.jpg",
+          "//i.imgur.com/p2TpOQd.jpg",
           "Милый пес, прыгающий через препятствие, указывает на вас лапой и подмигивает.",
           "Если что-то не получается, воспользуйтесь Read-Search-Ask. Не волнуйтесь - вы сможете это сделать.",
           ""
         ],
         [
-          "http://i.imgur.com/G1saeDt.gif",
+          "//i.imgur.com/G1saeDt.gif",
           "Гифка показывающая как зарегистрироваться на CodePen.",
           "Для заданий по фронтенд разработке, мы будем использовать популярный браузерный редактор кода под названием CodePen. Откройте страницу регистрации на сайте CodePen, нажав на расположенную чуть ниже кнопку \"Open link in new tab\". Заполните форму и нажмите \"Sign up\". <br><div class=\"small\">Замечание: Если у вас уже есть аккаунт CodePen, то этот шаг можно пропустить: нажмите на кнопку \"Open link in new tab\", закройте появившуюся вкладку и затем кликните \"go to my next step\". Мы убрали кнопку \"skip step\", ввиду того что большинство людей просто нажимали бы ее несколько раз подряд и пропускали бы эти важные инструкции.</div>",
           "http://codepen.io/signup/free"
         ],
         [
-          "http://i.imgur.com/U4y9RJ1.gif",
+          "//i.imgur.com/U4y9RJ1.gif",
           "Гифка показывающая набор в редакторе заголовка с текстом \"hello world\", который затем отображается в окошке предпросмотра. А также указывающая как изменить размер окон редактора или поменять их расположение.",
           "В окошке HTML создайте элемент h1 с текстом \"Hello World\". Ухватив края окон можно изменить их размер. А нажав на кнопку \"Change View\" поменять их расположение.",
           ""
         ],
         [
-          "http://i.imgur.com/G9KFQDL.gif",
+          "//i.imgur.com/G9KFQDL.gif",
           "Гифка показывающая как в CodePen добавить к проекту Bootstrap.",
           "Нажмите на звездочку в левом верхнем углу окошка CSS, найдите внизу поле \"Quick add\" и выберите в нем Bootstrap. Добавьте к элементу h1 класс \"text-primary\", чтобы изменить его цвет и удостовериться, что Bootstrap подключен.",
           ""
@@ -92,37 +92,37 @@
       "titleEs": "Prepárate para los Proyectos de Desarrollo de Interfaces",
       "descriptionEs": [
         [
-          "http://i.imgur.com/OAD6SJz.png",
+          "//i.imgur.com/OAD6SJz.png",
           "Una imagen del juego Simón, uno de nuestros proyectos de interfaz.",
           "Nuestros proyectos de desarrollo de interfaces te darán oportunidad de aplicar las habilidades con interfaces que has desarrollado hasta este momento.  Usaremos un editor de código basado en el navegador llamado CodePen.",
           ""
         ],
         [
-          "http://i.imgur.com/WBetuBa.jpg",
+          "//i.imgur.com/WBetuBa.jpg",
           "Un programador frustado golpeando la pantalla de su computador.",
           "Nuestros desafíos sobre algoritmos son difíciles.  Algunos pueden requerir muchas horas para resolverse.  Podrás frustarte, pero no te rindas. Se vuelve fácil con práctica.",
           ""
         ],
         [
-          "http://i.imgur.com/p2TpOQd.jpg",
+          "//i.imgur.com/p2TpOQd.jpg",
           "Un tierno perro que salta sobre un obstáculo, pica el ojo y te apunta con su pata.",
           "Cuando te atasques, usa la metodología Leer-Buscar-Preguntar. No te preocupes -  lo tienes resuelto.",
           ""
         ],
         [
-          "http://i.imgur.com/G1saeDt.gif",
+          "//i.imgur.com/G1saeDt.gif",
           "Un gif que muestra cómo crear una cuenta en Codepen.",
           "Para nuestros desafíos de interfaces, usaremos un editor de código basado en el navegador que es muy famoso llamado Codepen. Pulsa en el botón de abajo \"Open link in new tab\" para abrir la página de registro de CodePen. Rellena el formulario y pulsa \"Sign up\". <br><div class=\"small\">Nota: Si ya tienes una cuenta de CodePen, puedes omitir este paso pulsando \"Open link in new tab\", cierra la nueva pestaña que se abre, entonces pulsa \"go to my next step\". Eliminamos nuestro botón \"skip step\" porque mucha gente solamente pulsa el botón sin realizar estos importantes pasos.</div>",
           "http://codepen.io/signup/free"
         ],
         [
-          "http://i.imgur.com/U4y9RJ1.gif",
+          "//i.imgur.com/U4y9RJ1.gif",
           "Un gif que muestra que puedes escribir \"hello world\" en el editor, lo cual escribirá \"hello world\" en la ventana de vista previa. También puedes mover las ventanas para cambiar su tamaño, y cambiar su orientación.",
           "En la ventana de HTML, crea un elemento h1 con el texto \"Hola mundo\". Puedes arrastrar los bordes de las ventanas para cambiar su tamaño. También puedes pulsar el botón de \"Change View\" para cambiar la orientación de las ventanas.",
           ""
         ],
         [
-          "http://i.imgur.com/G9KFQDL.gif",
+          "//i.imgur.com/G9KFQDL.gif",
           "Un gif que muestra el proceso de agregar Bootstrap a tu proyecto.",
           "Pulsa el engrane en la esquina superior izquierda de la ventana de CSS, luego ve hacia abajo hasta donde dice \"Quick add\" y elige Bootstrap. Ahora dale a tu elemento h1 la clase \"text-primary\" para cambiar su color y verificar que Bootstrap está activado.",
           ""
diff --git a/seed/challenges/01-front-end-development-certification/bootstrap.json b/seed/challenges/01-front-end-development-certification/bootstrap.json
index 673fa6f..881e5bf 100644
--- a/seed/challenges/01-front-end-development-certification/bootstrap.json
+++ b/seed/challenges/01-front-end-development-certification/bootstrap.json
@@ -338,7 +338,7 @@
       "description": [
         "Normally, your <code>button</code> elements are only as wide as the text that they contain. By making them block elements, your button will stretch to fill your page's entire horizontal space and any elements following it will flow onto a \"new line\" below the block.",
         "This image illustrates the difference between <code>inline</code> elements and <code>block-level</code> elements:",
-        "<a href=\"http://i.imgur.com/O32cDWE.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/O32cDWE.png\" title=\"Click to enlarge\" alt=\"An \"inline\" button is as small as the text it contains. In this image, it's centered. Below it is a \"block-level\" button, which stretches to fill the entire horizontal space.'></a>",
+        "<a href=\"//i.imgur.com/O32cDWE.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"//i.imgur.com/O32cDWE.png\" title=\"Click to enlarge\" alt=\"An \"inline\" button is as small as the text it contains. In this image, it's centered. Below it is a \"block-level\" button, which stretches to fill the entire horizontal space.'></a>",
         "Note that these buttons still need the <code>btn</code> class.",
         "Add Bootstrap's <code>btn-block</code> class to your Bootstrap button."
       ],
@@ -413,7 +413,7 @@
       "descriptionEs": [
         "Normalmente, tus elementos <code>button</code> son sólo tan anchos como el texto que contienen. Al convertir un botón en elemento a nivel de bloque, este se estirará para llenar todo el espacio horizontal y cualquier elemento que lo siga se desplazará a una \"nueva línea\" debajo del bloque.",
         "Esta imagen es un ejemplo de la diferencia entre elementos en línea (<code>inline</code>) y elementos a nivel de bloque (<code>block-level</code>):",
-        "<a href=\"http://i.imgur.com/O32cDWE.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/O32cDWE.png\" title=\"Pulsa para agrandar\" alt=\"Un botón \"en línea\" es tan pequeño como el texto que contiene. En esta imagen, está centrado. Debajo de este hay un botón \"a nivel de bloque\", que se estira hasta llenar todo el espacio horizontal.'></a>",
+        "<a href=\"//i.imgur.com/O32cDWE.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"//i.imgur.com/O32cDWE.png\" title=\"Pulsa para agrandar\" alt=\"Un botón \"en línea\" es tan pequeño como el texto que contiene. En esta imagen, está centrado. Debajo de este hay un botón \"a nivel de bloque\", que se estira hasta llenar todo el espacio horizontal.'></a>",
         "Ten en cuenta que estos botones todavía necesitan la clase <code>btn</code>.",
         "Agrega la clase de Bootstrap <code>btn-block</code> a tu botón Bootstrap."
       ]
@@ -673,7 +673,7 @@
       "description": [
         "Bootstrap uses a responsive grid system, which makes it easy to put elements into rows and specify each element's relative width. Most of Bootstrap's classes can be applied to a <code>div</code> element.",
         "Here's a diagram of how Bootstrap's 12-column grid layout works:",
-        "<a href=\"http://i.imgur.com/FaYuui8.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/FaYuui8.png\" title=\"Click to enlarge\" alt=\"an image illustrating Bootstrap's grid system\"></a>",
+        "<a href=\"//i.imgur.com/FaYuui8.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"//i.imgur.com/FaYuui8.png\" title=\"Click to enlarge\" alt=\"an image illustrating Bootstrap's grid system\"></a>",
         "Note that in this illustration, the <code>col-md-*</code> class is being used. Here, <code>md</code> means medium, and <code>*</code> is a number specifying how many columns wide the element should be. In this case, the column width of an element on a medium-sized screen, such as a laptop, is being specified.",
         "In the Cat Photo App that we're building, we'll use <code>col-xs-*</code>, where <code>xs</code> means extra small (like an extra-small mobile phone screen), and <code>*</code> is the number of columns specifying how many columns wide the element should be.",
         "Put the <code>Like</code>, <code>Info</code> and <code>Delete</code> buttons side-by-side by nesting all three of them within one <code>&#60;div class=\"row\"&#62;</code> element, then each of them within a <code>&#60;div class=\"col-xs-4\"&#62;</code> element.",
@@ -753,7 +753,7 @@
       "descriptionEs": [
         "Bootstrap utiliza un sistema de cuadrícula adaptativa que facilita el poner elementos en fila y especificar la anchura relativa de cada elemento. La mayoría de las clases de Bootstrap pueden ser aplicadas a un elemento <code>div</code>.",
         "Aquí hay un diagrama del funcionamiento de la cuadrícula de 12 columnas Bootstrap:",
-        "<a href=\"http://i.imgur.com/FaYuui8.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/FaYuui8.png\" title=\"Click to enlarge\" alt=\"una imagen que muestra el sistema de cuadrícula de Bootstrap\"></a>",
+        "<a href=\"//i.imgur.com/FaYuui8.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"//i.imgur.com/FaYuui8.png\" title=\"Click to enlarge\" alt=\"una imagen que muestra el sistema de cuadrícula de Bootstrap\"></a>",
         "En esta ilustración se está utilizando la clase <code>col-md-*</code>. Aquí, <code>md</code> significa mediano, y <code>*</code> es un número que especifica la cantidad de columnas debe tomar el ancho del elemento. En este caso, se especifica el ancho de columna de un elemento en una pantalla de tamaño mediano, como una laptop.",
         "En la aplicación de fotos de gatos que estamos construyendo, usaremos <code>col-xs-*</code>, donde <code>xs</code> significa extra pequeño (como una pantalla extra-pequeña de un teléfono), y <code>*</code> especifica el número de columnas que debe tomar el ancho del elemento.",
         "Pon los botones de <code>Like</code>, <code>Info</code> y <code>Delete</code> lado a lado. Esto se hace anidando los tres botones dentro de un elemento <code>&#60;div class=\"row\"&#62;</code>, y luego cada uno de ellos dentro de un elemento <code>&#60;div class=\"col-xs-4\"&#62;</code>.",
@@ -864,7 +864,7 @@
       "description": [
         "You can use spans to create inline elements. Remember when we used the <code>btn-block</code> class to make the button fill the entire row?",
         "This image illustrates the difference between <code>inline</code> elements and <code>block-level</code> elements:",
-        "<a href=\"http://i.imgur.com/O32cDWE.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/O32cDWE.png\" title=\"Click to enlarge\" alt=\"An \"inline\" button is as small as the text it contains. In this image, it's centered. Below it is a \"block-level\" button, which stretches to fill the entire horizontal space.'></a>",
+        "<a href=\"//i.imgur.com/O32cDWE.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"//i.imgur.com/O32cDWE.png\" title=\"Click to enlarge\" alt=\"An \"inline\" button is as small as the text it contains. In this image, it's centered. Below it is a \"block-level\" button, which stretches to fill the entire horizontal space.'></a>",
         "By using the <code>span</code> element, you can put several elements together, and even style different parts of the same element differently.",
         "Nest the word \"love\" in your \"Things cats love\" element below within a <code>span</code> element. Then give that <code>span</code> the class <code>text-danger</code> to make the text red.",
         "Here's how you would do this with the \"Top 3 things cats hate\" element:",
@@ -939,7 +939,7 @@
       "descriptionEs": [
         "Puedes utilizar span para crear elementos en línea. ¿Recuerdas cuando usamos la clase <code>btn-block</code> para hacer que el botón llenara toda la línea?",
         "Esta imagen ilustra la diferencia entre elementos en línea (<code>inline</code>) y elementos a nivel de bloque (<code>block-level</code>):",
-        "<a href=\"http://i.imgur.com/O32cDWE.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/O32cDWE.png\" title=\"Pulsa para agrandar\" alt=\"Un botón \"en línea\" es tan pequeño como el texto que contiene. En esta imagen, está centrado. Debajo de este hay un botón \"a nivel de bloque\", que se estira para llenar todo el espacio horizontal.'></a>",
+        "<a href=\"//i.imgur.com/O32cDWE.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"//i.imgur.com/O32cDWE.png\" title=\"Pulsa para agrandar\" alt=\"Un botón \"en línea\" es tan pequeño como el texto que contiene. En esta imagen, está centrado. Debajo de este hay un botón \"a nivel de bloque\", que se estira para llenar todo el espacio horizontal.'></a>",
         "Al usar el elemento <code>span</code>, puedes poner varios elementos juntos, e incluso darle diferentes estilos a partes diferentes del mismo elemento.",
         "Anida la palabra \"love\" en tu elemento \"Things cats love\" dentro de un elemento <code>span</code>. Luego, asigna a ese elemento <code>span</code> la clase <code>text-danger</code> para hacer que el texto sea rojo.",
         "Así es como lo harías con el elemento \"Top 3 things cats hate\":",
@@ -953,7 +953,7 @@
         "We will make a simple heading for our Cat Photo App by putting the title and relaxing cat image in the same row.",
         "Remember, Bootstrap uses a responsive grid system, which makes it easy to put elements into rows and specify each element's relative width. Most of Bootstrap's classes can be applied to a <code>div</code> element.",
         "Here's a diagram of how Bootstrap's 12-column grid layout works:",
-        "<a href=\"http://i.imgur.com/FaYuui8.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/FaYuui8.png\" title=\"Click to enlarge\" alt=\"an image illustrating Bootstrap's grid system\"></a>",
+        "<a href=\"//i.imgur.com/FaYuui8.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"//i.imgur.com/FaYuui8.png\" title=\"Click to enlarge\" alt=\"an image illustrating Bootstrap's grid system\"></a>",
         "Note that in this illustration, the <code>col-md-*</code> class is being used. Here, <code>md</code> means medium, and <code>*</code> is a number specifying how many columns wide the element should be. In this case, the column width of an element on a medium-sized screen, such as a laptop, is being specified.",
         "In the Cat Photo App that we're building, we'll use <code>col-xs-*</code>, where <code>xs</code> means extra small (like an extra-small mobile phone screen), and <code>*</code> is the number of columns specifying how many columns wide the element should be.",
         "Nest your first image and your <code>h2</code> element within a single <code>&#60;div class=\"row\"&#62;</code> element. Nest your <code>h2</code> element within a <code>&#60;div class=\"col-xs-8\"&#62;</code> and your image in a <code>&#60;div class=\"col-xs-4\"&#62;</code> so that they are on the same line.",
@@ -1028,7 +1028,7 @@
         "Crearemos un encabezado simple para nuestra aplicación de fotos de gatos poniendo el título y la relajante imagen del gato en la misma línea.",
         "Recuerda, Bootstrap usa un sistema de cuadrícula adaptativo, el cual facilita poner elementos en filas y especificar el ancho relativo de cada elemento. La mayoría de las clases de Bootstrap pueden aplicarse a un elemento <code>div</code>.",
         "Aquí hay un diagrama del funcionamiento de la cuadrícula de 12 columnas Bootstrap:",
-        "<a href=\"http://i.imgur.com/FaYuui8.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/FaYuui8.png\" title=\"Pulsa para agrandar\" alt=\"una imagen que muestra el sistema de cuadrícula de Bootstrap\"></a>",
+        "<a href=\"//i.imgur.com/FaYuui8.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"//i.imgur.com/FaYuui8.png\" title=\"Pulsa para agrandar\" alt=\"una imagen que muestra el sistema de cuadrícula de Bootstrap\"></a>",
         "En esta ilustración se está utilizando la clase <code>col-md-*</code>. Aquí, <code>md</code> significa mediano, y <code>*</code> es un número que especifica el número de columnas que debe tomar el ancho del elemento. En este caso, se especifica el ancho de columna de un elemento en una pantalla de tamaño mediano, como un computador portátil.",
         "En la aplicación de fotos de gatos que estamos construyendo, usaremos <code>col-xs-*</code>, donde <code>xs</code> significa extra pequeño (como una pantalla extra-pequeña de un teléfono), y <code>*</code> especifica el número de columnas que debe tomar el ancho del elemento.",
         "Anida tu primera imagen y tu elemento <code>h2</code> dentro de un solo elemento <code>&#60;div class=\"row\"&#62;</code>. Anida tu texto <code>h2</code> dentro de un <code>&#60;div class=\"col-xs-8\"&#62;</code> y tu imagen en un <code>&#60;div class=\"col-xs-4\"&#62;</code> de tal forma que estén en la misma línea.",
diff --git a/seed/challenges/01-front-end-development-certification/front-end-development-certificate.json b/seed/challenges/01-front-end-development-certification/front-end-development-certificate.json
index db4b8cd..680ad57 100644
--- a/seed/challenges/01-front-end-development-certification/front-end-development-certificate.json
+++ b/seed/challenges/01-front-end-development-certification/front-end-development-certificate.json
@@ -8,25 +8,25 @@
       "title": "Claim Your Front End Development Certificate",
       "description": [
         [
-          "http://i.imgur.com/k8btNUB.jpg",
+          "//i.imgur.com/k8btNUB.jpg",
           "An image of our Front End Development Certificate",
           "This challenge will give you your verified Front End Development Certificate. Before we issue your certificate, we must verify that you have completed all of our basic and intermediate algorithm scripting challenges, and all our basic, intermediate, and advanced front end development projects. You must also accept our Academic Honesty Pledge. Click the button below to start this process.",
           ""
         ],
         [
-          "http://i.imgur.com/HArFfMN.jpg",
+          "//i.imgur.com/HArFfMN.jpg",
           "The definition of plagiarism: Plagiarism (noun) - copying someone else’s work and presenting it as your own without crediting them",
           "By clicking below, you pledge that all of your submitted code A) is code you or your pair personally wrote, or B) comes from open source libraries like jQuery, or C) has been clearly attributed to its original authors. You also give us permission to audit your challenge solutions and revoke your certificate if we discover evidence of plagiarism.",
           "#"
         ],
         [
-          "http://i.imgur.com/14F2Van.jpg",
+          "//i.imgur.com/14F2Van.jpg",
           "An image of the text \"Front End Development Certificate requirements\"",
           "Let's confirm that you have completed all of our basic and intermediate algorithm scripting challenges, and all our basic, intermediate, and advanced front end development projects. Click the button below to verify this.",
           "#"
         ],
         [
-          "http://i.imgur.com/16SIhHO.jpg",
+          "//i.imgur.com/16SIhHO.jpg",
           "An image of the word \"Congratulations\"",
           "Congratulations! We've added your Front End Development Certificate to your portfolio page. Unless you choose to hide your solutions, this certificate will remain publicly visible and verifiable.",
           ""
@@ -242,25 +242,25 @@
       "challengeType": 7,
       "descriptionEs": [
         [
-          "http://i.imgur.com/k8btNUB.jpg",
+          "//i.imgur.com/k8btNUB.jpg",
           "Una imagen que muestra nuestro certificado de Desarrollo de interfaces",
           "Este desafío te otorga tu certificado autenticado de Desarrollo de interfaces. Antes de que podamos emitir tu certificado, debemos verificar que has completado todos los desafíos básicos e intermedios de diseño de algoritmos, y todos los proyectos básicos e intermedios de desarrollo de interfaces. También debes aceptar nuestro Juramento de honestidad académica. Pulsa el botón siguiente para iniciar este proceso.",
           ""
         ],
         [
-          "http://i.imgur.com/HArFfMN.jpg",
+          "//i.imgur.com/HArFfMN.jpg",
           "Plagio (nombre): acción y efecto de plagiar. Plagiar (verbo) - copiar en lo sustancial obras ajenas, dándolas como propias.",
           "Al pulsar el botón siguiente, juras que todo el código en tus soluciones a los desafíos A) es código que tú o tu compañero escribieron personalmente, o B) proviene de librerías de código abierto como jQuery, o C) ha sido claramente atribuido a sus autores originales. También nos otorgas el permiso para auditar tus soluciones a los desafíos y revocar tu certificado si encontramos evidencia de plagio.",
           "#"
         ],
         [
-          "http://i.imgur.com/14F2Van.jpg",
+          "//i.imgur.com/14F2Van.jpg",
           "Una imagen del texto \"Front End Development Certificate requirements\"",
           "Confirmemos que has completado todos nuestros desafíos básicos e intermedios de diseño de algoritmos, y todos nuestros proyectos básicos e intermedios de desarrollo de interfaces. Pulsa el botón siguiente para hacer la verificación.",
           "#"
         ],
         [
-          "http://i.imgur.com/16SIhHO.jpg",
+          "//i.imgur.com/16SIhHO.jpg",
           "Una imagen de la palabra \"Congratulations\"",
           "¡Felicitaciones! Hemos agregado tu certificado de Desarrollo de interfaces a tu portafolio. A menos que elijas no mostrar tus soluciones, este certificado será públicamente visible y verificable.",
           ""
diff --git a/seed/challenges/01-front-end-development-certification/gear-up-for-success.json b/seed/challenges/01-front-end-development-certification/gear-up-for-success.json
index 7b54b6f..f454dae 100644
--- a/seed/challenges/01-front-end-development-certification/gear-up-for-success.json
+++ b/seed/challenges/01-front-end-development-certification/gear-up-for-success.json
@@ -8,7 +8,7 @@
       "title": "Join our LinkedIn Alumni Network",
       "description": [
         [
-          "http://i.imgur.com/vJyiXzU.gif",
+          "//i.imgur.com/vJyiXzU.gif",
           "A gif showing how you can click the link below and fill in the necessary fields to add your Free Code Camp studies to your LinkedIn profile.",
           "LinkedIn recognizes Free Code Camp as a university. You can gain access to our large alumni network by adding Free Code Camp to your LinkedIn profile's education section. Set your graduation date as next year. For \"Degree\", type \"Full Stack Web Development Certification\". For \"Field of study\", type \"Computer Software Engineering\". Then click \"Save Changes\".",
           "https://www.linkedin.com/profile/edit-education?school=Free+Code+Camp"
@@ -21,7 +21,7 @@
       "titleEs": "Únete a nuestra red de alumnos en LinkedIn",
       "descriptionEs": [
         [
-          "http://i.imgur.com/vJyiXzU.gif",
+          "//i.imgur.com/vJyiXzU.gif",
           "Un gif mostrando como puedes pulsar el enlace de abajo y llenar todos los campos necesarios para agregar los estudios de Free Code Camp a tu perfil de LinkedIn",
           "LinkedIn reconoce a Free Code Camp como una universidad. Puedes obtener acceso a nuestra larga red de alumnos agregando Free Code Camp a la sección de educación de tu LinkedIn. Define tu fecha de graduación para el siguiente año. En el campo \"Grado\", escribe \"Certificación de Desarrollo Web Full Stack\". En \"Campo de estudio\", escribe \"Ingeniería de Software\". Después pulsa \"Guardar Cambios\".",
           "https://www.linkedin.com/profile/edit-education?school=Free+Code+Camp"
@@ -33,7 +33,7 @@
       "title": "Join our Subreddit",
       "description": [
         [
-          "http://i.imgur.com/DYjJuCG.gif",
+          "//i.imgur.com/DYjJuCG.gif",
           "A gif showing how you can create a Reddit account and join Free Code Camp's subreddit.",
           "Our community has its own subreddit on Reddit. This is a convenient way to ask questions and share links with our entire community. If you don't already have a Reddit account, you can create one in a few seconds - you don't even need an email address. Then you can click the \"subscribe\" button to join our subreddit. You may also want to subscribe to some of the other subreddits listed in our sidebar.",
           "https://reddit.com/r/freecodecamp"
@@ -47,7 +47,7 @@
       "titleEs": "Unete a nuestro Subreddit",
       "descriptionEs": [
         [
-          "http://i.imgur.com/DYjJuCG.gif",
+          "//i.imgur.com/DYjJuCG.gif",
           "Un gif mostrando como puedes crear una cuenta de Reddit y unirte a Free Code Camp subreddit.",
           "Nuestra comunidad tiene su propio subreddit en Reddit. Esta es una manera conveniente de hacer preguntas y compartir enlaces con toda nuestra comunidad. Si aún no dispones de una cuenta de Reddit, puedes crear una en unos segundos - ni siquiera necesitas una dirección de correo electrónico. A continuación, puedes pulsar el botón \"subscribe\" para unirte a nuestro subreddit. También puedes suscribirte a otros subreddits que estan listados en la barra lateral.",
           "https://reddit.com/r/freecodecamp"
@@ -59,13 +59,13 @@
       "title": "Read Coding News on our Medium Publication",
       "description": [
         [
-          "http://i.imgur.com/FxSOL4a.gif",
+          "//i.imgur.com/FxSOL4a.gif",
           "A gif showing how you can create a Medium account.",
           "Our community has a Medium publication where we write lots of articles about software development. If you don't already have a Medium account, you can follow the link and either sign in using social network, or by entering an email (they'll send you an email that you can click-through to create your account.) Once you select a topic of interest, you can continue through the steps.",
           "https://www.medium.com"
         ],
         [
-          "http://i.imgur.com/zhhywSX.gif",
+          "//i.imgur.com/zhhywSX.gif",
           "A gif showing how you can click the \"follow\" button to follow Free Code Camp's publication.",
           "Once you're logged in, you can go to Free Code Camp's Medium publication and click \"follow\". Our campers publish several articles each week.",
           "https://medium.freecodecamp.com"
@@ -79,13 +79,13 @@
       "titleEs": "Lee noticias de codificación en nuestros canal de publicaciones Medium",
       "descriptionEs": [
         [
-          "http://i.imgur.com/FxSOL4a.gif",
+          "//i.imgur.com/FxSOL4a.gif",
           "Un gif mostrando cómo crear una cuenta en Medium.",
           "Nuestra comunidad tiene un canal de publicaciones Medium, donde escribimos un montón de artículos sobre desarrollo de software. Si aún no dispones de una cuenta Medium, puedes seguir el enlace y registrarte usando una red social o ingresando un correo electrónico (enviarán un correo electrónico que debes abrirlo para crear tu cuenta.) Selecciona un tema de interés, puedes continuar a través de los pasos.",
           "https://www.medium.com"
         ],
         [
-          "http://i.imgur.com/zhhywSX.gif",
+          "//i.imgur.com/zhhywSX.gif",
           "Un gif mostrando cómo puedes pulsar el botón \"follow\" para seguir las publicaciones de Free Code Camp.",
           "Una vez que inicias sesión, puedes ir al canal de publicaciones de Free Code Camp Medium y pulsar \"follow\". Nuestros campistas publican varios artículos cada semana.",
           "https://medium.freecodecamp.com"
@@ -97,7 +97,7 @@
       "title": "Watch us Code Live on Twitch.tv",
       "description": [
         [
-          "http://i.imgur.com/8rtyRY1.gif",
+          "//i.imgur.com/8rtyRY1.gif",
           "A gif showing how you can sign up for Twitch.tv and follow our channel.",
           "Our campers frequently code live on Twitch.tv, a popular streaming website. You can create an account in less than a minute, then follow Free Code Camp's channel. When you follow, you'll get the option of receiving an email notification each time one of our campers goes live. You can then join dozens of other campers and watch them code, and interact in a chat room. This is a fun, casual way to learn by watching people build projects.",
           "https://twitch.tv/freecodecamp"
@@ -111,7 +111,7 @@
       "titleEs": "Miranos programar en vivo por Twitch.tv",
       "descriptionEs": [
         [
-          "http://i.imgur.com/8rtyRY1.gif",
+          "//i.imgur.com/8rtyRY1.gif",
           "Un gif mostrando cómo resgistrarse en Twitch.tv y seguir nuestro canal.",
           "Nuestros campistas programan en vivo con frecuencia en Twitch.tv, un sitio web popular de streaming. Puedes crear una cuenta en menos de un minuto, luego, sigue al canal de Free Code Camp. Cuando sigas al canal, verás la opción de recibir una notificación por correo electrónico cada vez que uno de nuestros campistas esté en vivo. Puedes unirte a docenas de otros campistas y verlos programar, e interactuar en una sala de chat. Esta es una manera divertida e informal de aprender observando a las personas a construir proyectos.",
           "https://twitch.tv/freecodecamp"
@@ -123,7 +123,7 @@
       "title": "Commit to a Goal and a Nonprofit",
       "description": [
         [
-          "http://i.imgur.com/Og1ifsn.gif",
+          "//i.imgur.com/Og1ifsn.gif",
           "A gif showing how you can commit to a goal for your Free Code Camp studies and pledge a monthly donation to a nonprofit to give you external motivation to reach that goal.",
           "You can set a goal and pledge to donate to a nonprofit each month until you achieve that goal. This will give you external motivation in your quest to learn to code, as well as an opportunity to help nonprofits right away. Choose your goal, then choose a monthly donation. When you click \"commit\", the nonprofit's donation page will open in a new tab. This is completely optional, and you can change your commitment or stop it at any time.",
           "/commit"
@@ -136,7 +136,7 @@
       "titleEs": "Comprométete con una meta y con una organización sin fines de lucro",
       "descriptionEs": [
         [
-          "http://i.imgur.com/Og1ifsn.gif",
+          "//i.imgur.com/Og1ifsn.gif",
           "Un gif mostrando como te puedes comprometer con una meta para tus estudios de Free Code Camp y prometer una donación mensual a una organización sin fines de lucro para darte motivación externa de alcanzar esa meta.",
           "Puedes poner una meta y prometer donar mensualmente a una organización sin fines de lucro hasta que alcances tu meta. Esto te dará motivación externa en tu aventura de aprender a programar, así como una oportunidad para ayudar inmediatamente a organizaciones sin fines de lucro. Elige tu meta, después elige tu donativo mensual. Cuando pulses \"commit\", la página de donación de la organización sin fines de lucro se abrirá en una nueva pestaña. Esto es completamente opcional, y puedes cambiar tu compromiso o detenerlo en cualquier momento.",
           "/comprometerse"
diff --git a/seed/challenges/01-front-end-development-certification/html5-and-css.json b/seed/challenges/01-front-end-development-certification/html5-and-css.json
index 83152f1..a88a20f 100644
--- a/seed/challenges/01-front-end-development-certification/html5-and-css.json
+++ b/seed/challenges/01-front-end-development-certification/html5-and-css.json
@@ -68,7 +68,7 @@
       "id": "bad87fee1348bd9aedf0887a",
       "descriptionPtBR": [
         "Durante os próximos desafios, construiremos um aplicativo em HTML que se parecerá como este:",
-        "<a href=\"http://i.imgur.com/jOc1JF1.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/jOc1JF1.png\" title=\"Clique para aumentar\" alt=\"Imagem do aplicativo CatPhotoApp finalizado\"></a>",
+        "<a href=\"//i.imgur.com/jOc1JF1.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"//i.imgur.com/jOc1JF1.png\" title=\"Clique para aumentar\" alt=\"Imagem do aplicativo CatPhotoApp finalizado\"></a>",
         "O elemento <code>h2</code> que você criar gerará um elemento <code>h2</code> na página da web.",
         "Este elemento indica ao navegador a forma de mostrar o texto que contém.",
         "Os elementos <code>h2</code> são ligeiramente menores que os elementos <code>h1</code>. Há também os elementos <code>h3</code>, <code>h4</code>, <code>h5</code> e <code>h6</code>.",
@@ -84,7 +84,7 @@
       "title": "Headline with the h2 Element",
       "description": [
         "Over the next few challenges, we'll build an HTML5 app that will look something like this:",
-        "<a href=\"http://i.imgur.com/jOc1JF1.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/jOc1JF1.png\" title=\"Click to enlarge\" alt=\"A screen shot of our finished Cat Photo App\"></a>",
+        "<a href=\"//i.imgur.com/jOc1JF1.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"//i.imgur.com/jOc1JF1.png\" title=\"Click to enlarge\" alt=\"A screen shot of our finished Cat Photo App\"></a>",
         "The <code>h2</code> element you enter will create an <code>h2</code> element on the website.",
         "This element tells the browser how to render the text that it contains.",
         "<code>h2</code> elements are slightly smaller than <code>h1</code> elements. There are also <code>h3</code>, <code>h4</code>, <code>h5</code> and <code>h6</code> elements.",
@@ -103,7 +103,7 @@
       "titleEs": "Encabezado con el elemento h2",
       "descriptionEs": [
         "Durante los siguientes desafíos, construiremos una aplicación HTML5 que lucirá como la siguiente:",
-        "<a href=\"http://i.imgur.com/jOc1JF1.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/jOc1JF1.png\" title=\"Pulsa para agrandar\" alt=\"Pantallazo de la aplicación Cat Photo terminada\"></a>",
+        "<a href=\"//i.imgur.com/jOc1JF1.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"//i.imgur.com/jOc1JF1.png\" title=\"Pulsa para agrandar\" alt=\"Pantallazo de la aplicación Cat Photo terminada\"></a>",
         "El elemento <code>h2</code> que ingreses creará un elemento <code>h2</code> en el sitio web.",
         "Este elemento le dice al navegador cómo mostrar el texto que contiene.",
         "Los elementos <code>h2</code> son ligeramente más pequeños que los elementos <code>h1</code>. También hay elementos <code>h3</code>, <code>h4</code>, <code>h5</code> y <code>h6</code>",
@@ -1154,7 +1154,7 @@
       "descriptionPtBR": [
         "Os elementos <code>a</code>, também conhecidos como elementos <code>âncora</code>, são utilizados para ligar conteúdo fora da página atual.",
         "Aqui está um diagrama de um elemento <code>a</code>. Neste caso, o elemento <code>a</code> é utilizado no meio de um elemento de parágrafo, o que significa que o link externo aparecerá no meio de uma frase.",
-        "<a href=\"http://i.imgur.com/hviuZwe.png\" data-lightbox=\"img-enlarge\"> <img class=\"img-responsive\" title=\"Clique para ampliar\" alt=\"diagrama de como as tags de âncora se compõem com o texto, como na próxima linha\" src=\"http://i.imgur.com/hviuZwe.png\"></a>",
+        "<a href=\"//i.imgur.com/hviuZwe.png\" data-lightbox=\"img-enlarge\"> <img class=\"img-responsive\" title=\"Clique para ampliar\" alt=\"diagrama de como as tags de âncora se compõem com o texto, como na próxima linha\" src=\"//i.imgur.com/hviuZwe.png\"></a>",
         "Veja um exemplo:",
         "<code>&#60;p&#62;Aqui está um &#60;a href=\"http://freecodecamp.com\"&#62; link ligado ao Free Code Camp&#60;/a&#62; para que você o siga.&#60;/p&#62;</code>",
         "Crie um elemento <code>a</code> que esteja ligado ao site <code>http://freecatphotoapp.com</code> e tenha como <code>texto de âncora</code> \"fotos de gatos\"."
@@ -1170,7 +1170,7 @@
       "description": [
         "<code>a</code> elements, also known as <code>anchor</code> elements, are used to link to content outside of the current page.",
         "Here's a diagram of an <code>a</code> element. In this case, the <code>a</code> element is used in the middle of a paragraph element, which means the link will appear in the middle of a sentence.",
-        "<a href=\"http://i.imgur.com/hviuZwe.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" title=\"Click to enlarge\" alt=\"a diagram of how anchor tags are composed with the same text as on the following line\" src=\"http://i.imgur.com/hviuZwe.png\"></a>",
+        "<a href=\"//i.imgur.com/hviuZwe.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" title=\"Click to enlarge\" alt=\"a diagram of how anchor tags are composed with the same text as on the following line\" src=\"//i.imgur.com/hviuZwe.png\"></a>",
         "Here's an example:",
         "<code>&#60;p&#62;Here's a &#60;a href=\"http://freecodecamp.com\"&#62; link to Free Code Camp&#60;/a&#62; for you to follow.&#60;/p&#62;</code>",
         "Create an <code>a</code> element that links to <code>http://freecatphotoapp.com</code> and has \"cat photos\" as its <code>anchor text</code>."
@@ -1220,7 +1220,7 @@
       "descriptionEs": [
         "Los elementos <code>a</code>, también conocidos como elementos <code>ancla</code>, se utilizan para enlazar a contenido fuera de la página actual.",
         "Aquí está un diagrama de un elemento <code>a</code>. En este caso, el elemento <code>a</code> se utiliza en el medio de un elemento de párrafo, lo que significa que el enlace aparecerá en el medio de una frase. ",
-        "<a href=\"http://i.imgur.com/hviuZwe.png\" data-lightbox=\"img-enlarge\"> <img class=\"img-responsive\" title=\"Haz clic para ampliar\" alt=\"un diagrama de cómo las etiquetas de ancla se componen con el mismo texto, como en la siguiente línea\" src=\"http://i.imgur.com/hviuZwe.png\"></a> ",
+        "<a href=\"//i.imgur.com/hviuZwe.png\" data-lightbox=\"img-enlarge\"> <img class=\"img-responsive\" title=\"Haz clic para ampliar\" alt=\"un diagrama de cómo las etiquetas de ancla se componen con el mismo texto, como en la siguiente línea\" src=\"//i.imgur.com/hviuZwe.png\"></a> ",
         "He aquí un ejemplo:",
         "<code>&#60;p&#62;Aquí está un &#60;a href=\"http://freecodecamp.com\"&#62; enlace a Free Code Camp&#60;/a&#62; para que lo sigas.&#60;/p&#62;</code>",
         "Crea un elemento <code>a</code> que se vincule a <code>http://freecatphotoapp.com</code> y tenga como <code>texto de ancla</code> \"fotos de gatos\"."
@@ -1232,7 +1232,7 @@
       "id": "bad87fee1348bd9aede08817",
       "descriptionPtBR": [
         "Outra vez, aqui está um diagrama de um elemento <code>a</code> para você usar como referência.",
-        "<a href=\"http://i.imgur.com/hviuZwe.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" title=\"Clique para ampliar\" alt=\"diagrama de como são as tags de âncora com o texto como na linha seguinte\" src=\"http://i.imgur.com/hviuZwe.png\"></a>",
+        "<a href=\"//i.imgur.com/hviuZwe.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" title=\"Clique para ampliar\" alt=\"diagrama de como são as tags de âncora com o texto como na linha seguinte\" src=\"//i.imgur.com/hviuZwe.png\"></a>",
         "Veja um exemplo:",
         "<code>&#60;p&#62;Este é um &#60;a href=\"http://freecodecamp.com\"&#62; link ligado ao Free Code Camp&#60;/a&#62; para que você o siga.&#60;/p&#62;</code>",
         "<code>Aninhamento</code> significa ter um elemento no interior de outro elemento.",
@@ -1247,7 +1247,7 @@
       "title": "Nest an Anchor Element within a Paragraph",
       "description": [
         "Again, here's a diagram of an <code>a</code> element for your reference:",
-        "<a href=\"http://i.imgur.com/hviuZwe.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" title=\"Click to enlarge\" alt=\"a diagram of how anchor tags are composed with the same text as on the following line\" src=\"http://i.imgur.com/hviuZwe.png\"></a>",
+        "<a href=\"//i.imgur.com/hviuZwe.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" title=\"Click to enlarge\" alt=\"a diagram of how anchor tags are composed with the same text as on the following line\" src=\"//i.imgur.com/hviuZwe.png\"></a>",
         "Here's an example:",
         "<code>&#60;p&#62;Here's a &#60;a href=\"http://freecodecamp.com\"&#62; link to Free Code Camp&#60;/a&#62; for you to follow.&#60;/p&#62;</code>",
         "<code>Nesting</code> just means putting one element inside of another element.",
@@ -1304,7 +1304,7 @@
       "titleEs": "Anida un elemento de ancla dentro de un párrafo",
       "descriptionEs": [
         "Una vez más, aquí está un diagrama de un elemento <code>a</code> para tu referencia:",
-        "<a href=\"http://i.imgur.com/hviuZwe.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" title=\"Pulse para ampliar\" alt=\"un diagrama de como se componen las etiquetas de anclaje con el texto como en la siguiente línea\" src=\"http://i.imgur.com/hviuZwe.png\"></a>",
+        "<a href=\"//i.imgur.com/hviuZwe.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" title=\"Pulse para ampliar\" alt=\"un diagrama de como se componen las etiquetas de anclaje con el texto como en la siguiente línea\" src=\"//i.imgur.com/hviuZwe.png\"></a>",
         "He aquí un ejemplo:",
         "<code>&#60;p&#62;Aquí hay un &#60;a href=\"http://freecodecamp.com\"&#62; enlace a Free Code Camp&#60;/a&#62; para que lo sigas.&#60;/p&#62;</code>",
         "<code>Anidamiento</code> simplemente significa poner un elemento dentro de otro elemento.",
diff --git a/seed/challenges/02-data-visualization-certification/data-visualization-certificate.json b/seed/challenges/02-data-visualization-certification/data-visualization-certificate.json
index c524e9f..3d5a213 100644
--- a/seed/challenges/02-data-visualization-certification/data-visualization-certificate.json
+++ b/seed/challenges/02-data-visualization-certification/data-visualization-certificate.json
@@ -8,25 +8,25 @@
       "title": "Claim Your Data Visualization Certificate",
       "description": [
         [
-          "http://i.imgur.com/Et3iD74.jpg",
+          "//i.imgur.com/Et3iD74.jpg",
           "An image of our Data Visualization Certificate",
           "This challenge will give you your verified Data Visualization Certificate. Before we issue your certificate, we must verify that you have completed all of our React and D3.js projects. You must also accept our Academic Honesty Pledge. Click the button below to start this process.",
           ""
         ],
         [
-          "http://i.imgur.com/HArFfMN.jpg",
+          "//i.imgur.com/HArFfMN.jpg",
           "The definition of plagiarism: Plagiarism (noun) - copying someone else’s work and presenting it as your own without crediting them",
           "By clicking below, you pledge that all of your submitted code A) is code you or your pair personally wrote, or B) comes from open source libraries like jQuery, or C) has been clearly attributed to its original authors. You also give us permission to audit your challenge solutions and revoke your certificate if we discover evidence of plagiarism.",
           "#"
         ],
         [
-          "http://i.imgur.com/14F2Van.jpg",
+          "//i.imgur.com/14F2Van.jpg",
           "An image of the text \"Data Visualization Certificate requirements\"",
           "Let's confirm that you have completed our React and D3.js projects. Click the button below to verify this.",
           "#"
         ],
         [
-          "http://i.imgur.com/16SIhHO.jpg",
+          "//i.imgur.com/16SIhHO.jpg",
           "An image of the word \"Congratulations\"",
           "Congratulations! We've added your Data Visualization Certificate to your portfolio page. Unless you choose to hide your solutions, this certificate will remain publicly visible and verifiable.",
           ""
@@ -94,25 +94,25 @@
       "challengeType": 7,
       "descriptionEs": [
         [
-          "http://i.imgur.com/Et3iD74.jpg",
+          "//i.imgur.com/Et3iD74.jpg",
           "Una imagen que muestra nuestro certificado de Visualización de datos",
           "Este desafío te otorga tu certificado autenticado de Visualización de datos. Antes de que podamos emitir tu certificado, debemos verificar que has completado todos los proyectos con React y D3.js. También debes aceptar nuestro Juramento de honestidad académica. Pulsa el botón siguiente para iniciar este proceso.",
           ""
         ],
         [
-          "http://i.imgur.com/HArFfMN.jpg",
+          "//i.imgur.com/HArFfMN.jpg",
           "Plagio (nombre): acción y efecto de plagiar. Plagiar (verbo) - copiar en lo sustancial obras ajenas, dándolas como propias.",
           "Al pulsar el botón siguiente, juras que todo el código en tus soluciones a los desafíos A) es código que tú o tu compañero escribieron personalmente, o B) proviene de librerías de código abierto como jQuery, o C) ha sido claramente atribuido a sus autores originales. También nos otorgas el permiso para auditar tus soluciones a los desafíos y revocar tu certificado si encontramos evidencia de plagio.",
           "#"
         ],
         [
-          "http://i.imgur.com/14F2Van.jpg",
+          "//i.imgur.com/14F2Van.jpg",
           "Una imagen del texto \"Data Visualization Certificate requirements\"",
           "Confirmemos que has completado todos nuestros proyectos en React y D3.js. Pulsa el botón siguiente para hacer la verificación.",
           "#"
         ],
         [
-          "http://i.imgur.com/16SIhHO.jpg",
+          "//i.imgur.com/16SIhHO.jpg",
           "Una imagen de la palabra \"Congratulations\"",
           "¡Felicitaciones! Hemos agregado tu certificado de Visualización de datos a tu portafolio. A menos que elijas no mostrar tus soluciones, este certificado será públicamente visible y verificable.",
           ""
diff --git a/seed/challenges/03-back-end-development-certification/api-projects.json b/seed/challenges/03-back-end-development-certification/api-projects.json
index 017b18a..fd89e3b 100644
--- a/seed/challenges/03-back-end-development-certification/api-projects.json
+++ b/seed/challenges/03-back-end-development-certification/api-projects.json
@@ -9,85 +9,85 @@
       "title": "Get Set for our Back End Development Projects",
       "description": [
         [
-          "http://i.imgur.com/4IZjWZ3.gif",
+          "//i.imgur.com/4IZjWZ3.gif",
           "A gif showing how to create a c9.io account.",
           "We recommend building our full stack Basejump challenges on c9.io, a powerful browser-based development environment. This will save you hours of time that you would spend configuring your local computer to run Node.js and MongoDB - time you could instead spend coding. <br>Create a c9.io account by clicking the GitHub symbol in the upper right hand corner of the c9.io page. Click the big plus symbol to create a new workspace. Enter your email address when prompted.",
           "http://c9.io"
         ],
         [
-          "http://i.imgur.com/F7i5Hhi.gif",
+          "//i.imgur.com/F7i5Hhi.gif",
           "A gif showing how to fill out the new workspace form",
           "Instead of starting from scratch, we recommend using Clementine.js, a full stack JavaScript \"boilerplate\" that already has some basic code written for you. Clementine.js has a detailed tutorial you can go through to build it yourself, but for now let's just clone its code. On c9.io, give your workspace a name, then leave \"Template\" as custom and create your workspace from this GitHub url: <code>https://github.com/johnstonbl01/clementinejs-fcc.git</code>",
           ""
         ],
         [
-          "http://i.imgur.com/42m1vyr.gif",
+          "//i.imgur.com/42m1vyr.gif",
           "A gif showing you how to show hidden files.",
           "Click the gear in the upper right corner of c9.io's file structure. Select \"show hidden files\".",
           ""
         ],
         [
-          "http://i.imgur.com/qrE8xaK.gif",
+          "//i.imgur.com/qrE8xaK.gif",
           "A gif showing you how to create a new file.",
           "Right click and create a new file called <code>.env</code>.",
           ""
         ],
         [
-          "http://i.imgur.com/jkQX9SQ.gif",
+          "//i.imgur.com/jkQX9SQ.gif",
           "A gif showing you how to prep your environmental variables in your .env file.",
           "Open your .env file and paste this into it, then save it: <br><code>GITHUB_KEY=<br>GITHUB_SECRET=<br>MONGO_URI=mongodb://localhost:27017/clementinejs<br>PORT=8080<br>APP_URL=http://localhost:8080/</code>",
           ""
         ],
         [
-          "http://i.imgur.com/f3DE7zB.gif",
+          "//i.imgur.com/f3DE7zB.gif",
           "A gif showing you how to open c9.io's preview window.",
           "Open up your application in a preview tab by clicking window > share > application > open.",
           ""
         ],
         [
-          "http://i.imgur.com/Ip0qUdQ.gif",
+          "//i.imgur.com/Ip0qUdQ.gif",
           "A gif showing you how to create a GitHub app using c9.io's preview URL.",
           "Create a GitHub app for authentication and choose an \"Application name\". For the homepage URL, paste the URL from your preview tab. You'll also paste the URL from your preview tab into \"Authorization callback URL\", then add to it: <code>auth/github/callback</code>",
           "https://github.com/settings/applications/new"
         ],
         [
-          "http://i.imgur.com/qCUVRFb.gif",
+          "//i.imgur.com/qCUVRFb.gif",
           "A gif showing you how to transfer GitHub's key and secret over to your .env file, as well as your c9.io URL.",
           "GitHub will create an app and present you with a Client ID and a Client Secret. Set your .env file's GITHUB_KEY equal to the Client ID, and set your .env file's GITHUB_SECRET equal to the Client Secret. Copy the URL from your preview tab and paste it into your .env file as your APP_URL.",
           ""
         ],
         [
-          "http://i.imgur.com/2a20Vah.gif",
+          "//i.imgur.com/2a20Vah.gif",
           "A gif showing you how to start mongoDB in c9.io's terminal.",
           "In your terminal, start MongoDB by entering <code>mongod --smallfiles</code>",
           ""
         ],
         [
-          "http://i.imgur.com/dC55pWk.gif",
+          "//i.imgur.com/dC55pWk.gif",
           "A gif showing you how to open a new tab in c9.io's terminal.",
           "Open a new terminal tab with the + button above your terminal, then run <code>npm install</code>",
           ""
         ],
         [
-          "http://i.imgur.com/54OC2Ro.gif",
+          "//i.imgur.com/54OC2Ro.gif",
           "A gif showing you how to navigate to your preview tab and sign in to your new Clementine.js app.",
           "Run <code>node server.js</code> to start the server. Refresh your preview tab. You should see the Clementine.js logo. Click \"sign in\" and accept GitHub's prompt to authorize the application.",
           ""
         ],
         [
-          "http://i.imgur.com/2IJfyvN.gif",
+          "//i.imgur.com/2IJfyvN.gif",
           "A gif showing you how to click the button to trigger an AJAX action with Clementine.js and how to look at your user profile from the GitHub authentication data.",
           "Click the \"click me\" button and you'll see that it increments the number clicks. Click the profile button and you'll see that it has your GitHub information.",
           ""
         ],
         [
-          "http://i.imgur.com/bjO5pnq.gif",
+          "//i.imgur.com/bjO5pnq.gif",
           "A gif showing you how to create a new GitHub repository and push your code up to it.",
           "Create a new GitHub repository. Then copy its .git URL. <br>Return to c9.io's terminal and set your GitHub remote URL: <code>git remote set-url origin</code> followed by the URL you copied from GitHub. <br>Run <code>git push origin master</code>. <br>Now tab back to GitHub and refresh, and you'll see that your code is now on GitHub.",
           "https://github.com/new"
         ],
         [
-          "http://i.imgur.com/Qn0K65B.gif",
+          "//i.imgur.com/Qn0K65B.gif",
           "A gif showing you how to add add-ons to Heroku.",
           "We will soon add instructions for getting Clementine running on Heroku. For now, develop your Basejumps right on c9.io.",
           ""
@@ -101,85 +101,85 @@
       "titleEs": "Prepárate para nuestros Proyectos de Desarrollo en el lado del servidor",
       "descriptionEs": [
         [
-          "http://i.imgur.com/4IZjWZ3.gif",
+          "//i.imgur.com/4IZjWZ3.gif",
           "Una imagen gif que te muestra cómo crear una cuenta en c9.io.",
           "Te recomendamos resolver nuestros desafíos de pila completa (full stack) en c9.io, un poderoso ambiente de desarrollo basado en tu navegador. Esto te ahorrará muchas horas que utilizarías configurando tu computadora para correr Node.js y MongoDB - tiempo que podrías utilizar escribiendo código. <br>Crea una cuenta en c9.io pulsando el símbolo de GitHub en la esquina superior derecha de la página de c9.io. Pulsa el botón con el símbolo de suma para crear una área de trabajo nueva. Introduce tu dirección de correo electrónico cuando se te solicite.",
           "http://c9.io"
         ],
         [
-          "http://i.imgur.com/F7i5Hhi.gif",
+          "//i.imgur.com/F7i5Hhi.gif",
           "Una imagen gif que te muestra cómo llenar el formulario para crear un área de trabajo nueva",
           "En vez de iniciar desde cero, recomendamos utilizar Clementine.js, un modelo (<em>bolierplate</em>) de JavaScript pila completa (full stack) que viene con código básico ya escrito para ti. Clementine.js tiene un tutorial detallado que puedes seguir para construirlo por ti mismo, pero por ahora simplemente vamos a clonarlo. En c9.io, dale un nombre a tu área de trabajo, luego deja \"Plantilla\" (\"Template\") como personalizado y crea tu espacio de trabajo usando el siguiente url de Github: <code>https://github.com/johnstonbl01/clementinejs-fcc.git</code>",
           ""
         ],
         [
-          "http://i.imgur.com/42m1vyr.gif",
+          "//i.imgur.com/42m1vyr.gif",
           "Una imagen gif que te muestra cómo mostrar los archivos ocultos.",
           "Pulsa el engrane en la esquina superior derecha del árbol de archivos de c9.io. Selecciona \"show hidden files\".",
           ""
         ],
         [
-          "http://i.imgur.com/qrE8xaK.gif",
+          "//i.imgur.com/qrE8xaK.gif",
           "Una imagen gif que te muestra cómo crear un archivo nuevo.",
           "Haciendo clic derecho, crea un nuevo archivo llamado <code>.env</code>.",
           ""
         ],
         [
-          "http://i.imgur.com/jkQX9SQ.gif",
+          "//i.imgur.com/jkQX9SQ.gif",
           "Una imagen gif que te muestra cómo preparar tus variables de ambiente en tu archivo .env.",
           "Abre tu archivo .env pega el siguiente código, y luego guárdalo: <br><code>GITHUB_KEY=<br>GITHUB_SECRET=<br>MONGO_URI=mongodb://localhost:27017/clementinejs<br>PORT=8080<br>APP_URL=http://localhost:8080/</code>",
           ""
         ],
         [
-          "http://i.imgur.com/f3DE7zB.gif",
+          "//i.imgur.com/f3DE7zB.gif",
           "Una imagen gif que te muestra cómo abir la vista previa de la ventana de c9.io.",
           "Abre tu aplicación en una pestaña de vista previa pulsando window > share > application > open.",
           ""
         ],
         [
-          "http://i.imgur.com/Ip0qUdQ.gif",
+          "//i.imgur.com/Ip0qUdQ.gif",
           "Una imagen gif que te muestra cómo crear una aplicación de GitHub usando la URL de vista previa de c9.io.",
           "Crea una aplicación de GitHub para autenticación y elige un \"Nombre de aplicación\". Para la URL de inicio (homepage), pega la URL de tu pestaña de vista previa. También debes pegar la URL de tu pestaña de vista previa en <code>Authorization callback URL</code>, agrégale: <code>auth/github/callback</code>",
           "https://github.com/settings/applications/new"
         ],
         [
-          "http://i.imgur.com/qCUVRFb.gif",
+          "//i.imgur.com/qCUVRFb.gif",
           "Una imagen gif que te muestra cómo transferir tu llave (key) y tu código secreto (secret) de GitHub a tu archivo .env, así como tu URL de c9.io.",
           "GitHub creará una aplicación y te entregará un ID de cliente (Client ID) y un Código secreto de cliente (Client Secret). Haz que el GITHUB_KEY en tu archivo .env sea igual al ID de cliente, y haz que tu GITHUB_SECRET en el archivo .env sea igual al Código secreto de cliente. Copia la URL de tu pestaña de vista previa y pégala en tu archivo .env como tu APP_URL.",
           ""
         ],
         [
-          "http://i.imgur.com/2a20Vah.gif",
+          "//i.imgur.com/2a20Vah.gif",
           "Una imagen gif que te muestra cómo iniciar mongoDB en la terminal de c9.io.",
           "En tu terminal, inicia MongoDB con el siguiente comando: <code>mongod --smallfiles</code>",
           ""
         ],
         [
-          "http://i.imgur.com/dC55pWk.gif",
+          "//i.imgur.com/dC55pWk.gif",
           "Una imagen gif que te muestra cómo abrir una nueva pestaña en la terminal de c9.io.",
           "Abre una nueva pestaña de terminal pulsando el botón de + sobre tu terminal, luego ejecuta <code>npm install</code>",
           ""
         ],
         [
-          "http://i.imgur.com/54OC2Ro.gif",
+          "//i.imgur.com/54OC2Ro.gif",
           "Una imagen gif que te muestra cómo navegar a tu pestaña de vista previa e ingresar a tu nueva aplicación Clementine.js.",
           "Ejecuta <code>node server.js</code> para iniciar el servidor. Actualiza tu pestaña de vista previa. Deberías poder ver el logo de Clementine.js. Pulsa \"sign in\"  y acepta la solicitud de GitHub para autorizar la aplicación.",
           ""
         ],
         [
-          "http://i.imgur.com/2IJfyvN.gif",
+          "//i.imgur.com/2IJfyvN.gif",
           "Una imagen gif que te muestra cómo pulsar un botón para desencadenar una acción AJAX con Clementine.js y cómo ver tu perfil de usuario en los datos de autenticación provistos por GitHub.",
           "Pulsa el botón que dice \"click me\" y verás que se incrementa el número de clics. Pulsa el botón de perfil (profile) y verás la información de tu perfil de GitHub.",
           ""
         ],
         [
-          "http://i.imgur.com/bjO5pnq.gif",
+          "//i.imgur.com/bjO5pnq.gif",
           "Una imagen gif que te muestra cómo crear un nuevo repositorio de GitHub GitHub y empujar allí tu código.",
           "Crea un nuevo repositorio en GitHub. Luego copia su ULR .git. <br>Regresa a tu terminal de c9.io y establece tu URL remota de GitHub: <code>git remote set-url origin</code> seguido de la URL que copiaste de GitHub. <br>Ejecuta <code>git push origin master</code>. <br>Ahora ve de regreso a la página de GitHub y actualízala. Verás que tu código ahora está ahora en GitHub.",
           "https://github.com/new"
         ],
         [
-          "http://i.imgur.com/Qn0K65B.gif",
+          "//i.imgur.com/Qn0K65B.gif",
           "Una imagen gif que te muestra cómo agregar complementos a Heroku.",
           "Pronto agregaremos instrucciones para hacer que Clementine corra en Heroku. Por ahora, desarrolla tus Basejumps en c9.io.",
           ""
diff --git a/seed/challenges/03-back-end-development-certification/back-end-development-certificate.json b/seed/challenges/03-back-end-development-certification/back-end-development-certificate.json
index 4d3c385..aa4ab65 100644
--- a/seed/challenges/03-back-end-development-certification/back-end-development-certificate.json
+++ b/seed/challenges/03-back-end-development-certification/back-end-development-certificate.json
@@ -8,25 +8,25 @@
       "title": "Claim Your Back End Development Certificate",
       "description": [
         [
-          "http://i.imgur.com/8v3t84p.jpg",
+          "//i.imgur.com/8v3t84p.jpg",
           "An image of our Back End Development Certificate",
           "This challenge will give you your verified Back End Development Certificate. Before we issue your certificate, we must verify that you have completed all of the back end development projects. You must also accept our Academic Honesty Pledge. Click the button below to start this process.",
           ""
         ],
         [
-          "http://i.imgur.com/HArFfMN.jpg",
+          "//i.imgur.com/HArFfMN.jpg",
           "The definition of plagiarism: Plagiarism (noun) - copying someone else’s work and presenting it as your own without crediting them",
           "By clicking below, you pledge that all of your submitted code A) is code you or your pair personally wrote, or B) comes from open source libraries like jQuery, or C) has been clearly attributed to its original authors. You also give us permission to audit your challenge solutions and revoke your certificate if we discover evidence of plagiarism.",
           "#"
         ],
         [
-          "http://i.imgur.com/2qn7tHp.jpg",
+          "//i.imgur.com/2qn7tHp.jpg",
           "An image of the text \"Back End Development Certificate requirements\"",
           "Let's confirm that you have completed our back end development projects. Click the button below to verify this.",
           "#"
         ],
         [
-          "http://i.imgur.com/16SIhHO.jpg",
+          "//i.imgur.com/16SIhHO.jpg",
           "An image of the word \"Congratulations\"",
           "Congratulations! We've added your Back End Development Certificate to your portfolio page. Unless you choose to hide your solutions, this certificate will remain publicly visible and verifiable.",
           ""
@@ -94,25 +94,25 @@
       "challengeType": 7,
       "descriptionEs": [
         [
-          "http://i.imgur.com/8v3t84p.jpg",
+          "//i.imgur.com/8v3t84p.jpg",
           "Una imagen que muestra nuestro certificado de desarrollo del lado del servidor",
           "Este desafío te otorga tu certificado autenticado de desarrollo del lado del servidor. Antes de que podamos emitir tu certificado, debemos verificar que has completado todos los proyectos de desarrollo del lado del servidor. También debes aceptar nuestro Juramento de honestidad académica. Pulsa el botón siguiente para iniciar este proceso.",
           ""
         ],
         [
-          "http://i.imgur.com/HArFfMN.jpg",
+          "//i.imgur.com/HArFfMN.jpg",
           "Plagio (nombre): acción y efecto de plagiar. Plagiar (verbo) - copiar en lo sustancial obras ajenas, dándolas como propias.",
           "Al pulsar el botón siguiente, juras que todo el código en tus soluciones a los desafíos A) es código que tú o tu compañero escribieron personalmente, o B) proviene de librerías de código abierto como jQuery, o C) ha sido claramente atribuido a sus autores originales. También nos otorgas el permiso para auditar tus soluciones a los desafíos y revocar tu certificado si encontramos evidencia de plagio.",
           "#"
         ],
         [
-          "http://i.imgur.com/2qn7tHp.jpg",
+          "//i.imgur.com/2qn7tHp.jpg",
           "Una imagen del texto \"Back End Development Certificate requirements\"",
           "Confirmemos que has completado todos nuestros proyectos de desarrollo del lado del servidor. Pulsa el botón siguiente para hacer la verificación.",
           "#"
         ],
         [
-          "http://i.imgur.com/16SIhHO.jpg",
+          "//i.imgur.com/16SIhHO.jpg",
           "Una imagen de la palabra \"Congratulations\"",
           "¡Felicitaciones! Hemos agregado tu certificado de desarrollo del lado del servidor. A menos que elijas no mostrar tus soluciones, este certificado será públicamente visible y verificable.",
           ""
diff --git a/server/resources/labs.json b/server/resources/labs.json
index 0a485ac..f37dff5 100644
--- a/server/resources/labs.json
+++ b/server/resources/labs.json
@@ -4,7 +4,7 @@
     "name": "Clementine.js",
     "url": "http://johnstonbl01.github.io/clementinejs/",
     "description": "The elegant and lightweight boilerplate for full stack JavaScript.",
-    "image": "http://i.imgur.com/ib1wOho.png"
+    "image": "//i.imgur.com/ib1wOho.png"
   },
   {
     "camper": "adventurebear",
@@ -18,7 +18,7 @@
     "name": "Skill.bar",
     "url": "http://www.skill.bar",
     "description": "Learn. Gain points. Visualize your skills.",
-    "image": "http://i.imgur.com/URkqqb5.png"
+    "image": "//i.imgur.com/URkqqb5.png"
   },
   {
     "camper": "ericdouglas",
@@ -32,7 +32,7 @@
     "name": "Musare",
     "url": "http://musare.com/",
     "description": "Musare is a modern, collaborative, open-source Music App.",
-    "image": "http://i.imgur.com/Y4D4MPL.png"
+    "image": "//i.imgur.com/Y4D4MPL.png"
   },
   {
     "camper": "bighitbiker3",
@@ -46,7 +46,7 @@
     "name": "Free Code Camp Event Zipline: Recipe Box",
     "url": "http://codepen.io/GeoffStorbeck/full/bVKyzd/",
     "description": "Try to reverse engineer this Recipe Box as an optional Zipline challenge.",
-    "image": "http://i.imgur.com/5o0bwVQ.png"
+    "image": "//i.imgur.com/5o0bwVQ.png"
   },
   {
     "camper": "akiralaine",
@@ -60,6 +60,6 @@
     "name": "Free Code Camp Top 100 Campers",
     "url": "http://fcctop100.herokuapp.com/",
     "description": "This leaderboard tracks the campers who have been most active (completing challenges, helping other campers) in the past 30 days.",
-    "image": "http://i.imgur.com/4CrQfFi.png"
+    "image": "//i.imgur.com/4CrQfFi.png"
   }
 ]
\ No newline at end of file
diff --git a/server/resources/testimonials.json b/server/resources/testimonials.json
index b5d3fd3..a215c82 100644
--- a/server/resources/testimonials.json
+++ b/server/resources/testimonials.json
@@ -4,497 +4,497 @@
     "quote": "By building a robust and highly functional web app I was able to not only increase my confidence but was able to show potential employers what I was able to create. Both were huge for me and led me to getting a fantastic job.",
     "github": "MetaCoderHirschl",
     "linkedin": "https://www.linkedin.com/profile/view?id=ADEAAAKX2fEBfeZ1GVdOh-c0zzkYZKw38o8qzow",
-    "image": "http://i.imgur.com/nsvNixW.jpg"
+    "image": "//i.imgur.com/nsvNixW.jpg"
   },
   {
     "camper": "Branden Byers",
     "quote": "My goal was to become employed by the end of 2015. Instead, I ended up with a job at the beginning of 2015. This was directly related to my work at Free Code Camp.",
     "github": "brandenbyers",
     "linkedin": "https://www.linkedin.com/in/brandenbyers",
-    "image": "http://i.imgur.com/NbzknHq.jpg"
+    "image": "//i.imgur.com/NbzknHq.jpg"
   },
   {
     "camper": "Bruna Torman Reseres Franasa",
     "quote": "I’m now receiving offers for internships. I have no experience in IT, but now good things are happening!",
     "github": "brunatrf",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAABVPh9IB730qyshrsqO1hDNNRUL-X_4i8n0",
-    "image": "http://i.imgur.com/TqxHSNY.jpg"
+    "image": "//i.imgur.com/TqxHSNY.jpg"
   },
   {
     "camper": "Maxim Orlov",
     "quote": "I started Free Code Camp with zero knowledge of web development. 6 months later, I landed my first job as a back end engineer.",
     "github": "Maximization",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAo83nwBF57LpD9mZlm5dH6OcovOpYKPs3k",
-    "image": "http://i.imgur.com/wjlDigg.jpg"
+    "image": "//i.imgur.com/wjlDigg.jpg"
   },
   {
     "camper": "Alexander Black, Jr.",
     "quote": "My work on a nonprofit project gave me the opportunity to learn how to build Chrome extensions and showcase my skills as a full-stack developer.",
     "github": "alexblackjr",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAA553L4BgfgBR-M9RQc7x5matd6FUx3a6-I",
-    "image": "http://i.imgur.com/iHC6ZI4.jpg"
+    "image": "//i.imgur.com/iHC6ZI4.jpg"
   },
   {
     "camper": "Cristiane Henriques",
     "quote": "I am getting more work contacts after including Free Code Camp on my CV and my LinkedIn.",
     "github": "CrisHenriques",
     "linkedin": "https://www.linkedin.com/in/crishenriques",
-    "image": "http://i.imgur.com/T6iTQHs.jpg"
+    "image": "//i.imgur.com/T6iTQHs.jpg"
   },
   {
     "camper": "Viktor Bakurin",
     "quote": "During my work on Free Code Camp's nonprofit projects, I found a MEAN stack position outside of my home country. Now I work in Budapest.",
     "github": "letalumil",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAq6G3QBA1DIwFZGrS4DGqDzBDTzFjrbNQo",
-    "image": "http://i.imgur.com/fvUAWlx.jpg"
+    "image": "//i.imgur.com/fvUAWlx.jpg"
   },
   {
     "camper": "Ashley Drake",
     "quote": "Free Code Camp helped me get my first engineering job. This amazing community made my career switch a lot easier and more fun.",
     "github": "aldraco",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAABcdBycB1iVHvcW7N3yVK-18ES7Nrxx2jbE",
-    "image": "http://i.imgur.com/xzDoJef.jpg"
+    "image": "//i.imgur.com/xzDoJef.jpg"
   },
   {
     "camper": "Brian Grant",
     "quote": "Free Code Camp's a great way for disabled veterans like me to retrain. I'm receiving engineering job offers, and I haven't even finished yet.",
     "github": "codeseekingman",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAEUqXoBFOq1SWQrBsTMHG4ij9Ss4Qqnrtg",
-    "image": "http://i.imgur.com/QPpjPac.jpg"
+    "image": "//i.imgur.com/QPpjPac.jpg"
   },
   {
     "camper": "Thomas Joseph Izen",
     "quote": "After spending lots of time trying different sites that aim to teach people how to code, FreeCodeCamp has been different from the beginning. They provide the best and most organized track for anyone at any level to learn how to code and build an amazing, marketable portfolio.",
     "github": "TommyIzen",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAA79qIYB_RHmvOP59S6VPK3Lm06oG8fM6dw",
-    "image": "http://i.imgur.com/RkO2ISf.jpg"
+    "image": "//i.imgur.com/RkO2ISf.jpg"
   },
   {
     "camper": "Lori Becker",
     "quote": "After graduating with a Masters degree in computer science, I could not share any of my code with employers (university policy: fear of aiding cheating). With FreeCodeCamp, I was able to develop a small portfolio.",
     "github": "LCBecker",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAADrtuwBOA_0ihkKIbUFXoXskXikQT9uVeo",
-    "image": "http://i.imgur.com/J1cbqDQ.jpg"
+    "image": "//i.imgur.com/J1cbqDQ.jpg"
   },
   {
     "camper": "Robert Trammel",
     "quote": "I'm working a job integrating JavaScript into FileMaker and doing some custom web publishing for a school district. I've also have job offers from Apple and a few technology firms around the country. If it wasn't for Free Code Camp, I'd still be in the dark with some really awesome but irrelevant skills.",
     "github": "comajama",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAIAABQsM30BEAI6xyAhk-OqbBNUJL0WD2uA3GE",
-    "image": "http://i.imgur.com/E9YdQIn.jpg"
+    "image": "//i.imgur.com/E9YdQIn.jpg"
   },
   {
     "camper": "Brian Atkins",
     "quote": "I'm spending less time then I used to on Free Code Camp, because people have begun to hire me to work on their projects. Free Code Camp has provided me the foundation I have needed to get these jobs.",
     "github": "BrianAtk",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAABtTx0BmDzmB7eDGOkAJbRw8RZdvysreso",
-    "image": "http://i.imgur.com/veN77Iw.jpg"
+    "image": "//i.imgur.com/veN77Iw.jpg"
   },
   {
     "camper": "Andrea Goulet",
     "quote": "Before enrolling in Free Code Camp, I was nervous when people asked me, \"Do you code?\", Now, I answer with a confident \"YES!\"",
     "github": "andreagoulet",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAA4KWYB-mCMwEU3LvDHXt6H0rVHbBvszq0",
-    "image": "http://i.imgur.com/XWt7fXk.jpg"
+    "image": "//i.imgur.com/XWt7fXk.jpg"
   },
   {
     "camper": "David McGill",
     "quote": "Even if you have a CS degree like I do, you still need projects to prove to employers that you care about coding. Free Code Camp provided me with a platform for doing this. It's all laid out for you - you just have step up and step into the map!",
     "github": "dmcgill50",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAEBy74BHsJCpgrbohr2dJxbdXuvMuJDx6k",
-    "image": "http://i.imgur.com/ZVNPIYU.jpg"
+    "image": "//i.imgur.com/ZVNPIYU.jpg"
   },
   {
     "camper": "Adam Recvlohe",
     "quote": "I had no previous development experience and I was working a full-time as an Instructional Designer. Free Code Camp helped me get hired as a JavaScript developer.",
     "github": "arecvlohe",
     "linkedin": "https://www.linkedin.com/in/adamrecvlohe",
-    "image": "http://i.imgur.com/oFxOlRG.jpg"
+    "image": "//i.imgur.com/oFxOlRG.jpg"
   },
   {
     "camper": "John Ellis",
     "quote": "Free Code Camp has been one of the major contributors to my career in software development. I started as an apps analyst, spent 3 months going through the coursework in my off time and weekends, and just landed a job as a business systems developer.",
     "github": "johnmellis",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAbrISEBqAVYOBfhni9mB3YoFFzzrAbYvvo",
-    "image": "http://i.imgur.com/qLfaM9Y.jpg"
+    "image": "//i.imgur.com/qLfaM9Y.jpg"
   },
   {
     "camper": "Rachel Krantz",
     "quote": "Free Code Camp gave me confidence that I could apply to software engineering jobs, because I knew I was capable of learning. That confidence convinced the hiring manager to hire me.",
     "github": "krantzinator",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAOdv-oBnOGtQCoGooUB0xGJ4TWoAgV_z_E",
-    "image": "http://i.imgur.com/dqHrkkC.jpg"
+    "image": "//i.imgur.com/dqHrkkC.jpg"
   },
   {
     "camper": "Alex Dixon",
     "quote": "I was hired by the owner of the company, a programmer with 25 years of experience in web development. I graduated from university with a degree in English and had no programming experience prior to attending FreeCodeCamp.",
     "github": "alex-dixon",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAABhCmLMBLAR1AXskaJXDMT-uLPZ8M7TynPQ",
-    "image": "http://i.imgur.com/poiaanK.jpg"
+    "image": "//i.imgur.com/poiaanK.jpg"
   },
   {
     "camper": "Ryan Lindeman",
     "quote": "Free Code Camp has been great in giving me a direct path to the full stack development skills I wanted to become more involved in projects at work.",
     "github": "fai1whale",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAkMT1EBFCY849rMWYSDIEj6kosBJSH9n2s",
-    "image": "http://i.imgur.com/jHOjcyN.jpg"
+    "image": "//i.imgur.com/jHOjcyN.jpg"
   },
   {
     "camper": "Stephanie Brown",
     "quote": "Free Code Camp has given me structure and a direction while learning to code.",
     "github": "strawmitch",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAARqP5cBDDdBxPUzluctvjUhOP3UsiowRtM",
-    "image": "http://i.imgur.com/k5EEyNf.jpg"
+    "image": "//i.imgur.com/k5EEyNf.jpg"
   },
   {
     "camper": "Jimson Sulit",
     "quote": "Aside from the fact that I’m learning full stack web development, Free Code Camp has also given me the opportunity to lead local community projects.",
     "github": "webdevjedi25",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAWqUccBopX2Wo_P1gYgy0iIEqChwXPTh2k",
-    "image": "http://i.imgur.com/DzMDPS5.jpg"
+    "image": "//i.imgur.com/DzMDPS5.jpg"
   },
   {
     "camper": "Brian Emory",
     "quote": "I like to learn by doing but with the books, while very informative, there was more reading than doing. I came across Free Code Camp which has allowed me to learn by doing. Whereas before I was struggling to learn, I am now not only learning but learning while building cool projects.",
     "github": "thebrianemory",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAABc3jXwB-iZdZKZIVAvL93RHGB7_J9gDbVA",
-    "image": "http://i.imgur.com/JcdSD9H.jpg"
+    "image": "//i.imgur.com/JcdSD9H.jpg"
   },
   {
     "camper": "Ralph Cachero",
     "quote": "I am a software QA engineer. Free Code Camp has helped me understand what the developers go through.",
     "github": "rcachero",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAJEF88BiUtMoxS3Ww7ooI9QmTZdrgP272Q",
-    "image": "http://i.imgur.com/5umfPRq.jpg"
+    "image": "//i.imgur.com/5umfPRq.jpg"
   },
   {
     "camper": "Ina Tsetsova",
     "quote": "Bonfires really make me think and combine programming concepts creatively.",
     "github": "Tsetsova",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAjPoIcBJsAF91dqwgxFQ4qct88yFcljXNU",
-    "image": "http://i.imgur.com/9Ta15Ow.jpg"
+    "image": "//i.imgur.com/9Ta15Ow.jpg"
   },
   {
     "camper": "Ryan Jones",
     "quote": "Learning to code with Free Code Camp has given me a leg up in my career. It has helped to train my brain to think with the logic that computers use. This is a tremendous aid in the field of digital forensics.",
     "github": "ryanmjones",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAABPJt1MBxC4Yero3PJPhF9rrr_Y7WfOGcCU",
-    "image": "http://i.imgur.com/8cRU20S.jpg"
+    "image": "//i.imgur.com/8cRU20S.jpg"
   },
   {
     "camper": "Sara Powell",
     "quote": "I’ve progressed from not coding very much at all, to coding well enough to land job interviews for front end development positions.",
     "github": "newtcobell",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAy1jmQBRjoGSUWd6Zib7FtekpSMBVHr7Vw",
-    "image": "http://i.imgur.com/4l4OBbR.jpg"
+    "image": "//i.imgur.com/4l4OBbR.jpg"
   },
   {
     "camper": "Rhonadale Florentino",
     "quote": "I can now confidently tell clients that I can design their website.",
     "github": "None Given",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAI53oUBmy6MPKp1UeHxBy3_y0cyTS4bWow",
-    "image": "http://i.imgur.com/soEDnv6.jpg"
+    "image": "//i.imgur.com/soEDnv6.jpg"
   },
   {
     "camper": "Justin Clay Lane",
     "quote": "Free Code Camp provided a structured learning experience more akin to an actual class, compared to other free learning sites. I was recently hired to update and maintain the website for a local doctor’s office. The extra money and experience from that is wonderful.",
     "github": "jclane",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAYZYQ4BBY337OqRUhMnZqDJNX1wNXjT7Bk",
-    "image": "http://i.imgur.com/COEPda5.jpg"
+    "image": "//i.imgur.com/COEPda5.jpg"
   },
   {
     "camper": "Angshuman Gupta",
     "quote": "I’m a co-founder of a startup. We had been coding with PHP, but always wanted to shift to meteor.js. Free Code Camp gave me a structured JavaScript guide.",
     "github": "codingang",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAhIipMB6vAXaratEs0MtUd3GgyYm70cvbE",
-    "image": "http://i.imgur.com/7pwkFQ5.jpg"
+    "image": "//i.imgur.com/7pwkFQ5.jpg"
   },
   {
     "camper": "Genavieve Clausen",
     "quote": "Free Code Camp has benefitted me in numerous ways, including the opportunity to learn in a self-paced, supportive environment. I am excited to be a part of a growing community making lasting connections for the career and lifestyle I am pursuing.",
     "github": "GenavieveMarie",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAOISlMBAi43m1SG-xM_S2B8Vy05yiQz5rE",
-    "image": "http://i.imgur.com/vr7lTkx.jpg"
+    "image": "//i.imgur.com/vr7lTkx.jpg"
   },
   {
     "camper": "Tim Stauffer",
     "quote": "I found Free Code Camp more helpful than my MS degree, so I quit college. Learning so much. Also saving $50,000.",
     "github": "timstauffer",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAADVcVIBz8UCNjQKl2GUy9ka8UGnQXAXAYw",
-    "image": "http://i.imgur.com/b8YCzf1.jpg"
+    "image": "//i.imgur.com/b8YCzf1.jpg"
   },
   {
     "camper": "Marquina M Iliev-Piselli",
     "quote": "I’m re-designing a site for my full-time job.",
     "github": "Marquina",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAACYvVUBTuu8dNRHthN1TFiyk137PLDqnv4",
-    "image": "http://i.imgur.com/6Ep9hfs.jpg"
+    "image": "//i.imgur.com/6Ep9hfs.jpg"
   },
   {
     "camper": "Pete Considine",
     "quote": "The guided and structured lessons have been really helpful, as has the relatively slow pace that new concepts are introduced. I had been taking a Udemy course and it really seemed to be skimming the surface of JavaScript in the interest of \"getting to everything.\"",
     "github": "Pjconsidine",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAAi8-8BxUVpoi_VuJQmeGWN5zhMBgbvPbs",
-    "image": "http://i.imgur.com/SkYRcDW.jpg"
+    "image": "//i.imgur.com/SkYRcDW.jpg"
   },
   {
     "camper": "Khatra Ahmed",
     "quote": "I can learn to code with support by my side. Everyone is so helpful and it makes learning to code less of a struggle.",
     "github": "Mystfreak",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAbdUsIBApacWEmL7CIxe2q7aevMn7aQvmQ",
-    "image": "http://i.imgur.com/XguPEF7.jpg"
+    "image": "//i.imgur.com/XguPEF7.jpg"
   },
   {
     "camper": "Marcus Lyons",
     "quote": "Free Code Camp has helped me gain the confidence to automate part of my work responsibilities. I was able to use skills I learned from Free Code Camp to help with writing a bash script to search through mobile app database log files to find errors.",
     "github": "auron1223",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAA_1aLABo1pVJH9ijSqz8PvLgpzVYkIsjVc",
-    "image": "http://i.imgur.com/X5c77Ov.jpg"
+    "image": "//i.imgur.com/X5c77Ov.jpg"
   },
   {
     "camper": "Reynald Emmanuel Endaya",
     "quote": "There is an active community (even in Manila) and it’s interactive, unlike all the MOOCs I tried before where I had to listen to somebody speak for a long time. I am learning a lot here and I have not yet lost my momentum.",
     "github": "None Given",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAUlm8oBQuXm_Y89_LDC9mb2vOjjQH_pZDo",
-    "image": "http://i.imgur.com/oA5CtWF.jpg"
+    "image": "//i.imgur.com/oA5CtWF.jpg"
   },
   {
     "camper": "Victoria Kariolic",
     "quote": "I discovered a coding partner through the Free Code Camp groups who has been able to cover gaps for my client work.",
     "github": "Niaskywalk",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAEFmXMBlTFIR2j1G-vJhAMsUOPONILGrLM",
-    "image": "http://i.imgur.com/TiqbM1f.jpg"
+    "image": "//i.imgur.com/TiqbM1f.jpg"
   },
   {
     "camper": "Cameron Eshgh",
     "quote": "Free Code Camp enables me as a digital marketer to dive right into whatever asset or content and fix things that haven’t been working, as well as roll up my sleeves when our web developers are not available.",
     "github": "eshghitude",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAVdU1MBFFiei4ZYNImnVDcR3H_EiuS6qLY",
-    "image": "http://i.imgur.com/PEzJLCp.jpg"
+    "image": "//i.imgur.com/PEzJLCp.jpg"
   },
   {
     "camper": "Devarsh Ruparelia",
     "quote": "Even though I am still just a high school student. The startup I intern for said that if I finish the full track of Free Code Camp, they will strongly consider me for their programming jobs. Thanks Free Code Camp!",
     "github": "devarsh1997",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAApxpP8BZBcHQzr6Ci3xmkkZX-OSH_oLuJs",
-    "image": "http://i.imgur.com/ouv1qUd.jpg"
+    "image": "//i.imgur.com/ouv1qUd.jpg"
   },
   {
     "camper": "Miranda Bashore",
     "quote": "I want to be able to freelance and create dynamic websites. Free Code Camp makes that more of a reality for me, as I cannot afford an expensive bootcamp while getting my Master’s degree.",
     "github": "DutchBay",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAA8KmJMBTtvvgJzjeAUo_YOssh2yLZZlvlk",
-    "image": "http://i.imgur.com/mJlUzOq.jpg"
+    "image": "//i.imgur.com/mJlUzOq.jpg"
   },
   {
     "camper": "Christian Morera",
     "quote": "Free Code Camp has been a great experience. I’ve learned so many things. I am in the process of transitioning from content developer to full stack developer.",
     "github": "chrmorfeus",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAMc-tYBtYri0H1KHz1WNQjWxZ23jg0tMNU",
-    "image": "http://i.imgur.com/sfhBDHw.jpg"
+    "image": "//i.imgur.com/sfhBDHw.jpg"
   },
   {
     "camper": "Jason Arnold",
     "quote": "I like self-paced learning, so Free Code Camp has been great. The challenges are difficult enough to push boundaries but not so tough to scare people off.",
     "github": "thejasonfile",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAABlImsBwAEZ3u3A5NIlCegho8WZ2j4h0w0",
-    "image": "http://i.imgur.com/hqQ3nPA.jpg"
+    "image": "//i.imgur.com/hqQ3nPA.jpg"
   },
   {
     "camper": "Kaveet Laxmidas",
     "quote": "Free Code Camp is inspiring me to overhaul some of my old open source projects using more modern approaches and technologies.",
     "github": "kaveet",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAABZooOgBZJg_0MAJ09pd5vROk83oBFA1cEE",
-    "image": "http://i.imgur.com/1PadpKm.jpg"
+    "image": "//i.imgur.com/1PadpKm.jpg"
   },
   {
     "camper": "Brett Guillory",
     "quote": "Free Code Camp has given me a great, goal oriented curriculum to learn exactly what I was looking for. And best of all it’s 100% free!",
     "github": "Kurzninja",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAUMPqMBa6GwMTkA_oHUeqnZzyD95FisjwM",
-    "image": "http://i.imgur.com/WjHNwIu.jpg"
+    "image": "//i.imgur.com/WjHNwIu.jpg"
   },
   {
     "camper": "Kory J. Campbell",
     "quote": "I just graduated university, so my financial status is pretty meager, however this camp has definitely helped me improve my skills.",
     "github": "@koryjcampbell [sic]",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAtxvTgB0N_uJhW-87Dew4wHyeqLUP-XyZk",
-    "image": "http://i.imgur.com/buAYlTA.jpg"
+    "image": "//i.imgur.com/buAYlTA.jpg"
   },
   {
     "camper": "Bryon Christopher Miller",
     "quote": "Free Code Camp has given me a free, online opportunity to study full stack JavaScript in a structured, community-based format. I am very grateful for this opportunity.",
     "github": "bryonmiller",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAABEXhHoBxj3Uiq7I0a5v1pVkeJ1gWycbm90",
-    "image": "http://i.imgur.com/ssKAX9d.jpg"
+    "image": "//i.imgur.com/ssKAX9d.jpg"
   },
   {
     "camper": "Darren Joy",
     "quote": "Great learning opportunity. Good coding challenges and I’m meeting some very motivated people.",
     "github": "Darrenfj",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAARv6UIBWeXw4ZfCJ70kBKgnhcv8XgnVsa8",
-    "image": "http://i.imgur.com/sCkeJ0z.jpg"
+    "image": "//i.imgur.com/sCkeJ0z.jpg"
   },
   {
     "camper": "Stephen Mayeux",
     "quote": "Free Code Camp is helpful because it’s not 100% hand-holding, and it pushes me out of my comfort zone.",
     "github": "stephenmayeux",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAjTe7cBhjovoz6zTE_M6MwZ_rr3szhiSOM",
-    "image": "http://i.imgur.com/TbuwAJ3.jpg"
+    "image": "//i.imgur.com/TbuwAJ3.jpg"
   },
   {
     "camper": "John Hillegass",
     "quote": "Free Code Camp has given me the confidence that I need when heading into high level client meetings and developer scrum sessions.",
     "github": "Ohillio",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAWEO3AB51y8eR2tYF8nydQb8kANkdPwR5U",
-    "image": "http://i.imgur.com/P61e3dt.jpg"
+    "image": "//i.imgur.com/P61e3dt.jpg"
   },
   {
     "camper": "Eric Hartline",
     "quote": "The community is very helpful, and I have already accomplished so much more than what I did with other self-guided courses.",
     "github": "wildlifehexagon",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAFitUwByB_tgxdExntMnakgQnTK1H3eEd8",
-    "image": "http://i.imgur.com/PgvxbY2.jpg"
+    "image": "//i.imgur.com/PgvxbY2.jpg"
   },
   {
     "camper": "Danielle J Moss",
     "quote": "Aside from learning to code in a fun way, I also know I’m not alone and have somewhere to go when I do get stuck and need help.",
     "github": "psykobilliethekid",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAV4ccABlbMXZ5VfzvlYentPOIKzFbjgbZM",
-    "image": "http://i.imgur.com/AhaRZ3I.jpg"
+    "image": "//i.imgur.com/AhaRZ3I.jpg"
   },
   {
     "camper": "Orcun Tonyali",
     "quote": "The thorough curriculum helped a lot in managing my company’s website.",
     "github": "orcuntonyali",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAVwBQIBvE3-M8pDWxzep9umHDnV6JjKmTU",
-    "image": "http://i.imgur.com/54O0p69.jpg"
+    "image": "//i.imgur.com/54O0p69.jpg"
   },
   {
     "camper": "Brendan Murphy",
     "quote": "I like that it isn’t just a 9 week course. The chat room and partner coding were also very helpful.",
     "github": "dendari",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAA06V8BqPNnPod-FGRuvifILht-QwZX3YY",
-    "image": "http://i.imgur.com/36Ba4HU.jpg"
+    "image": "//i.imgur.com/36Ba4HU.jpg"
   },
   {
     "camper": "Michael Berry",
     "quote": "Free Code Camp has helped me learn JavaScript, jQuery, and Bootstrap as well as helped me brush up on my HTML and CSS skills. I was laid off from Boeing in April. I’m hoping to land a job as a JavaScript developer as I get closer to finishing the curriculum. I wish I had known about Free Code Camp sooner.",
     "github": "Karnblack ",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAGRqf4BwCI3cdJw9wAPc6NlReG3fzOIQq0",
-    "image": "http://i.imgur.com/rIhq3gl.jpg"
+    "image": "//i.imgur.com/rIhq3gl.jpg"
   },
   {
     "camper": "Angie Canon",
     "quote": "Free Code Camp is helping my career. I work with developers and I’m beginning to understand their world better. I can phrase questions more clearly, and begin to guess what an issue might be related to.",
     "github": "angiecan",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAACfWbABAMsll9ovljvvsLpH317o47hNHX0",
-    "image": "http://i.imgur.com/v258ssn.jpg"
+    "image": "//i.imgur.com/v258ssn.jpg"
   },
   {
     "camper": "Irfan Kucuk",
     "quote": "I’ve long been looking for a place that could keep me interested in learning how to code. I’ve tried several Codecademy and comparable places, but none have proven as engaging as Free Code Camp.",
     "github": "Ikucuk",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAA5ripkBiFAjXkB3ndO6sKiiq6gD21mk6bw",
-    "image": "http://i.imgur.com/Ox8ycSi.jpg"
+    "image": "//i.imgur.com/Ox8ycSi.jpg"
   },
   {
     "camper": "Jonathan Kvicky",
     "quote": "Free Code Camp has given me a strong foundational advantage into pursuing a career in software/web development, and has also served as a great platform for connecting with others who share the same passion for software engineering.",
     "github": "jonkvix",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAABk3i9YB_hcw1AyVg2QHaf8KMQ8ADQ_R_vg",
-    "image": "http://i.imgur.com/CZsAqDK.jpg"
+    "image": "//i.imgur.com/CZsAqDK.jpg"
   },
   {
     "camper": "Susannah Skyer Gupta",
     "quote": "As a jack-of-all-trades at a small educational software company, I’m already putting my coding skills to work, beginning to submit my own pull requests for bug fixes instead of just opening a problem ticket and waiting for someone else to fix it.",
     "github": "SuzGupta",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAFIosEBLewkmbuudMwAqiTM5YE3wHvcE4A",
-    "image": "http://i.imgur.com/sazGykY.jpg"
+    "image": "//i.imgur.com/sazGykY.jpg"
   },
   {
     "camper": "Puneet Shivanand",
     "quote": "Free Code Camp has helped me create and maintain a website for a local bioinformatics conference.",
     "github": "puneet-shivanand",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAArBgXABw4qoSJQoGjqrvU6_vBX1gUmcwGg",
-    "image": "http://i.imgur.com/5BJDA16.jpg"
+    "image": "//i.imgur.com/5BJDA16.jpg"
   },
   {
     "camper": "Ian Seabrook",
     "quote": "I’ve made connections with people I never would have approached before Free Code Camp.",
     "github": "ianseabrook",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAuVUi4BSJ3K6fcyTa2fnZr_9Oosb3nKM34",
-    "image": "http://i.imgur.com/z17zai3.jpg"
+    "image": "//i.imgur.com/z17zai3.jpg"
   },
   {
     "camper": "Oleh Kuchuk",
     "quote": "The coding exercises helped me to prepare for my first job interview.",
     "github": "drkraken",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAABgy6MwBva2OKpsffAU-OBBeTC7qahTYpGw",
-    "image": "http://i.imgur.com/4KHGgjR.jpg"
+    "image": "//i.imgur.com/4KHGgjR.jpg"
   },
   {
     "camper": "Larisa Bekerman",
     "quote": "Free Code Camp has made me more comfortable with certain aspects of code and helped me review and understand concepts in a more hands-on style. Some people learn by reading theory, I don’t understand things until I’ve made them work myself!",
     "github": "xaosqueen",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAB-SHUBga96BB-iaHe7QFI-S2dFmeUQaq0",
-    "image": "http://i.imgur.com/EptT3Yl.jpg"
+    "image": "//i.imgur.com/EptT3Yl.jpg"
   },
   {
     "camper": "Jesse Mull",
     "quote": "I learned more using Free Code Camp in three months than I ever could have at a traditional university.",
     "github": "jessemull",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAr2HfcBswHtmQeLM1rxDEg7GdCuxvNin5s",
-    "image": "http://i.imgur.com/853QDiC.jpg"
+    "image": "//i.imgur.com/853QDiC.jpg"
   },
   {
     "camper": "Mihai Popescu",
     "quote": "The exercises helped me hone my skills and get an internship at a tech startup. My projects were a great talking point in the interview, showing them what I did and how I approached the problems.",
     "github": "Mihaisavezi",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAApQxGQBYz-WAQu_0zXPTkW-R7QbdaXEZeA",
-    "image": "http://i.imgur.com/FfrhMjg.jpg"
+    "image": "//i.imgur.com/FfrhMjg.jpg"
   },
   {
     "camper": "Normandy Real",
     "quote": "I'm doing Free Code Camp to transition from mainframe programming to front end development.",
     "github": "mandyreal",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAdebIIBHfcSRnxGI-j6g5y6crfOXSg55Dc",
-    "image": "http://i.imgur.com/U5jVHGk.jpg"
+    "image": "//i.imgur.com/U5jVHGk.jpg"
   },
   {
     "camper": "Kristin Anthony",
     "quote": "The layout, pacing, and resources of Free Code Camp have given me focus and shown me a path to mastery. Just being able to tell people in my field that I’m learning full stack JavaScript and having projects to show for it has been immensely helpful.",
     "github": "anthkris",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAZRM5MBACvQe36s4cvpe5ZHWEfgxprDUFg",
-    "image": "http://i.imgur.com/LAE3xBr.jpg"
+    "image": "//i.imgur.com/LAE3xBr.jpg"
   },
   {
     "camper": "Zlatko Cabric",
     "quote": "I am still in school, pursuing an AS in web development. The JavaScript course in college was a breeze thanks to Free Code Camp.",
     "github": "zlajac ",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAsCCFMBUlE24Ie41G_YS3XhdtQMDl5vCZA",
-    "image": "http://i.imgur.com/X2ozvfP.jpg"
+    "image": "//i.imgur.com/X2ozvfP.jpg"
   },
   {
     "camper": "Geoff Storbeck",
     "quote": "I've been able to build tools that has helped moved my current career further and has opened up many more doors in the field.",
     "github": "storbeck",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAdVQZYBHPYLt5efKwqZmiDM5SqIdH0_AR4",
-    "image": "http://i.imgur.com/DULhJ8z.jpg"
+    "image": "//i.imgur.com/DULhJ8z.jpg"
   },
   {
     "camper": "Jason Rueckert",
     "quote": "Free Code Camp helped me get to the point as a programmer that I felt confident enough to apply for tech jobs. I got the third one I interviewed for.",
     "github": "jsonify",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAF-rVIBwdzAFzGkWCaIw81O_jajBs-zKZU",
-    "image": "http://i.imgur.com/vSkODHr.jpg"
+    "image": "//i.imgur.com/vSkODHr.jpg"
   },
   {
     "camper": "Anthony DePaolo",
     "quote": "I can learn web development at my own pace, which is great with my crazy life’s schedule. It also doesn’t cost $10k-$17k, which I just can’t fork over right now.",
     "github": "adepaolo",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAOCUkABzCvw3p1mBiPbbFWq91BEFXGXKxA",
-    "image": "http://i.imgur.com/Dm02s0W.jpg"
+    "image": "//i.imgur.com/Dm02s0W.jpg"
   },
   {
     "camper": "Jimmy Epperson",
@@ -508,62 +508,62 @@
     "quote": "Free Code Camp has been nothing but supportive and helpful, taking me from a rather basic knowledge of front end technologies to a better, more complete understanding from a full stack perspective.",
     "github": "jonslucas",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAATn9H4BI7BP7MBpZ0NR1EvldkWTvAdGy2w",
-    "image": "http://i.imgur.com/Fn91jpJ.jpg"
+    "image": "//i.imgur.com/Fn91jpJ.jpg"
   },
   {
     "camper": "Brian Barrow",
     "quote": "Free Code Camp has given me confidence that I can become a web developer.",
     "github": "briancbarrow",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAVH-osBCI8WZTtv3Om5WjeD2rYnjQ6z7zA",
-    "image": "http://i.imgur.com/VfdBd5Z.jpg"
+    "image": "//i.imgur.com/VfdBd5Z.jpg"
   },
   {
     "camper": "Josh Cronkhite",
     "quote": "My resume has been bolstered by adding a completely new stack, providing value to my clients and opening up the pool of potential clients that I would have otherwise referred to peers.",
     "github": "joshcronkhite",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAGTPvoBg__9rivrYrYgo8sDJ561JpAfhHk",
-    "image": "http://i.imgur.com/DjAIqps.jpg"
+    "image": "//i.imgur.com/DjAIqps.jpg"
   },
   {
     "camper": "Adam Goswick",
     "quote": "Free Code Camp is helping me learn web development when I can’t afford to go back to school.",
     "github": "thegoz85",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAObbhkBzeCKrzuEB0ssE_iGrBX0Xnu9URc",
-    "image": "http://i.imgur.com/XYdoDCQ.jpg"
+    "image": "//i.imgur.com/XYdoDCQ.jpg"
   },
   {
     "camper": "Travis Wouters",
     "quote": "Free Code Camp helped me add skillsets to my resume that show experience instead of knowledge without practical application.",
     "github": "",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAABHP0YBddxsmaf2OghV2jAy17RVMhig4RM",
-    "image": "http://i.imgur.com/fyRsiOs.jpg"
+    "image": "//i.imgur.com/fyRsiOs.jpg"
   },
   {
     "camper": "Nicholas Slaven",
     "quote": "Free Code Camp has given me the courage to open the door to the idea of programming for a career.",
     "github": "nslaven22",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAA5HGyIBmpNcXY_tfHBkWxXI6OtwsFAeHRQ",
-    "image": "http://i.imgur.com/9ZYscsm.jpg"
+    "image": "//i.imgur.com/9ZYscsm.jpg"
   },
   {
     "camper": "John Bull",
     "quote": "I am now able to add customized branding and layouts to web applications that fellow employees and customers use everyday. I’m now looking to move away from desktop support and into development roles.",
     "github": "Jbull328",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAABAyfz8BsjE-oGv1k3URGzhRyeupnTGuK3I",
-    "image": "http://i.imgur.com/U2kJtoX.jpg"
+    "image": "//i.imgur.com/U2kJtoX.jpg"
   },
   {
     "camper": "Nick Galluzzo",
     "quote": "I currently work in a support role for a tech startup. The more I learn about JavaScript, the more I’m able to contribute to a product I really believe in!",
     "github": "ngalluzzo",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAjQl1EBZPrbUQ6zGPXmKIuNzpCyqqsnox4",
-    "image": "http://i.imgur.com/edJP2Qt.jpg"
+    "image": "//i.imgur.com/edJP2Qt.jpg"
   },
   {
     "camper": "James Allen",
     "quote": "I finally feel like I can learn to code in my own time and progress to the point of employability.",
     "github": "None Given",
     "linkedin": "https://www.linkedin.com/profile/view?id=AAkAAA4OrsIB5WyfuqeECSQO7HYisImVMDiFBl0",
-    "image": "http://i.imgur.com/quRxESK.jpg"
+    "image": "//i.imgur.com/quRxESK.jpg"
   }
 ]
diff --git a/server/utils/commit.json b/server/utils/commit.json
index b37b819..ebe234c 100644
--- a/server/utils/commit.json
+++ b/server/utils/commit.json
@@ -5,7 +5,7 @@
     "donateUrl": "https://www.girldevelopit.com/donate",
     "description": "Girl Develop It provides in-person classes for women to learn to code.",
     "imgAlt": "Girl Develop It participants coding at tables.",
-    "imgUrl": "http://i.imgur.com/U1CyEuA.jpg"
+    "imgUrl": "//i.imgur.com/U1CyEuA.jpg"
   },
   {
     "name": "black girls code",
@@ -13,7 +13,7 @@
     "donateUrl": "http://www.blackgirlscode.com/",
     "description": "Black Girls CODE is devoted to showing the world that black girls can code, and do so much more.",
     "imgAlt": "Girls developing code with instructor",
-    "imgUrl": "http://i.imgur.com/HBVrdaj.jpg"
+    "imgUrl": "//i.imgur.com/HBVrdaj.jpg"
   },
   {
     "name": "coderdojo",
@@ -21,7 +21,7 @@
     "donateUrl": "https://www.globalgiving.org/projects/coderdojo-start-a-dojo-support/",
     "description": "CoderDojo is the global network of free computer programming clubs for young people.",
     "imgAlt": "Two adults help several kids program on their laptops.",
-    "imgUrl": "http://i.imgur.com/701RLfV.jpg"
+    "imgUrl": "//i.imgur.com/701RLfV.jpg"
   },
   {
     "name": "women who code",
@@ -29,7 +29,7 @@
     "donateUrl": "https://www.womenwhocode.com/donate",
     "description": "Women Who Code (WWCode) is a global leader in propelling women in the tech industry.",
     "imgAlt": "Four women sitting in a classroom together learning to code.",
-    "imgUrl": "http://i.imgur.com/tKUi6Rf.jpg"
+    "imgUrl": "//i.imgur.com/tKUi6Rf.jpg"
   },
   {
     "name": "girls who code",
@@ -37,7 +37,7 @@
     "donateUrl": "http://girlswhocode.com/",
     "description": "Girls Who Code programs work to inspire, educate, and equip girls with the computing skills to pursue 21st century opportunities.",
     "imgAlt": "Three women smiling while they code on a computer together.",
-    "imgUrl": "http://i.imgur.com/op8BVph.jpg"
+    "imgUrl": "//i.imgur.com/op8BVph.jpg"
   },
   {
     "name": "hack club",
@@ -45,6 +45,6 @@
     "donateUrl": "https://hackclub.io/",
     "description": "Hack Club works with high school students to start and lead programming clubs at their schools.",
     "imgAlt": "A bunch of high school students posing for a photo in their programming club.",
-    "imgUrl": "http://i.imgur.com/G2YvPHf.jpg"
+    "imgUrl": "//i.imgur.com/G2YvPHf.jpg"
   }
 ]
\ No newline at end of file
diff --git a/server/views/certificate/back-end.jade b/server/views/certificate/back-end.jade
index be1bceb..2b45d7a 100644
--- a/server/views/certificate/back-end.jade
+++ b/server/views/certificate/back-end.jade
@@ -1,6 +1,6 @@
 include font
 #name.cert-name= name
-img#cert.img-abs(src='http://i.imgur.com/yBKoMVP.jpg')
+img#cert.img-abs(src='//i.imgur.com/yBKoMVP.jpg')
 .cert-date= date
 .cert-link verify this certification at: http://freecodecamp.com/#{username}/back-end-certification
 include script
diff --git a/server/views/certificate/data-vis.jade b/server/views/certificate/data-vis.jade
index ec524cb..68ab418 100644
--- a/server/views/certificate/data-vis.jade
+++ b/server/views/certificate/data-vis.jade
@@ -1,6 +1,6 @@
 include font
 #name.cert-name= name
-img#cert.img-abs(src='http://i.imgur.com/l7tIptn.jpg')
+img#cert.img-abs(src='//i.imgur.com/l7tIptn.jpg')
 .cert-date= date
 .cert-link verify this certification at: http://freecodecamp.com/#{username}/data-visualization-certification
 include script
diff --git a/server/views/certificate/front-end.jade b/server/views/certificate/front-end.jade
index 379dfb7..436d88b 100644
--- a/server/views/certificate/front-end.jade
+++ b/server/views/certificate/front-end.jade
@@ -1,6 +1,6 @@
 include font
 #name.cert-name= name
-img#cert.img-abs(src='http://i.imgur.com/ToFZKBd.jpg')
+img#cert.img-abs(src='//i.imgur.com/ToFZKBd.jpg')
 .cert-date= date
 .cert-link verify this certification at: http://freecodecamp.com/#{username}/front-end-certification
 include script
diff --git a/server/views/certificate/full-stack.jade b/server/views/certificate/full-stack.jade
index 95c94a6..33fed4a 100644
--- a/server/views/certificate/full-stack.jade
+++ b/server/views/certificate/full-stack.jade
@@ -1,6 +1,6 @@
 include font
 #name.cert-name= name
-img#cert.img-abs(src='http://i.imgur.com/Z4PgjBQ.jpg')
+img#cert.img-abs(src='//i.imgur.com/Z4PgjBQ.jpg')
 .cert-date= date
 .cert-link verify this certification at: http://freecodecamp.com/#{username}/full-stack-certification
 include script
diff --git a/server/views/commit/pledge.jade b/server/views/commit/pledge.jade
index 84ce52a..aac8692 100644
--- a/server/views/commit/pledge.jade
+++ b/server/views/commit/pledge.jade
@@ -11,5 +11,5 @@ block content
                     |  of completing your #{goal}
             .row
                 .col-xs-12.col-sm-6.col-sm-offset-3
-                  img.img-responsive(src='http://i.imgur.com/U1CyEuA.jpg' alt="Girl Develop It participants coding at tables.")
+                  img.img-responsive(src='//i.imgur.com/U1CyEuA.jpg' alt="Girl Develop It participants coding at tables.")
                   p Girl Develop It is a nonprofit that provides in-person classes for women to learn to code.
diff --git a/server/views/home.jade b/server/views/home.jade
index f93fa6a..d2774b5 100644
--- a/server/views/home.jade
+++ b/server/views/home.jade
@@ -38,15 +38,15 @@ block content
         .spacer
         .row
             .col-xs-12.col-sm-12.col-md-4
-                img.img-responsive.testimonial-image.img-center(src="http://i.imgur.com/nsvNixW.jpg", alt="Meta's testimonial image")
+                img.img-responsive.testimonial-image.img-center(src="//i.imgur.com/nsvNixW.jpg", alt="Meta's testimonial image")
                 p.testimonial-copy Through Free Code Camp, I built a robust and highly functional web app for a nonprofit. This led me to getting a fantastic job.
                 h3 - Meta Hirschl
             .col-xs-12.col-sm-12.col-md-4
-                img.img-responsive.testimonial-image.img-center(src="http://i.imgur.com/QPpjPac.jpg", alt="Brian's testimonial image")
+                img.img-responsive.testimonial-image.img-center(src="//i.imgur.com/QPpjPac.jpg", alt="Brian's testimonial image")
                 p.testimonial-copy Free Code Camp's a great way for disabled veterans like me to retrain. I'm receiving engineering job offers, and I haven't even finished yet.
                 h3 - Brian Grant
             .col-xs-12.col-sm-12.col-md-4
-                img.img-responsive.testimonial-image.img-center(src="http://i.imgur.com/wjlDigg.jpg", alt="Maxim Orlov's testimonial image")
+                img.img-responsive.testimonial-image.img-center(src="//i.imgur.com/wjlDigg.jpg", alt="Maxim Orlov's testimonial image")
                 p.testimonial-copy I started Free Code Camp with zero knowledge of web development. 6 months later, I landed my first job as a back end engineer.
                 h3 - Maxim Orlov
         .spacer
diff --git a/server/views/resources/nonprofits.jade b/server/views/resources/nonprofits.jade
index b735f55..f1be4da 100644
--- a/server/views/resources/nonprofits.jade
+++ b/server/views/resources/nonprofits.jade
@@ -18,15 +18,15 @@ block content
                 .spacer
                 .row
                     .col-xs-12.col-sm-12.col-md-4
-                        img.img-responsive.testimonial-image.img-center(src="http://i.imgur.com/ZHnFFN5.jpg", alt="Ewa's testimonial image")
+                        img.img-responsive.testimonial-image.img-center(src="//i.imgur.com/ZHnFFN5.jpg", alt="Ewa's testimonial image")
                         p.nonprofit-testimonial-copy With Free Code Camp's valuable contribution, we were able to improve all of our systems and processes as part of our Wonder Women Eastern Indonesia program, and make sure that even more life changing technologies get to where they are needed most.
                         h3 - Ewa Wojkowska with Kopernik
                     .col-xs-12.col-sm-12.col-md-4
-                        img.img-responsive.testimonial-image.img-center(src="http://i.imgur.com/KHF8O2i.jpg", alt="Jennifer's testimonial image")
+                        img.img-responsive.testimonial-image.img-center(src="//i.imgur.com/KHF8O2i.jpg", alt="Jennifer's testimonial image")
                         p.nonprofit-testimonial-copy We have been blown away by the professional quality of the work that has been produced by the campers working on our projects. Free Code Camp has been an invaluable partner and we are grateful for their support.
                         h3 - Jennifer McDowell with Child First Authority
                     .col-xs-12.col-sm-12.col-md-4
-                        img.img-responsive.testimonial-image.img-center(src="http://i.imgur.com/9VknVe3.jpg", alt="Stephanie's testimonial image")
+                        img.img-responsive.testimonial-image.img-center(src="//i.imgur.com/9VknVe3.jpg", alt="Stephanie's testimonial image")
                         p.nonprofit-testimonial-copy We had the pleasure to work with two very talented campers who went above and beyond to create a web-based app for us. I would highly recommend that nonprofits apply to Free Code Camp with their custom solution needs!
                         h3 - Stephanie McAllister with Timeraiser
                 .spacer
diff --git a/server/views/resources/shop.jade b/server/views/resources/shop.jade
index 947063b..0c5ea6e 100644
--- a/server/views/resources/shop.jade
+++ b/server/views/resources/shop.jade
@@ -4,7 +4,7 @@ block content
     hr
     .row
         .col-xs-12.col-sm-8.col-sm-offset-2.col-md-6.col-md-offset-3.text-center
-            img.img-responsive.img-center(src='http://i.imgur.com/MH1CvwY.jpg')
+            img.img-responsive.img-center(src='//i.imgur.com/MH1CvwY.jpg')
             h3 Free Code Camp laptop stickers are here!
             h4 Get two for only $5, with free shipping anywhere!
             p These durable 2" (5 cm) stickers sport a matte finish, and look great anywhere - especially on your laptop.

From bcfe8b99a7c4194d003dac4989a90392eb8afd20 Mon Sep 17 00:00:00 2001
From: Hallaathrad <Hallaathrad@gmail.com>
Date: Wed, 16 Mar 2016 23:13:08 -0400
Subject: [PATCH 21/33] Fix map overlapping issues

---
 client/main.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/client/main.js b/client/main.js
index 7fa1b96..77617a7 100644
--- a/client/main.js
+++ b/client/main.js
@@ -298,12 +298,12 @@ $(document).ready(function() {
   }
 
   function expandBlock(item) {
-    $(item).addClass('in');
+    $(item).addClass('in').css('height', 'auto');
     expandCaret(item);
   }
 
   function collapseBlock(item) {
-    $(item).removeClass('in');
+    $(item).removeClass('in').css('height', 'auto');
     collapseCaret(item);
   }
 

From 41cd3dae5f4c80f2d892e63f8a03b0a02db6a1dc Mon Sep 17 00:00:00 2001
From: Eric Leung <eric@erictleung.com>
Date: Thu, 17 Mar 2016 05:46:07 -0700
Subject: [PATCH 22/33] Make Truncate a String function unique & clarify

- Change `truncate` function to `truncateString`
- Update challenge description to clarify goals of challenge
---
 .../basic-bonfires.json                            | 24 +++++++++++-----------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/seed/challenges/01-front-end-development-certification/basic-bonfires.json b/seed/challenges/01-front-end-development-certification/basic-bonfires.json
index 1cf13be..f182454 100644
--- a/seed/challenges/01-front-end-development-certification/basic-bonfires.json
+++ b/seed/challenges/01-front-end-development-certification/basic-bonfires.json
@@ -399,31 +399,31 @@
       "id": "ac6993d51946422351508a41",
       "title": "Truncate a string",
       "description": [
-        "Truncate a string (first argument) if it is longer than the given maximum string length (second argument). Return the truncated string with a \"...\" ending.",
-        "Note that the three dots at the end add to the string length.",
-        "If the <code>num</code> is less than or equal to 3, then the length of the three dots is not added to the string length.",
+        "Truncate a string (first argument) if it is longer than the given maximum string length (second argument). Return the truncated string with a <code>...</code> ending.",
+        "Note that inserting the three dots to the end will add to the string length.",
+        "However, if the given maximum string length <code>num</code> is less than or equal to 3, then the addition of the three dots does not add to the string length in determining the truncated string.",
         "Remember to use <a href=\"//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck\" target=\"_blank\">Read-Search-Ask</a> if you get stuck. Write your own code."
       ],
       "challengeSeed": [
-        "function truncate(str, num) {",
+        "function truncateString(str, num) {",
         "  // Clear out that junk in your trunk",
         "  return str;",
         "}",
         "",
-        "truncate(\"A-tisket a-tasket A green and yellow basket\", 11);"
+        "truncateString(\"A-tisket a-tasket A green and yellow basket\", 11);"
       ],
       "tests": [
-        "assert(truncate(\"A-tisket a-tasket A green and yellow basket\", 11) === \"A-tisket...\", 'message: <code>truncate(\"A-tisket a-tasket A green and yellow basket\", 11)</code> should return \"A-tisket...\".');",
-        "assert(truncate(\"Peter Piper picked a peck of pickled peppers\", 14) === \"Peter Piper...\", 'message: <code>truncate(\"Peter Piper picked a peck of pickled peppers\", 14)</code> should return \"Peter Piper...\".');",
-        "assert(truncate(\"A-tisket a-tasket A green and yellow basket\", \"A-tisket a-tasket A green and yellow basket\".length) === \"A-tisket a-tasket A green and yellow basket\", 'message: <code>truncate(\"A-tisket a-tasket A green and yellow basket\", \"A-tisket a-tasket A green and yellow basket\".length)</code> should return \"A-tisket a-tasket A green and yellow basket\".');",
-        "assert(truncate('A-tisket a-tasket A green and yellow basket', 'A-tisket a-tasket A green and yellow basket'.length + 2) === 'A-tisket a-tasket A green and yellow basket', 'message: <code>truncate(\"A-tisket a-tasket A green and yellow basket\", \"A-tisket a-tasket A green and yellow basket\".length + 2)</code> should return \"A-tisket a-tasket A green and yellow basket\".');",
-        "assert(truncate(\"A-\", 1) === \"A...\", 'message: <code>truncate(\"A-\", 1)</code> should return \"A...\".');",
-        "assert(truncate(\"Absolutely Longer\", 2) === \"Ab...\", 'message: <code>truncate(\"Absolutely Longer\", 2)</code> should return \"Ab...\".');"
+        "assert(truncateString(\"A-tisket a-tasket A green and yellow basket\", 11) === \"A-tisket...\", 'message: <code>truncateString(\"A-tisket a-tasket A green and yellow basket\", 11)</code> should return \"A-tisket...\".');",
+        "assert(truncateString(\"Peter Piper picked a peck of pickled peppers\", 14) === \"Peter Piper...\", 'message: <code>truncateString(\"Peter Piper picked a peck of pickled peppers\", 14)</code> should return \"Peter Piper...\".');",
+        "assert(truncateString(\"A-tisket a-tasket A green and yellow basket\", \"A-tisket a-tasket A green and yellow basket\".length) === \"A-tisket a-tasket A green and yellow basket\", 'message: <code>truncateString(\"A-tisket a-tasket A green and yellow basket\", \"A-tisket a-tasket A green and yellow basket\".length)</code> should return \"A-tisket a-tasket A green and yellow basket\".');",
+        "assert(truncateString('A-tisket a-tasket A green and yellow basket', 'A-tisket a-tasket A green and yellow basket'.length + 2) === 'A-tisket a-tasket A green and yellow basket', 'message: <code>truncateString(\"A-tisket a-tasket A green and yellow basket\", \"A-tisket a-tasket A green and yellow basket\".length + 2)</code> should return \"A-tisket a-tasket A green and yellow basket\".');",
+        "assert(truncateString(\"A-\", 1) === \"A...\", 'message: <code>truncateString(\"A-\", 1)</code> should return \"A...\".');",
+        "assert(truncateString(\"Absolutely Longer\", 2) === \"Ab...\", 'message: <code>truncateString(\"Absolutely Longer\", 2)</code> should return \"Ab...\".');"
       ],
       "type": "bonfire",
       "isRequired": true,
       "solutions": [
-        "function truncate(str, num) {\n  if(str.length > num ) {\n    if(num > 3) {\n      return str.slice(0, num - 3) + '...';\n    } else {\n      return str.slice(0,num) + '...';\n    }\n  } \n  return str;\n}"
+        "function truncateString(str, num) {\n  if(str.length > num ) {\n    if(num > 3) {\n      return str.slice(0, num - 3) + '...';\n    } else {\n      return str.slice(0,num) + '...';\n    }\n  } \n  return str;\n}"
       ],
       "MDNlinks": [
         "String.slice()"

From fef16535424f188833129743ca2a9d9bfc5c243f Mon Sep 17 00:00:00 2001
From: Akira Laine <akira_laine@outlook.com>
Date: Thu, 17 Mar 2016 19:39:51 +1100
Subject: [PATCH 23/33] added title to settings page

---
 server/boot/user.js | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/server/boot/user.js b/server/boot/user.js
index fc3986d..2fbf9c5 100644
--- a/server/boot/user.js
+++ b/server/boot/user.js
@@ -249,7 +249,9 @@ module.exports = function(app) {
   }
 
   function getSettings(req, res) {
-    res.render('account/settings');
+    res.render('account/settings', {
+        title: 'Settings'
+    });
   }
 
   function returnUser(req, res, next) {

From a65742ad4597d947d1ed349616a0a2098d5e3d10 Mon Sep 17 00:00:00 2001
From: benmcmahon100 <benmcmahon100@gmail.com>
Date: Thu, 17 Mar 2016 13:48:36 +0000
Subject: [PATCH 24/33] Fix wiki's SSL issue

fix wiki view

Fix to the same issue that was effecting the aside wiki
---
 client/main.js              | 2 +-
 server/views/wiki/show.jade | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/client/main.js b/client/main.js
index 77617a7..b14f8d1 100644
--- a/client/main.js
+++ b/client/main.js
@@ -389,7 +389,7 @@ $(document).ready(function() {
     if (!main.isWikiAsideLoad) {
       var lang = window.location.toString().match(/\/\w{2}\//);
       lang = (lang) ? lang[0] : '/en/';
-      var wikiURL = 'http://freecodecamp.github.io/wiki' + lang;
+      var wikiURL = '//freecodecamp.github.io/wiki' + lang;
       var wikiAside = $('<iframe>');
       wikiAside.attr({
         src: wikiURL,
diff --git a/server/views/wiki/show.jade b/server/views/wiki/show.jade
index 7f3629e..5b2427e 100644
--- a/server/views/wiki/show.jade
+++ b/server/views/wiki/show.jade
@@ -4,4 +4,4 @@ block content
   script.
       var lang = window.location.toString().match(/\/\w{2}\//);
       lang = (lang) ? lang[0] : '/en/';
-      $('#wikiFrame').attr('src','http://freecodecamp.github.io/wiki' + lang);
+      $('#wikiFrame').attr('src','//freecodecamp.github.io/wiki' + lang);

From 5b75652fa6eb2c20e4f47fe783b6c76de8c9c73c Mon Sep 17 00:00:00 2001
From: drk7891 <drk7891@gmail.com>
Date: Fri, 18 Mar 2016 10:35:28 -0400
Subject: [PATCH 25/33] Fixed challenge typo

---
 .../01-front-end-development-certification/basic-javascript.json        | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/seed/challenges/01-front-end-development-certification/basic-javascript.json b/seed/challenges/01-front-end-development-certification/basic-javascript.json
index e633511..60f44ce 100644
--- a/seed/challenges/01-front-end-development-certification/basic-javascript.json
+++ b/seed/challenges/01-front-end-development-certification/basic-javascript.json
@@ -2532,7 +2532,7 @@
         "assert(queue([],1) === 1, 'message: <code>queue([], 1)</code> should return <code>1</code>');",
         "assert(queue([2],1) === 2, 'message: <code>queue([2], 1)</code> should return <code>2</code>');",
         "assert(queue([5,6,7,8,9],1) === 5, 'message: <code>queue([5,6,7,8,9], 1)</code> should return <code>5</code>');",
-        "queue(testArr, 10); assert(testArr[4] === 10, 'message: After <code>queue(testArr, 10)</code>, <code>myArr[4]</code> should be <code>10</code>');"
+        "queue(testArr, 10); assert(testArr[4] === 10, 'message: After <code>queue(testArr, 10)</code>, <code>testArr[4]</code> should be <code>10</code>');"
       ],
       "type": "checkpoint",
       "challengeType": 1,

From f8b8a29b9b9867b2d2a837262d1456540e0689cf Mon Sep 17 00:00:00 2001
From: Eric Leung <eric@erictleung.com>
Date: Fri, 18 Mar 2016 09:40:57 -0700
Subject: [PATCH 26/33] Make Chunky Monkey function name unique

---
 .../basic-bonfires.json                                | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/seed/challenges/01-front-end-development-certification/basic-bonfires.json b/seed/challenges/01-front-end-development-certification/basic-bonfires.json
index 1cf13be..c952c33 100644
--- a/seed/challenges/01-front-end-development-certification/basic-bonfires.json
+++ b/seed/challenges/01-front-end-development-certification/basic-bonfires.json
@@ -445,25 +445,25 @@
         "Remember to use <a href=\"//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck\" target=\"_blank\">Read-Search-Ask</a> if you get stuck. Write your own code."
       ],
       "challengeSeed": [
-        "function chunk(arr, size) {",
+        "function chunkArrayInGroups(arr, size) {",
         "  // Break it up.",
         "  return arr;",
         "}",
         "",
-        "chunk([\"a\", \"b\", \"c\", \"d\"], 2);"
+        "chunkArrayInGroups([\"a\", \"b\", \"c\", \"d\"], 2);"
       ],
       "tests": [
-        "assert.deepEqual(chunk([\"a\", \"b\", \"c\", \"d\"], 2), [[\"a\", \"b\"], [\"c\", \"d\"]], 'message: <code>chunk([\"a\", \"b\", \"c\", \"d\"], 2)</code> should return <code>[[\"a\", \"b\"], [\"c\", \"d\"]]</code>.');",
-        "assert.deepEqual(chunk([0, 1, 2, 3, 4, 5], 3), [[0, 1, 2], [3, 4, 5]], 'message: <code>chunk([0, 1, 2, 3, 4, 5], 3)</code> should return <code>[[0, 1, 2], [3, 4, 5]]</code>.');",
-        "assert.deepEqual(chunk([0, 1, 2, 3, 4, 5], 2), [[0, 1], [2, 3], [4, 5]], 'message: <code>chunk([0, 1, 2, 3, 4, 5], 2)</code> should return <code>[[0, 1], [2, 3], [4, 5]]</code>.');",
-        "assert.deepEqual(chunk([0, 1, 2, 3, 4, 5], 4), [[0, 1, 2, 3], [4, 5]], 'message: <code>chunk([0, 1, 2, 3, 4, 5], 4)</code> should return <code>[[0, 1, 2, 3], [4, 5]]</code>.');",
-        "assert.deepEqual(chunk([0, 1, 2, 3, 4, 5, 6], 3), [[0, 1, 2], [3, 4, 5], [6]], 'message: <code>chunk([0, 1, 2, 3, 4, 5, 6], 3)</code> should return <code>[[0, 1, 2], [3, 4, 5], [6]]</code>.');",
-        "assert.deepEqual(chunk([0, 1, 2, 3, 4, 5, 6, 7, 8], 4), [[0, 1, 2, 3], [4, 5, 6, 7], [8]], 'message: <code>chunk([0, 1, 2, 3, 4, 5, 6, 7, 8], 4)</code> should return <code>[[0, 1, 2, 3], [4, 5, 6, 7], [8]]</code>.');"
+        "assert.deepEqual(chunkArrayInGroups([\"a\", \"b\", \"c\", \"d\"], 2), [[\"a\", \"b\"], [\"c\", \"d\"]], 'message: <code>chunkArrayInGroups([\"a\", \"b\", \"c\", \"d\"], 2)</code> should return <code>[[\"a\", \"b\"], [\"c\", \"d\"]]</code>.');",
+        "assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5], 3), [[0, 1, 2], [3, 4, 5]], 'message: <code>chunkArrayInGroups([0, 1, 2, 3, 4, 5], 3)</code> should return <code>[[0, 1, 2], [3, 4, 5]]</code>.');",
+        "assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5], 2), [[0, 1], [2, 3], [4, 5]], 'message: <code>chunkArrayInGroups([0, 1, 2, 3, 4, 5], 2)</code> should return <code>[[0, 1], [2, 3], [4, 5]]</code>.');",
+        "assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5], 4), [[0, 1, 2, 3], [4, 5]], 'message: <code>chunkArrayInGroups([0, 1, 2, 3, 4, 5], 4)</code> should return <code>[[0, 1, 2, 3], [4, 5]]</code>.');",
+        "assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6], 3), [[0, 1, 2], [3, 4, 5], [6]], 'message: <code>chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6], 3)</code> should return <code>[[0, 1, 2], [3, 4, 5], [6]]</code>.');",
+        "assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 4), [[0, 1, 2, 3], [4, 5, 6, 7], [8]], 'message: <code>chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 4)</code> should return <code>[[0, 1, 2, 3], [4, 5, 6, 7], [8]]</code>.');"
       ],
       "type": "bonfire",
       "isRequired": true,
       "solutions": [
-        "function chunk(arr, size) {\n  var out = [];\n  for (var i = 0; i < arr.length; i+=size) {\n    out.push(arr.slice(i,i+size));\n  }\n  return out;\n}\n\nchunk(['a', 'b', 'c', 'd'], 2);\n"
+        "function chunkArrayInGroups(arr, size) {\n  var out = [];\n  for (var i = 0; i < arr.length; i+=size) {\n    out.push(arr.slice(i,i+size));\n  }\n  return out;\n}\n\nchunkArrayInGroups(['a', 'b', 'c', 'd'], 2);\n"
       ],
       "MDNlinks": [
         "Array.push()",

From d021574bc31d658a84318922875118aff5a0acb1 Mon Sep 17 00:00:00 2001
From: Ka Lun Lee <kalun.lee1@gmail.com>
Date: Fri, 18 Mar 2016 00:07:22 -0700
Subject: [PATCH 27/33] added links for clarification on Make Objects
 Properties Private challenge.

fixed grammar from previous PR. This closes #7282.
---
 .../object-oriented-and-functional-programming.json                  | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/seed/challenges/01-front-end-development-certification/object-oriented-and-functional-programming.json b/seed/challenges/01-front-end-development-certification/object-oriented-and-functional-programming.json
index 82d1db2..181d4dd 100644
--- a/seed/challenges/01-front-end-development-certification/object-oriented-and-functional-programming.json
+++ b/seed/challenges/01-front-end-development-certification/object-oriented-and-functional-programming.json
@@ -234,13 +234,14 @@
       "title": "Make Object Properties Private",
       "description": [
         "Objects have their own attributes, called <code>properties</code>, and their own functions, called <code>methods</code>.",
-        "In the previous challenges, we used the <code>this</code> keyword to reference <code>public properties</code> of the current object.",
+        "In the <a href='/challenges/make-instances-of-objects-with-a-constructor-function'>previous challenges</a>, we used the <code>this</code> keyword to reference <code>public properties</code> of the current object.",
         "We can also create <code>private properties</code> and <code>private methods</code>, which aren't accessible from outside the object.",
         "To do this, we create the variable inside the <code>constructor</code> using the <code>var</code> keyword we're familiar with, instead of creating it as a <code>property</code> of <code>this</code>.",
         "This is useful for when we need to store information about an object but we want to control how it is used by outside code.",
         "For example, what if we want to store the <code>speed</code> our car is traveling at but we only want outside code to be able to modify it by accelerating or decelerating, so the speed changes in a controlled way?",
         "In the editor you can see an example of a <code>Car</code> <code>constructor</code> that implements this pattern.",
-        "Now try it yourself! Modify the <code>Bike</code> <code>constructor</code> to have a <code>private property</code> called <code>gear</code> and two <code>public methods</code> called <code>getGear</code> and <code>setGear</code> to get and set that value."
+        "Now try it yourself! Modify the <code>Bike</code> <code>constructor</code> to have a <code>private property</code> called <code>gear</code> and two <code>public methods</code> called <code>getGear</code> and <code>setGear</code> to get and set that value.",
+        "<a href='https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/this'>Further explanation on <code>this</code> keyword</a>"
       ],
       "challengeSeed": [
         "var Car = function() {",

From 5e8c096defc0a7fc42a48a9008e4507806d8f1e2 Mon Sep 17 00:00:00 2001
From: "Rafael J. Rodriguez" <rafase282@gmail.com>
Date: Sat, 19 Mar 2016 16:20:45 -0400
Subject: [PATCH 28/33] Changes demo app

The purpose is to switch the demo app to another one that works better as the original one does not work well with url that specify a port as discussed at https://github.com/FreeCodeCamp/FreeCodeCamp/issues/7525

Closes #7525
---
 .../03-back-end-development-certification/api-projects.json           | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/seed/challenges/03-back-end-development-certification/api-projects.json b/seed/challenges/03-back-end-development-certification/api-projects.json
index fd89e3b..b9ac93c 100644
--- a/seed/challenges/03-back-end-development-certification/api-projects.json
+++ b/seed/challenges/03-back-end-development-certification/api-projects.json
@@ -252,7 +252,7 @@
       "id": "bd7158d8c443edefaeb5bd0e",
       "title": "URL Shortener Microservice",
       "description": [
-        "<strong>Objective:</strong> Build a full stack JavaScript app that is functionally similar to this: <a href='https://shurli.herokuapp.com/' target='_blank'>https://shurli.herokuapp.com/</a> and deploy it to Heroku.",
+        "<strong>Objective:</strong> Build a full stack JavaScript app that is functionally similar to this: <a href='https://little-url.herokuapp.com/' target='_blank'>https://little-url.herokuapp.com/</a> and deploy it to Heroku.",
         "Note that for each project, you should create a new GitHub repository and a new Heroku project. If you can't remember how to do this, revisit <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com/challenges/get-set-for-our-back-end-development-projects</a>.",
         "Here are the specific user stories you should implement for this project:",
         "<strong>User Story:</strong>  I can pass a URL as a parameter and I will receive a shortened URL in the JSON response.",
@@ -271,7 +271,7 @@
       "challengeType": 4,
       "titleEs": "Microservicio para acortar URLs",
       "descriptionEs": [
-        "<strong>Objetivo:</strong> Desarrolla una aplicación de Pila Completa en JavaScript que sea funcionalmente similar a esta: <a href='https://shurli.herokuapp.com/' target='_blank'>https://shurli.herokuapp.com/</a> y despliegala en Heroku.",
+        "<strong>Objetivo:</strong> Desarrolla una aplicación de Pila Completa en JavaScript que sea funcionalmente similar a esta: <a href='https://little-url.herokuapp.com/' target='_blank'>https://little-url.herokuapp.com/</a> y despliegala en Heroku.",
         "Ten en cuenta que para cada proyecto, deberías crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas como hacer esto, vuelve a visitar <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com//challenges/get-set-for-our-back-end-development-projects</a>.",
         "Aquí están las historias de usuario específicas que debes implementar para este proyecto:",
         "<strong>Historia de Usuario:</strong> Puedo pasar una URL como parámetro y recibiré una URL acortada en la respuesta JSON.",

From 668e47f97241f8e5818b422db7fbf625c67d21f9 Mon Sep 17 00:00:00 2001
From: Akira Laine <akira_laine@outlook.com>
Date: Fri, 18 Mar 2016 22:18:42 +1100
Subject: [PATCH 29/33] changed http to https in HTML5 & CSS3

reverted freecatphotoapp links to http

reverted all freecatphotoapp links to http

fixed more issues
---
 .../html5-and-css.json                             | 86 +++++++++++-----------
 1 file changed, 43 insertions(+), 43 deletions(-)

diff --git a/seed/challenges/01-front-end-development-certification/html5-and-css.json b/seed/challenges/01-front-end-development-certification/html5-and-css.json
index a88a20f..b631440 100644
--- a/seed/challenges/01-front-end-development-certification/html5-and-css.json
+++ b/seed/challenges/01-front-end-development-certification/html5-and-css.json
@@ -686,7 +686,7 @@
         "Agora, vamos importar e aplicar um estilo de fonte por meio do Google Fonts.",
         "Primeiro, faça um <code>chamado</code> ao Google Fonts para poder utilizar a fonte chamada <code>Lobster</code> e carregá-la em seu HTML.",
         "Para fazer isso, copie o código abaixo e insira-o na parte superior de seu editor de texto:",
-        "<code>&#60;link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\"&#62;</code>",
+        "<code>&#60;link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\"&#62;</code>",
         "Agora, estableça <code>Lobster</code> como o valor para font-family em seu elemento <code>h2</code>."
       ],
       "namePtBR": "Importe uma Fonte a Partir do Google Fonts",
@@ -694,7 +694,7 @@
         "Füge dem <code>h2</code> Element die Schriftart oder <code>font-family</code> \"Lobster\" hinzu.",
         "Zuerst musst du Google Fonts in dein HTML einbinden, um auf \"Lobster\" zugreifen zu können.",
         "Kopiere den folgenden Code und füge diesen in deinen Editor über dem <code>style</code> Element ein:",
-        "<code>&#60;link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\"&#62;</code>",
+        "<code>&#60;link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\"&#62;</code>",
         "Jetzt kannst du \"Lobster\" als font-family Attribut zu deinem <code>h2</code> Element hinzufügen."
       ],
       "title": "Import a Google Font",
@@ -702,7 +702,7 @@
         "Now, let's import and apply a Google font (note that if Google is blocked in your country, you will need to skip this challenge).",
         "First, you'll need to make a <code>call</code> to Google to grab the <code>Lobster</code> font and load it into your HTML.",
         "Copy the following code snippet and paste it into the top of your code editor:",
-        "<code>&#60;link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\"&#62;</code>",
+        "<code>&#60;link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\"&#62;</code>",
         "Now you can set <code>Lobster</code> as a font-family value on your <code>h2</code> element.",
         "Apply the <code>font-family</code> of <code>Lobster</code> to your <code>h2</code> element."
       ],
@@ -734,7 +734,7 @@
         "Ahora, importemos y apliquemos un tipo de letra de Google (ten en cuenta que si Google está bloqueado en tu país, deberás saltarte este desafío).",
         "Primero, haz un <code>llamado</code> a Google para obtener el tipo de letra <code>Lobster</code> y para cargarlo en tu HTML.",
         "Copia la siguiente porción de código y pégala en la parte superior de tu editor de texto:",
-        "<code>&#60;link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\"&#62;</code>",
+        "<code>&#60;link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\"&#62;</code>",
         "Ahora puedes establecer <code>Lobster</code> como valor de font-family de tu elemento <code>h2</code>.",
         "Aplica el tipo de letra (<code>font-family</code>) <code>Lobster</code> a tu elemento <code>h2</code>."
       ],
@@ -769,7 +769,7 @@
         "Now comment out your call to Google Fonts, so that the <code>Lobster</code> font isn't available. Notice how it degrades to the <code>Monospace</code> font."
       ],
       "challengeSeed": [
-        "<link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
+        "<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
         "<style>",
         "  .red-text {",
         "    color: red;",
@@ -813,7 +813,7 @@
       "descriptionPtBR": [
         "Você pode adicionar imagens à sua página da internet com o uso do elemento <code>img</code>, e apontar para a URL específica de uma imagem utilizando o atributo <code>src</code>.",
         "Um exemplo para isso seria:",
-        "<code>&#60img src=\"http://www.your-image-source.com/your-image.jpg\"&#62</code>",
+        "<code>&#60img src=\"https://www.your-image-source.com/your-image.jpg\"&#62</code>",
         "Observe que na maior parte dos casos, os elementos <code>img</code> são de fechamento automático.",
         "Agora, tente fazer isso com essa imagem:",
         "<code>https://bit.ly/fcc-relaxing-cat</code>"
@@ -829,13 +829,13 @@
       "description": [
         "You can add images to your website by using the <code>img</code> element, and point to a specific image's URL using the <code>src</code> attribute.",
         "An example of this would be:",
-        "<code>&#60img src=\"http://www.your-image-source.com/your-image.jpg\"&#62</code>",
+        "<code>&#60img src=\"https://www.your-image-source.com/your-image.jpg\"&#62</code>",
         "Note that in most cases, <code>img</code> elements are self-closing.",
         "Try it with this image:",
         "<code>https://bit.ly/fcc-relaxing-cat</code>"
       ],
       "challengeSeed": [
-        "<link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
+        "<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
         "<style>",
         "  .red-text {",
         "    color: red;",
@@ -865,7 +865,7 @@
       "descriptionEs": [
         "Puedes agregar imágenes a tu sitio web mediante el uso del elemento <code>img</code>, y apuntar a la URL específica de una imagen utilizando el atributo <code>src</code>.",
         "Un ejemplo de esto sería:",
-        "<code>&#60img src=\"http://www.origen-de-tu-imagen.com/tu-imagen.jpg\"&#62</code>",
+        "<code>&#60img src=\"https://www.origen-de-tu-imagen.com/tu-imagen.jpg\"&#62</code>",
         "Ten en cuenta que en la mayoría de los casos, los elementos <code>img</code> son de cierre automático.",
         "Prueba con esta imagen:",
         "<code>https://bit.ly/fcc-relaxing-cat</code>"
@@ -900,7 +900,7 @@
         "<strong>Note</strong><br>Due to browser implementation differences, you may need to be at 100% zoom to pass the tests on this challenge."
       ],
       "challengeSeed": [
-        "<link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
+        "<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
         "<style>",
         "  .red-text {",
         "    color: red;",
@@ -971,7 +971,7 @@
         "<code>&lt;img class=\"class1 class2\"&gt;</code>"
       ],
       "challengeSeed": [
-        "<link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
+        "<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
         "<style>",
         "  .red-text {",
         "    color: red;",
@@ -1038,7 +1038,7 @@
         "Note: this waypoint allows for multiple possible solutions. For example, you may add <code>border-radius</code> to either the <code>.thick-green-border</code> class or <code>.smaller-image</code> class."
       ],
       "challengeSeed": [
-        "<link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
+        "<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
         "<style>",
         "  .red-text {",
         "    color: red;",
@@ -1102,7 +1102,7 @@
         "Give your cat photo a <code>border-radius</code> of <code>50%</code>."
       ],
       "challengeSeed": [
-        "<link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
+        "<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
         "<style>",
         "  .red-text {",
         "    color: red;",
@@ -1156,7 +1156,7 @@
         "Aqui está um diagrama de um elemento <code>a</code>. Neste caso, o elemento <code>a</code> é utilizado no meio de um elemento de parágrafo, o que significa que o link externo aparecerá no meio de uma frase.",
         "<a href=\"//i.imgur.com/hviuZwe.png\" data-lightbox=\"img-enlarge\"> <img class=\"img-responsive\" title=\"Clique para ampliar\" alt=\"diagrama de como as tags de âncora se compõem com o texto, como na próxima linha\" src=\"//i.imgur.com/hviuZwe.png\"></a>",
         "Veja um exemplo:",
-        "<code>&#60;p&#62;Aqui está um &#60;a href=\"http://freecodecamp.com\"&#62; link ligado ao Free Code Camp&#60;/a&#62; para que você o siga.&#60;/p&#62;</code>",
+        "<code>&#60;p&#62;Aqui está um &#60;a href=\"https://freecodecamp.com\"&#62; link ligado ao Free Code Camp&#60;/a&#62; para que você o siga.&#60;/p&#62;</code>",
         "Crie um elemento <code>a</code> que esteja ligado ao site <code>http://freecatphotoapp.com</code> e tenha como <code>texto de âncora</code> \"fotos de gatos\"."
       ],
       "namePtBR": "Ligue Páginas Externas com o Elemento Âncora",
@@ -1164,7 +1164,7 @@
         "Erstelle ein <code>a</code> Element oder \"Anker Element\", das auf http://freecatphotoapp.com verlinkt und den Link-Text \"cat photos\" oder \"anchor text\" beinhaltet.",
         "So sieht ein <code>a</code> Element aus. In diesem Fall wird es innerhalb eines Paragraphen Elements verwendet. Das bedeutet dein Link wird innerhalb des Satzes erscheinen.",
         "<img class=\"img-responsive\" alt=\"Ein Beispiel wie Anker Tags geschrieben werden.\" src=\"https://www.evernote.com/l/AHSaNaepx_lG9LhhPkVYmagcedpmAeITDsQB/image.png\">",
-        "Hier ist ein Beispiel: <code>&#60;p&#62;Hier ist ein &#60;a href=\"http://freecodecamp.com\"&#62; Link zum Free Code Camp&#60;/a&#62; für dich zum Folgen.&#60;/p&#62;</code>"
+        "Hier ist ein Beispiel: <code>&#60;p&#62;Hier ist ein &#60;a href=\"https://freecodecamp.com\"&#62; Link zum Free Code Camp&#60;/a&#62; für dich zum Folgen.&#60;/p&#62;</code>"
       ],
       "title": "Link to External Pages with Anchor Elements",
       "description": [
@@ -1176,7 +1176,7 @@
         "Create an <code>a</code> element that links to <code>http://freecatphotoapp.com</code> and has \"cat photos\" as its <code>anchor text</code>."
       ],
       "challengeSeed": [
-        "<link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
+        "<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
         "<style>",
         "  .red-text {",
         "    color: red;",
@@ -1222,7 +1222,7 @@
         "Aquí está un diagrama de un elemento <code>a</code>. En este caso, el elemento <code>a</code> se utiliza en el medio de un elemento de párrafo, lo que significa que el enlace aparecerá en el medio de una frase. ",
         "<a href=\"//i.imgur.com/hviuZwe.png\" data-lightbox=\"img-enlarge\"> <img class=\"img-responsive\" title=\"Haz clic para ampliar\" alt=\"un diagrama de cómo las etiquetas de ancla se componen con el mismo texto, como en la siguiente línea\" src=\"//i.imgur.com/hviuZwe.png\"></a> ",
         "He aquí un ejemplo:",
-        "<code>&#60;p&#62;Aquí está un &#60;a href=\"http://freecodecamp.com\"&#62; enlace a Free Code Camp&#60;/a&#62; para que lo sigas.&#60;/p&#62;</code>",
+        "<code>&#60;p&#62;Aquí está un &#60;a href=\"https://freecodecamp.com\"&#62; enlace a Free Code Camp&#60;/a&#62; para que lo sigas.&#60;/p&#62;</code>",
         "Crea un elemento <code>a</code> que se vincule a <code>http://freecatphotoapp.com</code> y tenga como <code>texto de ancla</code> \"fotos de gatos\"."
       ],
       "titleDe": "Waypoint: Verlinke externe Seiten mit Anker Elementen",
@@ -1234,7 +1234,7 @@
         "Outra vez, aqui está um diagrama de um elemento <code>a</code> para você usar como referência.",
         "<a href=\"//i.imgur.com/hviuZwe.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" title=\"Clique para ampliar\" alt=\"diagrama de como são as tags de âncora com o texto como na linha seguinte\" src=\"//i.imgur.com/hviuZwe.png\"></a>",
         "Veja um exemplo:",
-        "<code>&#60;p&#62;Este é um &#60;a href=\"http://freecodecamp.com\"&#62; link ligado ao Free Code Camp&#60;/a&#62; para que você o siga.&#60;/p&#62;</code>",
+        "<code>&#60;p&#62;Este é um &#60;a href=\"https://freecodecamp.com\"&#62; link ligado ao Free Code Camp&#60;/a&#62; para que você o siga.&#60;/p&#62;</code>",
         "<code>Aninhamento</code> significa ter um elemento no interior de outro elemento.",
         "Agora, aninhe o elemento <code>a</code> existente dentro de um novo elemento <code>p</code> de forma que o parágrafo diga \"View more cat photos\", mas onde apenas \"cat photos\" seja um link, e o resto seja texto comum."
       ],
@@ -1242,19 +1242,19 @@
       "descriptionDe": [
         "Jetzt umschließe dein <code>a</code> Element mit einem <code>p</code> Element und dem Text \"click here for cat photos\". Nur \"cat photos\" soll ein Link ein – der Rest normaler Text.",
         "Hier ist nochmal ein Beispiel für ein <code>a</code> Element: <img class=\"img-responsive\" alt=\"Ein Beispiel wie Anker Tags geschrieben werden.\" src=\"https://www.evernote.com/l/AHSaNaepx_lG9LhhPkVYmagcedpmAeITDsQB/image.png\">",
-        "So könnte es aussehen: <code>&#60;p&#62;Hier ist ein &#60;a href=\"http://freecodecamp.com\"&#62; Link zum Free Code Camp&#60;/a&#62; für dich zum Folgen.&#60;/p&#62;</code>"
+        "So könnte es aussehen: <code>&#60;p&#62;Hier ist ein &#60;a href=\"https://freecodecamp.com\"&#62; Link zum Free Code Camp&#60;/a&#62; für dich zum Folgen.&#60;/p&#62;</code>"
       ],
       "title": "Nest an Anchor Element within a Paragraph",
       "description": [
         "Again, here's a diagram of an <code>a</code> element for your reference:",
         "<a href=\"//i.imgur.com/hviuZwe.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" title=\"Click to enlarge\" alt=\"a diagram of how anchor tags are composed with the same text as on the following line\" src=\"//i.imgur.com/hviuZwe.png\"></a>",
         "Here's an example:",
-        "<code>&#60;p&#62;Here's a &#60;a href=\"http://freecodecamp.com\"&#62; link to Free Code Camp&#60;/a&#62; for you to follow.&#60;/p&#62;</code>",
+        "<code>&#60;p&#62;Here's a &#60;a href=\"https://freecodecamp.com\"&#62; link to Free Code Camp&#60;/a&#62; for you to follow.&#60;/p&#62;</code>",
         "<code>Nesting</code> just means putting one element inside of another element.",
         "Now nest your existing <code>a</code> element within a new <code>p</code> element (just after the existing <code>h2</code> element) so that the surrounding paragraph says \"View more cat photos\", but where only \"cat photos\" is a link, and the rest of the text is plain text."
       ],
       "challengeSeed": [
-        "<link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
+        "<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
         "<style>",
         "  .red-text {",
         "    color: red;",
@@ -1306,7 +1306,7 @@
         "Una vez más, aquí está un diagrama de un elemento <code>a</code> para tu referencia:",
         "<a href=\"//i.imgur.com/hviuZwe.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" title=\"Pulse para ampliar\" alt=\"un diagrama de como se componen las etiquetas de anclaje con el texto como en la siguiente línea\" src=\"//i.imgur.com/hviuZwe.png\"></a>",
         "He aquí un ejemplo:",
-        "<code>&#60;p&#62;Aquí hay un &#60;a href=\"http://freecodecamp.com\"&#62; enlace a Free Code Camp&#60;/a&#62; para que lo sigas.&#60;/p&#62;</code>",
+        "<code>&#60;p&#62;Aquí hay un &#60;a href=\"https://freecodecamp.com\"&#62; enlace a Free Code Camp&#60;/a&#62; para que lo sigas.&#60;/p&#62;</code>",
         "<code>Anidamiento</code> simplemente significa poner un elemento dentro de otro elemento.",
         "Ahora anida el elemento <code>a</code> existente dentro de un nuevo elemento <code>p</code> (justo después del elemento <code>h2</code> que ya tienes) de tal forma que el párrafo que lo rodee diga \"View more cat photos\", pero que sólo \"cat photos\" sea un enlace, y el resto sea texto plano ."
       ],
@@ -1334,7 +1334,7 @@
         "Replace the value of your <code>a</code> element's <code>href</code> attribute with a <code>#</code>, also known as a hash symbol, to turn it into a dead link."
       ],
       "challengeSeed": [
-        "<link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
+        "<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
         "<style>",
         "  .red-text {",
         "    color: red;",
@@ -1388,14 +1388,14 @@
       "descriptionPtBR": [
         "Você pode transformar elementos em links ao aninhá-los com um elemento <code>a</code>.",
         "Aninhe sua imagem dentro de um elemento <code>a</code>. Temos aqui um exemplo.",
-        "<code>&#60;a href=\"#\"&#62;&#60;img src=\"http://bit.ly/fcc-running-cats\"/&#62;&#60;/a&#62;</code>",
+        "<code>&#60;a href=\"#\"&#62;&#60;img src=\"https://bit.ly/fcc-running-cats\"/&#62;&#60;/a&#62;</code>",
         "Lembre de usar <code>#</code> como atributo <code>href</code> de seu elemento <code>a</code> para tornar o link inativo."
       ],
       "namePtBR": "Transforme uma Imagem em um Link",
       "descriptionDe": [
         "Umschließe dein <code>img</code> Element mit einem <code>a</code> Element als toten Link.",
         "Du kannst jedes Element in einen Link verwandeln, indem du es mit einem <code>a</code> Element umschließt.",
-        "Umschließe nun dein Bild mit einem <code>a</code> Element. Hier ist ein Beispiel: <code>&#60;a href=\"#\"&#62;&#60;img src=\"http://bit.ly/fcc-running-cats\"/&#62;&#60;/a&#62;</code>",
+        "Umschließe nun dein Bild mit einem <code>a</code> Element. Hier ist ein Beispiel: <code>&#60;a href=\"#\"&#62;&#60;img src=\"https://bit.ly/fcc-running-cats\"/&#62;&#60;/a&#62;</code>",
         "Vergewissere dich, dass du ein Hash Symbol (#) innerhalb des <code>href</code> Attributs des <code>a</code> Elements nutzt, um daraus einen toten Link zu machen.",
         "Sobald du das gemacht hast, kannst du mit der Maus über dein Bild fahren. Der normale Mauszeiger sollte nun zu einer Hand für Links werden. Das Bild ist jetzt ein Link."
       ],
@@ -1403,12 +1403,12 @@
       "description": [
         "You can make elements into links by nesting them within an <code>a</code> element.",
         "Nest your image within an <code>a</code> element. Here's an example:",
-        "<code>&#60;a href=\"#\"&#62;&#60;img src=\"http://bit.ly/fcc-running-cats\"&#62;&#60;/a&#62;</code>",
+        "<code>&#60;a href=\"#\"&#62;&#60;img src=\"https://bit.ly/fcc-running-cats\"&#62;&#60;/a&#62;</code>",
         "Remember to use <code>#</code> as your <code>a</code> element's <code>href</code> property in order to turn it into a dead link.",
         "Once you've done this, hover over your image with your cursor. Your cursor's normal pointer should become the link clicking pointer. The photo is now a link."
       ],
       "challengeSeed": [
-        "<link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
+        "<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
         "<style>",
         "  .red-text {",
         "    color: red;",
@@ -1454,7 +1454,7 @@
       "descriptionEs": [
         "Puedes convertir elementos en enlaces al anidarlos dentro de un elemento <code>a</code>.",
         "Anida tu imagen dentro de un elemento <code>a</code>. He aquí un ejemplo: ",
-        "<code>&#60;a href=\"#\"&#62;&#60;img src=\"http://bit.ly/fcc-running-cats\"/&#62;&#60;/a&#62;</code>",
+        "<code>&#60;a href=\"#\"&#62;&#60;img src=\"https://bit.ly/fcc-running-cats\"/&#62;&#60;/a&#62;</code>",
         "Recuerda usar <code>#</code> como atributo <code>href</code> de tu elemento <code>a</code> con el fin de convertirlo en un vínculo muerto.",
         "Una vez hayas hecho esto, coloca el cursor sobre tu imagen. El puntero normal de tu cursor debería convertirse en el puntero de enlace. La foto es ahora un vínculo ."
       ],
@@ -1487,7 +1487,7 @@
         "Add an <code>alt</code> attribute with the text <code>A cute orange cat lying on its back</code> to our cat photo."
       ],
       "challengeSeed": [
-        "<link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
+        "<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
         "<style>",
         "  .red-text {",
         "    color: red;",
@@ -1568,7 +1568,7 @@
         "Remove the last two <code>p</code> elements and create an unordered list of three things that cats love at the bottom of the page."
       ],
       "challengeSeed": [
-        "<link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
+        "<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
         "<style>",
         "  .red-text {",
         "    color: red;",
@@ -1653,7 +1653,7 @@
         "Create an ordered list of the top 3 things cats hate the most."
       ],
       "challengeSeed": [
-        "<link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
+        "<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
         "<style>",
         "  .red-text {",
         "    color: red;",
@@ -1742,7 +1742,7 @@
         "Create an <code>input</code> element of type <code>text</code> below your lists."
       ],
       "challengeSeed": [
-        "<link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
+        "<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
         "<style>",
         "  .red-text {",
         "    color: red;",
@@ -1826,7 +1826,7 @@
         "Set the <code>placeholder</code> value of your text <code>input</code> to \"cat photo URL\"."
       ],
       "challengeSeed": [
-        "<link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
+        "<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
         "<style>",
         "  .red-text {",
         "    color: red;",
@@ -1911,7 +1911,7 @@
         "Nest your text field in a <code>form</code> element. Add the <code>action=\"/submit-cat-photo\"</code> attribute to this form element."
       ],
       "challengeSeed": [
-        "<link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
+        "<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
         "<style>",
         "  .red-text {",
         "    color: red;",
@@ -1996,7 +1996,7 @@
         "Add a submit button to your <code>form</code> element with type <code>submit</code> and \"Submit\" as its text."
       ],
       "challengeSeed": [
-        "<link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
+        "<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
         "<style>",
         "  .red-text {",
         "    color: red;",
@@ -2085,7 +2085,7 @@
         "Note: This field does not work in Safari."
       ],
       "challengeSeed": [
-        "<link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
+        "<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
         "<style>",
         "  .red-text {",
         "    color: red;",
@@ -2181,7 +2181,7 @@
         "Add a pair of radio buttons to your form. One should have the option of <code>indoor</code> and the other should have the option of <code>outdoor</code>."
       ],
       "challengeSeed": [
-        "<link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
+        "<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
         "<style>",
         "  .red-text {",
         "    color: red;",
@@ -2281,7 +2281,7 @@
         "Add to your form a set of three checkboxes. Each checkbox should be nested within its own <code>label</code> element. All three should share the <code>name</code> attribute of <code>personality</code>."
       ],
       "challengeSeed": [
-        "<link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
+        "<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
         "<style>",
         "  .red-text {",
         "    color: red;",
@@ -2375,7 +2375,7 @@
         "Set the first of your <code>radio buttons</code> and the first of your <code>checkboxes</code> to both be checked by default."
       ],
       "challengeSeed": [
-        "<link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
+        "<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
         "<style>",
         "  .red-text {",
         "    color: red;",
@@ -2471,7 +2471,7 @@
         "Nest your \"Things cats love\" and \"Things cats hate\" lists all within a single <code>div</code> element."
       ],
       "challengeSeed": [
-        "<link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
+        "<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
         "<style>",
         "  .red-text {",
         "    color: red;",
@@ -2555,7 +2555,7 @@
         "Create a class called <code>gray-background</code> with the <code>background-color</code> of gray. Assign this class to your <code>div</code> element."
       ],
       "challengeSeed": [
-        "<link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
+        "<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
         "<style>",
         "  .red-text {",
         "    color: red;",
@@ -2648,7 +2648,7 @@
         "Give your <code>form</code> element the id <code>cat-photo-form</code>."
       ],
       "challengeSeed": [
-        "<link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
+        "<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
         "<style>",
         "  .red-text {",
         "    color: red;",
@@ -2744,7 +2744,7 @@
         "Try giving your form, which now has the <code>id</code> attribute of <code>cat-photo-form</code>, a green background."
       ],
       "challengeSeed": [
-        "<link href=\"http://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
+        "<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\" type=\"text/css\">",
         "<style>",
         "  .red-text {",
         "    color: red;",

From 14399c227137092e8931eefde7e5e75dda3ee010 Mon Sep 17 00:00:00 2001
From: Al3xakaSp3cialK <carbonealpha@gmail.com>
Date: Sat, 19 Mar 2016 03:25:55 +0100
Subject: [PATCH 30/33] Translation of Bootstrap challenges in french

---
 .../bootstrap.json                                 | 207 +++++++++++++++++++++
 1 file changed, 207 insertions(+)

diff --git a/seed/challenges/01-front-end-development-certification/bootstrap.json b/seed/challenges/01-front-end-development-certification/bootstrap.json
index e5c56f5..125e8bb 100644
--- a/seed/challenges/01-front-end-development-certification/bootstrap.json
+++ b/seed/challenges/01-front-end-development-certification/bootstrap.json
@@ -88,6 +88,16 @@
         "<code>&#60;link rel=\"stylesheet\" href=\"//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css\"/&#62;</code>",
         "En este caso, lo hemos agregado a esta página por ti.",
         "Para iniciar, debemos anidar todo nuestro HTML en un elemento <code>div</code> con la clase <code>container-fluid</code>."
+      ],
+      "nameFr": "Un design adaptatif (responsive design) utilisant les conteneurs fluides de Bootstrap",
+      "descriptionFr": [
+        "Revenons à notre application de photos de chats. Cette fois-ci, nous allons lui donner un style grâce au renommé framework CSS Bootstrap.",
+        "Bootstrap saura reconnaître la largeur de notre écran et s'y adapter en redimensionnant les éléments HTML - d'où le nom <code>Responsive Design</code> (design adaptatif).",
+        "Avec le design responsive, il n'y a pas besoin de créer de version mobile de votre site. Il restera bien sur tous les appareils quelle que soit la taille de leurs écrans.",
+        "Vous pouvez ajouter Bootstrap à n'importe quelle application simplement en incluant le code suivant en haut de votre HTML:",
+        "<code>&#60;link rel=\"stylesheet\" href=\"//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css\"/&#62;</code>",
+        "Ici, nous l'avons déjà ajouté à la page pour vous dans l'arrière-boutique.",
+        "Pour commencer, nous devons envelopper nos éléments HTML dans un élément <code>div</code> possédant la classe <code>container-fluid</code>"
       ]
     },
     {
@@ -170,6 +180,14 @@
         "Primero, agrega una nueva imagen debajo que la que ya existe. Haz que su atributo <code>src</code> sea <code>http://bit.ly/fcc-running-cats</code>.",
         "Sería genial si esta imagen fuera exactamente del tamaño de la pantalla de nuestro teléfono.",
         "Afortunadamente, con Bootstrap, todo lo que tenemos que hacer es agregar la clase <code>img-responsive</code> a tu imagen. Hazlo, y verás que la imagen se ajustará perfectamente al ancho de tu página."
+      ],
+      "nameFr": "Rendre des images adaptatives aux appareils mobiles",
+      "descriptionFr": [
+        "It would be great if this image could be exactly the width of our phone's screen.",
+        "Fortunately, with Bootstrap, all we need to do is add the <code>img-responsive</code> class to your image. Do this, and the image should perfectly fit the width of your page.",
+        "D'abord, ajoutez une nouvelle image en dessous de celle qui eiste dejà. Changez l'attribut <code>src</src> en <code>http://bit.ly/fcc-running-cats</code>.",
+        "Ce serait absolument super si notre image pouvait être exactement de la largeur de l'écran du téléphone.",
+        "Heureusement, avec Bootstrap, il faut seulement ajouter la classe <code>img-responsive</code> à notre image. Faites le, et l'image devrait s'ajuster parfaitement à la largeur de la page."
       ]
     },
     {
@@ -250,6 +268,12 @@
         "Ahora que estamos usando Bootstrap, podemos centrar nuestro elemento de encabezado para hacerlo verse mejor. Todo lo que necesitamos hacer es agregar la clase <code>text-center</code> a nuestro elemento <code>h2</code>.",
         "Recuerda que puedes agregar varias clases a un mismo elemento separando cada una de ellas con un espacio, de esta forma:",
         "<code>&#60h2 class=\"red-text text-center\"&#62your text&#60/h2&#62</code>"
+      ],
+      "nameFr": "Centrer du texte avec Bootstrap",
+      "descriptionFr": [
+        "Maintenant que wous utilisons Bootstrap, nous pouvons centrer notre entête pour qu'il ait une meilleure apparence. Nous devons seulement ajouter la classe <code>text-center</code> à notre élément <code>h2</code>.",
+        "Souvenez vous que vous pouvez utiliser plusieurs classes pour un même élément en les séparant avec un espace, comme ceci:",
+        "<code>&#60h2 class=\"red-text text-center\"&#62Votre texte&#60/h2&#62</code>"
       ]
     },
     {
@@ -330,6 +354,11 @@
       "descriptionEs": [
         "Bootstrap tiene sus propios estilos para elementos <code>button</code>, los cuales se ven mejor que los estilos simples de HTML.",
         "Crea un nuevo elemento <code>button</code> debajo de tu foto grande del gatito. Dale la clase <code>btn</code> y el texto \"Like\"."
+      ],
+      "nameFr": "Créer un bouton avec Bootstrap",
+      "descriptionFr": [
+        "Bootstrap possède ses propres styles pour les éléments <code>button</code>, qui sont beaucoup plus beaux que ceux issus du HTML seul.",
+        "Créez un nouvel élément <code>button</code> en dessous de votre grande photo de chaton. Donnez lui comme classe <code>btn</code> et comme texte \"Like\"."
       ]
     },
     {
@@ -416,6 +445,14 @@
         "<a href=\"http://i.imgur.com/O32cDWE.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/O32cDWE.png\" title=\"Pulsa para agrandar\" alt=\"Un botón \"en línea\" es tan pequeño como el texto que contiene. En esta imagen, está centrado. Debajo de este hay un botón \"a nivel de bloque\", que se estira hasta llenar todo el espacio horizontal.'></a>",
         "Ten en cuenta que estos botones todavía necesitan la clase <code>btn</code>.",
         "Agrega la clase de Bootstrap <code>btn-block</code> a tu botón Bootstrap."
+      ],
+      "nameFr": "Créer un bouton bloc Bootstrap",
+      "descriptionFr": [
+        "Normalement, vos éléments <code>button</code> sont aussi large que le texte qu'ils contiennent. En les transformants en éléments blocs, vos boutons vont s'ajuster pour remplir l'intégralité de l'espace horizontal de la page et tous les éléments qui le suivront se placeront sur une \"nouvelle ligne\" en dessous du bloc.",
+        "Cette image illustre la différence entre éléments <code>inline</code> (sans briser la ligne) et éléments <code>block-level</code> (en blocs)",
+        "<a href=\"http://i.imgur.com/O32cDWE.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/O32cDWE.png\" title=\"Cliquez pour agrandir\" alt=\"Un bouton \"inline\" est aussi petit que le texte qu'il contient. Dans cette image, il est centré. En dessous de celui-ci il y a un bouton \"block-level\" , qui s'étire et remplit l'espace horizontal.'></a>",
+        "Notez que ces boutons ont toujours besoin de la classe <code>btn</code>",
+        "Ajoutez la classe Bootstrap <code>btn-block</code> à votre bouton Bootstrap."
       ]
     },
     {
@@ -498,6 +535,12 @@
         "La clase <code>btn-primary</code> es el color principal que utilizarás en tu aplicación. Es útil resaltar las acciones que quieres que tu usuario ejecute.",
         "Agrega la clase <code>btn-primary</code> de Bootstrap a tu botón.",
         "Ten en mente que este botón todavía necesita las clases <code>btn</code> y <code>btn-block</code>."
+      ],
+      "nameFr": "Goutez à l'arc en ciel de couleurs des boutons de Bootstrap",
+      "descriptionFr": [
+        "La classe <code>btn-primary</code> est la couleur principale que vous utiliserez dans votre application. Elle est utile pour mettre en valeur les actions que vous voulez faire réaliser par vos utilisateurs.",
+        "Ajoutez la classe Bootstrap <code>btn-primary</code> à votre bouton.",
+        "Notez que ce bouton a toujours besoin des classes <code>btn</code> et <code>btn-block</code>"
       ]
     },
     {
@@ -581,6 +624,12 @@
         "Bootstrap incluye varios colores pre-definidos para botones. La clase <code>btn-info</code> se utiliza para llamar la atención a acciones opcionales que el usuario puede tomar.",
         "Crea un nuevo botón a nivel de bloque de Bootstrap debajo de tu botón de \"Like\" con el texto \"Info\", y agrégale las clases de Bootstrap <code>btn-info</code> y <code>btn-block</code>.",
         "Ten en mente que estos botones todavía necesitan las clases <code>btn</code> y <code>btn-block</code>."
+      ],
+      "nameFr": "Indiquez les actions optionelles avec des boutons informatifs",
+      "descriptionFr": [
+        "Bootstrap est livré avec plusieurs couleurs prédéfinies pour les boutons. La classe <code>btn-info</code> est utilisée pour indiquer des actions optionelles pour vos utilisateurs.",
+        "Créez un nouveau bouton Bootstrap bloc en dessous de votre bouton \"Like\" avec le texte \"Info\" et donnez lui les classes Bootstrap <code>btn-info</code> et <code>btn-block</code>.",
+        "Notez que ces boutons ont toujours besoins des classes <code>btn</code> and <code>btn-block</code>."
       ]
     },
     {
@@ -665,6 +714,13 @@
         "Bootstrap incluye varios colores pre-definidos para botones. La clase <code>btn-danger</code> es el color de botón que usarías para notificar a los usuarios que el botón ejecuta una acción destructiva, como por ejemplo eliminar la foto de un gato.",
         "Crea un botón con el texto \"Delete\" y dale la clase <code>btn-danger</code>.",
         "Recuerda que estos botones todavía requieren las clases <code>btn</codez> y <code>btn-block</code>."
+      ],
+      "nameFr": "Prévenez vos utilisateurs d'une action dangereuse",
+      "descriptionFr": [
+        "Bootstrap est livré avec plusieurs couleurs prédéfinies pour les boutons. La classe <code>btn-danger</code> est utilisée pour indiquer aux utilisateurs que le bouton actionne un processus destructif comme supprimer une photo de chat.",
+        "Créez un bouton ayant le texte \"Delete\" et donnez lui la classe <code>btn-danger</code>.",
+        "Notez que ces boutons ont toujours besoins des classes <code>btn</code> and <code>btn-block</code>."
+
       ]
     },
     {
@@ -758,6 +814,16 @@
         "En la aplicación de fotos de gatos que estamos construyendo, usaremos <code>col-xs-*</code>, donde <code>xs</code> significa extra pequeño (como una pantalla extra-pequeña de un teléfono), y <code>*</code> especifica el número de columnas que debe tomar el ancho del elemento.",
         "Pon los botones de <code>Like</code>, <code>Info</code> y <code>Delete</code> lado a lado. Esto se hace anidando los tres botones dentro de un elemento <code>&#60;div class=\"row\"&#62;</code>, y luego cada uno de ellos dentro de un elemento <code>&#60;div class=\"col-xs-4\"&#62;</code>.",
         "La clase <code>row</code> se aplica al elemento <code>div</code>, dentro del cual van anidados los botones."
+      ],
+      "nameFr": "Utilisez la grille de Bootstrap pour mettre les éléments côte-à-côte.",
+      "descriptionFr": [
+        "Bootstrap utilise un système de grille adaptative, qui rend plus simple le placement des éléments en rangées et la spécification de la largeur relative de chaque élément. La plupart des classes de Bootstrap peuvent être associés à un élément <code>div</code>",
+        "Voici un diagramme décrivant le fonctionnement du système de grille à 12 colonnes:",
+        "<a href=\"http://i.imgur.com/FaYuui8.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/FaYuui8.png\" title=\"Cliquer pour agrandir\" alt=\"Une image illustrant le système de grille Bootstrap\"></a>",
+        "Notez que dans cet exemple, nous avons utilisé la classe <code>col-md-*</code>. Ici, <code>md</code> signifie medium, et <code>*</code> donne le nombre de colonnes en largeur de l'élément. Dans le cas présenté, on a défini la largeur en colonnes d' un élément sur un écrand de taille medium, comme un ordinateur portable.",
+        "Dans l'application de photos de chats que nous sommes en train de construire, nous utiliserons <code>col-xs-*</code>, où <code>xs</code> signifie extrêmement petit (comme un écran de téléphone mobile), et <code>*</code> est le nombre de colonnes en largeur de l'élément.",
+        "Mettez les boutons <code>Like</code>, <code>info</code> et <code>Delete</code> côte-à-côte en les enveloppant tous dans un élément <code>&#60;div class=\"row\"&#62;</code>, puis chacun d'entre eux dans un élément <code>&#60;div class=\"col-xs-4\"&#62;</code> element.",
+        "La classe <code>row</code> est donnée à un <code>div</code>, et les boutons peuvent être insérés à l'intérieur de celui-ci."
       ]
     },
     {
@@ -856,6 +922,14 @@
         "Elimina las declaraciones CSS <code>.red-text</code>, <code>p</code>, y <code>.smaller-image</code> de tu elemento <code>style</code>, de forma que las únicas declaraciones que queden en tu elemento <code>style</code> sean <code>h2</code> y <code>thick-green-border</code>.",
         "Luego elimina el elemento <code>p</code> que contiene un enlace nulo. Después, elimina la clase <code>red-text</code> de tu elemento <code>h2</code> y reemplázalo con la clase <code>text-primary</code> de Bootstrap.",
         "Por último, elimina la clase \"smaller-image\" de tu primer elemento <code>img</code> y reemplázalo con la clase <code>img-responsive</code>."
+      ],
+      "nameFr": "Remplacez le CSS personnalisé par les styles Bootstrap",
+      "descriptionFr": [
+        "Nous pouvons nettoyer notre code et rendre le look de notre appli Cat Photos plus conventionnel en utilisant les styles intégrés à Bootstrap à la place des styles personnalisés que nous avons créés auparavant.",
+        "Ne vous inquiétez pas - nous auront beaucoup de temps pour personnaliser notre CSS plus tard.",
+        "Supprimez les déclarations CSS <code>.red-text</code>, <code>p</code>, et <code>.smaller-image</code> de votre élément <code>style</code> pour que les seules déclarations restantes dans l'élément <code>style</code> soient <code>h2</code> et <code>thick-green-border</code>.",
+        "Ensuite supprimez l'élément <code>p</code> contenant un lien fantôme. Puis enlevez la classe <code>red-text</code> de votre élément <code>h2</code> et remplacez la par la classe Bootstrap <code>text-primary</code>",
+        "Enfin, enlevez la classe \"smaller-image\" dde votre premier élément <code>img</code> et remplacez le par la classe <code>img-responsive</code>."
       ]
     },
     {
@@ -944,6 +1018,16 @@
         "Anida la palabra \"love\" en tu elemento \"Things cats love\" dentro de un elemento <code>span</code>. Luego, asigna a ese elemento <code>span</code> la clase <code>text-danger</code> para hacer que el texto sea rojo.",
         "Así es como lo harías con el elemento \"Top 3 things cats hate\":",
         "<code>&#60;p&#62;Top 3 things cats &#60;span class = \"text-danger\"&#62;hate:&#60;/span&#62;&#60;/p&#62;</code>"
+      ],
+      "nameFr": "Utiliser Spans pour les éléments \"Inline\"",
+      "descriptionFr": [
+        "Vous pouvez utiliser les spans pour créer des éléments inline. Vous rappelez vous quand nous avions utilisé la classe <code>btn-block</code> pour remplir la rangée entière?",
+        "Cette image illustre la différence entre les éléments <code>inline</code> (en ligne) et les éléments <code>block-level</code> (de blocs):",
+        "<a href=\"http://i.imgur.com/O32cDWE.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/O32cDWE.png\" title=\"Cliquez pour élargir\" alt=\"Un bouton \"inline\" est aussi petit que le texte qu'il contient. Dans cette image, c'est centré. En dessous il y a un bouton \"block-level\", qui s'étire à tout l'espace horizontal.'></a>",
+        "En utilisant un élément <code>span</code>, vous pouvez mettre ensemble plusieurs éléments, et même donner un style différent à plusieurs parties d'un même élément",
+        "Nichez le mot \"love\" dans votre élément \"Things cats love\" en dessous dans un élément <code>span</code>; Ensuite donnez à ce <code>span</code> la classe <code>text-danger</code> pour rendre le texte rouge.",
+        "Il faudrait que vous fassiez ainsi pour l'élément \"Top 3 things cats hate\":",
+        "<code>&#60;p&#62;Top 3 things cats &#60;span class = \"text-danger\"&#62;hate:&#60;/span&#62;&#60;/p&#62;</code>"
       ]
     },
     {
@@ -1033,6 +1117,17 @@
         "En la aplicación de fotos de gatos que estamos construyendo, usaremos <code>col-xs-*</code>, donde <code>xs</code> significa extra pequeño (como una pantalla extra-pequeña de un teléfono), y <code>*</code> especifica el número de columnas que debe tomar el ancho del elemento.",
         "Anida tu primera imagen y tu elemento <code>h2</code> dentro de un solo elemento <code>&#60;div class=\"row\"&#62;</code>. Anida tu texto <code>h2</code> dentro de un <code>&#60;div class=\"col-xs-8\"&#62;</code> y tu imagen en un <code>&#60;div class=\"col-xs-4\"&#62;</code> de tal forma que estén en la misma línea.",
         "¿Te diste cuenta de que la imagen es ahora justamente del tamaño apropiado para el texto?"
+      ],
+      "nameFr": "Créer un entête personalisé",
+      "descriptionFr": [
+        "Notice how the image is now just the right size to fit along the text?",
+        "Nous allons réaliser un entête tout simple pour notre appli Cat Photo App en plaçant le titre et l'image de chat relaxante dans la même rangée.",
+        "Rappelez-vous, Bootstrap utilise un système de grille adaptative, qui rend facile le placement des éléments en rangées et la définition de la largeur relative de chaque élément. La plupart des classes de Bootstrap peuvent être appliquées à un élément <code>div</code>.",
+        "Voici un diagramme du fonctionnement de la grille à 12 colonnes de Bootstrap:",
+        "<a href=\"http://i.imgur.com/FaYuui8.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/FaYuui8.png\" title=\"Cliquer pour élargir\" alt=\"Une image illlustrant le système de grille de Bootstrap\"></a>",
+        "Notez que dans cet exemple, on utilise la classe <code>col-md-*</code>. Ici <code>md</code> signifie medium, et <code>*</code> est un nombre spécifiant le nombre de colonnes en largeur que l'élément devrait avoir.",
+        "Enveloppez votre première image et votre élément <code>h2</code> dans un seul élément <code>&#60;div class=\"row\"&#62;</code>. Mettez l'élément <code>h2</code> dans un <code>&#60;div class=\"col-xs-8\"&#62;</code> et votre image dans un <code>&#60;div class=\"col-xs-4\"&#62;</code> pour qu'ils soient sur la même ligne.",
+        "Voyez vous comme l'image est maintenant exactement ajustée à la bonne taille pour être à côté du texte?"
       ]
     },
     {
@@ -1123,6 +1218,16 @@
         "El elemento <code>i</code> originalmente era usado para hacer textos en itálicas, pero ahora comunmente se usa para iconos.  Le agregas clases de Font Awesome al elemento <code>i</code> para convertirlo en un ícono, por ejemplo:",
         "<code>&lt;i class=\"fa fa-info-circle\"&gt;&lt;/i&gt;</code>",
         "Usa Font Awesome para agregar un icono de \"pulgar arriba\" <code>thumbs-up</code> a tu botón de like dándole un elemento <code>i</code> con las clases <code>fa</code> y <code>fa-thumbs-up</code>."
+      ],
+      "nameFr": "Ajouter des icônes Font Awesome à nos boutons",
+      "descriptionFr": [
+        "Font Awesome est une librairie d'icônes très pratique. Ces icones sont des images vectorielles, stockées en format <code>.svg</code>. Ces icônes sont traités exactemeent comme des polices. Vous pouvez choisir leur taille en pixel, et ils prendront la taille de police de leur élémment parent HTML.",
+        "Vous poyvez ajouter Font Awesome à n'importe quell application en ajoutant le code suivant en haut de votre HTML:",
+        "<code>&#60;link rel=\"stylesheet\" href=\"//maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css\"/&#62;</code>",
+        "Ici, nous l'avons déjà ajouté pour vous dans le back-office.",
+        "La balise <code>i</code> eétait utilisé à la base pour mettre les autres éléments en italique, mais maintenant elle est utilisée pour les icones. Vous ajoutez des classes Font Awesome à un élément <code>i</code> pour les les transformer en icones, par exemple:",
+        "<code>&lt;i class=\"fa fa-info-circle\"&gt;&lt;/i&gt;</code>",
+        "Utilisez Font Awesome pour ajouter un icone <code>thumbs-up</code> à votre bouton de like en lui donnant un élément <code>i</code> ayant les classes <code>fa</code> et <code>fa-thumbs-up</code>."
       ]
     },
     {
@@ -1202,6 +1307,11 @@
       "descriptionEs": [
         "Font Awesome es una librería de iconos muy conveniente. Estos iconos son imágenes vectoriales, almacenadas en formato <code>.svg</code>, y son tratados como si fueran fuentes. Puedes especificar su tamaño usando pixeles, y tomarán el tamaño de fuente de su elemento HTML padre.",
         "Utiliza Font Awesome para agregar un icono <code>info-circle</code> a tu botón informativo y un icono <code>trash</code> a tu botón de eliminar."
+      ],
+      "nameFr": "Ajoutez des icones Font Awesome à tous nos boutons",
+      "descriptionFr": [
+        "Font Awesome est une librairie d'icônes très pratique. Ces icones sont des images vectorielles, stockées en format <code>.svg</code>. Ces icônes sont traités exactemeent comme des polices. Vous pouvez choisir leur taille en pixel, et ils prendront la taille de police de leur élémment parent HTML.",
+        "Utilisez Font Awesome pour ajouter un icone <code>info-circle</code> à votre bouton d'info et un icone <code>trash</code> à votre bouton de suppression."
       ]
     },
     {
@@ -1281,6 +1391,11 @@
       "descriptionEs": [
         "¡Puedes utilizar las clases <code>col-xs-*</code> de Bootstrap en elementos <code>form</code> también! De esta forma, nuestros botones de opción estarán igualmente distribuidos en la página, sin importar qué tan ancha es la resolución de la pantalla.",
         "Anida todos los botones de opción dentro de un elemento <code>&#60;div class=\"row\"&#62;</code>. Luego, anida cada uno de ellos dentro de un elemento <code>&#60;div class=\"col-xs-6\"&#62;</code>."
+      ],
+      "nameFr": "Donnez un style responsive à vos boutons radio",
+      "descriptionFr": [
+        "Vous pouvez utiliser la classe Bootstrap <code>col-xs-*</code> sur des éléments <code>form</code>. Comme ça, nos boutons radio serons disposés régulierement dans la page, quelle que soit la largeur de l'écran.",
+        "Nichez tous vous boutons radio dans un élément <code>&#60;div class=\"row\"&#62;</code>. Ensuite, nichezchacun d'entre eux dans un élément <code>&#60;div class=\"col-xs-6\"&#62;</code>"
       ]
     },
     {
@@ -1367,6 +1482,12 @@
       "descriptionEs": [
         "¡Puedes utilizar las clases <code>col-xs-*</code> de Bootstrap en elementos <code>form</code> también! De esta forma, nuestros botones de opción estarán igualmente distribuidos en la página, sin importar qué tan ancha es la resolución de la pantalla.",
         "Anida todas las casillas de selección en un elemento <code>&#60;div class=\"row\"&#62;</code>. Luego, anida cada una de ellas en un elemento <code>&#60;div class=\"col-xs-4\"&#62;</code>."
+      ],
+      "nameFr": "Donnez un style responsive à vos checkbox (cases de séléction)",
+      "descriptionFr": [
+        "Vous pouvez aussi utiliser la classe Bootstrap <code>col-xs-*</code> sur des éléments <code>form</code>! Comme ça, nos boutons radio serons disposés régulierement dans la page, quelle que soit la largeur de l'écran.",
+        "You can use Bootstrap's <code>col-xs-*</code> classes on <code>form</code> elements, too! This way, our checkboxes will be evenly spread out across the page, regardless of how wide the screen resolution is.",
+        "Nichez toustes vos checkbox dans un élément <code>&#60;div class=\"row\"&#62;</code>. Ensuite nichez chacun d'entre eux dans un élément <code>&#60;div class=\"col-xs-4\"&#62;</code>"
       ]
     },
     {
@@ -1462,6 +1583,11 @@
       "descriptionEs": [
         "Puedes agregar el icono <code>fa-paper-plane</code> de Font Awesome incluyendo <code>&#60;i class=\"fa fa-paper-plane\"&#62;&#60;/i&#62;</code> dentro de tu elemento <code>button</code> de envío.",
         "Dale a la entrada de texto de tu formulario la clase <code>form-control</code>. Dale al botón de envío de tu formulario las clases <code>btn btn-primary</code>. También, incluye en ese botón el icono <code>fa-paper-plane</code> de Font Awesome."
+      ],
+      "nameFr": "Donnez un style similaire au contrôles de formulaires à des zones de texte",
+      "descriptionFr": [
+        "Vous pouvez ajouter l'icone Font Awesome <code>fa-paper-plane</code> en ajoutant <code>&#60;i class=\"fa fa-paper-plane\"&#62;&#60;/i&#62;</code> à l'intérieur de votre <code>button</code> de soumission du formulaire.",
+        "Donnez aux entrées texte de votre formulaire une classe <code>form-control</code>. Donnez à votre bouton de soumission de formulaire les classes <code>btn btn-primary</code>. Donnez lui aussi un icone Font Awesome <code>fa-paper-plane</code>."
       ]
     },
     {
@@ -1559,6 +1685,12 @@
         "Ahora vamos a poner el elemento <code>input</code> y el elemento <code>button</code> que dice submit de tu formulario en la misma línea. Lo haremos de la misma forma que lo hicimos anteriormente: usando un elemento <code>div</code> con la clase <code>row</code>, y otros elementos <code>div</code> dentro de ese, usando la clase <code>col-xs-*</code>.",
         "Anida ambos, el elemento <code>input</code> y el elemento <code>button</code> que dice submit de tu formulario dentro de un <code>div</code> con la clase <code>row</code>. Anida el elemento <code>input</code> de tu formulario dentro de un div con cla clase <code>col-xs-7</code>. Anida el elemento <code>button</code> que dice submit de tu formulario en un elemento <code>div</code> con la clase <code>col-xs-5</code>.",
         "¡Este es el último desafío que haremos con nuestra aplicación de fotos de gato por ahora. Esperamos que hayas disfrutado aprender acerca de Font Awesome, Bootstrap y diseño adaptativo!"
+      ],
+      "nameFr": "Aligner les éléments de formulaire de façon responsive avec Bootstrap",
+      "descriptionFr": [
+        "Maintenant mettons sur la même ligne l'élément <code>input</code> et le <code>button</code> de soumission du formulaire. Nous procéderons de la même façon que précedemment: en utilisant un élément <code>div</code> avec la classe <code>row</code>, et un un autre div à l'intérieur qui aura la classe <code>col-xs-*</code>.",
+        "Nichez à la fois l'<code>input</code> texte de votre formulaire et le <code>button</code> de soumission de formulaire à l'intérieur d'un <code>div</code> avec la classe <code>row</code>. Nichez l'<code>input</code> texte du formulaire dans un div ayant la classe <code>col-xs-7</code>. Nichez votre <code>button</code> de soumission de formulaire dans un div ayant la classe <code>col-xs-5</code>.",
+        "C'est le dernier challenge qui concerne notre application de photos de chats. Nous espérons que vous avez aimé apprendre Font Awesome, Bootstrap et du design adaptatif!"
       ]
     },
     {
@@ -1590,6 +1722,13 @@
         "Crearemos un área de juego con jQuery, el cual utilizaremos en nuestros desafíos con jQuery.",
         "Para empezar, crea un elemento <code>h3</code>, con el texto <code>jQuery Playground</code>.",
         "Ponle color a tu elemento <code>h3</code> con la clase <code>text-primary</code> de Bootstrap, y céntrala con la clase <code>text-center</code> de Bootstrap."
+      ],
+      "nameFr": "Créer un entête Bootstrap",
+      "descriptionFr": [
+        "Maintenons, créons queqlque chose à partir de zéro pour pratiquer nos connaissances acquises sur HTML, CSS et Bootstrap.",
+        "Nous allons construire un terrain de jeu pour jQuery, que nous allons bientôt utiliser dans les challenges jQuery.",
+        "Pour commencer, créez un élément <code>h3</code>, contenant le texte <code>jQuery Playground</code>.",
+        "Colorez notre élément <code>h3</code> avec la classe Bootstrap <code>text-primary</code>, et centrez le en utilisant la classe Bootstrap <code>text-center</code>"
       ]
     },
     {
@@ -1615,6 +1754,11 @@
       "descriptionEs": [
         "Ahora asegurémonos de que todo el contenido en nuestra página pueda adaptarse a dispositivos móviles.",
         "Anida tu elemento <code>h3</code> dentro de un elemento <code>div</code> con la clase <code>container-fluid</code>."
+      ],
+      "nameFr": "Loger notre page dans un conteneur Bootstrap Fluid Div",
+      "descriptionFr": [
+        "Maintenant, assurons nous que tout le contenu de la page est mobile-responsive (adaptatif au téléphones mobiles).",
+        "Nichons notre element <code>h3</code> à l'intérieur d'un élément <code>div</code> ayant la classe <code>container-fluid</code>."
       ]
     },
     {
@@ -1643,6 +1787,11 @@
       "descriptionEs": [
         "Ahora crearemos una fila de Bootstrap con nuestros elementos en línea.",
         "Crea un elemento <code>div</code> debajo de la etiqueta <code>h3</code>, con la clase <code>row</code>."
+      ],
+      "nameFr": "Créer une rangée (row) Bootstrap",
+      "descriptionFr": [
+        "Maintenant nous allons créer une rangée (row) Bootstrap pour nos éléments inline.",
+        "Créez un élément <code>div</code> en dessous de la balise <code>h3</code>, avec une classe <code>row</code>."
       ]
     },
     {
@@ -1671,6 +1820,11 @@
       "descriptionEs": [
         "Ahora que tenemos una fila en Bootstrap, vamos a partirla en dos columnas para alojar nuestros elementos.",
         "Crea dos elementos <code>div</code> dentro de tu fila, ambos con la clase <code>col-xs-6</code>."
+      ],
+      "nameFr": "Séparer une rangée Bootstrap",
+      "descriptionFr": [
+        "Maintenant que nous avons une rangée Bootstrap, séparons la en deux colonnes pour placer nos éléments.",
+        "Créez deux éléments <code>div</code>dans votre rangée, chacun ayant la classe <code>col-xs-6</code>."
       ]
     },
     {
@@ -1704,6 +1858,11 @@
       "descriptionEs": [
         "Bootstrap tiene una clase llamada <code>well</code> que crea una sensación visual de profundidad para tus columnas.",
         "Anida un elemento <code>div</code> con la clase <code>well</code> dentro de cada uno de tus elementos <code>div</code> que tienen la clase <code>col-xs-6</code>."
+      ],
+      "nameFr": "Créez un \"puit\" (well) Bootstrap",
+      "descriptionFr": [
+        "Bootstrap possède une classe appelée <code>well</code> qui peux créer une certaine profondeur pour vos colonnes.",
+        "Nichez un élément <code>div</code> avec la classe <code>well</code> dans chacun de vos éléments <code>col-xs-6</code> <code>div</code>."
       ]
     },
     {
@@ -1745,6 +1904,11 @@
       "descriptionEs": [
         "Ahora estamos a una profundidad de varios elementos <code>div</code> dentro de cada columna de nuestra fila. No iremos más profundo que esto. Ahora podemos agregar nuestros elementos <code>button</code>.",
         "Anida tres elementos <code>button</code> dentro de cada uno de tus elementos <code>div</code> que tienen la clase <code>well</code>."
+      ],
+      "nameFr": "Ajouter des éléments dans un puit Bootstrap",
+      "descriptionFr": [
+        "Nous avons maintenant plusieurs niveaux de profondeur d'éléments <code>div</code> dans chaque colonne de notre rangée. Ceci est suffisant pour le moment. Maintenant nous pouvons ajouter nos éléments <code>button</code>.",
+        "Nichez trois éléments <code>button</code> dans chaque élément <code>well</code> <code>div</code>."
       ]
     },
     {
@@ -1785,6 +1949,11 @@
       "descriptionEs": [
         "Bootstrap tiene otra clase de botón llamada <code>btn-default</code>.",
         "Aplica las clases <code>btn</code> y <code>btn-default</code> a cada uno de tus elementos <code>button</code>."
+      ],
+      "nameFr": "Appliquer le style de bouton par défaut de Bootstrap",
+      "descriptionFr": [
+        "Bootstrap possède une autre classe de bouton appelée <code>btn-default</code>.",
+        "Appliquez les deux classes <code>btn</code> et <code>btn-default</code> à chacun de vos éléments <code>button</code>"
       ]
     },
     {
@@ -1824,6 +1993,11 @@
       "descriptionEs": [
         "No todas las clases necesitan tener un código CSS correspondiente. A veces creamos clases sólo con el propósito de seleccionar esos elementos más fácilmente usando jQuery.",
         "Dale a cada uno de tus elementos <code>button</code> la clase <code>target</code>."
+      ],
+      "nameFr": "Créez une classe à cibler avec les sélécteurs jQuery",
+      "descriptionFr": [
+        "Toutes les classes ne nécéssitent pas d'avoir un code CSS qui leur correspondent. Parfois ous créons des classes dans le seul but de pouvoir sélectionner ces éléments plus facilement en utilisant jQuery.",
+        "Donnez à chacun de vos éléments <code>button</code> la classe <code>target</code>."
       ]
     },
     {
@@ -1872,6 +2046,15 @@
         "Recuerda que puedes darle a un elemento un id como el siguiente:",
         "<code>&#60;div class=\"well\" id=\"center-well\"&#62;</code>",
         "Dale al pozo de la izquireda el id <code>left-well</code>. Al pozo de la derecha, dale un id <code>right-well</code>."
+      ],
+      "nameFr": "Ajouter des attributs ID à vos éléments Bootstrap",
+      "descriptionFr": [
+        "Rappelez vous qu'en plus des attributs classes, vous pouvez donnez à chacun de vos éléments un attribut <code>id</code>.",
+        "Chaque id doit être unique pour un élément donné et utilisé une seule fois par page.",
+        "Donnons un id unique à chacun de nos éléments <code>div</code> de classe <code>well</code>.",
+        "Rappelez vous que vous pouvez donner un id à un élément ainsi :",
+        "<code>&#60;div class=\"well\" id=\"center-well\"&#62;</code>",
+        "Donnez au puit sur la gauche un id de <code>left-well</code>. Donnez au puit sur la droite un id de <code>right-well</code>."
       ]
     },
     {
@@ -1918,6 +2101,12 @@
         "Para que todo esté más claro, vamos a ponerle a todos nuestros pozos una etiqueta que sea igual a su id.",
         "Sobre tu pozo de la izquierda, dentro de su elemento <code>div</code> que tiene la clase <code>col-xs-6</code>, agrega un elemento <code>h4</code> con el texto <code>#left-well</code>.",
         "Ahora, sobre tu pozo de la derecha, dentro de su elemento <code>div</code> que tiene la clase <code>col-xs-6</code>, agrega un elemento <code>h4</code> con el texto <code>#right-well</code>."
+      ],
+      "nameFr": "Donner un nom aux puits Bootstrap",
+      "descriptionFr": [
+        "Au nom de la clarté, donnons un nom à nos deux puits en accord avec leur ids",
+        "Au dessus de votre puit de gauche, à l'intérieur de ses éléments <code>col-xs-6</code> <code>div</code>,  ajoutez un élément <code>h4</code> ayant le texte <code>#left-well</code>.",
+        "Au dessus de votre puit de droite, à l'intérieur de ses éléments <code>col-xs-6</code> <code>div</code>,  ajoutez un élément <code>h4</code> ayant le texte <code>#right-well</code>."
       ]
     },
     {
@@ -1966,6 +2155,12 @@
         "También quisiéramos referirnos a cada botón por su id utilizando jQuery.",
         "Dale a cada uno de tus botones un id único, comenzando con <code>target1</code> y terminando con <code>target6</code>.",
         "Asegúrate que <code>target1</code> a <code>target3</code> queden en <code>#left-well</code>, mientras que <code>target4</code> a <code>target6</code> queden en <code>#right-well</code>."
+      ],
+      "nameFr": "Donner à chaque élément un ID unique",
+      "descriptionFr": [
+        "Nous désirerons aussi pouvoir être capable d'utiliser jQuery pour cibler chaque bouton suivant son id unique.",
+        "Donnez à chaque bouton un id unique, commençant par <code>target1</code> et finissant par <code>target6</code>.",
+        "Assurez vous que <code>target1</code> à <code>target3</code> sont dans le <code>#left-well</code>,  et que <code>target4</code> à <code>target6</code> sont dans le <code>#right-well</code>."
       ]
     },
     {
@@ -2012,6 +2207,11 @@
       "descriptionEs": [
         "De la misma forma en que etiquetamos nuestros pozos, ahora vamos a etiquetar nuestros botones.",
         "Dale a cada uno de tus elementos <code>button</code> un texto que corresponda con su <code>id</code>."
+      ],
+      "nameFr": "Donnez un nom à vos boutons Bootstrap",
+      "descriptionFr": [
+        "De la même façon que nous avons donné un nom à nos puits, nous voulons nommer nos boutons.",
+        "Donnez à chaque élément <code>button</code> un texte qui corresponde à son <code>id</code>."
       ]
     },
     {
@@ -2060,6 +2260,13 @@
         "Vamos a asegurar que cualquier persona sepa que no debe modificar nada en este código directamente.",
         "Recuerda que puedes iniciar un comentario usando <code>&#60;!--</code> y terminarlo usando <code>--&#62;</code>",
         "Agrega un comentario al inicio de tu código HTML que diga <code>Only change code above this line.</code>"
+      ],
+      "nameFr": "Utiliser des commentaires pour clarifier son code",
+      "descriptionFr": [
+        "Quand nous commencerons à utiliser jQuery, nous modifierons les éléments HTML sans avoir besoin de les changer directement dans le fichier HTML.",
+        "Assurons nous que tout le monde sache qu'ils ne devraient pas modifier quoi que ce soit dans le code HTML.",
+        "Rappelez vous que vous pouvez commencer un commentaire avec <code>&#60;!--</code> et le finir avec <code>--&#62;</code>",
+        "Ajoutez un commentaire en haut de l'HTML qui annonce <code>Only change code above this line.</code> (Changez seulement le code au dessus de cette ligne.)"
       ]
     }
   ]

From 9504a5cae644c048ea2b466ccc7c1a60cec74291 Mon Sep 17 00:00:00 2001
From: BKinahan <b.kinahan@gmail.com>
Date: Mon, 21 Mar 2016 22:14:48 +0000
Subject: [PATCH 31/33] Handle invalid unsubscriptions

---
 server/boot/randomAPIs.js | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/server/boot/randomAPIs.js b/server/boot/randomAPIs.js
index fde4cfb..2995082 100644
--- a/server/boot/randomAPIs.js
+++ b/server/boot/randomAPIs.js
@@ -292,6 +292,13 @@ module.exports = function(app) {
     req.checkParams('email', 'Must send a valid email').isEmail();
     return User.findOne({ where: { email: req.params.email } }, (err, user) => {
       if (err) { return next(err); }
+      if (!user) {
+        req.flash('info', {
+          msg: 'Email address not found. ' +
+          'Please update your Email preferences from your profile.'
+        });
+        return res.redirect('/map');
+      }
       return user.updateAttribute('sendMonthlyEmail', false, (err) => {
         if (err) { return next(err); }
         req.flash('info', {
@@ -306,6 +313,13 @@ module.exports = function(app) {
     req.checkParams('email', 'Must send a valid email').isEmail();
     return User.findOne({ where: { email: req.params.email } }, (err, user) => {
       if (err) { return next(err); }
+      if (!user) {
+        req.flash('info', {
+          msg: 'Email address not found. ' +
+          'Please update your Email preferences from your profile.'
+        });
+        return res.redirect('/map');
+      }
       return user.updateAttribute('sendNotificationEmail', false, (err) => {
         if (err) { return next(err); }
         req.flash('info', {
@@ -320,6 +334,13 @@ module.exports = function(app) {
     req.checkParams('email', 'Must send a valid email').isEmail();
     return User.findOne({ where: { email: req.params.email } }, (err, user) => {
       if (err) { return next(err); }
+      if (!user) {
+        req.flash('info', {
+          msg: 'Email address not found. ' +
+          'Please update your Email preferences from your profile.'
+        });
+        return res.redirect('/map');
+      }
       return user.updateAttribute('sendQuincyEmail', false, (err) => {
         if (err) { return next(err); }
         req.flash('info', {

From 766f088ea89447a24bfe3c3152cda52f83d9a1b6 Mon Sep 17 00:00:00 2001
From: Ivan Kurnosov <zerkms@zerkms.com>
Date: Mon, 21 Mar 2016 10:20:53 +1300
Subject: [PATCH 32/33] Fixed assignment operator terminology

It's not accurate to call the `assignment operator` `=` and `equal` operator, since it might be confused with the `equality operators`, eg `==`.

For the very same reason changed the `Minus Equals` wording to characters `-=` and titled the challenges with its commonly used name: compound or augment assignment (see https://en.wikipedia.org/wiki/Augmented_assignment)

What do you think of this clarification?

Thanks.
---
 .../basic-javascript.json                                  | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/seed/challenges/01-front-end-development-certification/basic-javascript.json b/seed/challenges/01-front-end-development-certification/basic-javascript.json
index 5572c79..7dda2fd 100644
--- a/seed/challenges/01-front-end-development-certification/basic-javascript.json
+++ b/seed/challenges/01-front-end-development-certification/basic-javascript.json
@@ -87,9 +87,9 @@
     },
     {
       "id": "56533eb9ac21ba0edf2244a8",
-      "title": "Storing Values with the Equal Operator",
+      "title": "Storing Values with the Assignment Operator",
       "description": [
-        "In JavaScript, you can store a value in a variable with the <dfn>assignment</dfn> or <code>equal</code> (<code>=</code>)  operator.",
+        "In JavaScript, you can store a value in a variable with the <dfn>assignment</dfn> operator.",
         "<code>myVariable = 5;</code>",
         "Assigns the <code>Number</code> value <code>5</code> to <code>myVariable</code>.",
         "Assignment always goes from right to left. Everything to the right of the <code>=</code> operator is resolved before the value is assigned to the variable to the left of the operator.",
@@ -137,7 +137,7 @@
     },
     {
       "id": "56533eb9ac21ba0edf2244a9",
-      "title": "Initializing Variables with the Equal Operator",
+      "title": "Initializing Variables with the Assignment Operator",
       "description": [
         "It is common to <dfn>initialize</dfn> a variable to an initial value in the same line as it is declared.",
         "<code>var myVar = 0;</code>",
@@ -651,7 +651,7 @@
     },
     {
       "id": "56533eb9ac21ba0edf2244af",
-      "title": "Assignment with Plus Equals",
+      "title": "Compound Assignment With +=",
       "description": [
         "In programming, it is common to use assignments to modify the contents of a variable. Remember that everything to the right of the equals sign is evaluated first, so we can say:",
         "<code>myVar = myVar + 5;</code>",
@@ -702,7 +702,7 @@
     },
     {
       "id": "56533eb9ac21ba0edf2244b0",
-      "title": "Assignment with Minus Equals",
+      "title": "Compound Assignment With -=",
       "description": [
         "Like the <code>+=</code> operator, <code>-=</code> subtracts a number from a variable.",
         "<code>myVar = myVar - 5;</code>",
@@ -752,7 +752,7 @@
     },
     {
       "id": "56533eb9ac21ba0edf2244b1",
-      "title": "Assignment with Times Equals",
+      "title": "Compound Assignment With *=",
       "description": [
         "The <code>*=</code> operator multiplies a variable by a number.",
         "<code>myVar = myVar * 5;</code>",
@@ -802,7 +802,7 @@
     },
     {
       "id": "56533eb9ac21ba0edf2244b2",
-      "title": "Assignment with Divided by Equals",
+      "title": "Compound Assignment With /=",
       "description": [
         "The <code>/=</code> operator divides a variable by another number.",
         "<code>myVar = myVar / 5;</code>",

From 2652d049cb31460daa420d35729c5568e846e110 Mon Sep 17 00:00:00 2001
From: deathsythe47 <deathsythe47@users.noreply.github.com>
Date: Thu, 24 Mar 2016 00:24:52 -0500
Subject: [PATCH 33/33] Remove unnecessary comma from CONTRIBUTING.md

---
 CONTRIBUTING.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index f077376..417ecc9 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -5,7 +5,7 @@ We welcome pull requests from Free Code Camp campers (our students) and seasoned
 
 
 1.  Find an issue that needs assistance by searching for the [Help Wanted](https://github.com/FreeCodeCamp/FreeCodeCamp/labels/help%20wanted) tag.
-2.  Let us know you are working on it, by posting a comment on the issue.
+2.  Let us know you are working on it by posting a comment on the issue.
 3.  Feel free to ask for help in our [Help Contributors](https://gitter.im/FreeCodeCamp/HelpContributors) Gitter room.
 
 If you've found a bug that is not on the board, [follow these steps](#found-a-bug).
