Merge branch 'staging' of https://github.com/FreeCodeCamp/freecodecamp into staging

This commit is contained in:
A. Drake
2015-04-29 07:39:12 -04:00
24 changed files with 234 additions and 588 deletions

60
app.js
View File

@ -39,7 +39,6 @@ var express = require('express'),
homeController = require('./controllers/home'),
resourcesController = require('./controllers/resources'),
userController = require('./controllers/user'),
contactController = require('./controllers/contact'),
nonprofitController = require('./controllers/nonprofits'),
bonfireController = require('./controllers/bonfire'),
coursewareController = require('./controllers/courseware'),
@ -263,6 +262,24 @@ app.get('/chat', resourcesController.chat);
app.get('/twitch', resourcesController.twitch);
// Agile Project Manager Onboarding
app.get('/pmi-acp-agile-project-managers', resourcesController.agileProjectManagers);
app.get('/agile', function(req, res) {
res.redirect(301, '/pmi-acp-agile-project-managers');
});
app.get('/pmi-acp-agile-project-managers-form', resourcesController.agileProjectManagersForm);
// Nonprofit Onboarding
app.get('/nonprofits', resourcesController.nonprofits);
app.get('/nonprofits-form', resourcesController.nonprofitsForm);
app.get('/map', challengeMapController.challengeMap);
app.get('/live-pair-programming', function(req, res) {
@ -330,59 +347,18 @@ app.get('/email-signin', userController.getEmailSignin);
app.post('/email-signup', userController.postEmailSignup);
app.post('/email-signin', userController.postSignin);
app.get('/nonprofits', contactController.getNonprofitsForm);
app.post('/nonprofits', contactController.postNonprofitsForm);
/**
* Nonprofit Project routes.
*/
app.get('/nonprofits', nonprofitController.nonprofitsHome);
app.get('/nonprofits/directory', nonprofitController.nonprofitsDirectory);
app.get('/nonprofits/are-you-with-a-registered-nonprofit', nonprofitController.areYouWithARegisteredNonprofit);
app.get('/nonprofits/are-there-people-that-are-already-benefiting-from-your-services', nonprofitController.areTherePeopleThatAreAlreadyBenefitingFromYourServices);
app.get('/nonprofits/in-exchange-we-ask', nonprofitController.inExchangeWeAsk);
app.get('/nonprofits/ok-with-javascript', nonprofitController.okWithJavaScript);
app.get('/nonprofits/how-can-free-code-camp-help-you', nonprofitController.howCanFreeCodeCampHelpYou);
app.get('/nonprofits/what-does-your-nonprofit-do', nonprofitController.whatDoesYourNonprofitDo);
app.get('/nonprofits/link-us-to-your-website', nonprofitController.linkUsToYourWebsite);
app.get('/nonprofits/tell-us-your-name', nonprofitController.tellUsYourName);
app.get('/nonprofits/tell-us-your-email', nonprofitController.tellUsYourEmail);
app.get('/nonprofits/your-nonprofit-project-application-has-been-submitted', nonprofitController.yourNonprofitProjectApplicationHasBeenSubmitted);
app.get('/nonprofits/other-solutions', nonprofitController.otherSolutions);
app.get('/nonprofits/getNonprofitList', nonprofitController.showAllNonprofits);
app.get('/nonprofits/interested-in-nonprofit/:nonprofitName', nonprofitController.interestedInNonprofit);
app.get(
'/nonprofits/:nonprofitName',
nonprofitController.returnIndividualNonprofit
);
app.get(
'/done-with-first-100-hours',
passportConf.isAuthenticated,
contactController.getDoneWithFirst100Hours
);
app.post(
'/done-with-first-100-hours',
passportConf.isAuthenticated,
contactController.postDoneWithFirst100Hours
);
app.post(
'/update-progress',
passportConf.isAuthenticated,

View File

@ -1,78 +0,0 @@
var nodemailer = require('nodemailer'),
debug = require('debug')('freecc:cntr:contact'),
secrets = require('../config/secrets');
var transporter = nodemailer.createTransport({
service: 'Mandrill',
auth: {
user: secrets.mandrill.user,
pass: secrets.mandrill.password
}
});
module.exports = {
/**
* GET /contact
* Contact form page.
*/
getNonprofitsForm: function(req, res) {
res.render('contact/nonprofits', {
title: 'Free Code Work for Nonprofits Project Submission Page'
});
},
/**
* POST /contact
* Send a contact form via Nodemailer.
*/
postNonprofitsForm: function(req, res) {
var mailOptions = {
to: 'team@freecodecamp.com',
name: req.body.name,
from: req.body.email,
subject: 'CodeNonprofit Project Idea from ' + req.body.name,
text: req.body.message
};
transporter.sendMail(mailOptions, function (err) {
if (err) {
req.flash('errors', {msg: err.message});
return res.redirect('/nonprofits');
}
req.flash('success', {msg: 'Email has been sent successfully!'});
res.redirect('/nonprofits');
});
},
getDoneWithFirst100Hours: function(req, res) {
if (req.user.points >= 53) {
res.render('contact/done-with-first-100-hours', {
title: 'Congratulations on finishing the first 100 hours of Free Code Camp!'
});
} else {
req.flash('errors', {msg: 'Hm... have you finished all the challenges?'});
res.redirect('/');
}
},
postDoneWithFirst100Hours: function(req, res) {
var mailOptions = {
to: 'team@freecodecamp.com',
name: 'Completionist',
from: req.body.email,
subject: 'Camper at ' + req.body.email + ' has completed the first 100 hours',
text: ''
};
transporter.sendMail(mailOptions, function (err) {
if (err) {
req.flash('errors', {msg: err.message});
return res.redirect('/done-with-first-100-hours');
}
req.flash('success', {msg: 'Email has been sent successfully!'});
res.redirect('/nonprofit-project-instructions');
});
}
};

View File

@ -6,12 +6,6 @@ var async = require('async'),
debug = require('debug')('freecc:cntr:nonprofits'),
R = require('ramda');
exports.nonprofitsHome = function(req, res) {
res.render('nonprofits/home', {
title: 'A guide to our Nonprofit Projects'
});
};
exports.nonprofitsDirectory = function(req, res) {
Nonprofit.find({estimatedHours: { $gt: 0 } }, function(err, nonprofits) {
if (err) {

View File

@ -155,6 +155,30 @@ module.exports = {
}
},
nonprofits: function nonprofits(req, res) {
res.render('resources/nonprofits', {
title: 'A guide to our Nonprofit Projects'
});
},
nonprofitsForm: function nonprofitsForm(req, res) {
res.render('resources/nonprofits-form', {
title: 'A guide to our Nonprofit Projects'
});
},
agileProjectManagers: function agileProjectManagers(req, res) {
res.render('resources/pmi-acp-agile-project-managers', {
title: 'Get Agile Project Management Experience for the PMI-ACP'
});
},
agileProjectManagersForm: function agileProjectManagersForm(req, res) {
res.render('resources/pmi-acp-agile-project-managers-form', {
title: 'Get Agile Project Management Experience for the PMI-ACP'
});
},
twitch: function twitch(req, res) {
res.render('resources/twitch', {
title: "Enter Free Code Camp's Chat Rooms"

View File

@ -518,7 +518,7 @@ exports.storySubmission = function(req, res, next) {
return next(err);
}
// If the emails of both authors differ, only then proceed with email notification
if (data.author.email && (data.author.email !== recipient.email)) {
if (typeof data.author !== 'undefined' && data.author.email && typeof recipient !== 'undefined' && recipient.email && (data.author.email !== recipient.email)) {
var transporter = nodemailer.createTransport({
service: 'Mandrill',
auth: {

View File

@ -821,9 +821,9 @@
"<span class='text-info'>Rule #3:</span> Reverse engineer the example project's functionality, and also feel free to personalize it.",
"Here are the <a href='http://en.wikipedia.org/wiki/User_story' target='_blank'>user stories</a> you must enable, and optional bonus user stories:",
"<span class='text-info'>User Story:</span> As a user, I can play a game of Tic Tac Toe with the computer.",
"<span class='text-info'>Bonus User Story:</span> As a user, I can never actually win against the computer - at best I can tie.",
"<span class='text-info'>Bonus User Story:</span> As a user, my game will reset as soon as it's over so I can play again.",
"<span class='text-info'>Bonus User Story:</span> As a user, I can choose whether I want to play as X or O.",
"<span class='text-info'>Hint:</span> Here's an example call to Twitch.tv's JSON API: <code>https://api.twitch.tv/kraken/streams/freecodecamp</code>.",
"When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.",
"If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.<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>"
],

View File

@ -258,6 +258,29 @@
"</div>"
]
},
{
"_id": "bd7159d9c442eddfaeb5bdef",
"name": "What does Register mean?",
"description": [
"<div class=\"col-xs-12 col-sm-10 col-sm-offset-1\">",
"<h2 class='text-center'></h2>",
"<div class=\"embed-responsive embed-responsive-16by9\"><iframe src=\"//player.vimeo.com/video/107073108\" class=\"embed-responsive-item\"></iframe></div>",
"<div class=\"text-left\">",
" <h3>These global shortcuts work everywhere on a Mac:",
" <ul>",
" <li>Control + F = Forward</li>",
" <li>Control + B = Backward</li>",
" <li>Control + N = Next Line</li>",
" <li>Control + P = Previous Line</li>",
" <li>Control + H = Backspace</li>",
" <li>Control + D = Delete</li>",
" <li>Control + A = Beginning of Line</li>",
" <li>Control + E = End of Line</li>",
" <li>Control + K = Kill line</li>",
" </ul>",
"</div>"
]
},
{
"_id": "bd7158d9c445eddfaeb5bdef",
"name": "Gmail Zero Inbox Shortcuts",
@ -370,103 +393,6 @@
"</div>"
]
},
{
"_id": "bd7158d9c448eddfaeb5bdef",
"name": "Live Stream Pair Programming on Twitch.tv",
"description": [
"<div class=\"text-center\">",
" <h1>Live Pair Programming</h1>",
" <h2 id=\"next-session\"></h2>",
" <h2>Watch the live stream below or on our &thinsp;<a href=\"http://twitch.tv/freecodecamp\" target=\"_blank\">Twitch.tv channel</a>.</h2>",
" <div class=\"row\">",
" <div class=\"col-md-8 col-xs-12\">",
" <div class=\"embed-responsive embed-responsive-16by9\">",
" <iframe src=\"http://www.twitch.tv/freecodecamp/embed\" frameborder=\"0\" scrolling=\"no\"></iframe>",
" </div>",
" </div>",
" <div class=\"col-md-4 col-xs-12\">",
" <div class=\"visible-sm visible-xs\">",
" <div class=\"embed-responsive embed-responsive-16by9\">",
" <iframe src=\"http://www.twitch.tv/freecodecamp/chat?popout=\" frameborder=\"0\" scrolling=\"no\"></iframe>",
" </div>",
" </div>",
" <div class=\"visible-md visible-lg\">",
" <div class=\"embed-responsive embed-responsive-twitch-chat\">",
" <iframe src=\"http://www.twitch.tv/freecodecamp/chat?popout=\" frameborder=\"0\" scrolling=\"no\"></iframe>",
" </div>",
" </div>",
" </div>",
" </div>",
" <h1>Previous Live Pair Programming Sessions</h1>",
" <div class=\"col-xs-12\">",
" <div class=\"embed-responsive embed-responsive-16by9 big-break\">",
" <iframe src=\"//www.youtube.com/embed/_BErpDdmBOw\" class=\"embed-responsive-item\"></iframe>",
" </div>",
" <h3 class=\"wrappable\">link: &thinsp;<a href=\"http://www.youtube.com/watch/_BErpDdmBOw\">http://www.youtube.com/watch/_BErpDdmBOw</a></h3>",
" <div class=\"embed-responsive embed-responsive-16by9 big-break\">",
" <iframe src=\"//www.youtube.com/embed/Fn9HMn79KH0\" class=\"embed-responsive-item\"></iframe>",
" </div>",
" <h3 class=\"wrappable\">link: &thinsp;<a href=\"http://www.youtube.com/watch/Fn9HMn79KH0\">http://www.youtube.com/watch/Fn9HMn79KH0</a></h3>",
" <div class=\"embed-responsive embed-responsive-16by9 big-break\">",
" <iframe src=\"//www.youtube.com/embed/S7iRBZJwOAs\" class=\"embed-responsive-item\"></iframe>",
" </div>",
" <h3 class=\"wrappable\">link: &thinsp;<a href=\"http://www.youtube.com/watch/S7iRBZJwOAs\">http://www.youtube.com/watch/S7iRBZJwOAs</a></h3>",
" <div class=\"embed-responsive embed-responsive-16by9 big-break\">",
" <iframe src=\"//www.youtube.com/embed/BHNRg39ZblE\" class=\"embed-responsive-item\"></iframe>",
" </div>",
" <h3 class=\"wrappable\">link: &thinsp;<a href=\"http://www.youtube.com/watch/BHNRg39ZblE\">http://www.youtube.com/watch/BHNRg39ZblE</a></h3>",
" <div class=\"embed-responsive embed-responsive-16by9 big-break\">",
" <iframe src=\"//www.youtube.com/embed/YDfkHlDmehA\" class=\"embed-responsive-item\"></iframe>",
" </div>",
" <h3 class=\"wrappable\">link: &thinsp;<a href=\"http://www.youtube.com/watch/YDfkHlDmehA\">http://www.youtube.com/watch/YDfkHlDmehA</a></h3>",
" </div>",
" <script src=\"/js/lib/moment/moment.js\"></script>",
" <script src=\"/js/lib/moment/nextTuesday.js\"></script>",
" <script>$('#next-session').text(nextSession());</script>",
"</div>"
]
},
{
"_id": "bd7158d9c449eddfaeb5bdef",
"name": "Nodeschool Challenges",
"description": [
"<h2 class='text-center'>Learn Node.js, NPM, Express.js, and advanced JavaScript like Functional Programming and Promises</h2><br/>",
"<div class=\"embed-responsive embed-responsive-16by9\">",
" <iframe src=\"//player.vimeo.com/video/122719685\" class=\"embed-responsive-item\"></iframe>",
"</div>",
"<div class=\"text-left col-xs-12 col-sm-10 col-sm-offset-1\">",
" <h3>Here are the NodeSchool courses you should complete:",
" <ol>",
" <li><a href=\"http://runnable.com/VQuO_Y4BbkhaOOsV/nodeschool-io-s-learnyounode-course-available-in-your-browser-for-node-js-and-freecodecamp\" target=\"_blank\">NodeSchool.io's LearnYouNode course</a></li>",
" <li><a href=\"http://runnable.com/VQt7deuMe6RZ3Gcl/nodeschool-io-s-learn-to-npm-course-running-in-your-browser-for-node-js-and-hello-world\" target=\"_blank\">NodeSchool.io's Learn-to-NPM course</a></li>",
" <li><a href=\"http://runnable.com/VQufnaRAlaNc9JuM/nodeschool-io-s-express-js-course-available-in-your-browser-for-node-js-and-freecodecamp\" target=\"_blank\">NodeSchool.io's Express.js course</a></li>",
" <li><a href=\"http://runnable.com/VQuZjvia8Gxcqkpy/nodeschool-io-s-functional-programming-in-javascript-course-available-in-your-browser-for-node-js-and-freecodecamp\" target=\"_blank\">NodeSchool.io's Functional Programming in JavaScript course</a></li>",
" <li><a href=\"http://runnable.com/VQunH26qdytcbLBg/nodeschool-io-s-promise-it-won-t-hurt-promises-course-available-in-your-browser-for-node-js-javascript-and-freecodecamp\" target=\"_blank\">NodeSchool.io's Promise It Won't Hurt Promises course</a></li>",
" </ol>",
" </h3>",
"</div><br/>"
]
},
{
"_id": "bd7158d9c450eddfaeb5bdef",
"name": "Nonprofit Project Instructions",
"description": [
"<div class='col-xs-12 col-sm-10 col-sm-offset-1'>",
"<h3>It's time to apply what you've learned here at Free Code Camp.</h3>",
"<h3>By the end of this process, you'll have a portfolio of live apps being used by real people.</h3>",
"<h3>Please do the following immediately:</h3>",
"<h4>",
" <ol>",
" <li>Complete this form: &thinsp;<a href=\"http://goo.gl/forms/f61dLt67t8\" target=\"_blank\">http://goo.gl/forms/f61dLt67t8</a>.</li>",
" <li>Read this document, which will answer many questions you may have about our nonprofit projects: &thinsp;<a href=\"/field-guide/guide-to-our-nonprofit-projects\" target=\"_blank\">http://freecodecamp.com/field-guide/guide-to-our-nonprofit-projects</a>.</li>",
" <li>We'll send you an invite to our Nonprofit Projects Trello board. Once we do, go there and add yourself to at least 3 nonprofit projects that interest you.</li>",
" <li>Finish any unfinished Bonfire challenges. These challenges serve as the Free Code Camp \"exit test\". You must complete these before you can start working on nonprofit projects. If you completed CoderByte or CodeWars challenges instead of Bonfire, email us and we'll take a look:&thinsp;<a href=\"mailto:team@freecodecamp.com\">team@freecodecamp.com</a>.</li>",
" </ol>",
" <h4>Please email us if you have further questions: &thinsp;<a href=\"mailto:team@freecodecamp.com\">team@freecodecamp.com</a>.</h4>",
"</h4>",
"</div>"
]
},
{
"_id": "bd7158d9c451eddfaeb5bded",
"name": "Bonfire Style Guide",

View File

@ -1,29 +0,0 @@
extends ../layout
block content
.jumbotron.text-center
h1.animated.lightSpeedIn Congratulations!
.animated.fadeIn.delay-2
h2 You've completed the first 100 hours of Free Code Camp!
.animated.fadeIn.delay-4
h3 Now you're ready to continue your learning by building solutions for nonprofits!
h3 First, please enter your email below.
br
form.form-horizontal(role='form', action="/done-with-first-100-hours/", method='POST', novalidate='novalidate', name='doneWithFirst100HoursForm')
input(type='hidden', name='_csrf', value=_csrf)
.form-group
label(class='col-sm-3 control-label', for='email') Your email *
.col-sm-8
input.form-control(type='text', name='email', id='email', autocomplete="off", ng-model='email', required='required', ng-keypress='')
.col-sm-8.col-sm-offset-3(ng-cloak, ng-show="doneWithFirst100HoursForm.$error.email && !doneWithFirst100HoursForm.email.$pristine")
alert(type='danger')
span.ion-close-circled
| Please enter a valid email format.
.col-sm-8.col-sm-offset-3(ng-cloak, ng-show="doneWithFirst100HoursForm.email.$invalid && doneWithFirst100HoursForm.email.$error.required && !doneWithFirst100HoursForm.email.$pristine")
alert(type='danger')
span.ion-close-circled(id='#email-error').
Your email is required.
.form-group
.col-sm-offset-2.col-sm-8
button.btn.btn-primary(type='submit', ng-disabled='doneWithFirst100HoursForm.$invalid')
span.ion-paper-airplane
| Submit

View File

@ -1,90 +0,0 @@
extends ../layout
block content
.jumbotron
.text-center
h1.nonprofit-landing.hug-top Get pro bono code for your nonprofit
.big-break
h2 Our process:
.row
.col-xs-12.col-sm-12.col-md-4
h3.nowrap Your idea
img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_portfolio.svg.gz', title='Get great references and connections to help you get a job')
p.landing-p You tell us how we can help you.
.col-xs-12.col-sm-12.col-md-4
h3.nowrap Our team
img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_nonprofits.svg.gz', title='Build a portfolio of apps for nonprofits')
p.landing-p We'll hand pick developers and a project manager.
.col-xs-12.col-sm-12.col-md-4
h3.nowrap Your solution
img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_connect.svg.gz', title='Help nonprofits')
p.landing-p Together we'll set milestones and complete your project.
.big-break
h2 Solutions we can help you build:
.text-center.negative-35
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-android-globe
h2.black-text Websites
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-card
h2.black-text Donation Systems
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-android-calendar
h2.black-text Volunteer Systems
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-ios-box
h2.black-text Inventory Systems
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-university
h2.black-text E-learning Platforms
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-ios-list
h2.black-text Web Forms
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-ios-people
h2.black-text Community Tools
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-settings
h2.black-text ...and other tools
br
br
.big-break
script.
challengeName = 'Home'
.big-break
h3 Fill in this form. We'll get back to you within 48 hours.
h4
form.form-horizontal(role='form', action="/nonprofits/", method='POST', novalidate='novalidate', name='nonprofitForm')
input(type='hidden', name='_csrf', value=_csrf)
.form-group
label(class='col-sm-2 control-label', for='name') Your name *
.col-sm-8
input.form-control(type='text', name='name', id='name', autocomplete="off", ng-model='name', required='required')
.col-sm-8.col-sm-offset-2(ng-cloak, ng-show="nonprofitForm.name.$invalid && nonprofitForm.name.$error.required && !nonprofitForm.name.$pristine")
alert(type='danger')
span.ion-close-circled(id='#name-error')
| Your name is required.
.form-group
label(class='col-sm-2 control-label', for='email') Your email *
.col-sm-8
input.form-control(type='text', name='email', id='email', autocomplete="off", ng-model='email', required='required')
.col-sm-8.col-sm-offset-2(ng-cloak, ng-show="nonprofitForm.email.$invalid && nonprofitForm.email.$error.required && !nonprofitForm.email.$pristine")
alert(type='danger')
span.ion-close-circled(id='#email-error').
Your email is required.
.form-group
label(class='col-sm-2 control-label', for='message') Briefly describe what problem you need to solve, and for whom. *
.col-sm-8
textarea.form-control(type='text', name='message', id='message', rows='7', autocomplete="off", ng-model='message', required='required')
.col-sm-8.col-sm-offset-2(ng-cloak, ng-show="nonprofitForm.message.$invalid && nonprofitForm.message.$error.required && !nonprofitForm.message.$pristine")
alert(type='danger')
span.ion-close-circled(id='#message-error')
| Your message is required.
.form-group
.col-sm-offset-2.col-sm-8
button.btn.btn-primary(type='submit', ng-disabled='nonprofitForm.$invalid')
span.ion-paper-airplane
| Submit
script.
var challengeName = 'Non-profit Interest'

View File

@ -1,12 +0,0 @@
extends ../layout
block content
.jumbotron.text-center
h1.hug-top Nonprofit Sign Up
include ../partials/nonprofit-application-progress-bar
h2 We build solutions for nonprofits who are already serving a need. Are there people who already benefit from your services?
.spacer
.row
.col-xs-6
a.btn.btn-primary.btn-big.btn-block(href='/nonprofits/ok-with-javascript') Yes
.col-xs-6
a.btn.btn-warning.btn-big.btn-block(href='/nonprofits/other-solutions') No

View File

@ -1,12 +0,0 @@
extends ../layout
block content
.jumbotron.text-center
h1.hug-top Nonprofit Sign Up
include ../partials/nonprofit-application-progress-bar
h2 Do you represent a nonprofit organization that is registered with your government?
.spacer
.row
.col-xs-6
a.btn.btn-primary.btn-big.btn-block(href='/nonprofits/are-there-people-that-are-already-benefiting-from-your-services') Yes
.col-xs-6
a.btn.btn-warning.btn-big.btn-block(href='/nonprofits/other-solutions') No

View File

@ -1,83 +0,0 @@
extends ../layout
block content
.jumbotron
.text-center
h2.nonprofit-landing.hug-top We'll code for your nonprofit, pro bono
.big-break
h2 Some of our success stories
.row
.col-xs-12.col-sm-12.col-md-4
img.img-responsive.testimonial-image.img-center(src="https://s3.amazonaws.com/freecodecamp/testimonial-jen.jpg", alt="@jenthebest's testimonial image")
.testimonial-copy Getting back on track with Free Code Camp and committing to a new career in 2015!
h3 - @jenbestyoga
.col-xs-12.col-sm-12.col-md-4
img.img-responsive.testimonial-image.img-center(src="https://s3.amazonaws.com/freecodecamp/testimonial-tate.jpg", alt="@TateThurston's testimonial image")
.testimonial-copy Just built my company's website with skills I've learned from Free Code Camp!
h3 - @TateThurston
.col-xs-12.col-sm-12.col-md-4
img.img-responsive.testimonial-image.img-center(src="https://s3.amazonaws.com/freecodecamp/testimonial-cynthia.jpg", alt="@cynthialanel's testimonial image")
.testimonial-copy I'm currently working through Free Code Camp to improve my JavaScript. The community is very welcoming!
h3 - @cynthialanel
.big-break
a.btn.btn-cta.signup-btn(href="/nonprofits/are-you-with-a-registered-nonprofit") Get pro bono help for my nonprofit
.big-break
h2 Our process
.row
.col-xs-12.col-sm-12.col-md-4
h3.nowrap Your idea
img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_portfolio.svg.gz', title='Get great references and connections to help you get a job')
p.landing-p You tell us how we can help you.
.col-xs-12.col-sm-12.col-md-4
h3.nowrap Our team
img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_nonprofits.svg.gz', title='Build a portfolio of apps for nonprofits')
p.landing-p We'll hand pick developers and a project manager.
.col-xs-12.col-sm-12.col-md-4
h3.nowrap Your solution
img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_connect.svg.gz', title='Help nonprofits')
p.landing-p Together we'll set milestones and complete your project.
.big-break
h2 Solutions we can help you build:
.text-center.negative-35
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-android-globe
h2.black-text Websites
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-card
h2.black-text Donation Systems
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-android-calendar
h2.black-text Volunteer Systems
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-ios-box
h2.black-text Inventory Systems
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-university
h2.black-text E-learning Platforms
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-ios-list
h2.black-text Web Forms
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-ios-people
h2.black-text Community Tools
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-settings
h2.black-text ...and other tools
br
br
.big-break
h2 Why you should join our community right now:
h3.col-xs-offset-0.col-sm-offset-1
ul.text-left
li.ion-code &thinsp; We're thousands of professionals, all learning to code together
li.ion-code &thinsp; We're building projects for dozens of nonprofits
li.ion-code &thinsp; Our community is 100% free and open source
li.ion-code &thinsp; You'll learn Full Stack JavaScript and become a Software Engineer
li.ion-code &thinsp; You'll work through our focused, interactive courses and tutorials
li.ion-code &thinsp; You'll learn to code at your own pace, in your browser or on your phone
li.ion-code &thinsp; You'll become qualified for thousands of jobs currently going unfilled
li.ion-code &thinsp; You can get help in real time from our community chat rooms and forum
li.ion-code &thinsp; We all share one common goal: to boost our careers with code
.big-break
a.btn.btn-cta.signup-btn(href="/nonprofits/are-you-with-a-registered-nonprofit") Get pro bono help for my nonprofit
script.
challengeName = 'Home'

View File

@ -1,33 +0,0 @@
extends ../layout
block content
.jumbotron.text-center
h1.hug-top Nonprofit Sign Up
include ../partials/nonprofit-application-progress-bar
h2 How can Free Code Camp help you?
.text-left.form-inline
h3.col-xs-12.col-sm-offset-5.checkbox-table
.col-xs-12
input.checkbox(type='checkbox', id='website')
label.ion-android-globe &nbsp; Websites
.col-xs-12
input.checkbox(type='checkbox', id='donation')
label.ion-card &nbsp; Donation Systems
.col-xs-12
input.checkbox(type='checkbox', id='volunteer')
label.ion-android-calendar &nbsp; Volunteer Systems
.col-xs-12
input.checkbox(type='checkbox', id='inventory')
label.ion-ios-box &nbsp; Inventory Systems
.col-xs-12
input.checkbox(type='checkbox', id='eLearning')
label.ion-university &nbsp; E-learning Platforms
.col-xs-12
input.checkbox(type='checkbox', id='form')
label.ion-ios-list &nbsp; Web Forms
.col-xs-12
input.checkbox(type='checkbox', id='community')
label.ion-ios-people &nbsp; Community Tools
.col-xs-12
input.checkbox(type='checkbox', id='other')
label.ion-settings &nbsp; Other tools
button#next-step.btn.btn-primary.btn-big.btn-block(type='submit') I've selected all that apply and am ready to move on

View File

@ -1,17 +0,0 @@
extends ../layout
block content
.jumbotron
h1.hug-top.text-center Nonprofit Sign Up
include ../partials/nonprofit-application-progress-bar
h2 Great! In exchange for our help, we ask only that you:
h3
ol
li Appoint one principal stakeholder to serve on behalf of your organization.
li Communicate with our campers on a regular basis, to answer questions and provide them with direction.
li Commit to using the solution that our campers build for your nonprofit.
.spacer
.row
.col-xs-6
a.btn.btn-primary.btn-big.btn-block(href='/nonprofits/how-can-free-code-camp-help-you') Sounds good!
.col-xs-6
a.btn.btn-warning.btn-big.btn-block(href='/nonprofits/other-solutions') This might not be for us.

View File

@ -1,14 +0,0 @@
extends ../layout
block content
.jumbotron.text-center
h1.hug-top Nonprofit Sign Up
include ../partials/nonprofit-application-progress-bar
h2 Link us to the website, blog, or social media page that best represents your organization.
.spacer
form(role='form', method='GET', action="/nonprofits/tell-us-your-email/?" + existingParams)
input(type='hidden', name='_csrf', value=_csrf)
.formgroup
.input-group
input.form-control.big-text-field.field-responsive(type='text', name='link', autocomplete='off', maxlength='500', autofocus='')
span.input-group-btn
button.btn.btn-big.btn-primary.btn-responsive Submit

View File

@ -1,12 +0,0 @@
extends ../layout
block content
.jumbotron.text-center
h1.hug-top Nonprofit Sign Up
include ../partials/nonprofit-application-progress-bar
h2 Our campers are learning to code using modern full stack JavaScript technologies like Node.js. We do not build or maintain Wordpress, Drupal, or other non-JavaScript based frameworks.
.spacer
.row
.col-xs-6
a.btn.btn-primary.btn-big.btn-block(href='/nonprofits/in-exchange-we-ask') Sounds good!
.col-xs-6
a.btn.btn-warning.btn-big.btn-block(href='/nonprofits/other-solutions') This might not be for us.

View File

@ -1,14 +0,0 @@
extends ../layout
block content
.jumbotron.text-center
h1.hug-top Nonprofit Sign Up
include ../partials/nonprofit-application-progress-bar
h2 Please tell us your email
.spacer
form(role='form', method='GET', novalidate='novalidate', name='nonprofitForm', action="/nonprofits/tell-us-your-name/")
input(type='hidden', name='_csrf', value=_csrf)
.formgroup
.input-group
input.form-control.big-text-field.field-responsive(type='text', name='email', autocomplete='off', maxlength='500', autofocus='')
span.input-group-btn
button.btn.btn-big.btn-primary.btn-responsive Submit

View File

@ -1,13 +0,0 @@
extends ../layout
block content
.jumbotron.text-center
h1.hug-top Nonprofit Sign Up
include ../partials/nonprofit-application-progress-bar
h2 Please tell us your name
.spacer
form(role='form', method='POST', novalidate='novalidate', name='nonprofitForm', action="/nonprofits/finish-application/")
.formgroup
.input-group
input.form-control.big-text-field.field-responsive(type='text', name='name', autocomplete='off', maxlength='140', autofocus='')
span.input-group-btn
button.btn.btn-big.btn-primary.btn-responsive Submit

View File

@ -1,28 +0,0 @@
extends ../layout
block content
.jumbotron.text-center
h1.hug-top Nonprofit Sign Up
include ../partials/nonprofit-application-progress-bar
h2 In 140 characters or less, what does your nonprofit do? For whom?
.spacer
form(role='form', method='GET', action="/nonprofits/link-us-to-your-website/")
input(type='hidden', name='_csrf', value=_csrf)
.formgroup
.input-group
input.form-control.big-text-field.field-responsive#what-does-the-nonprofit-do(type='text', maxlength='140', autofocus='', autocomplete='off', name='mission')
span.input-group-btn
button.btn.btn-big.btn-primary.btn-responsive(href='/nonprofits/link-us-to-your-website') Submit
.text-left
span#what-does-the-nonprofit-do-feedback
script.
var text_max = 140;
$('#what-does-the-nonprofit-do-feedback').html(text_max + ' characters remaining');
$('#what-does-the-nonprofit-do').keyup(function (e) {
if (e.which === 13 || e === 13) {
$('#submit-comment-to-comment').click();
}
var text_length = $('#what-does-the-nonprofit-do').val().length;
var text_remaining = text_max - text_length;
$('#what-does-the-nonprofit-do-feedback').html(text_remaining + ' characters remaining');
});

View File

@ -1,6 +0,0 @@
extends ../layout
block content
.jumbotron.text-center
h1.hug-top Nonprofit Sign Up
include ../partials/nonprofit-application-progress-bar
h2 Thank you for reaching out to us. Well send you an email no later than #{getBackDay}.

View File

@ -0,0 +1,28 @@
html.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<!--Add the title of your typeform below-->
<title>nonprofit-projects</title>
<!--CSS styles that ensure your typeform takes up all the available screen space (DO NOT EDIT!)-->
<style type="text/css">
html{
margin: 0;
height: 100%;
overflow: hidden;
}
iframe{
position: absolute;
left:0;
right:0;
bottom:0;
top:0;
border:0;
}
</style>
</head>
<body>
<iframe id="typeform-full" width="100%" height="100%" frameborder="0" src="https://freecodecamp.typeform.com/to/JxMS5a"></iframe>
<script type="text/javascript" src="https://s3-eu-west-1.amazonaws.com/share.typeform.com/embed.js"></script>
</body>
</html>

View File

@ -0,0 +1,55 @@
extends ../layout
block content
.jumbotron
.text-center
.row
.col-xs-12
h1.nonprofit-landing.hug-top Get pro bono code for your nonprofit
.big-break
.col-xs-12.col-sm-12.col-md-12
.embed-responsive.embed-responsive-16by9
iframe.embed-responsive-item(src='https://www.youtube.com/embed/KOs0m_AhkXA')
.big-break
h2 Our process:
.row
.col-xs-12.col-sm-12.col-md-4
h3.nowrap Your idea
img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_portfolio.svg.gz', alt='Image of a briefcase')
p.landing-p You tell us how we can help you.
.col-xs-12.col-sm-12.col-md-4
h3.nowrap Our team
img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_nonprofits.svg.gz', alt='Image of people putting their hands together in a huddle')
p.landing-p We'll hand pick developers and a project manager.
.col-xs-12.col-sm-12.col-md-4
h3.nowrap Your solution
img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_connect.svg.gz', alt='image of two people high-fiving')
p.landing-p Together we'll set milestones and complete your project.
.big-break
h2 Solutions we can help you build:
.text-center.negative-35
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-android-globe
h2.black-text Websites
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-card
h2.black-text Donation Systems
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-android-calendar
h2.black-text Volunteer Systems
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-ios-box
h2.black-text Inventory Systems
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-university
h2.black-text E-learning Platforms
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-ios-list
h2.black-text Paperless Workflows
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-ios-people
h2.black-text Community Tools
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-settings
h2.black-text ...and other tools
.big-break
a.btn.btn-cta.signup-btn.btn-block(href="/nonprofits-form") My nonprofit needs coding help

View File

@ -0,0 +1,29 @@
html.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<!--Add the title of your typeform below-->
<title>PMI-ACP</title>
<!--CSS styles that ensure your typeform takes up all the available screen space (DO NOT EDIT!)-->
<style type="text/css">
html{
margin: 0;
height: 100%;
overflow: hidden;
}
iframe{
position: absolute;
left:0;
right:0;
bottom:0;
top:0;
border:0;
}
</style>
</head>
<body>
<iframe id="typeform-full" width="100%" height="100%" frameborder="0" src="https://freecodecamp.typeform.com/to/MhH9mp"></iframe>
<script type="text/javascript" src="https://s3-eu-west-1.amazonaws.com/share.typeform.com/embed.js"></script>
</body>
</html>

View File

@ -0,0 +1,55 @@
extends ../layout
block content
.jumbotron
.text-center
.row
.col-xs-12
h1.nonprofit-landing.hug-top Get Agile Project Management Experience for the PMI-ACP by Helping Nonprofits
.big-break
.col-xs-12.col-sm-12.col-md-12
.embed-responsive.embed-responsive-16by9
iframe.embed-responsive-item(src='https://www.youtube.com/embed/KOs0m_AhkXA')
.big-break
h2 Your opportunity:
.row
.col-xs-12.col-sm-12.col-md-4
h3.nowrap Plan Projects
img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_portfolio.svg.gz', alt='Image of a briefcase')
p.landing-p You'll triage deliverables and set deadlines.
.col-xs-12.col-sm-12.col-md-4
h3.nowrap Manage Teams
img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_nonprofits.svg.gz', alt='Image of people putting their hands together in a huddle')
p.landing-p You'll lead two developers and a nonprofit stakeholder to success.
.col-xs-12.col-sm-12.col-md-4
h3.nowrap Become a PMI-ACP
img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_connect.svg.gz', alt='image of two people high-fiving')
p.landing-p You'll learn Agile, get references, and qualify for the PMI-ACP.
.big-break
h2 Solutions you'll help nonprofits build:
.text-center.negative-35
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-android-globe
h2.black-text Websites
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-card
h2.black-text Donation Systems
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-android-calendar
h2.black-text Volunteer Systems
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-ios-box
h2.black-text Inventory Systems
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-university
h2.black-text E-learning Platforms
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-ios-list
h2.black-text Paperless Workflows
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-ios-people
h2.black-text Community Tools
.col-xs-12.col-sm-12.col-md-3
.landing-skill-icon.ion-settings
h2.black-text ...and other tools
.big-break
a.btn.btn-cta.signup-btn.btn-block(href="/pmi-acp-agile-project-managers-form") I want to lead agile projects for nonprofits