+ Coding Bootcamp

Program Overview

Learn to code at Cumorah Academy. In 12 weeks, you’ll learn to build fully-fledged websites and web apps, including HTML, CSS, Javascript, Node, React and MongoDB. At the conclusion of the course, you’ll learn how to start your own freelancing business. 

Top performing students will have the opportunity to build their resume in a paid software engineering internship.

No programming experience is needed to succeed, but this is a demanding course (5 – 6 hours of intensive learning, 5 days a week), so you should only apply if you’re fully committed.

Students enrolled in the Coding Bootcamp will also take the Cumorah Academy Leadership & Personal Development Program simultaneously.


  1. B2+ Level of English or better
  2. Your own Laptop (less than 4 years old)



  • Preview
  • The 12 Rules to Learn to Code


  • Introduction to HTML
  • Using HTML Tags
  • The Anatomy of an HTML Tag
  • What we’re building – HTML Personal Site
  • What is The HTML Boilerplate?
  • How to Structure Text in HTML
  • HTML Lists
  • HTML Image Elements
  • HTML Links and Anchor Tags
  • HTML Tables
  • Using HTML Tables for Layout
  • How to Type Emojis
  • HTML Forms
  • Publish Your Website!


  • Inline CSS
  • Internal CSS
  • External CSS
  • How to Debug CSS Code
  • The Anatomy of CSS Syntax
  • CSS Selectors
  • Classes vs. Ids
  • What Are Favicons?
  • HTML Divs
  • The Box Model of Website Styling
  • CSS Display Property
  • More About Web Design
  • CSS Static and Relative Positioning
  • Absolute positioning
  • The Dark Art of Centering Elements with CSS
  • Font Styling in Our Personal Site
  • Learn More About Typography
  • Adding Content to Our Website
  • CSS Sizing
  • CSS Float and Clear


  • What is Bootstrap?
  • Installing Bootstrap
  • Web Design 101 – Wireframing
  • The Bootstrap Navigation Bar
  • Setting Up Our New Project
  • Bootstrap Grid Layout System
  • Getting Montserrat Black and other Font Weights
  • Adding Grid Layouts to Our Website
  • A Note About CSS Link Order
  • Bootstrap Containers
  • Bootstrap Buttons & Font Awesome
  • Styling Our Website Challenges and Solutions
  • The Bootstrap Carousel Part 1
  • The Bootstrap Carousel Part 2
  • Bootstrap Cards
  • The CSS Z-Index and Stacking Order
  • Media Query Breakpoints
  • How to become a Better Programmer – Code Refactoring
  • Put it into Practice – Refactor our Website Part 1
  • Advanced CSS – Combining Selectors
  • Refactoring our Website Part 2
  • Advanced CSS – Selector Priority
  • Completing the Website
  • Download the Completed Website
  • Tip from Angela – Building a Programming Habit

Web Design – Create a Website People Love

  • Understanding Colour Theory
  • Understanding Typography and How to Choose a Font
  • User Experience (UX) Design
  • Web Design in Practice – Let’s apply what we’ve learnt!


  • Introduction to Javascript
  • Javascript Alerts – Adding Behaviour to Websites
  • Data Types
  • Javascript Variables
  • Naming and Naming Conventions for Javascript Variables
  • String Concatenation
  • String Lengths and Retrieving the Number of Characters
  • Basic Arithmetic and the Modulo Operator in Javascript
  • Increment and Decrement Expressions
  • Functions Part 1: Creating and Calling Functions
  • The Karel Chess Board Solution
  • Functions Part 2: Parameters and Arguments
  • Functions Part 3: Outputs & Return Values
  • Random Number Generation in Javascript: Building a Love Calculator
  • Control Statements: Using If-Else Conditionals & Logic
  • Comparators and Equality
  • Combining Comparators
  • BMI Calculator Advanced (IF/ELSE)
  • Working with Javascript Arrays
  • Adding Elements and Intermediate Array Techniques
  • Control Statements: While Loops
  • Adding Javascript to Websites

The Document Object Model

  • Introduction to the Document Object Model (DOM)
  • Selecting HTML Elements with Javascript
  • Manipulating and Changing Styles of HTML Elements with Javascript
  • The Separation of Concerns: Structure vs Style vs Behaviour
  • Text Manipulation and the Text Content Property
  • Manipulating HTML Element Attributes

Advanced Javascript and DOM Manipulation

  • Adding Event Listeners to a Button
  • Higher Order Functions and Passing Functions as Arguments
  • How to Play Sounds on a Website
  • A Deeper Understanding of Javascript Objects
  • How to Use Switch Statements in Javascript
  • Objects, their Methods and the Dot Notation
  • Using Keyboard Event Listeners to Check for Key Presses
  • Understanding Callbacks and How to Respond to Events
  • Adding Animation to Websites


  • What is jQuery?
  • How to Incorporate jQuery into Websites
  • How Minification Works to Reduce File Size
  • Selecting Elements with jQuery
  • Manipulating Styles with jQuery
  • Manipulating Text with jQuery
  • Manipulating Attributes with jQuery
  • Adding Event Listeners with jQuery
  • Adding and Removing Elements with jQuery
  • Website Animations with jQuery

The Unix Command Line

  • Installing the Hyper Terminal
  • Command Line Hyper Setup
  • Understanding the Command Line. Long Live the Command Line!
  • Command Line Techniques and Directory Navigation
  • Creating, Opening, and Removing Files through the Command Line

Backend Web Development

  • Backend Web Development Explained


  • Install Node.js on Mac
  • Install Node.js on Windows
  • The Power of the Command Line and How to Use Node
  • The Node REPL (Read Evaluation Print Loops)
  • How to Use the Native Node Modules
  • The NPM Package Manager and Installing External Node Modules

Express.js with Node.js

  • What is Express?
  • Creating Our First Server with Express
  • Handling Requests and Responses: the GET Request
  • Nodemon Installation
  • Understanding and Working with Routes
  • Responding to Requests with HTML Files
  • Processing Post Requests with Body Parser

APIs – Application Programming Interfaces

  • Why Do We Need APIs?
  • API Endpoints, Paths and Parameters.
  • API Authentication and Postman
  • What is JSON?
  • Making GET Requests with the Node HTTPS Module
  • How to Parse JSON
  • Using Express to Render a Website with Live API Data
  • Using Body Parser to Parse POST Requests to the Server
  • Adding Success and Failure Pages
  • Deploying Your Server with Heroku

Git, Github and Version Control

  • Introduction to Version Control and Git
  • Version Control Using Git and the Command Line
  • GitHub and Remote Repositories
  • GitHub Private Repos are now Free! ?
  • Gitignore
  • Cloning
  • Branching and Merging
  • Optional Git Challenge
  • Forking and Pull Requests


  • Linter Errors with EJS
  • Templates? Why Do We Need Templates?
  • Creating Your First EJS Templates
  • Running Code Inside the EJS Template
  • Passing Data from Your Webpage to Your Server
  • The Concept of Scope in the Context of Javascript
  • Adding Pre-Made CSS Stylesheets to Your Website
  • Understanding Templating vs. Layouts
  • Understanding Node Module Exports: How to Pass Functions and Data between Files


  • Databases Explained SQL vs. NOSQL


  • SQL Commands: CREATE Table and INSERT Data
  • SQL Commands: READ, SELECT, and WHERE
  • Updating Single Values and Adding Columns in SQL
  • SQL Commands: DELETE
  • Understanding SQL Relationships, Foreign Keys and Inner Joins


  • MongoDB on Mac
  • Installing MongoDB on Windows
  • MongoDB CRUD Operations in the Shell: Create
  • MongoDB CRUD Operations in the Shell: Reading & Queries
  • MongoDB CRUD Operations in the Shell: Update
  • MongoDB CRUD Operations in the Shell: Delete
  • Relationships in MongoDB
  • Working with The Native MongoDB Driver
  • If You Have Forgotten to Quit the MongoDB Server


  • Introduction to Mongoose
  • Reading from Your Database with Mongoose
  • Data Validation with Mongoose
  • Updating and Deleting Data Using Mongoose
  • Establishing Relationships and Embedding Documents using Mongoose

Deploying Your Web Application

  • How to Deploy Web Apps with a Database
  • How to Setup MongoDB Atlas
  • Deploying an App with a Database to Heroku

Authentication & Security

  • Introduction to Authentication
  • Getting Set Up
  • Level 1 – Register Users with Username and Password
  • How to Review the Source Code
  • Level 2 – Database Encryption
  • Using Environment Variables to Keep Secrets Safe
  • Level 3 – Hashing Passwords
  • Hacking 101
  • Level 4 – Salting and Hashing Passwords with bcrypt
  • What are Cookies and Sessions?
  • Using Passport.js to Add Cookies and Sessions
  • Level 6 – OAuth 2.0 & How to Implement Sign In with Google
  • Finishing Up the App – Letting Users Submit Secrets


  • What is React?
  • What we will make in this React module
  • Introduction to Code Sandbox and the Structure of the Module
  • Introduction to JSX and Babel
  • JSX Code Practice
  • Javascript Expressions in JSX & ES6 Template Literals
  • Javascript Expressions in JSX Practice
  • JSX Attributes & Styling React Elements
  • Inline Styling for React Elements
  • React Styling Practice
  • React Components
  • React Components Practice
  • Javascript ES6 – Import, Export and Modules
  • Javascript ES6 Import, Export and Modules Practice
  • [Windows]​ Local Environment Setup for React Development
  • [Mac] Local Environment Setup for React Development​
  • Newer Versions of Node Troubleshooting
  • React Props
  • React Props Practice
  • React DevTools
  • Mapping Data to Components
  • Javascript ES6 Map/Filter/Reduce
  • Javascript ES6 Arrow functions
  • React Conditional Rendering with the Ternary Operator & AND Operator
  • State in React – Declarative vs. Imperative Programming
  • React Hooks – useState
  • useState Hook Practice
  • Javascript ES6 Object & Array Destructuring
  • Javascript ​ES6 Destructuring Challenge Solution
  • Event Handling in React
  • React Forms
  • Class Components vs. Functional Components
  • Changing Complex State
  • Changing Complex State Practice
  • Javascript ES6 Spread Operator
  • Javascript ES6 Spread Operator Practice
  • Managing a Component Tree
  • Managing a Component Tree Practice
  • Keeper App Project – Part 3
  • React Dependencies & Styling the Keeper App

Web3 – Decentralized App (DApp) Development with the Internet Computer

  • What is Web3?
  • How does the Blockchain actually work?
  • What is the Internet Computer (ICP)?
  • [Mac Users] Installation and Setup for Web3 Development
  • [Windows Users] Installation and Setup for Web3 Development
  • Introduction to the Motoko Language
  • Motoko Functions and the Candid User Interface
  • Motoko Conditionals and Type Annotations
  • Query vs. Update Methods
  • Orthogonal Persistance
  • Tracking Time and Calculating Compound Interest
  • Connecting the Motoko Backend to our JS Frontend
  • Where to Get Help and Support for Development on the Internet Computer

Deploying to the ICP Live Blockchain

  • What are Cycles and the ICP Token?
  • No Cycles, No Problems!
  • How to Claim Free Cycles from Dfinity
  • How to Deploy to the ICP Network
  • How to Convert ICP into Cycles?
  • [Optional] How to Deploy a Static Website onto the ICP Blockchain for Hosting

Building DApps on ICP with a Reach Frontend

How to Configure a DFX Created Project to Use React

Storing Data on a Canister

Retrieving Data from a Canister

Deleting and Persistance