CINXE.COM

Full Stack JavaScript Bootcamp | Treehouse Techdegree

<!DOCTYPE html> <html lang="en" class="marketing_2020-layout landing-pages-show landing-pages-controller show-action visitor ie7 ie lt-ie11 lt-ie10 lt-ie9 lt-ie8 windows" id="layout" data-featurette="marketing_2020-layout" > <head> <title>Full Stack JavaScript Bootcamp | Treehouse Techdegree</title> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","errorBeacon":"bam.nr-data.net","licenseKey":"d98036d1cc","applicationID":"1824378","transactionName":"cQ5eRRQNCQ8BFhZVVkAKVUUPDAJMCAVXXF5cBm9BBwUAEEsXUVdA","queueTime":0,"applicationTime":777,"agent":""}</script> <script type="text/javascript">(window.NREUM||(NREUM={})).init={privacy:{cookies_enabled:true},ajax:{deny_list:[]}};(window.NREUM||(NREUM={})).loader_config={xpid:"VwIBVldWGwIIVlVRAAk=",licenseKey:"d98036d1cc",applicationID:"1824378"};;/*! For license information please see nr-loader-full-1.283.2.min.js.LICENSE.txt */ (()=>{var e,t,r={8122:(e,t,r)=>{"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),o=0===Object.keys(r).length?e:r;for(let a in o)if(void 0!==e[a])try{if(null===e[a]){r[a]=null;continue}Array.isArray(e[a])&&Array.isArray(t[a])?r[a]=Array.from(new Set([...e[a],...t[a]])):"object"==typeof e[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555:(e,t,r)=>{"use strict";r.d(t,{Vp:()=>c,fn:()=>s,x1:()=>u});var n=r(384),i=r(8122);const o={beacon:n.NT.beacon,errorBeacon:n.NT.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0},a={};function s(e){try{const t=c(e);return!!t.licenseKey&&!!t.errorBeacon&&!!t.applicationID}catch(e){return!1}}function c(e){if(!e)throw new Error("All info objects require an agent identifier!");if(!a[e])throw new Error("Info for ".concat(e," was never set"));return a[e]}function u(e,t){if(!e)throw new Error("All info objects require an agent identifier!");a[e]=(0,i.a)(t,o);const r=(0,n.nY)(e);r&&(r.info=a[e])}},9417:(e,t,r)=>{"use strict";r.d(t,{D0:()=>h,gD:()=>p,xN:()=>g});var n=r(3333);const i=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var o=r(2614),a=r(944),s=r(384),c=r(8122);const u="[data-nr-mask]",d=()=>{const e={feature_flags:[],experimental:{marks:!1,measures:!1,resources:!1},mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{ajax:{deny_list:void 0,block_internal:!0,enabled:!0,autoStart:!0},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},get feature_flags(){return e.feature_flags},set feature_flags(t){e.feature_flags=t},generic_events:{enabled:!0,autoStart:!0},harvest:{interval:30},jserrors:{enabled:!0,autoStart:!0},logging:{enabled:!0,autoStart:!0},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,autoStart:!0},performance:{get capture_marks(){return e.feature_flags.includes(n.$v.MARKS)||e.experimental.marks},set capture_marks(t){e.experimental.marks=t},get capture_measures(){return e.feature_flags.includes(n.$v.MEASURES)||e.experimental.measures},set capture_measures(t){e.experimental.measures=t},capture_detail:!0,resources:{get enabled(){return e.feature_flags.includes(n.$v.RESOURCES)||e.experimental.resources},set enabled(t){e.experimental.resources=t},asset_types:[],first_party_domains:[],ignore_newrelic:!0}},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:o.wk,inactiveMs:o.BB},session_replay:{autoStart:!0,enabled:!1,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inline_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){i(t)?e.mask_selector="".concat(t,",").concat(u):""===t||null===t?e.mask_selector=u:(0,a.R)(5,t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){i(t)?e.block_selector+=",".concat(t):""!==t&&(0,a.R)(6,t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,a.R)(7,t)}},session_trace:{enabled:!0,autoStart:!0},soft_navigations:{enabled:!0,autoStart:!0},spa:{enabled:!0,autoStart:!0},ssl:void 0,user_actions:{enabled:!0,elementAttributes:["id","className","tagName","type"]}}},l={},f="All configuration objects require an agent identifier!";function h(e){if(!e)throw new Error(f);if(!l[e])throw new Error("Configuration for ".concat(e," was never set"));return l[e]}function g(e,t){if(!e)throw new Error(f);l[e]=(0,c.a)(t,d());const r=(0,s.nY)(e);r&&(r.init=l[e])}function p(e,t){if(!e)throw new Error(f);var r=h(e);if(r){for(var n=t.split("."),i=0;i<n.length-1;i++)if("object"!=typeof(r=r[n[i]]))return;r=r[n[n.length-1]]}return r}},5603:(e,t,r)=>{"use strict";r.d(t,{a:()=>c,o:()=>s});var n=r(384),i=r(8122);const o={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0},a={};function s(e){if(!e)throw new Error("All loader-config objects require an agent identifier!");if(!a[e])throw new Error("LoaderConfig for ".concat(e," was never set"));return a[e]}function c(e,t){if(!e)throw new Error("All loader-config objects require an agent identifier!");a[e]=(0,i.a)(t,o);const r=(0,n.nY)(e);r&&(r.loader_config=a[e])}},3371:(e,t,r)=>{"use strict";r.d(t,{V:()=>f,f:()=>l});var n=r(8122),i=r(384),o=r(6154),a=r(9324);let s=0;const c={buildEnv:a.F3,distMethod:a.Xs,version:a.xv,originTime:o.WN},u={customTransaction:void 0,disabled:!1,isolatedBacklog:!1,loaderType:void 0,maxBytes:3e4,onerror:void 0,ptid:void 0,releaseIds:{},appMetadata:{},session:void 0,denyList:void 0,timeKeeper:void 0,obfuscator:void 0,harvester:void 0},d={};function l(e){if(!e)throw new Error("All runtime objects require an agent identifier!");if(!d[e])throw new Error("Runtime for ".concat(e," was never set"));return d[e]}function f(e,t){if(!e)throw new Error("All runtime objects require an agent identifier!");d[e]={...(0,n.a)(t,u),...c},Object.hasOwnProperty.call(d[e],"harvestCount")||Object.defineProperty(d[e],"harvestCount",{get:()=>++s});const r=(0,i.nY)(e);r&&(r.runtime=d[e])}},9324:(e,t,r)=>{"use strict";r.d(t,{F3:()=>i,Xs:()=>o,Yq:()=>a,xv:()=>n});const n="1.283.2",i="PROD",o="CDN",a="^2.0.0-alpha.17"},6154:(e,t,r)=>{"use strict";r.d(t,{OF:()=>u,RI:()=>i,WN:()=>f,bv:()=>o,gm:()=>a,lR:()=>l,m:()=>c,mw:()=>s,sb:()=>d});var n=r(1863);const i="undefined"!=typeof window&&!!window.document,o="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),a=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),s=Boolean("hidden"===a?.document?.visibilityState),c=""+a?.location,u=/iPad|iPhone|iPod/.test(a.navigator?.userAgent),d=u&&"undefined"==typeof SharedWorker,l=(()=>{const e=a.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);return Array.isArray(e)&&e.length>=2?+e[1]:0})(),f=Date.now()-(0,n.t)()},7295:(e,t,r)=>{"use strict";r.d(t,{Xv:()=>a,gX:()=>i,iW:()=>o});var n=[];function i(e){if(!e||o(e))return!1;if(0===n.length)return!0;for(var t=0;t<n.length;t++){var r=n[t];if("*"===r.hostname)return!1;if(s(r.hostname,e.hostname)&&c(r.pathname,e.pathname))return!1}return!0}function o(e){return void 0===e.hostname}function a(e){if(n=[],e&&e.length)for(var t=0;t<e.length;t++){let r=e[t];if(!r)continue;0===r.indexOf("http://")?r=r.substring(7):0===r.indexOf("https://")&&(r=r.substring(8));const i=r.indexOf("/");let o,a;i>0?(o=r.substring(0,i),a=r.substring(i)):(o=r,a="");let[s]=o.split(":");n.push({hostname:s,pathname:a})}}function s(e,t){return!(e.length>t.length)&&t.indexOf(e)===t.length-e.length}function c(e,t){return 0===e.indexOf("/")&&(e=e.substring(1)),0===t.indexOf("/")&&(t=t.substring(1)),""===e||e===t}},1687:(e,t,r)=>{"use strict";r.d(t,{Ak:()=>c,Ze:()=>l,x3:()=>u});var n=r(7836),i=r(3606),o=r(860),a=r(2646);const s={};function c(e,t){const r={staged:!1,priority:o.P3[t]||0};d(e),s[e].get(t)||s[e].set(t,r)}function u(e,t){e&&s[e]&&(s[e].get(t)&&s[e].delete(t),h(e,t,!1),s[e].size&&f(e))}function d(e){if(!e)throw new Error("agentIdentifier required");s[e]||(s[e]=new Map)}function l(e="",t="feature",r=!1){if(d(e),!e||!s[e].get(t)||r)return h(e,t);s[e].get(t).staged=!0,f(e)}function f(e){const t=Array.from(s[e]);t.every((([e,t])=>t.staged))&&(t.sort(((e,t)=>e[1].priority-t[1].priority)),t.forEach((([t])=>{s[e].delete(t),h(e,t)})))}function h(e,t,r=!0){const o=e?n.ee.get(e):n.ee,s=i.i.handlers;if(!o.aborted&&o.backlog&&s){if(r){const e=o.backlog[t],r=s[t];if(r){for(let t=0;e&&t<e.length;++t)g(e[t],r);Object.entries(r).forEach((([e,t])=>{Object.values(t||{}).forEach((t=>{t[0]?.on&&t[0]?.context()instanceof a.y&&t[0].on(e,t[1])}))}))}}o.isolatedBacklog||delete s[t],o.backlog[t]=null,o.emit("drain-"+t,[])}}function g(e,t){var r=e[1];Object.values(t[r]||{}).forEach((t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],o=e[2];n.apply(i,o)}}))}},7836:(e,t,r)=>{"use strict";r.d(t,{P:()=>c,ee:()=>u});var n=r(384),i=r(8990),o=r(3371),a=r(2646),s=r(5607);const c="nr@context:".concat(s.W),u=function e(t,r){var n={},s={},d={},l=!1;try{l=16===r.length&&(0,o.f)(r).isolatedBacklog}catch(e){}var f={on:g,addEventListener:g,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)},emit:function(e,r,n,i,o){!1!==o&&(o=!0);if(u.aborted&&!i)return;t&&o&&t.emit(e,r,n);for(var a=h(n),c=p(e),d=c.length,l=0;l<d;l++)c[l].apply(a,r);var g=v()[s[e]];g&&g.push([f,e,r,a]);return a},get:m,listeners:p,context:h,buffer:function(e,t){const r=v();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach((([e,n])=>{s[n]=t,t in r||(r[t]=[])}))},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach((e=>{delete f.backlog[e]}))},isBuffering:function(e){return!!v()[s[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function h(e){return e&&e instanceof a.y?e:e?(0,i.I)(e,c,(()=>new a.y(c))):new a.y(c)}function g(e,t){n[e]=p(e).concat(t)}function p(e){return n[e]||[]}function m(t){return d[t]=d[t]||e(f,t)}function v(){return f.backlog}}(void 0,"globalEE"),d=(0,n.Zm)();d.ee||(d.ee=u)},2646:(e,t,r)=>{"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},9908:(e,t,r)=>{"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).ee.get("handle");function i(e,t,r,i,o){o?(o.buffer([e],i),o.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},3606:(e,t,r)=>{"use strict";r.d(t,{i:()=>o});var n=r(9908);o.on=a;var i=o.handlers={};function o(e,t,r,o){a(o||n.d,i,e,t,r)}function a(e,t,r,i,o){o||(o="feature"),e||(e=n.d);var a=t[o]=t[o]||{};(a[r]=a[r]||[]).push([e,i])}},3878:(e,t,r)=>{"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function o(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>o,jT:()=>n,sp:()=>i})},5607:(e,t,r)=>{"use strict";r.d(t,{W:()=>n});const n=(0,r(9566).bz)()},9566:(e,t,r)=>{"use strict";r.d(t,{LA:()=>s,ZF:()=>c,bz:()=>a,el:()=>u});var n=r(6154);const i="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function o(e,t){return e?15&e[t]:16*Math.random()|0}function a(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),i.split("").map((e=>"x"===e?o(t,r++).toString(16):"y"===e?(3&o()|8).toString(16):e)).join("")}function s(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,i=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const a=[];for(var s=0;s<e;s++)a.push(o(r,i++).toString(16));return a.join("")}function c(){return s(16)}function u(){return s(32)}},2614:(e,t,r)=>{"use strict";r.d(t,{BB:()=>a,H3:()=>n,g:()=>u,iL:()=>c,tS:()=>s,uh:()=>i,wk:()=>o});const n="NRBA",i="SESSION",o=144e5,a=18e5,s={STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},c={SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},u={OFF:0,FULL:1,ERROR:2}},1863:(e,t,r)=>{"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},7485:(e,t,r)=>{"use strict";r.d(t,{D:()=>i});var n=r(6154);function i(e){if(0===(e||"").indexOf("data:"))return{protocol:"data"};try{const t=new URL(e,location.href),r={port:t.port,hostname:t.hostname,pathname:t.pathname,search:t.search,protocol:t.protocol.slice(0,t.protocol.indexOf(":")),sameOrigin:t.protocol===n.gm?.location?.protocol&&t.host===n.gm?.location?.host};return r.port&&""!==r.port||("http:"===t.protocol&&(r.port="80"),"https:"===t.protocol&&(r.port="443")),r.pathname&&""!==r.pathname?r.pathname.startsWith("/")||(r.pathname="/".concat(r.pathname)):r.pathname="/",r}catch(e){return{}}}},944:(e,t,r)=>{"use strict";function n(e,t){"function"==typeof console.debug&&console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t)}r.d(t,{R:()=>n})},5284:(e,t,r)=>{"use strict";r.d(t,{t:()=>c,B:()=>s});var n=r(7836),i=r(6154);const o="newrelic";const a=new Set,s={};function c(e,t){const r=n.ee.get(t);s[t]??={},e&&"object"==typeof e&&(a.has(t)||(r.emit("rumresp",[e]),s[t]=e,a.add(t),function(e={}){try{i.gm.dispatchEvent(new CustomEvent(o,{detail:e}))}catch(e){}}({loaded:!0})))}},8990:(e,t,r)=>{"use strict";r.d(t,{I:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},6389:(e,t,r)=>{"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout((()=>{i=clearTimeout(i)}),t)),n||(clearTimeout(i),i=setTimeout((()=>{e.apply(this,r)}),t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},3304:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var n=r(7836);const i=()=>{const e=new WeakSet;return(t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r}};function o(e){try{return JSON.stringify(e,i())??""}catch(e){try{n.ee.emit("internal-error",[e])}catch(e){}return""}}},5289:(e,t,r)=>{"use strict";r.d(t,{GG:()=>o,sB:()=>a});var n=r(3878);function i(){return"undefined"==typeof document||"complete"===document.readyState}function o(e,t){if(i())return e();(0,n.sp)("load",e,t)}function a(e){if(i())return e();(0,n.DD)("DOMContentLoaded",e)}},384:(e,t,r)=>{"use strict";r.d(t,{NT:()=>o,US:()=>d,Zm:()=>a,bQ:()=>c,dV:()=>s,nY:()=>u,pV:()=>l});var n=r(6154),i=r(1863);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function a(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function s(){let e=a();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket}),e}function c(e,t){let r=a();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t}function u(e){let t=a();return t.initializedAgents?.[e]}function d(e,t){a()[e]=t}function l(){return function(){let e=a();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=a();const t=e.init||{};e.init={...t}}(),s(),function(){let e=a();const t=e.loader_config||{};e.loader_config={...t}}(),a()}},2843:(e,t,r)=>{"use strict";r.d(t,{u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",(function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)}),r,i)}},8139:(e,t,r)=>{"use strict";r.d(t,{u:()=>f});var n=r(7836),i=r(3434),o=r(8990),a=r(6154);const s={},c=a.gm.XMLHttpRequest,u="addEventListener",d="removeEventListener",l="nr@wrapped:".concat(n.P);function f(e){var t=function(e){return(e||n.ee).get("events")}(e);if(s[t.debugId]++)return t;s[t.debugId]=1;var r=(0,i.YM)(t,!0);function f(e){r.inPlace(e,[u,d],"-",g)}function g(e,t){return e[1]}return"getPrototypeOf"in Object&&(a.RI&&h(document,f),c&&h(c.prototype,f),h(a.gm,f)),t.on(u+"-start",(function(e,t){var n=e[1];if(null!==n&&("function"==typeof n||"object"==typeof n)){var i=(0,o.I)(n,l,(function(){var e={object:function(){if("function"!=typeof n.handleEvent)return;return n.handleEvent.apply(n,arguments)},function:n}[typeof n];return e?r(e,"fn-",null,e.name||"anonymous"):n}));this.wrapped=e[1]=i}})),t.on(d+"-start",(function(e){e[1]=this.wrapped||e[1]})),t}function h(e,t,...r){let n=e;for(;"object"==typeof n&&!Object.prototype.hasOwnProperty.call(n,u);)n=Object.getPrototypeOf(n);n&&t(n,...r)}},3434:(e,t,r)=>{"use strict";r.d(t,{Jt:()=>o,YM:()=>c});var n=r(7836),i=r(5607);const o="nr@original:".concat(i.W);var a=Object.prototype.hasOwnProperty,s=!1;function c(e,t){return e||(e=n.ee),r.inPlace=function(e,t,n,i,o){n||(n="");const a="-"===n.charAt(0);for(let s=0;s<t.length;s++){const c=t[s],u=e[c];d(u)||(e[c]=r(u,a?c+n:n,i,c,o))}},r.flag=o,r;function r(t,r,n,s,c){return d(t)?t:(r||(r=""),nrWrapper[o]=t,function(e,t,r){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach((function(r){Object.defineProperty(t,r,{get:function(){return e[r]},set:function(t){return e[r]=t,t}})})),t}catch(e){u([e],r)}for(var n in e)a.call(e,n)&&(t[n]=e[n])}(t,nrWrapper,e),nrWrapper);function nrWrapper(){var o,a,d,l;try{a=this,o=[...arguments],d="function"==typeof n?n(o,a):n||{}}catch(t){u([t,"",[o,a,s],d],e)}i(r+"start",[o,a,s],d,c);try{return l=t.apply(a,o)}catch(e){throw i(r+"err",[o,a,e],d,c),e}finally{i(r+"end",[o,a,l],d,c)}}}function i(r,n,i,o){if(!s||t){var a=s;s=!0;try{e.emit(r,n,i,t,o)}catch(t){u([t,r,n,i],e)}s=a}}}function u(e,t){t||(t=n.ee);try{t.emit("internal-error",e)}catch(e){}}function d(e){return!(e&&"function"==typeof e&&e.apply&&!e[o])}},9414:(e,t,r)=>{"use strict";r.d(t,{J:()=>c});var n=r(7836),i=r(2646),o=r(944),a=r(3434);const s=new Map;function c(e,t,r,c){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,o.R)(29);const u=function(e){return(e||n.ee).get("logger")}(e),d=(0,a.YM)(u),l=new i.y(n.P);l.level=c.level,l.customAttributes=c.customAttributes;const f=t[r]?.[a.Jt]||t[r];return s.set(f,l),d.inPlace(t,[r],"wrap-logger-",(()=>s.get(f))),u}},9300:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.ajax},3333:(e,t,r)=>{"use strict";r.d(t,{$v:()=>u,TZ:()=>n,Zp:()=>i,kd:()=>c,mq:()=>s,nf:()=>a,qN:()=>o});const n=r(860).K7.genericEvents,i=["auxclick","click","copy","keydown","paste","scrollend"],o=["focus","blur"],a=4,s=1e3,c=["PageAction","UserAction","BrowserPerformance"],u={MARKS:"experimental.marks",MEASURES:"experimental.measures",RESOURCES:"experimental.resources"}},6774:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.jserrors},993:(e,t,r)=>{"use strict";r.d(t,{A$:()=>o,ET:()=>a,TZ:()=>s,p_:()=>i});var n=r(860);const i={ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"},o={OFF:0,ERROR:1,WARN:2,INFO:3,DEBUG:4,TRACE:5},a="log",s=n.K7.logging},3785:(e,t,r)=>{"use strict";r.d(t,{R:()=>c,b:()=>u});var n=r(9908),i=r(1863),o=r(860),a=r(8154),s=r(993);function c(e,t,r={},c=s.p_.INFO){(0,n.p)(a.xV,["API/logging/".concat(c.toLowerCase(),"/called")],void 0,o.K7.metrics,e),(0,n.p)(s.ET,[(0,i.t)(),t,r,c],void 0,o.K7.logging,e)}function u(e){return"string"==typeof e&&Object.values(s.p_).some((t=>t===e.toUpperCase().trim()))}},8154:(e,t,r)=>{"use strict";r.d(t,{z_:()=>o,XG:()=>s,TZ:()=>n,rs:()=>i,xV:()=>a});r(6154),r(9566),r(384);const n=r(860).K7.metrics,i="sm",o="cm",a="storeSupportabilityMetrics",s="storeEventMetrics"},6630:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewEvent},782:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewTiming},6344:(e,t,r)=>{"use strict";r.d(t,{BB:()=>d,G4:()=>o,Qb:()=>l,TZ:()=>i,Ug:()=>a,_s:()=>s,bc:()=>u,yP:()=>c});var n=r(2614);const i=r(860).K7.sessionReplay,o={RECORD:"recordReplay",PAUSE:"pauseReplay",REPLAY_RUNNING:"replayRunning",ERROR_DURING_REPLAY:"errorDuringReplay"},a=.12,s={DomContentLoaded:0,Load:1,FullSnapshot:2,IncrementalSnapshot:3,Meta:4,Custom:5},c={[n.g.ERROR]:15e3,[n.g.FULL]:3e5,[n.g.OFF]:0},u={RESET:{message:"Session was reset",sm:"Reset"},IMPORT:{message:"Recorder failed to import",sm:"Import"},TOO_MANY:{message:"429: Too Many Requests",sm:"Too-Many"},TOO_BIG:{message:"Payload was too large",sm:"Too-Big"},CROSS_TAB:{message:"Session Entity was set to OFF on another tab",sm:"Cross-Tab"},ENTITLEMENTS:{message:"Session Replay is not allowed and will not be started",sm:"Entitlement"}},d=5e3,l={API:"api"}},5270:(e,t,r)=>{"use strict";r.d(t,{Aw:()=>c,CT:()=>u,SR:()=>s});var n=r(384),i=r(9417),o=r(7767),a=r(6154);function s(e){return!!(0,n.dV)().o.MO&&(0,o.V)(e)&&!0===(0,i.gD)(e,"session_trace.enabled")}function c(e){return!0===(0,i.gD)(e,"session_replay.preload")&&s(e)}function u(e,t){const r=t.correctAbsoluteTimestamp(e);return{originalTimestamp:e,correctedTimestamp:r,timestampDiff:e-r,originTime:a.WN,correctedOriginTime:t.correctedOriginTime,originTimeDiff:Math.floor(a.WN-t.correctedOriginTime)}}},3738:(e,t,r)=>{"use strict";r.d(t,{He:()=>i,Kp:()=>s,Lc:()=>u,Rz:()=>d,TZ:()=>n,bD:()=>o,d3:()=>a,jx:()=>l,uP:()=>c});const n=r(860).K7.sessionTrace,i="bstResource",o="resource",a="-start",s="-end",c="fn"+a,u="fn"+s,d="pushState",l=1e3},4234:(e,t,r)=>{"use strict";r.d(t,{W:()=>o});var n=r(7836),i=r(1687);class o{constructor(e,t){this.agentIdentifier=e,this.ee=n.ee.get(e),this.featureName=t,this.blocked=!1}deregisterDrain(){(0,i.x3)(this.agentIdentifier,this.featureName)}}},7767:(e,t,r)=>{"use strict";r.d(t,{V:()=>o});var n=r(9417),i=r(6154);const o=e=>i.RI&&!0===(0,n.gD)(e,"privacy.cookies_enabled")},8969:(e,t,r)=>{"use strict";r.d(t,{j:()=>N});var n=r(860),i=r(2555),o=r(3371),a=r(9908),s=r(7836),c=r(1687),u=r(5289),d=r(6154),l=r(944),f=r(8154),h=r(384),g=r(6344);const p=["setErrorHandler","finished","addToTrace","addRelease","recordCustomEvent","addPageAction","setCurrentRouteName","setPageViewName","setCustomAttribute","interaction","noticeError","setUserId","setApplicationVersion","start",g.G4.RECORD,g.G4.PAUSE,"log","wrapLogger"],m=["setErrorHandler","finished","addToTrace","addRelease"];var v=r(1863),b=r(2614),y=r(993),R=r(3785),x=r(9414);function w(){const e=(0,h.pV)();p.forEach((t=>{e[t]=(...r)=>function(t,...r){let n=[];return Object.values(e.initializedAgents).forEach((e=>{e&&e.api?e.exposed&&e.api[t]&&n.push(e.api[t](...r)):(0,l.R)(38,t)})),n.length>1?n:n[0]}(t,...r)}))}const E={};var A=r(9417),T=r(5603),_=r(5284);const S=e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e};let O=!1;function N(e,t={},p,N){let{init:I,info:P,loader_config:j,runtime:C={},exposed:k=!0}=t;C.loaderType=p;const H=(0,h.pV)();P||(I=H.init,P=H.info,j=H.loader_config),(0,A.xN)(e.agentIdentifier,I||{}),(0,T.a)(e.agentIdentifier,j||{}),P.jsAttributes??={},d.bv&&(P.jsAttributes.isWorker=!0),(0,i.x1)(e.agentIdentifier,P);const D=(0,A.D0)(e.agentIdentifier),L=[P.beacon,P.errorBeacon];O||(D.proxy.assets&&(S(D.proxy.assets),L.push(D.proxy.assets)),D.proxy.beacon&&L.push(D.proxy.beacon),w(),(0,h.US)("activatedFeatures",_.B),e.runSoftNavOverSpa&&=!0===D.soft_navigations.enabled&&D.feature_flags.includes("soft_nav")),C.denyList=[...D.ajax.deny_list||[],...D.ajax.block_internal?L:[]],C.ptid=e.agentIdentifier,(0,o.V)(e.agentIdentifier,C),e.ee=s.ee.get(e.agentIdentifier),void 0===e.api&&(e.api=function(e,t,h=!1){t||(0,c.Ak)(e,"api");const p={};var w=s.ee.get(e),A=w.get("tracer");E[e]=b.g.OFF,w.on(g.G4.REPLAY_RUNNING,(t=>{E[e]=t}));var T="api-",_=T+"ixn-";function S(t,r,n,o){const a=(0,i.Vp)(e);return null===r?delete a.jsAttributes[t]:(0,i.x1)(e,{...a,jsAttributes:{...a.jsAttributes,[t]:r}}),I(T,n,!0,o||null===r?"session":void 0)(t,r)}function O(){}p.log=function(e,{customAttributes:t={},level:r=y.p_.INFO}={}){(0,a.p)(f.xV,["API/log/called"],void 0,n.K7.metrics,w),(0,R.R)(w,e,t,r)},p.wrapLogger=(e,t,{customAttributes:r={},level:i=y.p_.INFO}={})=>{(0,a.p)(f.xV,["API/wrapLogger/called"],void 0,n.K7.metrics,w),(0,x.J)(w,e,t,{customAttributes:r,level:i})},m.forEach((e=>{p[e]=I(T,e,!0,"api")})),p.addPageAction=I(T,"addPageAction",!0,n.K7.genericEvents),p.recordCustomEvent=I(T,"recordCustomEvent",!0,n.K7.genericEvents),p.setPageViewName=function(t,r){if("string"==typeof t)return"/"!==t.charAt(0)&&(t="/"+t),(0,o.f)(e).customTransaction=(r||"http://custom.transaction")+t,I(T,"setPageViewName",!0)()},p.setCustomAttribute=function(e,t,r=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof t)||null===t)return S(e,t,"setCustomAttribute",r);(0,l.R)(40,typeof t)}else(0,l.R)(39,typeof e)},p.setUserId=function(e){if("string"==typeof e||null===e)return S("enduser.id",e,"setUserId",!0);(0,l.R)(41,typeof e)},p.setApplicationVersion=function(e){if("string"==typeof e||null===e)return S("application.version",e,"setApplicationVersion",!1);(0,l.R)(42,typeof e)},p.start=()=>{try{(0,a.p)(f.xV,["API/start/called"],void 0,n.K7.metrics,w),w.emit("manual-start-all")}catch(e){(0,l.R)(23,e)}},p[g.G4.RECORD]=function(){(0,a.p)(f.xV,["API/recordReplay/called"],void 0,n.K7.metrics,w),(0,a.p)(g.G4.RECORD,[],void 0,n.K7.sessionReplay,w)},p[g.G4.PAUSE]=function(){(0,a.p)(f.xV,["API/pauseReplay/called"],void 0,n.K7.metrics,w),(0,a.p)(g.G4.PAUSE,[],void 0,n.K7.sessionReplay,w)},p.interaction=function(e){return(new O).get("object"==typeof e?e:{})};const N=O.prototype={createTracer:function(e,t){var r={},i=this,o="function"==typeof t;return(0,a.p)(f.xV,["API/createTracer/called"],void 0,n.K7.metrics,w),h||(0,a.p)(_+"tracer",[(0,v.t)(),e,r],i,n.K7.spa,w),function(){if(A.emit((o?"":"no-")+"fn-start",[(0,v.t)(),i,o],r),o)try{return t.apply(this,arguments)}catch(e){const t="string"==typeof e?new Error(e):e;throw A.emit("fn-err",[arguments,this,t],r),t}finally{A.emit("fn-end",[(0,v.t)()],r)}}}};function I(e,t,r,i){return function(){return(0,a.p)(f.xV,["API/"+t+"/called"],void 0,n.K7.metrics,w),i&&(0,a.p)(e+t,[r?(0,v.t)():performance.now(),...arguments],r?null:this,i,w),r?void 0:this}}function P(){r.e(891).then(r.bind(r,8778)).then((({setAPI:t})=>{t(e),(0,c.Ze)(e,"api")})).catch((e=>{(0,l.R)(27,e),w.abort()}))}return["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach((e=>{N[e]=I(_,e,void 0,h?n.K7.softNav:n.K7.spa)})),p.setCurrentRouteName=h?I(_,"routeName",void 0,n.K7.softNav):I(T,"routeName",!0,n.K7.spa),p.noticeError=function(t,r){"string"==typeof t&&(t=new Error(t)),(0,a.p)(f.xV,["API/noticeError/called"],void 0,n.K7.metrics,w),(0,a.p)("err",[t,(0,v.t)(),!1,r,!!E[e]],void 0,n.K7.jserrors,w)},d.RI?(0,u.GG)((()=>P()),!0):P(),p}(e.agentIdentifier,N,e.runSoftNavOverSpa)),void 0===e.exposed&&(e.exposed=k),O=!0}},8374:(e,t,r)=>{r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860:(e,t,r)=>{"use strict";r.d(t,{$J:()=>u,K7:()=>s,P3:()=>c,XX:()=>i,qY:()=>n,v4:()=>a});const n="events",i="jserrors",o="browser/blobs",a="rum",s={ajax:"ajax",genericEvents:"generic_events",jserrors:i,logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations",spa:"spa"},c={[s.pageViewEvent]:1,[s.pageViewTiming]:2,[s.metrics]:3,[s.jserrors]:4,[s.spa]:5,[s.ajax]:6,[s.sessionTrace]:7,[s.softNav]:8,[s.sessionReplay]:9,[s.logging]:10,[s.genericEvents]:11},u={[s.pageViewEvent]:a,[s.pageViewTiming]:n,[s.ajax]:n,[s.spa]:n,[s.softNav]:n,[s.metrics]:i,[s.jserrors]:i,[s.sessionTrace]:o,[s.sessionReplay]:o,[s.logging]:"browser/logs",[s.genericEvents]:"ins"}}},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var o=n[e]={exports:{}};return r[e](o,o.exports,i),o.exports}i.m=r,i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>({95:"nr-full-compressor",222:"nr-full-recorder",891:"nr-full"}[e]+"-1.283.2.min.js"),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="NRBA-1.283.2.PROD:",i.l=(r,n,o,a)=>{if(e[r])e[r].push(n);else{var s,c;if(void 0!==o)for(var u=document.getElementsByTagName("script"),d=0;d<u.length;d++){var l=u[d];if(l.getAttribute("src")==r||l.getAttribute("data-webpack")==t+o){s=l;break}}if(!s){c=!0;var f={891:"sha512-AvZhj4m+h2B/1kW4uDUzuPHC+lkjrkdXalVNoHyJgrLk7a6iFKNSNge7GsIL8eYZ8zTqKuhnzCa4dbxc+tpeJg==",222:"sha512-iYC8/IszvScsGAJc4YhoK3/RRrYa8Dt4Fx0dMjiPRd/wiJ6bquHHgDpmIPMTULY5f17ZfijdRyIltFMjbQG0ow==",95:"sha512-7nJqBsE9e2w0waUpifeNh5JejezdrAgWS7deetz7SIxIxShxOUsURVpMXZJN4ksOcpN2m3fdUCnna/VQ/1fKoQ=="};(s=document.createElement("script")).charset="utf-8",s.timeout=120,i.nc&&s.setAttribute("nonce",i.nc),s.setAttribute("data-webpack",t+o),s.src=r,0!==s.src.indexOf(window.location.origin+"/")&&(s.crossOrigin="anonymous"),f[a]&&(s.integrity=f[a])}e[r]=[n];var h=(t,n)=>{s.onerror=s.onload=null,clearTimeout(g);var i=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),i&&i.forEach((e=>e(n))),t)return t(n)},g=setTimeout(h.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=h.bind(null,s.onerror),s.onload=h.bind(null,s.onload),c&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="https://js-agent.newrelic.com/",(()=>{var e={85:0,959:0};i.f.j=(t,r)=>{var n=i.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise(((r,i)=>n=e[t]=[r,i]));r.push(n[2]=o);var a=i.p+i.u(t),s=new Error;i.l(a,(r=>{if(i.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",s.name="ChunkLoadError",s.type=o,s.request=a,n[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var n,o,[a,s,c]=r,u=0;if(a.some((t=>0!==e[t]))){for(n in s)i.o(s,n)&&(i.m[n]=s[n]);if(c)c(i)}for(t&&t(r);u<a.length;u++)o=a[u],i.o(e,o)&&e[o]&&e[o][0](),e[o]=0},r=self["webpackChunk:NRBA-1.283.2.PROD"]=self["webpackChunk:NRBA-1.283.2.PROD"]||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),(()=>{"use strict";i(8374);var e=i(944),t=i(6344),r=i(9566);class n{agentIdentifier;constructor(){this.agentIdentifier=(0,r.LA)(16)}#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}addPageAction(e,t){return this.#e("addPageAction",e,t)}recordCustomEvent(e,t){return this.#e("recordCustomEvent",e,t)}setPageViewName(e,t){return this.#e("setPageViewName",e,t)}setCustomAttribute(e,t,r){return this.#e("setCustomAttribute",e,t,r)}noticeError(e,t){return this.#e("noticeError",e,t)}setUserId(e){return this.#e("setUserId",e)}setApplicationVersion(e){return this.#e("setApplicationVersion",e)}setErrorHandler(e){return this.#e("setErrorHandler",e)}addRelease(e,t){return this.#e("addRelease",e,t)}log(e,t){return this.#e("log",e,t)}}class o extends n{#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}start(){return this.#e("start")}finished(e){return this.#e("finished",e)}recordReplay(){return this.#e(t.G4.RECORD)}pauseReplay(){return this.#e(t.G4.PAUSE)}addToTrace(e){return this.#e("addToTrace",e)}setCurrentRouteName(e){return this.#e("setCurrentRouteName",e)}interaction(){return this.#e("interaction")}wrapLogger(e,t,r){return this.#e("wrapLogger",e,t,r)}}var a=i(860),s=i(9417);const c=Object.values(a.K7);function u(e){const t={};return c.forEach((r=>{t[r]=function(e,t){return!0===(0,s.gD)(t,"".concat(e,".enabled"))}(r,e)})),t}var d=i(8969);var l=i(1687),f=i(4234),h=i(5289),g=i(6154),p=i(5270),m=i(7767),v=i(6389);class b extends f.W{constructor(e,t,r=!0){super(e.agentIdentifier,t),this.auto=r,this.abortHandler=void 0,this.featAggregate=void 0,this.onAggregateImported=void 0,!1===e.init[this.featureName].autoStart&&(this.auto=!1),this.auto?(0,l.Ak)(e.agentIdentifier,t):this.ee.on("manual-start-all",(0,v.J)((()=>{(0,l.Ak)(e.agentIdentifier,this.featureName),this.auto=!0,this.importAggregator(e)})))}importAggregator(t,r={}){if(this.featAggregate||!this.auto)return;let n;this.onAggregateImported=new Promise((e=>{n=e}));const o=async()=>{let o;try{if((0,m.V)(this.agentIdentifier)){const{setupAgentSession:e}=await i.e(891).then(i.bind(i,6526));o=e(t)}}catch(t){(0,e.R)(20,t),this.ee.emit("internal-error",[t]),this.featureName===a.K7.sessionReplay&&this.abortHandler?.()}try{if(!this.#t(this.featureName,o))return(0,l.Ze)(this.agentIdentifier,this.featureName),void n(!1);const{lazyFeatureLoader:e}=await i.e(891).then(i.bind(i,6103)),{Aggregate:a}=await e(this.featureName,"aggregate");this.featAggregate=new a(t,r),t.runtime.harvester.initializedAggregates.push(this.featAggregate),n(!0)}catch(t){(0,e.R)(34,t),this.abortHandler?.(),(0,l.Ze)(this.agentIdentifier,this.featureName,!0),n(!1),this.ee&&this.ee.abort()}};g.RI?(0,h.GG)((()=>o()),!0):o()}#t(e,t){switch(e){case a.K7.sessionReplay:return(0,p.SR)(this.agentIdentifier)&&!!t;case a.K7.sessionTrace:return!!t;default:return!0}}}var y=i(6630);class R extends b{static featureName=y.T;constructor(e,t=!0){super(e,y.T,t),this.importAggregator(e)}}var x=i(384);var w=i(9908),E=i(2843),A=i(3878),T=i(782),_=i(1863);class S extends b{static featureName=T.T;constructor(e,t=!0){super(e,T.T,t),g.RI&&((0,E.u)((()=>(0,w.p)("docHidden",[(0,_.t)()],void 0,T.T,this.ee)),!0),(0,A.sp)("pagehide",(()=>(0,w.p)("winPagehide",[(0,_.t)()],void 0,T.T,this.ee))),this.importAggregator(e))}}var O=i(8154);class N extends b{static featureName=O.TZ;constructor(e,t=!0){super(e,O.TZ,t),this.importAggregator(e)}}var I=i(6774),P=i(3304);class j{constructor(e,t,r,n,i){this.name="UncaughtError",this.message="string"==typeof e?e:(0,P.A)(e),this.sourceURL=t,this.line=r,this.column=n,this.__newrelic=i}}function C(e){return D(e)?e:new j(void 0!==e?.message?e.message:e,e?.filename||e?.sourceURL,e?.lineno||e?.line,e?.colno||e?.col,e?.__newrelic)}function k(e){const t="Unhandled Promise Rejection";if(!e?.reason)return;if(D(e.reason))try{return e.reason.message=t+": "+e.reason.message,C(e.reason)}catch(t){return C(e.reason)}const r=C(e.reason);return r.message=t+": "+r?.message,r}function H(e){if(e.error instanceof SyntaxError&&!/:\d+$/.test(e.error.stack?.trim())){const t=new j(e.message,e.filename,e.lineno,e.colno,e.error.__newrelic);return t.name=SyntaxError.name,t}return D(e.error)?e.error:C(e)}function D(e){return e instanceof Error&&!!e.stack}class L extends b{static featureName=I.T;#r=!1;constructor(e,r=!0){super(e,I.T,r);try{this.removeOnAbort=new AbortController}catch(e){}this.ee.on("internal-error",((e,t)=>{this.abortHandler&&(0,w.p)("ierr",[C(e),(0,_.t)(),!0,{},this.#r,t],void 0,this.featureName,this.ee)})),this.ee.on(t.G4.REPLAY_RUNNING,(e=>{this.#r=e})),g.gm.addEventListener("unhandledrejection",(e=>{this.abortHandler&&(0,w.p)("err",[k(e),(0,_.t)(),!1,{unhandledPromiseRejection:1},this.#r],void 0,this.featureName,this.ee)}),(0,A.jT)(!1,this.removeOnAbort?.signal)),g.gm.addEventListener("error",(e=>{this.abortHandler&&(0,w.p)("err",[H(e),(0,_.t)(),!1,{},this.#r],void 0,this.featureName,this.ee)}),(0,A.jT)(!1,this.removeOnAbort?.signal)),this.abortHandler=this.#n,this.importAggregator(e)}#n(){this.removeOnAbort?.abort(),this.abortHandler=void 0}}var M=i(8990);let K=1;const U="nr@id";function V(e){const t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===g.gm?0:(0,M.I)(e,U,(function(){return K++}))}function G(e){if("string"==typeof e&&e.length)return e.length;if("object"==typeof e){if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer&&e.byteLength)return e.byteLength;if("undefined"!=typeof Blob&&e instanceof Blob&&e.size)return e.size;if(!("undefined"!=typeof FormData&&e instanceof FormData))try{return(0,P.A)(e).length}catch(e){return}}}var F=i(8139),B=i(7836),W=i(3434);const z={},q=["open","send"];function Z(t){var r=t||B.ee;const n=function(e){return(e||B.ee).get("xhr")}(r);if(void 0===g.gm.XMLHttpRequest)return n;if(z[n.debugId]++)return n;z[n.debugId]=1,(0,F.u)(r);var i=(0,W.YM)(n),o=g.gm.XMLHttpRequest,a=g.gm.MutationObserver,s=g.gm.Promise,c=g.gm.setInterval,u="readystatechange",d=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"],l=[],f=g.gm.XMLHttpRequest=function(t){const r=new o(t),a=n.context(r);try{n.emit("new-xhr",[r],a),r.addEventListener(u,(s=a,function(){var e=this;e.readyState>3&&!s.resolved&&(s.resolved=!0,n.emit("xhr-resolved",[],e)),i.inPlace(e,d,"fn-",y)}),(0,A.jT)(!1))}catch(t){(0,e.R)(15,t);try{n.emit("internal-error",[t])}catch(e){}}var s;return r};function h(e,t){i.inPlace(t,["onreadystatechange"],"fn-",y)}if(function(e,t){for(var r in e)t[r]=e[r]}(o,f),f.prototype=o.prototype,i.inPlace(f.prototype,q,"-xhr-",y),n.on("send-xhr-start",(function(e,t){h(e,t),function(e){l.push(e),a&&(p?p.then(b):c?c(b):(m=-m,v.data=m))}(t)})),n.on("open-xhr-start",h),a){var p=s&&s.resolve();if(!c&&!s){var m=1,v=document.createTextNode(m);new a(b).observe(v,{characterData:!0})}}else r.on("fn-end",(function(e){e[0]&&e[0].type===u||b()}));function b(){for(var e=0;e<l.length;e++)h(0,l[e]);l.length&&(l=[])}function y(e,t){return t}return n}var Y="fetch-",X=Y+"body-",J=["arrayBuffer","blob","json","text","formData"],Q=g.gm.Request,ee=g.gm.Response,te="prototype";const re={};function ne(e){const t=function(e){return(e||B.ee).get("fetch")}(e);if(!(Q&&ee&&g.gm.fetch))return t;if(re[t.debugId]++)return t;function r(e,r,n){var i=e[r];"function"==typeof i&&(e[r]=function(){var e,r=[...arguments],o={};t.emit(n+"before-start",[r],o),o[B.P]&&o[B.P].dt&&(e=o[B.P].dt);var a=i.apply(this,r);return t.emit(n+"start",[r,e],a),a.then((function(e){return t.emit(n+"end",[null,e],a),e}),(function(e){throw t.emit(n+"end",[e],a),e}))})}return re[t.debugId]=1,J.forEach((e=>{r(Q[te],e,X),r(ee[te],e,X)})),r(g.gm,"fetch",Y),t.on(Y+"end",(function(e,r){var n=this;if(r){var i=r.headers.get("content-length");null!==i&&(n.rxSize=i),t.emit(Y+"done",[null,r],n)}else t.emit(Y+"done",[e],n)})),t}var ie=i(7485),oe=i(5603);class ae{constructor(e){this.agentIdentifier=e}generateTracePayload(e){if(!this.shouldGenerateTrace(e))return null;var t=(0,oe.o)(this.agentIdentifier);if(!t)return null;var n=(t.accountID||"").toString()||null,i=(t.agentID||"").toString()||null,o=(t.trustKey||"").toString()||null;if(!n||!i)return null;var a=(0,r.ZF)(),s=(0,r.el)(),c=Date.now(),u={spanId:a,traceId:s,timestamp:c};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(u.traceContextParentHeader=this.generateTraceContextParentHeader(a,s),u.traceContextStateHeader=this.generateTraceContextStateHeader(a,c,n,i,o)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(u.newrelicHeader=this.generateTraceHeader(a,s,c,n,i,o)),u}generateTraceContextParentHeader(e,t){return"00-"+t+"-"+e+"-01"}generateTraceContextStateHeader(e,t,r,n,i){return i+"@nr=0-1-"+r+"-"+n+"-"+e+"----"+t}generateTraceHeader(e,t,r,n,i,o){if(!("function"==typeof g.gm?.btoa))return null;var a={v:[0,1],d:{ty:"Browser",ac:n,ap:i,id:e,tr:t,ti:r}};return o&&n!==o&&(a.d.tk=o),btoa((0,P.A)(a))}shouldGenerateTrace(e){return this.isDtEnabled()&&this.isAllowedOrigin(e)}isAllowedOrigin(e){var t=!1,r={};if((0,s.gD)(this.agentIdentifier,"distributed_tracing")&&(r=(0,s.D0)(this.agentIdentifier).distributed_tracing),e.sameOrigin)t=!0;else if(r.allowed_origins instanceof Array)for(var n=0;n<r.allowed_origins.length;n++){var i=(0,ie.D)(r.allowed_origins[n]);if(e.hostname===i.hostname&&e.protocol===i.protocol&&e.port===i.port){t=!0;break}}return t}isDtEnabled(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!!e.enabled}excludeNewrelicHeader(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!!e.exclude_newrelic_header}useNewrelicHeaderForCors(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!1!==e.cors_use_newrelic_header}useTraceContextHeadersForCors(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!!e.cors_use_tracecontext_headers}}var se=i(9300),ce=i(7295),ue=["load","error","abort","timeout"],de=ue.length,le=(0,x.dV)().o.REQ,fe=(0,x.dV)().o.XHR;class he extends b{static featureName=se.T;constructor(e,t=!0){super(e,se.T,t),this.dt=new ae(e.agentIdentifier),this.handler=(e,t,r,n)=>(0,w.p)(e,t,r,n,this.ee);try{const e={xmlhttprequest:"xhr",fetch:"fetch",beacon:"beacon"};g.gm?.performance?.getEntriesByType("resource").forEach((t=>{if(t.initiatorType in e&&0!==t.responseStatus){const r={status:t.responseStatus},n={rxSize:t.transferSize,duration:Math.floor(t.duration),cbTime:0};ge(r,t.name),this.handler("xhr",[r,n,t.startTime,t.responseEnd,e[t.initiatorType]],void 0,a.K7.ajax)}}))}catch(e){}ne(this.ee),Z(this.ee),function(e,t,r,n){function i(e){var t=this;t.totalCbs=0,t.called=0,t.cbTime=0,t.end=x,t.ended=!1,t.xhrGuids={},t.lastSize=null,t.loadCaptureCalled=!1,t.params=this.params||{},t.metrics=this.metrics||{},e.addEventListener("load",(function(r){E(t,e)}),(0,A.jT)(!1)),g.lR||e.addEventListener("progress",(function(e){t.lastSize=e.loaded}),(0,A.jT)(!1))}function o(e){this.params={method:e[0]},ge(this,e[1]),this.metrics={}}function s(t,r){e.loader_config.xpid&&this.sameOrigin&&r.setRequestHeader("X-NewRelic-ID",e.loader_config.xpid);var i=n.generateTracePayload(this.parsedOrigin);if(i){var o=!1;i.newrelicHeader&&(r.setRequestHeader("newrelic",i.newrelicHeader),o=!0),i.traceContextParentHeader&&(r.setRequestHeader("traceparent",i.traceContextParentHeader),i.traceContextStateHeader&&r.setRequestHeader("tracestate",i.traceContextStateHeader),o=!0),o&&(this.dt=i)}}function c(e,r){var n=this.metrics,i=e[0],o=this;if(n&&i){var a=G(i);a&&(n.txSize=a)}this.startTime=(0,_.t)(),this.body=i,this.listener=function(e){try{"abort"!==e.type||o.loadCaptureCalled||(o.params.aborted=!0),("load"!==e.type||o.called===o.totalCbs&&(o.onloadCalled||"function"!=typeof r.onload)&&"function"==typeof o.end)&&o.end(r)}catch(e){try{t.emit("internal-error",[e])}catch(e){}}};for(var s=0;s<de;s++)r.addEventListener(ue[s],this.listener,(0,A.jT)(!1))}function u(e,t,r){this.cbTime+=e,t?this.onloadCalled=!0:this.called+=1,this.called!==this.totalCbs||!this.onloadCalled&&"function"==typeof r.onload||"function"!=typeof this.end||this.end(r)}function d(e,t){var r=""+V(e)+!!t;this.xhrGuids&&!this.xhrGuids[r]&&(this.xhrGuids[r]=!0,this.totalCbs+=1)}function l(e,t){var r=""+V(e)+!!t;this.xhrGuids&&this.xhrGuids[r]&&(delete this.xhrGuids[r],this.totalCbs-=1)}function f(){this.endTime=(0,_.t)()}function h(e,r){r instanceof fe&&"load"===e[0]&&t.emit("xhr-load-added",[e[1],e[2]],r)}function p(e,r){r instanceof fe&&"load"===e[0]&&t.emit("xhr-load-removed",[e[1],e[2]],r)}function m(e,t,r){t instanceof fe&&("onload"===r&&(this.onload=!0),("load"===(e[0]&&e[0].type)||this.onload)&&(this.xhrCbStart=(0,_.t)()))}function v(e,r){this.xhrCbStart&&t.emit("xhr-cb-time",[(0,_.t)()-this.xhrCbStart,this.onload,r],r)}function b(e){var t,r=e[1]||{};if("string"==typeof e[0]?0===(t=e[0]).length&&g.RI&&(t=""+g.gm.location.href):e[0]&&e[0].url?t=e[0].url:g.gm?.URL&&e[0]&&e[0]instanceof URL?t=e[0].href:"function"==typeof e[0].toString&&(t=e[0].toString()),"string"==typeof t&&0!==t.length){t&&(this.parsedOrigin=(0,ie.D)(t),this.sameOrigin=this.parsedOrigin.sameOrigin);var i=n.generateTracePayload(this.parsedOrigin);if(i&&(i.newrelicHeader||i.traceContextParentHeader))if(e[0]&&e[0].headers)s(e[0].headers,i)&&(this.dt=i);else{var o={};for(var a in r)o[a]=r[a];o.headers=new Headers(r.headers||{}),s(o.headers,i)&&(this.dt=i),e.length>1?e[1]=o:e.push(o)}}function s(e,t){var r=!1;return t.newrelicHeader&&(e.set("newrelic",t.newrelicHeader),r=!0),t.traceContextParentHeader&&(e.set("traceparent",t.traceContextParentHeader),t.traceContextStateHeader&&e.set("tracestate",t.traceContextStateHeader),r=!0),r}}function y(e,t){this.params={},this.metrics={},this.startTime=(0,_.t)(),this.dt=t,e.length>=1&&(this.target=e[0]),e.length>=2&&(this.opts=e[1]);var r,n=this.opts||{},i=this.target;"string"==typeof i?r=i:"object"==typeof i&&i instanceof le?r=i.url:g.gm?.URL&&"object"==typeof i&&i instanceof URL&&(r=i.href),ge(this,r);var o=(""+(i&&i instanceof le&&i.method||n.method||"GET")).toUpperCase();this.params.method=o,this.body=n.body,this.txSize=G(n.body)||0}function R(e,t){if(this.endTime=(0,_.t)(),this.params||(this.params={}),(0,ce.iW)(this.params))return;let n;this.params.status=t?t.status:0,"string"==typeof this.rxSize&&this.rxSize.length>0&&(n=+this.rxSize);const i={txSize:this.txSize,rxSize:n,duration:(0,_.t)()-this.startTime};r("xhr",[this.params,i,this.startTime,this.endTime,"fetch"],this,a.K7.ajax)}function x(e){const t=this.params,n=this.metrics;if(!this.ended){this.ended=!0;for(let t=0;t<de;t++)e.removeEventListener(ue[t],this.listener,!1);t.aborted||(0,ce.iW)(t)||(n.duration=(0,_.t)()-this.startTime,this.loadCaptureCalled||4!==e.readyState?null==t.status&&(t.status=0):E(this,e),n.cbTime=this.cbTime,r("xhr",[t,n,this.startTime,this.endTime,"xhr"],this,a.K7.ajax))}}function E(e,r){e.params.status=r.status;var n=function(e,t){var r=e.responseType;return"json"===r&&null!==t?t:"arraybuffer"===r||"blob"===r||"json"===r?G(e.response):"text"===r||""===r||void 0===r?G(e.responseText):void 0}(r,e.lastSize);if(n&&(e.metrics.rxSize=n),e.sameOrigin){var i=r.getResponseHeader("X-NewRelic-App-Data");i&&((0,w.p)(O.rs,["Ajax/CrossApplicationTracing/Header/Seen"],void 0,a.K7.metrics,t),e.params.cat=i.split(", ").pop())}e.loadCaptureCalled=!0}t.on("new-xhr",i),t.on("open-xhr-start",o),t.on("open-xhr-end",s),t.on("send-xhr-start",c),t.on("xhr-cb-time",u),t.on("xhr-load-added",d),t.on("xhr-load-removed",l),t.on("xhr-resolved",f),t.on("addEventListener-end",h),t.on("removeEventListener-end",p),t.on("fn-end",v),t.on("fetch-before-start",b),t.on("fetch-start",y),t.on("fn-start",m),t.on("fetch-done",R)}(e,this.ee,this.handler,this.dt),this.importAggregator(e)}}function ge(e,t){var r=(0,ie.D)(t),n=e.params||e;n.hostname=r.hostname,n.port=r.port,n.protocol=r.protocol,n.host=r.hostname+":"+r.port,n.pathname=r.pathname,e.parsedOrigin=r,e.sameOrigin=r.sameOrigin}const pe={},me=["pushState","replaceState"];function ve(e){const t=function(e){return(e||B.ee).get("history")}(e);return!g.RI||pe[t.debugId]++||(pe[t.debugId]=1,(0,W.YM)(t).inPlace(window.history,me,"-")),t}var be=i(3738);const{He:ye,bD:Re,d3:xe,Kp:we,TZ:Ee,Lc:Ae,uP:Te,Rz:_e}=be;class Se extends b{static featureName=Ee;constructor(e,t=!0){super(e,Ee,t);if(!(0,m.V)(this.agentIdentifier))return void this.deregisterDrain();const r=this.ee;let n;ve(r),this.eventsEE=(0,F.u)(r),this.eventsEE.on(Te,(function(e,t){this.bstStart=(0,_.t)()})),this.eventsEE.on(Ae,(function(e,t){(0,w.p)("bst",[e[0],t,this.bstStart,(0,_.t)()],void 0,a.K7.sessionTrace,r)})),r.on(_e+xe,(function(e){this.time=(0,_.t)(),this.startPath=location.pathname+location.hash})),r.on(_e+we,(function(e){(0,w.p)("bstHist",[location.pathname+location.hash,this.startPath,this.time],void 0,a.K7.sessionTrace,r)}));try{n=new PerformanceObserver((e=>{const t=e.getEntries();(0,w.p)(ye,[t],void 0,a.K7.sessionTrace,r)})),n.observe({type:Re,buffered:!0})}catch(e){}this.importAggregator(e,{resourceObserver:n})}}var Oe=i(2614);class Ne extends b{static featureName=t.TZ;#i;#o;constructor(e,r=!0){let n;super(e,t.TZ,r),this.replayRunning=!1,this.#o=e;try{n=JSON.parse(localStorage.getItem("".concat(Oe.H3,"_").concat(Oe.uh)))}catch(e){}(0,p.SR)(e.agentIdentifier)&&this.ee.on(t.G4.RECORD,(()=>this.#a())),this.#s(n)?(this.#i=n?.sessionReplayMode,this.#c()):this.importAggregator(e),this.ee.on("err",(e=>{this.replayRunning&&(this.errorNoticed=!0,(0,w.p)(t.G4.ERROR_DURING_REPLAY,[e],void 0,this.featureName,this.ee))})),this.ee.on(t.G4.REPLAY_RUNNING,(e=>{this.replayRunning=e}))}#s(e){return e&&(e.sessionReplayMode===Oe.g.FULL||e.sessionReplayMode===Oe.g.ERROR)||(0,p.Aw)(this.agentIdentifier)}#u=!1;async#c(e){if(!this.#u){this.#u=!0;try{const{Recorder:t}=await Promise.all([i.e(891),i.e(222)]).then(i.bind(i,8589));this.recorder??=new t({mode:this.#i,agentIdentifier:this.agentIdentifier,trigger:e,ee:this.ee,agentRef:this.#o}),this.recorder.startRecording(),this.abortHandler=this.recorder.stopRecording}catch(e){}this.importAggregator(this.#o,{recorder:this.recorder,errorNoticed:this.errorNoticed})}}#a(){this.featAggregate?this.featAggregate.mode!==Oe.g.FULL&&this.featAggregate.initializeRecording(Oe.g.FULL,!0):(this.#i=Oe.g.FULL,this.#c(t.Qb.API),this.recorder&&this.recorder.parent.mode!==Oe.g.FULL&&(this.recorder.parent.mode=Oe.g.FULL,this.recorder.stopRecording(),this.recorder.startRecording(),this.abortHandler=this.recorder.stopRecording))}}var Ie=i(3333);class Pe extends b{static featureName=Ie.TZ;constructor(e,t=!0){super(e,Ie.TZ,t);const r=[e.init.page_action.enabled,e.init.performance.capture_marks,e.init.performance.capture_measures,e.init.user_actions.enabled,e.init.performance.resources.enabled];if(g.RI&&(e.init.user_actions.enabled&&(Ie.Zp.forEach((e=>(0,A.sp)(e,(e=>(0,w.p)("ua",[e],void 0,this.featureName,this.ee)),!0))),Ie.qN.forEach((e=>{const t=(0,v.s)((e=>{(0,w.p)("ua",[e],void 0,this.featureName,this.ee)}),500,{leading:!0});(0,A.sp)(e,t)}))),e.init.performance.resources.enabled&&g.gm.PerformanceObserver?.supportedEntryTypes.includes("resource"))){new PerformanceObserver((e=>{e.getEntries().forEach((e=>{(0,w.p)("browserPerformance.resource",[e],void 0,this.featureName,this.ee)}))})).observe({type:"resource",buffered:!0})}r.some((e=>e))?this.importAggregator(e):this.deregisterDrain()}}var je=i(993),Ce=i(3785),ke=i(9414);class He extends b{static featureName=je.TZ;constructor(e,t=!0){super(e,je.TZ,t);const r=this.ee;(0,ke.J)(r,g.gm.console,"log",{level:"info"}),(0,ke.J)(r,g.gm.console,"error",{level:"error"}),(0,ke.J)(r,g.gm.console,"warn",{level:"warn"}),(0,ke.J)(r,g.gm.console,"info",{level:"info"}),(0,ke.J)(r,g.gm.console,"debug",{level:"debug"}),(0,ke.J)(r,g.gm.console,"trace",{level:"trace"}),this.ee.on("wrap-logger-end",(function([e]){const{level:t,customAttributes:n}=this;(0,Ce.R)(r,e,n,t)})),this.importAggregator(e)}}new class extends o{constructor(t){super(),g.gm?(this.features={},(0,x.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(t.features||[]),this.desiredFeatures.add(R),this.runSoftNavOverSpa=[...this.desiredFeatures].some((e=>e.featureName===a.K7.softNav)),(0,d.j)(this,t,t.loaderType||"agent"),this.run()):(0,e.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}run(){try{const t=u(this.agentIdentifier),r=[...this.desiredFeatures];r.sort(((e,t)=>a.P3[e.featureName]-a.P3[t.featureName])),r.forEach((r=>{if(!t[r.featureName]&&r.featureName!==a.K7.pageViewEvent)return;if(this.runSoftNavOverSpa&&r.featureName===a.K7.spa)return;if(!this.runSoftNavOverSpa&&r.featureName===a.K7.softNav)return;const n=function(e){switch(e){case a.K7.ajax:return[a.K7.jserrors];case a.K7.sessionTrace:return[a.K7.ajax,a.K7.pageViewEvent];case a.K7.sessionReplay:return[a.K7.sessionTrace];case a.K7.pageViewTiming:return[a.K7.pageViewEvent];default:return[]}}(r.featureName).filter((e=>!(e in this.features)));n.length>0&&(0,e.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)}))}catch(t){(0,e.R)(22,t);for(const e in this.features)this.features[e].abortHandler?.();const r=(0,x.Zm)();delete r.initializedAgents[this.agentIdentifier]?.api,delete r.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return r.ee.get(this.agentIdentifier).abort(),!1}}}({features:[R,S,Se,Ne,he,N,L,Pe,He],loaderType:"pro"})})()})();</script> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, user-scalable=yes" /> <meta name="google-site-verification" content="4Ga-viQvIZUFNQXu323xpp_24RDlLooxwlpnXhinjPA" /> <meta name="msvalidate.01" content="F0716E70B7DD3B8C892B48891CA4B541" /> <meta name="csrf-param" content="authenticity_token" /> <meta name="csrf-token" content="lF2REHII6JBqTm60vdN74yQ817WSLREYUisBUH1Tre80QcbMmK7uQAvoCsAJejQ9MIre1+ZUoZOI+3mDrJI3/g==" /> <meta name="description" content="Learn full stack JavaScript with a Treehouse Techdegree. Get certified and build your portfolio in this online coding bootcamp. Start your free trial today!" /> <meta name="title" content="Full Stack JavaScript Bootcamp | Treehouse Techdegree" /> <meta name="image" content="https://treehouse-marketing.s3.amazonaws.com/open-graph-social/TD.png" /> <meta name="twitter:site" content="@treehouse" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:url" content="https://teamtreehouse.com/techdegree/full-stack-javascript" /> <meta name="twitter:title" content="Full Stack JavaScript Bootcamp | Treehouse Techdegree" /> <meta name="twitter:description" content="Learn full stack JavaScript with a Treehouse Techdegree. Get certified and build your portfolio in this online coding bootcamp. Start your free trial today!" /> <meta name="twitter:image" content="https://treehouse-marketing.s3.amazonaws.com/open-graph-social/TD.png" /> <meta property="fb:app_id" content="1447543992198627" /> <meta property="og:site_name" content="Treehouse" /> <meta property="og:url" content="https://teamtreehouse.com/techdegree/full-stack-javascript" /> <meta property="og:title" content="Full Stack JavaScript Bootcamp | Treehouse Techdegree" /> <meta property="og:description" content="Learn full stack JavaScript with a Treehouse Techdegree. Get certified and build your portfolio in this online coding bootcamp. Start your free trial today!" /> <meta property="og:image" content="https://treehouse-marketing.s3.amazonaws.com/open-graph-social/TD.png" /> <meta property="og:type" content="article" /> <link rel="preload" href="https://ecs-static.teamtreehouse.com/assets/vendor-f4a70e398d62c1b7bd00ff33f21e74e92066e660584b86e57d54a9b252314e57.css" as="style" type="text/css" crossorigin="anonymous" integrity="true"> <link rel="preload" href="https://ecs-static.teamtreehouse.com/assets/marketing_2020-653576a0a8732b8df96d40f8fdaa0b7a01ec33a4bd3108ce27d9151a220f0d7e.css" as="style" type="text/css" crossorigin="anonymous" integrity="true"> <link rel="stylesheet" media="all" href="https://ecs-static.teamtreehouse.com/assets/vendor-f4a70e398d62c1b7bd00ff33f21e74e92066e660584b86e57d54a9b252314e57.css" crossorigin="true" integrity="sha256-9KcOOY1iwbe9AP8z8h506SBm5mBYS4blfVSpslIxTlc=" /> <link rel="stylesheet" media="all" href="https://ecs-static.teamtreehouse.com/assets/marketing_2020-653576a0a8732b8df96d40f8fdaa0b7a01ec33a4bd3108ce27d9151a220f0d7e.css" crossorigin="true" integrity="sha256-ZTV2oKhzK435bUD4/aoLegHsM6S9MQjOJ9kVGiIPDX4=" /> <link rel="preconnect" href="https://cdn.fonts.net"> <link rel="preload" onload="this.rel='stylesheet'" as="style" href="https://cdn.fonts.net/kit/39d0ab8f-c2d6-48ee-8a04-732fec352d95/39d0ab8f-c2d6-48ee-8a04-732fec352d95.css" /> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@9/swiper-bundle.min.css"/> <style media="print"> header, footer, .graph, .nav, svg { display: none } </style> <link rel="shortcut icon" href="/assets/favicon-pride.png" /> <link rel="apple-touch-icon-precomposed" sizes="60x60" href="https://ecs-static.teamtreehouse.com/assets/apple-touch-icon-60x60-precomposed-05be36fef4d37c9642a8923eb00325c9d680150d26954e868ddded6b7976a032.png" /> <link rel="apple-touch-icon-precomposed" sizes="76x76" href="https://ecs-static.teamtreehouse.com/assets/apple-touch-icon-76x76-precomposed-7283cd247847d1f21be0e79c52e3524c89adabf69cfc331046319f4ab19be058.png" /> <link rel="apple-touch-icon-precomposed" sizes="120x120" href="https://ecs-static.teamtreehouse.com/assets/apple-touch-icon-120x120-precomposed-dda60d87f49aa928ff86379bb50d9514d4b5f19502ff562b453e3d254730f682.png" /> <link rel="apple-touch-icon-precomposed" sizes="152x152" href="https://ecs-static.teamtreehouse.com/assets/apple-touch-icon-152x152-precomposed-1f486d33d1fe181adce0689d370d7dab9e777fab99b244e15b8c785239410674.png" /> <link href="https://teamtreehouse.com/techdegree/full-stack-javascript" rel="canonical" /> <link rel="preload" href="https://ecs-static.teamtreehouse.com/assets/marketing_vendor-163ead9f1d8d2d2591b51febdddf07a9fd489fa41a438fa8806cf70705a306f5.js" as="script" type="text/javascript" crossorigin="anonymous"> <link rel="preload" href="https://ecs-static.teamtreehouse.com/assets/logged_out-a2cb882b5d388ba23763c3ef292e820991298ea585da237520f2da7962409084.js" as="script" type="text/javascript" crossorigin="anonymous"> <link rel="preconnect" href="https://www.googletagmanager.com" crossorigin> <link rel="dns-prefetch" href="https://www.googletagmanager.com"> <link rel="preconnect" href="https://www.google-analytics.com" crossorigin> <link rel="dns-prefetch" href="https://www.google-analytics.com"> <link rel="preconnect" href="https://2607fe104b34492c99ca6fd077590dd7.js.ubembed.com" crossorigin> <link rel="dns-prefetch" href="https://2607fe104b34492c99ca6fd077590dd7.js.ubembed.com"> <link rel="preconnect" href="https://www.google.com/recaptcha/api.js" crossorigin> <link rel="dns-prefetch" href="https://www.google.com/recaptcha/api.js"> <script src="https://www.google.com/recaptcha/api.js" async defer></script> <script src="https://cdn.usefathom.com/script.js" data-site="JATZEBKX" defer></script> <script>(function(w,r){w._rwq=r;w[r]=w[r]||function(){(w[r].q=w[r].q||[]).push(arguments)}})(window,"rewardful");</script> <script async src="https://affiliates.teamtreehouse.com/rw.js" data-rewardful="5ba892"></script> </head> <body id="lander" class="windows ie7 ie lt-ie11 lt-ie10 lt-ie9 lt-ie8 navbar-announcement-padding"> <!-- Data Layer --> <script> window.dataLayer = window.dataLayer || []; dataLayer.push({"loggedIn":false,"visitorId":8981786482,"userId":null}); </script> <!-- Google Tag Manager --> <noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-PZ55S7" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= '//www.googletagmanager.com/gtm.js?id='+i+dl+'';f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-PZ55S7');</script> <!-- End Google Tag Manager --> <script src="https://ecs-static.teamtreehouse.com/assets/head_vendor-6a3288bb3aef100cad5d3497f90343103ec0f44b56f4ab0a057922302e7e77bb.js" crossorigin="true" integrity="sha256-ajKIuzrvEAytXTSX+QNDED7A9EtW9KsKBXkiMC5+d7s="></script> <script> window.bugsnagClient = bugsnag({ apiKey: "8251a8eb6422d59eaf410e7c1b1c7b38", releaseStage: "production", beforeSend: function (report) { if (window.location.hostname != "teamtreehouse.com") { report.ignore(); } } }); </script> <link rel="preconnect" href="https://optanon.blob.core.windows.net" crossorigin> <link rel="dns-prefetch" href="https://optanon.blob.core.windows.net"> <script async src="https://cdn.cookielaw.org/consent/39d1ae64-085b-42e6-a239-a988d6530b80.js"></script> <script> function OptanonWrapper() { window.dataLayer.push({ event: "OneTrustGroupsUpdated" }) } </script> <!-- Start VWO Async SmartCode --> <script type='text/javascript' id='vwoCode' async> window._vwo_code=window._vwo_code || (function() { var account_id=709477, version = 1.5, settings_tolerance=2000, library_tolerance=2500, use_existing_jquery=false, is_spa=1, hide_element='body', hide_element_style = 'opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important', /* DO NOT EDIT BELOW THIS LINE */ f=false,d=document,vwoCodeEl=d.querySelector('#vwoCode'),code={use_existing_jquery:function(){return use_existing_jquery},library_tolerance:function(){return library_tolerance},hide_element_style:function(){return'{'+hide_element_style+'}'},finish:function(){if(!f){f=true;var e=d.getElementById('_vis_opt_path_hides');if(e)e.parentNode.removeChild(e)}},finished:function(){return f},load:function(e){var t=d.createElement('script');t.fetchPriority='high';t.src=e;t.type='text/javascript';t.onerror=function(){_vwo_code.finish()};d.getElementsByTagName('head')[0].appendChild(t)},getVersion:function(){return version},getMatchedCookies:function(e){var t=[];if(document.cookie){t=document.cookie.match(e)||[]}return t},getCombinationCookie:function(){var e=code.getMatchedCookies(/(?:^|;)\s?(_vis_opt_exp_\d+_combi=[^;$]*)/gi);e=e.map(function(e){try{var t=decodeURIComponent(e);if(!/_vis_opt_exp_\d+_combi=(?:\d+,?)+\s*$/.test(t)){return''}return t}catch(e){return''}});var i=[];e.forEach(function(e){var t=e.match(/([\d,]+)/g);t&&i.push(t.join('-'))});return i.join('|')},init:function(){if(d.URL.indexOf('__vwo_disable__')>-1)return;window.settings_timer=setTimeout(function(){_vwo_code.finish()},settings_tolerance);var e=d.createElement('style'),t=hide_element?hide_element+'{'+hide_element_style+'}':'',i=d.getElementsByTagName('head')[0];e.setAttribute('id','_vis_opt_path_hides');vwoCodeEl&&e.setAttribute('nonce',vwoCodeEl.nonce);e.setAttribute('type','text/css');if(e.styleSheet)e.styleSheet.cssText=t;else e.appendChild(d.createTextNode(t));i.appendChild(e);var n=this.getCombinationCookie();this.load('https://dev.visualwebsiteoptimizer.com/j.php?a='+account_id+'&u='+encodeURIComponent(d.URL)+'&f='+ +is_spa+'&vn='+version+(n?'&c='+n:''));return settings_timer}};window._vwo_settings_timer = code.init();return code;}()); </script> <!-- End VWO Async SmartCode --> <script> //<![CDATA[ window.appData = '{\"controller_name\":\"landing_pages\",\"action_name\":\"show\",\"app_version\":\"9f5c67fb0b0e412d0cd22d8860dcedc1831f33e2\"}' //]]> </script> <section class="nav-announcement" data-featurette="nav-announcement-banner" style="background-color:#ab20fd !important;"> <div class="swiper nav-announcement-slider"> <div class="swiper-wrapper"> <div class="swiper-slide" data-bg-color="#ab20fd" data-desktop-message="🤑 Join the &lt;a style=&quot;text-decoration: underline !important&quot; href=&quot;https://join.teamtreehouse.com/affiliates/&quot;&gt;Treehouse affiliate program&lt;/a&gt; and earn 25% commission!" data-mobile-message="🤑 Join the &lt;a style=&quot;text-decoration: underline !important&quot; href=&quot;https://join.teamtreehouse.com/affiliates/&quot;&gt;Treehouse affiliate program&lt;/a&gt; and earn 25% commission!" > <p class="announcement-message grabbable" style="color:#FFFFFF !important;"> 🤑 Join the <a href="https://join.teamtreehouse.com/affiliates/">Treehouse affiliate program</a> and earn 25% commission! </p> </div> <div class="swiper-slide" data-bg-color="#02b6b9" data-desktop-message="✨ No-code curious? Check out 4 new &lt;a style=&quot;text-decoration: underline !important&quot; href=&quot;/library/topic:no-code&quot;&gt; FREE Adalo courses&lt;/a&gt; and start building an app in minutes — no code required!" data-mobile-message="✨ No-code curious? Check out 4 new &lt;a style=&quot;text-decoration: underline !important&quot; href=&quot;/library/topic:no-code&quot;&gt; FREE Adalo courses&lt;/a&gt; and start building an app in minutes — no code required!" > <p class="announcement-message grabbable" style="color:#ffffff !important;"> ✨ No-code curious? Check out 4 new <a href="/library/topic:no-code"> FREE Adalo courses</a> and start building an app in minutes — no code required! </p> </div> <div class="swiper-slide" data-bg-color="#5fcf80" data-desktop-message="🌟 Dreaming of a bright future? 🎓 &lt;a style=&quot;text-decoration: underline !important;&quot; href=&quot;mailto:help@teamtreehouse.com?subject=Treehouse%20Scholarship%20Inquiry&quot;&gt;Ask about the Treehouse Scholarship program!&lt;/a&gt; 🚀 " data-mobile-message="🌟 Dreaming of a bright future? 🎓 &lt;a style=&quot;text-decoration: underline !important;&quot; href=&quot;mailto:help@teamtreehouse.com?subject=Treehouse%20Scholarship%20Inquiry&quot;&gt;Ask about the Treehouse Scholarship program!&lt;/a&gt; 🚀 " > <p class="announcement-message grabbable" style="color:#ffffff !important;"> 🌟 Dreaming of a bright future? 🎓 <a href="mailto:help@teamtreehouse.com?subject=Treehouse%20Scholarship%20Inquiry">Ask about the Treehouse Scholarship program!</a> 🚀 </p> </div> </div> <div class="swiper-button-prev"></div> <div class="swiper-button-next"></div> </div> </section> <nav class="nav navbar-announcement-margin" data-layout-element="navigation" data-header > <div class="nav-container"> <button class="hamburger-button " aria-label="Navigation Menu" data-hamburger-button> <span class="hamburger"></span> </button> <ul class="nav-list"> <li class="nav-item nav-item-logo"> <h6 class="nav-item-logo-container"><a title="" data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Treehouse Logo" data-event-label="Source: Navbar" data-analytics-event="marketing nav link" data-analytics-link="Treehouse Logo" data-analytics-path="https://teamtreehouse.com/" data-analytics-action="clicked" class="nav-link nav-link-logo" href="https://teamtreehouse.com/"><svg alt="" class="treehouse-icon nav-item-logo-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 139 32" aria-labelledby="treehouseLogo8137064" role="img"> <title id="treehouseLogo8137064">Treehouse Logo</title> <path class="icon-treehouse" d="M42.8 21.1c-0.4 0.1-0.9 0.2-1.4 0.2 -1 0-1.4-0.6-1.4-1.6v-4.5h2.8c0.7 0 1.4-0.5 1.4-1.3s-0.6-1.3-1.4-1.3H40v-1.5c0-0.9-0.7-1.5-1.5-1.5S37 10.3 37 11.1v8.7c0 2.5 1.2 4.3 4 4.3 0.8 0 1.9-0.1 2.7-0.5 0.7-0.3 0.9-0.8 0.9-1.3C44.6 21.6 43.9 20.9 42.8 21.1zM52.8 12.2c-0.4-0.1-1.2-0.2-1.9-0.2 -2.5 0-3.9 1.5-3.9 3.8v6.8c0 0.8 0.7 1.5 1.5 1.5s1.5-0.7 1.5-1.5v-6.2c0-1 0.4-1.4 1.1-1.4s1.1 0.2 1.7 0.2c0.9 0 1.4-0.8 1.4-1.4C54.1 13 53.7 12.5 52.8 12.2zM61.1 12c-2.8 0-4.8 1.8-5.1 4.7 0 0.7-0.1 1.9 0 2.8 0.2 2.8 2.2 4.7 5.2 4.7 1.4 0 2.7-0.3 3.5-0.8 0.6-0.4 0.7-0.8 0.7-1.2 0-0.8-0.7-1.6-1.9-1.2 -0.7 0.3-1.5 0.5-2.3 0.5 -1.4 0-2.5-0.7-2.5-2.1v-0.3h5.7c1 0 1.5-0.6 1.5-1.5v-0.5C66 14 64 12 61.1 12zM63 17.1h-4.2c0-1.5 0.7-2.5 2.3-2.5 1.4 0 2.2 0.9 2.1 2.2C63.2 17 63.2 17.1 63 17.1zM73.1 12c-2.8 0-4.8 1.8-5.1 4.7 0 0.7-0.1 1.9 0 2.8 0.2 2.8 2.2 4.7 5.2 4.7 1.4 0 2.7-0.3 3.5-0.8 0.6-0.4 0.7-0.8 0.7-1.2 0-0.8-0.7-1.6-1.9-1.2 -0.7 0.3-1.5 0.5-2.3 0.5 -1.4 0-2.5-0.7-2.5-2.1v-0.3h5.7c1 0 1.5-0.6 1.5-1.5v-0.5C78 14 76 12 73.1 12zM75 17.1h-4.2c0-1.5 0.7-2.5 2.3-2.5 1.4 0 2.2 0.9 2.1 2.2C75.2 17 75.2 17.1 75 17.1zM123.6 17l-1.6-0.4c-1-0.2-1.3-0.5-1.3-1s0.5-0.9 1.6-0.9c0.6 0 1.3 0.2 1.9 0.5 0.7 0.4 1.5 0.3 1.9-0.2 0.5-0.5 0.5-1.4-0.1-2 -0.8-0.6-2.2-1-3.6-1 -2.6 0-4.5 1.3-4.5 3.7 0 1.9 1.4 2.9 3.2 3.4 0.9 0.2 0.8 0.2 1.6 0.4 0.9 0.2 1.3 0.6 1.3 1 0 0.6-0.5 1-1.7 1 -1 0-1.9-0.3-2.6-0.7 -0.7-0.5-1.5-0.3-1.9 0.3 -0.4 0.6-0.3 1.4 0.3 1.8 0.8 0.7 2.1 1.3 4.2 1.3 2.6 0 4.6-1.4 4.6-3.8C126.9 18.6 125.8 17.5 123.6 17zM137.5 19.1c1 0 1.5-0.6 1.5-1.5l0 0v-0.5c0-3.1-2-5.1-4.9-5.1 -2.8 0-4.8 1.8-5.1 4.7 0 0.7-0.1 1.9 0 2.8 0.2 2.8 2.2 4.7 5.2 4.7 1.4 0 2.7-0.3 3.5-0.8 0.6-0.4 0.7-0.8 0.7-1.2 0-0.8-0.7-1.6-1.9-1.2 -0.7 0.3-1.5 0.5-2.3 0.5 -1.4 0-2.5-0.7-2.5-2.1v-0.3H137.5zM134.1 14.6c1.4 0 2.2 0.9 2.1 2.2 0 0.2-0.1 0.3-0.2 0.3h-4.2C131.8 15.6 132.6 14.6 134.1 14.6zM97.5 12c-3 0-5.2 1.9-5.5 4.5 -0.1 0.9-0.1 2.3 0 3.2 0.2 2.6 2.5 4.5 5.5 4.5s5.2-1.9 5.4-4.5c0.1-0.9 0.1-2.2 0-3.1C102.7 13.9 100.5 12 97.5 12zM99.9 19.2c-0.1 1.3-1 2.1-2.4 2.1s-2.3-0.9-2.4-2.1c0-0.6 0-1.6 0-2.2 0.1-1.3 1-2.1 2.4-2.1s2.3 0.9 2.4 2.1C100 17.6 100 18.6 99.9 19.2zM85.6 12c-1.1 0-2.3 0.4-2.7 0.9l0 0V9.7c0-0.9-0.6-1.5-1.4-1.5s-1.4 0.7-1.4 1.5v12.9c0 0.8 0.7 1.5 1.5 1.5s1.4-0.7 1.4-1.5v-6.7c0.5-0.5 1.3-0.9 2.3-0.9 1.2 0 1.9 0.7 1.9 2.1v5.5c0 0.9 0.6 1.6 1.4 1.6 0.9 0 1.5-0.7 1.5-1.6v-5.7C90 13.7 88.4 12 85.6 12zM113.6 12.1c-0.8 0-1.5 0.7-1.5 1.5v7.1c-0.5 0.3-1.2 0.6-2.1 0.6 -1.2 0-2.1-0.7-2.1-2.1v-5.6c0-0.9-0.7-1.6-1.5-1.6 -0.9 0-1.4 0.7-1.4 1.6v5.7c0 3.1 1.8 4.8 4.9 4.8 2.3 0 3.9-0.8 4.6-1.3 0.4-0.2 0.5-0.5 0.5-1v-8.2C115 12.8 114.4 12.1 113.6 12.1z"></path><path class="icon-logo" d="M26 5.9c-1.1-0.6-2.8 0.4-3.8 2.2l-1.9 3.2c-0.7 1.3-0.6 2.9 0.3 4.2l0.1 0.1c0.9 1.2 2 2.4 2.4 2.8 0.2 0.2 0.4 0.5 0.5 0.9 0.3 1.1-0.3 2.3-1.5 2.6 -1.1 0.3-2.3-0.3-2.6-1.5 -0.1-0.3-0.1-0.6-0.1-0.8 0.1-0.5-0.1-1.2-0.8-2 -0.7-0.7-2 0.7-2.5 2.1v0.1c-0.4 1.4-0.7 2.7-0.6 2.8 0 0.1 0.1 0.1 0.1 0.2 0.6 1.2 0.2 2.6-1 3.2s-2.6 0.2-3.2-1 -0.2-2.6 1-3.2c0.1 0 0.1-0.1 0.2-0.1s0.3-0.6 0.6-1.4c0.2-0.7 0.3-1 0.4-1.3 0.1-0.4 0.3-1.4 0.2-1.8 -0.1-0.5-0.6-0.5-1.1-0.2 -0.3 0.2-0.9 0.7-1.1 0.9 -0.5 0.4-0.9 1-1.1 1.5 -0.1 0.2-0.3 0.5-0.5 0.7 -0.9 0.7-2.2 0.6-3-0.3 -0.7-0.9-0.6-2.2 0.3-3 0.3-0.2 0.6-0.4 0.9-0.4 0.5-0.1 2.3-1.2 3.4-2 0.2-0.1 0.5-0.4 0.6-0.5 0.3-0.4 0-0.7-0.3-0.7 -0.9 0.1-1.9 0.2-2.1 0.5 -0.1 0.1-0.2 0.3-0.4 0.4 -0.8 0.6-2 0.4-2.6-0.4s-0.4-2 0.4-2.6c0.3-0.3 0.8-0.4 1.1-0.4 0.7 0 2.5 0.4 3.9 0.1l0.4-0.1c1.5-0.3 3.3-1.6 4-2.9 0 0 0.7-1.2 1.5-2.7C19 3.6 18.9 1.9 18 1.4l-1.7-1c-0.9-0.5-2.2-0.5-3.1 0L1.6 7C0.7 7.5 0 8.7 0 9.7v12.8c0 1 0.7 2.2 1.6 2.7l11.6 6.6c0.9 0.5 2.3 0.5 3.1 0l11.6-6.6c0.9-0.5 1.6-1.7 1.6-2.7V9.7c0-1-0.7-2.2-1.6-2.7C27.9 7 27.1 6.5 26 5.9z"></path> </svg></a></h6> </li> <div class="nav-block nav-block-mobile-tablet"> <li class="nav-item nav-item-secondary nav-item-show-on-mobile nav-item-tablet" data-featurette="expandable-content-card"> <span class="nav-link nav-link-plans toggle-steps-view">Plans</span> <span class="nav-item-show-on-mobile-container"> <div class="toggle-steps-view-chevron toggle-steps" tabindex="0"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 12 7.5" class="chevron-icon" aria-labelledby="chevron3144927" role="img"> <title id="chevron3144927">Chevron</title> <g> <path d="M6,7.5L0.3,1.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0L6,4.6l4.3-4.3c0.4-0.4,1-0.4,1.4,0c0.4,0.4,0.4,1,0,1.4L6,7.5z"></path> </g> </svg></div> </span> <ul class="list-unstyled steps-list steps-list-override toggle-steps-hide nav-item-submenu nav-item-mobile"> <li><a href="https://teamtreehouse.com/plans">For Individuals</a></li> <li><a href="https://teamtreehouse.com/teams">For Businesses</a></li> <li><a href="https://teamtreehouse.com/for/schools">For Schools</a></li> <li><a href="/libraries">For Libraries</a></li> <li><a href="/military">For Military</a></li> </ul> </li> <li class="nav-item nav-item-secondary nav-item-show-on-mobile nav-item-tablet" data-featurette="expandable-content-card"> <span class="nav-link nav-link-plans toggle-steps-view">Library</span> <span class="nav-item-show-on-mobile-container"> <div class="toggle-steps-view-chevron toggle-steps" tabindex="0"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 12 7.5" class="chevron-icon" aria-labelledby="chevron3071180" role="img"> <title id="chevron3071180">Chevron</title> <g> <path d="M6,7.5L0.3,1.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0L6,4.6l4.3-4.3c0.4-0.4,1-0.4,1.4,0c0.4,0.4,0.4,1,0,1.4L6,7.5z"></path> </g> </svg></div> </span> <ul class="list-unstyled steps-list steps-list-override toggle-steps-hide nav-item-submenu nav-item-mobile"> <li><a href="https://teamtreehouse.com/library">All Courses</a></li> <li><a href="https://teamtreehouse.com/tracks">Tracks</a></li> <li><a href="https://join.teamtreehouse.com/college-credit">College Credit</a></li> </ul> </li> <li class="nav-item nav-item-secondary nav-item-show-on-mobile nav-item-tablet" data-featurette="expandable-content-card"> <span class="nav-link nav-link-plans toggle-steps-view">Techdegree</span> <span class="nav-item-show-on-mobile-container"> <div class="toggle-steps-view-chevron toggle-steps" tabindex="0"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 12 7.5" class="chevron-icon" aria-labelledby="chevron2605258" role="img"> <title id="chevron2605258">Chevron</title> <g> <path d="M6,7.5L0.3,1.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0L6,4.6l4.3-4.3c0.4-0.4,1-0.4,1.4,0c0.4,0.4,0.4,1,0,1.4L6,7.5z"></path> </g> </svg></div> </span> <ul class="list-unstyled steps-list steps-list-override toggle-steps-hide nav-item-submenu nav-item-mobile"> <li><a href="https://teamtreehouse.com/techdegree">Overview</a></li> <li><a href="https://teamtreehouse.com/techdegree/front-end-web-development">Front End Development</a></li> <li><a href="https://teamtreehouse.com/techdegree/full-stack-javascript">Full Stack JavaScript</a></li> <li><a href="https://teamtreehouse.com/techdegree/data-analysis">Data Analysis</a></li> <li><a href="https://teamtreehouse.com/techdegree/ux-design">UX Design</a></li> <li><a href="https://teamtreehouse.com/techdegree/python-development">Python</a></li> </ul> </li> <li class="nav-item nav-item-secondary nav-item-show-on-mobile nav-item-tablet" data-featurette="expandable-content-card"> <span class="nav-link nav-link-plans toggle-steps-view">Community</span> <span class="nav-item-show-on-mobile-container"> <div class="toggle-steps-view-chevron toggle-steps" tabindex="0"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 12 7.5" class="chevron-icon" aria-labelledby="chevron8119362" role="img"> <title id="chevron8119362">Chevron</title> <g> <path d="M6,7.5L0.3,1.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0L6,4.6l4.3-4.3c0.4-0.4,1-0.4,1.4,0c0.4,0.4,0.4,1,0,1.4L6,7.5z"></path> </g> </svg></div> </span> <ul class="list-unstyled steps-list steps-list-override toggle-steps-hide nav-item-submenu nav-item-mobile"> <li><a href="https://treehouse-community-projects.vercel.app">Community Projects</a></li> <li><a href="https://teamtreehouse.com/live_sessions">Live Sessions</a></li> <li><a href="https://teamtreehouse.com/code_adventures">Code Adventures</a></li> <li><a href="https://discord.gg/z7AYghFmhR">Discord</a></li> <li><a href="https://teamtreehouse.com/community">Forum</a></li> <li><a href="https://teamtreehouse.com/stories">Success Stories</a></li> <li><a href="https://teamtreehouse.com/links">Treehouse Links</a></li> <li><a href="https://join.teamtreehouse.com/100-days-of-code">100 Days of Code</a></li> </ul> </li> <li class="nav-item nav-item-secondary nav-item-show-on-mobile nav-item-tablet" data-featurette="expandable-content-card"> <span class="nav-link nav-link-plans toggle-steps-view">Resources</span> <span class="nav-item-show-on-mobile-container"> <div class="toggle-steps-view-chevron toggle-steps" tabindex="0"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 12 7.5" class="chevron-icon" aria-labelledby="chevron7320305" role="img"> <title id="chevron7320305">Chevron</title> <g> <path d="M6,7.5L0.3,1.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0L6,4.6l4.3-4.3c0.4-0.4,1-0.4,1.4,0c0.4,0.4,0.4,1,0,1.4L6,7.5z"></path> </g> </svg></div> </span> <ul class="list-unstyled steps-list steps-list-override toggle-steps-hide nav-item-submenu nav-item-mobile"> <li><a class="dropdown-item" href="https://teamtreehouse.com/career-toolbox">Career Toolbox</a></li> <li><a class="dropdown-item" href="https://join.teamtreehouse.com/codeforward">CodeForward</a></li> <li><a class="dropdown-item" href="https://teamtreehouse.com/libraries/find-your-library">Free Treehouse Near Me</a></li> <li><a class="dropdown-item" href="/jobs">Jobs</a></li> <li><a class="dropdown-item" href="http://blog.teamtreehouse.com">Blog</a></li> <li><a class="dropdown-item" href="https://teamtreehouse.com/support">Support</a></li> <li><a class="dropdown-item" href="https://teamtreehouse.com/about">About</a></li> </ul> </li> </div> <div class="nav-block nav-block-2020 nav-block-hide-on-mobile"> <li class="nav-item nav-item-secondary"> <div class="nav-dropdown"> <button class="nav-toggle" aria-haspopup="true" aria-expanded="false">Plans</button> <div class="nav-dropdown-menu"> <a class="dropdown-item" href="https://teamtreehouse.com/plans">For Individuals</a> <a class="dropdown-item" href="https://teamtreehouse.com/teams">For Businesses</a> <a class="dropdown-item" href="https://teamtreehouse.com/for/schools">For Schools</a> <a class="dropdown-item" href="/libraries">For Libraries</a> <a class="dropdown-item" href="/military">For Military</a> </div> </div> </li> <li class="nav-item nav-item-secondary"> <div class="nav-dropdown"> <button class="nav-toggle" aria-haspopup="true" aria-expanded="false">Library</button> <div class="nav-dropdown-menu"> <a class="dropdown-item" href="https://teamtreehouse.com/library">All Courses</a> <a class="dropdown-item" href="https://teamtreehouse.com/tracks">Tracks</a> <a class="dropdown-item" href="https://join.teamtreehouse.com/college-credit">College Credit</a> </div> </div> </li> <li class="nav-item nav-item-secondary"> <div class="nav-dropdown"> <button class="nav-toggle" aria-haspopup="true" aria-expanded="false">Techdegree</button> <div class="nav-dropdown-menu"> <a class="dropdown-item" href="https://teamtreehouse.com/techdegree">Overview</a> <a class="dropdown-item" href="/techdegree/front-end-web-development">Front End Web Development</a> <a class="dropdown-item" href="/techdegree/full-stack-javascript">Full Stack JavaScript</a> <a class="dropdown-item" href="/techdegree/python-development">Python Development</a> <a class="dropdown-item" href="/techdegree/data-analysis">Data Analysis</a> <a class="dropdown-item" href="/techdegree/ux-design">UX Design</a> </div> </div> </li> <li class="nav-item nav-item-secondary"> <div class="nav-dropdown"> <button class="nav-toggle" aria-haspopup="true" aria-expanded="false">Community</button> <div class="nav-dropdown-menu"> <a class="dropdown-item" href="https://treehouse-community-projects.vercel.app">Community Projects</a> <a class="dropdown-item" href="https://teamtreehouse.com/live_sessions">Live Sessions</a> <a class="dropdown-item" href="https://teamtreehouse.com/code_adventures">Code Adventures</a> <a class="dropdown-item" href="https://discord.gg/z7AYghFmhR">Discord</a> <a class="dropdown-item" href="https://teamtreehouse.com/community">Forum</a> <a class="dropdown-item" href="https://teamtreehouse.com/stories">Success Stories</a> <a class="dropdown-item" href="https://teamtreehouse.com/links">Treehouse Links</a> <a class="dropdown-item" href="https://join.teamtreehouse.com/100-days-of-code">100 Days of Code</a> </div> </div> </li> <li class="nav-item nav-item-secondary"> <div class="nav-dropdown"> <button class="nav-toggle" aria-haspopup="true" aria-expanded="false">Resources</button> <div class="nav-dropdown-menu"> <a class="dropdown-item" href="https://teamtreehouse.com/career-toolbox">Career Toolbox</a> <a class="dropdown-item" href="https://join.teamtreehouse.com/codeforward">CodeForward</a> <a class="dropdown-item" href="https://teamtreehouse.com/libraries/find-your-library">Free Treehouse Near Me</a> <a class="dropdown-item" href="/jobs">Jobs</a> <a class="dropdown-item" href="http://blog.teamtreehouse.com">Blog</a> <a class="dropdown-item" href="https://teamtreehouse.com/support">Support</a> <a class="dropdown-item" href="https://teamtreehouse.com/about">About</a> </div> </div> </li> </div> <li class="nav-item nav-item-tablet nav-item-sign-in nav22-mobile-override" data-featurette="analytics-click-event" data-target="a" data-event-category="link" data-event-action="M: Clicked Sign In" data-event-label="Source: Navbar"> <a class="nav-link nav-link-sign-in " data-featurette="analytics-click-event" data-event-category="link" data-event-action="M: Clicked Sign In" data-event-label="Source: Navbar" data-analytics-event="marketing nav link" data-analytics-link="Sign In" data-analytics-path="https://teamtreehouse.com/signin?return_to=%2Fhome" data-analytics-action="clicked" href="https://teamtreehouse.com/signin?return_to=%2Fhome">Sign In</a> </li> <li class="nav-item nav-item-free-trial nav-item-cta flex-inline-xs"> <a class="nav-link nav-link-free-trial button" target="_blank" data-featurette="analytics-click-event" data-event-category="link" data-event-action="M: Clicked Free Trial" data-event-label="Source: Navbar" data-analytics-event="marketing nav link" data-analytics-link="Free Trial" data-analytics-path="/subscribe/new?trial=yes" data-analytics-action="clicked" href="/subscribe/new?trial=yes">Free Trial</a> </li> </ul> <div class="nav-social nav-item-show-on-mobile"> <a title="Instagram" class="nav-social-link" target="_blank" rel="noopener" href="https://instagram.com/teamtreehouse"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 24 24" class="instagram-icon" aria-labelledby="instagramIcon5630218" role="img"> <title id="instagramIcon5630218">Instagram</title> <path d="M16.6,18.5H7.4c-1,0-1.9-0.8-1.9-1.9V7.4c0-1,0.8-1.9,1.9-1.9h9.3c1,0,1.9,0.8,1.9,1.9v9.3C18.5,17.7,17.7,18.5,16.6,18.5z M12,10.1c-1,0-1.9,0.8-1.9,1.9s0.8,1.9,1.9,1.9s1.9-0.8,1.9-1.9S13,10.1,12,10.1z M15.7,7.4c-0.6,0-0.9,0.4-0.9,0.9 s0.4,0.9,0.9,0.9s0.9-0.4,0.9-0.9S16.3,7.4,15.7,7.4z M16.6,12h-0.9c0,2-1.7,3.7-3.7,3.7S8.3,14,8.3,12H7.4v3.7 c0,0.6,0.4,0.9,0.9,0.9h7.4c0.6,0,0.9-0.4,0.9-0.9V12z"></path> </svg></a> <a title="Twitter" class="nav-social-link" target="_blank" rel="noopener" href="https://twitter.com/treehouse"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 24 24" class="twitter-icon" aria-labelledby="twitterIcon8487236" role="img"> <title id="twitterIcon8487236">Twitter</title> <path d="M19,8.3c-0.5,0.2-1,0.4-1.5,0.4c0.6-0.3,1-0.9,1.2-1.5c-0.5,0.3-1.1,0.5-1.7,0.7C16.5,7.3,15.8,7,15,7 c-1.5,0-2.7,1.2-2.7,2.8c0,0.2,0,0.4,0.1,0.6c-2.2-0.1-4.2-1.2-5.5-2.9C6.7,7.9,6.5,8.4,6.5,8.9c0,1,0.4,1.8,1.2,2.3 c-0.4,0-1.2-0.1-1.2-0.3c0,0,0,0,0,0c0,1.3,0.9,2.5,2.2,2.7c-0.2,0.1-0.4,0.1-0.7,0.1c-0.2,0-0.3,0-0.5-0.1c0.3,1.1,1.3,1.9,2.5,1.9 c-0.9,0.7-2.1,1.2-3.3,1.2c-0.2,0-0.4,0-0.6,0c1.2,0.8,2.6,1.2,4.1,1.2c4.9,0,7.6-4.2,7.6-7.9c0-0.1,0-0.2,0-0.4 C18.2,9.4,18.6,8.9,19,8.3z"></path> </svg></a> <a title="Facebook" class="nav-social-link" target="_blank" rel="noopener" href="https://facebook.com/teamtreehouse"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 24 24" class="facebook-icon" aria-labelledby="facebookIcon439671" role="img"> <title id="facebookIcon439671">Facebook</title> <path d="M10.3,19.8V13H7.8v-2.8h2.5V8c0-2.4,1.5-3.8,3.7-3.8c1.1,0,2.2,0.2,2.2,0.2v2.4h-1.2c-1.2,0-1.6,0.8-1.6,1.5v1.8h2.7 L15.6,13h-2.3v6.8H10.3z"></path> </svg></a> <a title="YouTube" class="nav-social-link" target="_blank" rel="noopener" href="https://youtube.com/user/gotreehouse"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 24 24" class="youtube-icon" aria-labelledby="youtubeIcon6680644" role="img"> <title id="youtubeIcon6680644">YouTube</title> <path d="M19.5,8.2c-0.2-0.7-0.7-1.2-1.4-1.4C16.9,6.5,12,6.5,12,6.5s-4.9,0-6.1,0.3C5.2,7,4.7,7.6,4.5,8.2C4.2,9.5,4.2,12,4.2,12 s0,2.5,0.3,3.8c0.2,0.7,0.7,1.2,1.4,1.4c1.2,0.3,6.1,0.3,6.1,0.3s4.9,0,6.1-0.3c0.7-0.2,1.2-0.7,1.4-1.4c0.3-1.2,0.3-3.8,0.3-3.8 S19.8,9.5,19.5,8.2z M9.9,15V9l5.2,3L9.9,15z"></path> </svg></a> <a title="LinkedIn" class="nav-social-link" target="_blank" rel="noopener" href="https://linkedin.com/company/treehouse-island-inc-"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 24 24" class="linked-in-icon" aria-labelledby="linkedinIcon5489053" role="img"> <title id="linkedinIcon5489053">LinkedIn</title> <path d="M17.5,5.5h-11C6,5.5,5.6,6,5.5,6.5v11.1c0,0.5,0.4,0.9,1,0.9h11c0.5,0,0.9-0.4,1-0.9V6.5C18.5,6,18.1,5.5,17.5,5.5z M9.4,16.6H7.5v-6.2h1.9V16.6z M8.4,9.5C7.8,9.5,7.3,9,7.3,8.4s0.5-1.1,1.1-1.1s1.1,0.5,1.1,1.1S9,9.5,8.4,9.5z M16.6,16.6h-1.9v-3 c0-0.7,0-1.7-1-1.7s-1.2,0.8-1.2,1.6v3.1h-1.9v-6.2h1.8v0.9c0.4-0.6,1-1,1.8-1c2,0,2.3,1.3,2.3,3L16.6,16.6z"></path> </svg></a> </div> </div> </nav> <section class="" > <!--[if lte IE 8]> <script src="https://js.hsforms.net/forms/v2-legacy.js"></script> <![endif]--> <link rel="preload" href="https://js.hsforms.net/forms/v2.js" as="script" type="text/javascript" crossorigin="anonymous" integrity="true"> <script src="https://js.hsforms.net/forms/v2.js"></script> <div data-featurette="marketing-track-visit" data-page="landing-page-full-stack-javascript"></div> <link rel="preload" fetchpriority="high" as="image" href=https://ecs-static.teamtreehouse.com/assets/views/marketing/home/techdegree-green-banner-69969ea6e4b8b1c43afc93a679067781da06ca9629ae41c333609128b9e06f59.webp type="image/webp"> <div class="homepage techdegrees-2023"> <section class="homepage-hero p-0-xs p-3-lg col-max" data-layout-element="hero"> <header class="homepage-hero-inner m-t-2-xs m-t-0-lg p-r-2-md"> <h2 class="text-7-xs text-5-md text-5-lg text-center-xs text-left-lg m-tb-1-xs"><a href="/techdegree">TECHDEGREE &gt; </a><span class="topic-full-stack-javascript">FULL STACK JAVASCRIPT</span></h2> <h1 class="text-center-xs text-left-lg text-5-xs p-lr-3-xs p-lr-6-md p-0-lg m-t-2-md">Get certified and job-ready with the online Full Stack JavaScript Treehouse Techdegree</h1> <h3 class="text-7-xs text-6-lg text-5-xl m-t-1-xs p-lr-3-xs p-lr-6-md p-0-lg">Learn how to develop both client-side and server-side software in our self-paced, interactive bootcamp with real-time student support. Become a Full Stack JavaScript Developer. <a data-degree-id="92" data-degree-title="Full Stack JavaScript" class="topic-full-stack-javascript" href="/subscribe/new?plan=1412&amp;plan_addon_ids%5B%5D=372&amp;trial=yes">Try it free for 7 days today.</a></h3> <ul class="checkpoints m-tb-1-xs m-tb-2-md"> <li><h3 class="text-7-xs text-6-lg text-5-xl text-left-xs">Structured curriculum and student support to keep you on track</h3></li> <li><h3 class="text-7-xs text-6-lg text-5-xl text-left-xs">Earn a certificate for your job search</h3></li> <li><h3 class="text-7-xs text-6-lg text-5-xl text-left-xs">Build projects for your portfolio</h3></li> </ul> <div class="flex-block-xs flex-justify-center-xs flex-justify-start-lg"> <a class="button primary button--primary-teal text-7-xs text-6-md text-4-lg" data-degree-id="92" data-degree-title="Full Stack JavaScript" href="/subscribe/new?plan=1412&amp;plan_addon_ids%5B%5D=372&amp;trial=yes">Enroll Now</a> </div> <a class="syllabus-link m-t-1-xs m-l-2-lg text-8-xs text-6-md text-5-lg" element="a" data-featurette="modal-trigger" data-target="syllabus-download" href="#">Download Syllabus</a> </header> <div class="td-video col-100-xs col-70-md m-b-3-xs p-lr-3-xs m-t-5-lg m-t-0-lg p-0-lg"> <video class="fixed-controls simple-controls" playsinline="" style="width: 100%; height: 100%" preload="none" poster="https://videos.teamtreehouse.com/stills/WhatIsFSJS-InApp-stills-0.jpg?token=699aef24_288fa19896933f7c66a3b8e90a42df2e252d8399" data-featurette="video-player" data-video-id="110296" data-duration="59459" data-play-icon="&amp;lt;svg preserveAspectRatio=&amp;quot;xMinYMin meet&amp;quot; viewBox=&amp;quot;0 0 11 12&amp;quot; class=&amp;quot;play-icon&amp;quot; aria-labelledby=&amp;quot;playIcon7719070&amp;quot; role=&amp;quot;img&amp;quot;&amp;gt; &amp;lt;title id=&amp;quot;playIcon7719070&amp;quot;&amp;gt;Play&amp;lt;/title&amp;gt; &amp;lt;path d=&amp;quot;M10.5,5.1l-9-5C1.3,0,1.2,0,1,0C0.8,0,0.6,0,0.5,0.1C0.2,0.3,0,0.6,0,1v10c0,0.4,0.2,0.7,0.5,0.9C0.6,12,0.8,12,1,12 c0.2,0,0.3,0,0.5-0.1l9-5C10.8,6.7,11,6.3,11,6C11,5.6,10.8,5.3,10.5,5.1z&amp;quot;&amp;gt;&amp;lt;/path&amp;gt; &amp;lt;/svg&amp;gt;" data-pause-icon="&amp;lt;svg preserveAspectRatio=&amp;quot;xMinYMin meet&amp;quot; viewBox=&amp;quot;0 0 16 20&amp;quot; class=&amp;quot;pause-icon&amp;quot; aria-labelledby=&amp;quot;pauseIcon2567382&amp;quot; role=&amp;quot;img&amp;quot;&amp;gt; &amp;lt;title id=&amp;quot;pauseIcon2567382&amp;quot;&amp;gt;Pause&amp;lt;/title&amp;gt; &amp;lt;path d=&amp;quot;M14,20c-1.1,0-2-0.9-2-2V2c0-1.1,0.9-2,2-2s2,0.9,2,2v16C16,19.1,15.1,20,14,20z M2,20c-1.1,0-2-0.9-2-2V2c0-1.1,0.9-2,2-2s2,0.9,2,2v16C4,19.1,3.1,20,2,20z&amp;quot;&amp;gt;&amp;lt;/path&amp;gt; &amp;lt;/svg&amp;gt;" data-speed-icon="&amp;lt;svg preserveAspectRatio=&amp;quot;xMinYMin meet&amp;quot; viewBox=&amp;quot;0 0 22 22&amp;quot; class=&amp;quot;speed-icon&amp;quot; aria-labelledby=&amp;quot;speedIcon5157593&amp;quot; role=&amp;quot;img&amp;quot;&amp;gt; &amp;lt;title id=&amp;quot;speedIcon5157593&amp;quot;&amp;gt;Speed&amp;lt;/title&amp;gt; &amp;lt;path d=&amp;quot;M11,22C4.9,22,0,17.1,0,11C0,4.9,4.9,0,11,0c6.1,0,11,4.9,11,11 C22,17.1,17.2,22,11,22z M11,2c-5,0-9,4-9,9c0,5,4,9,9,9c5,0,9-4,9-9C20,6,16,2,11,2z M18.5,11.5h-1c-0.3,0-0.5-0.2-0.5-0.5 c0-0.3,0.2-0.5,0.5-0.5h1c0.3,0,0.5,0.2,0.5,0.5C19,11.3,18.8,11.5,18.5,11.5z M16,16.6l-0.7-0.7c-0.2-0.2-0.2-0.5,0-0.7 s0.5-0.2,0.7,0l0.7,0.7c0.2,0.2,0.2,0.5,0,0.7C16.5,16.8,16.1,16.8,16,16.6z M15.9,6.8c-0.2,0.2-0.5,0.2-0.7,0 c-0.2-0.2-0.2-0.5,0-0.7L16,5.4c0.2-0.2,0.5-0.2,0.7,0c0.2,0.2,0.2,0.5,0,0.7L15.9,6.8z M10.6,18.1c-1.1-0.2-1.8-1.3-1.6-2.4 c0.2-1.1,2.9-7.2,3.4-7.1c0.5,0.1,0.8,6.8,0.6,7.9C12.8,17.5,11.7,18.3,10.6,18.1z M11.1,15.1c-0.5-0.1-1,0.2-1.1,0.8 c-0.1,0.5,0.2,1,0.8,1.1c0.5,0.1,1-0.2,1.1-0.8C12,15.7,11.7,15.1,11.1,15.1z M11,5c-0.3,0-0.5-0.2-0.5-0.5v-1C10.5,3.2,10.7,3,11,3 c0.3,0,0.5,0.2,0.5,0.5v1C11.5,4.8,11.3,5,11,5z M6,16.6c-0.2,0.2-0.5,0.2-0.7,0c-0.2-0.2-0.2-0.5,0-0.7l0.7-0.7 c0.2-0.2,0.5-0.2,0.7,0c0.2,0.2,0.2,0.5,0,0.7L6,16.6z M6.1,6.8L5.4,6c-0.2-0.2-0.2-0.5,0-0.7c0.2-0.2,0.5-0.2,0.7,0l0.7,0.7 C7,6.3,7,6.6,6.8,6.8C6.6,7,6.3,7,6.1,6.8z M4.5,11.5h-1C3.2,11.5,3,11.3,3,11c0-0.3,0.2-0.5,0.5-0.5h1C4.8,10.5,5,10.7,5,11 C5,11.3,4.8,11.5,4.5,11.5z&amp;quot;&amp;gt;&amp;lt;/path&amp;gt; &amp;lt;/svg&amp;gt;" data-rewind-icon="&amp;lt;svg preserveAspectRatio=&amp;quot;xMinYMin meet&amp;quot; viewBox=&amp;quot;0 0 22 25&amp;quot; class=&amp;quot;rewind-icon&amp;quot; aria-labelledby=&amp;quot;rewindIcon4239690&amp;quot; role=&amp;quot;img&amp;quot;&amp;gt; &amp;lt;title id=&amp;quot;rewindIcon4239690&amp;quot;&amp;gt;Rewind&amp;lt;/title&amp;gt; &amp;lt;path d=&amp;quot;M13.1,10.1c1.8,0,3,1.7,3,3.9v0c0,2.2-1.2,3.9-3,3.9c-1.8,0-3-1.7-3-3.9v0 C10.1,11.8,11.3,10.1,13.1,10.1z M11.4,14c0,1.5,0.7,2.7,1.8,2.7c1.1,0,1.8-1.2,1.8-2.7v0c0-1.5-0.7-2.7-1.8-2.7 C12,11.3,11.4,12.5,11.4,14L11.4,14z M22,14c0,6.1-4.9,11-11,11c-5.6,0-10.3-4.2-10.9-9.7C0,15.2,0,15.1,0,15c0-0.6,0.4-1,1-1 c0.6,0,1,0.4,1,1h0c0.5,4.5,4.3,8,8.9,8c5,0,9-4,9-9s-4-9-9-9H9.4l1.3,1.3c0.4,0.4,0.4,1,0,1.4c-0.4,0.4-1,0.4-1.4,0l-3-3 c-0.4-0.4-0.4-1,0-1.4l3-3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4L9.4,3H11C17,3,22,7.9,22,14z M6.8,10.1C7.1,10.1,7.3,10,7.5,10h0 c0.4,0,0.7,0.3,0.7,0.7v6.6c0,0.4-0.3,0.7-0.7,0.7c-0.4,0-0.7-0.3-0.7-0.7v-5.9L6,11.7c-0.1,0-0.2,0-0.3,0c-0.3,0-0.6-0.3-0.6-0.6 c0-0.3,0.2-0.5,0.5-0.6L6.8,10.1z M3.4,4l2.3,2.3c0.4,0.4,0.4,1,0,1.4c-0.4,0.4-1,0.4-1.4,0l-3-3c-0.4-0.4-0.4-1,0-1.4l3-3 c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4L3.4,4z&amp;quot;&amp;gt;&amp;lt;/path&amp;gt; &amp;lt;/svg&amp;gt;" data-volume-icon="&amp;lt;svg preserveAspectRatio=&amp;quot;xMinYMin meet&amp;quot; viewBox=&amp;quot;0 0 22 22&amp;quot; class=&amp;quot;volume-icon&amp;quot; aria-labelledby=&amp;quot;volumeIcon3805437&amp;quot; role=&amp;quot;img&amp;quot;&amp;gt; &amp;lt;title id=&amp;quot;volumeIcon3805437&amp;quot;&amp;gt;Volume&amp;lt;/title&amp;gt; &amp;lt;path d=&amp;quot;M19.1,21.2c-0.5,0.7-1.2,1.1-1.7,0.7c-0.4-0.3-0.4-1.1,0-1.8 c3.4-5.6,3.4-12.6,0-18.2c-0.4-0.7-0.4-1.4,0-1.8c0.4-0.3,1.2,0,1.7,0.7C22.9,7.1,22.9,14.9,19.1,21.2z M14.2,18.1 c-0.5-0.3-0.6-0.9-0.4-1.4c1.6-3.6,1.6-7.7,0-11.2c-0.2-0.5-0.1-1.2,0.4-1.4c0.5-0.3,1.1,0,1.4,0.6c1.9,4.1,1.9,8.8,0,12.9 C15.3,18.1,14.7,18.3,14.2,18.1z M10,19L10,19L10,19c-0.1,0-0.1-0.1-0.2-0.2L5,15l0,0H1c-0.6,0-1-1.8-1-4s0.4-4,1-4h4v0l4.8-3.8 C9.9,3.1,9.9,3,10,3c0.6,0,1,3.6,1,8S10.5,19,10,19z&amp;quot;&amp;gt;&amp;lt;/path&amp;gt; &amp;lt;/svg&amp;gt;" data-captions-icon="&amp;lt;svg preserveAspectRatio=&amp;quot;xMinYMin meet&amp;quot; viewBox=&amp;quot;0 0 22 22&amp;quot; class=&amp;quot;captions-icon&amp;quot; aria-labelledby=&amp;quot;captionsIcon3141661&amp;quot; role=&amp;quot;img&amp;quot;&amp;gt; &amp;lt;title id=&amp;quot;captionsIcon3141661&amp;quot;&amp;gt;Captions&amp;lt;/title&amp;gt; &amp;lt;path d=&amp;quot;M18,22H4c-2.2,0-4-1.8-4-4V4c0-2.2,1.8-4,4-4h14c2.2,0,4,1.8,4,4v14 C22,20.2,20.2,22,18,22z M20,5c0-1.7-1.3-3-3-3H5C3.3,2,2,3.3,2,5v12c0,1.7,1.3,3,3,3h12c1.7,0,3-1.3,3-3V5z M14.9,13.7 c0.4,0,0.7-0.1,1-0.4c0.3-0.3,0.5-0.6,0.6-1.2c0.3-0.8,1.6-0.5,1.5,0.5c0,0.4-0.6,1.5-1.1,1.9c-0.5,0.4-1.2,0.6-2,0.6 c-1,0-1.8-0.3-2.4-1c-0.6-0.7-1-1.7-1-2.9c0-1.3,0.3-2.3,1-3C13.1,7.4,14,7,15,7c0.9,0,1.6,0.3,2.2,0.8c0.3,0.3,0.6,0.7,0.8,1.4 c0.1,0.8-1,1.1-1.5,0.4c-0.1-0.5-0.3-0.7-0.5-0.9c-0.3-0.2-0.6-0.3-1-0.3c-0.5,0-1,0.2-1.3,0.6c-0.3,0.4-0.5,1.1-0.5,2 c0,1,0.2,1.7,0.5,2.1C13.9,13.4,14.4,13.7,14.9,13.7z M7.3,13.7c0.4,0,0.7-0.1,1-0.4C8.7,13,8.9,12.6,9,12c0.3-0.8,1.6-0.5,1.5,0.5 c0,0.4-0.6,1.5-1.1,1.9c-0.5,0.4-1.2,0.6-2,0.6c-1,0-1.8-0.3-2.4-1c-0.6-0.7-1-1.7-1-2.9c0-1.3,0.3-2.3,1-3C5.6,7.4,6.4,7,7.4,7 c0.9,0,1.6,0.3,2.2,0.8c0.3,0.3,0.6,0.7,0.8,1.4c0.1,0.8-1,1.1-1.5,0.4C8.8,9.1,8.7,8.9,8.4,8.7c-0.3-0.2-0.6-0.3-1-0.3 C6.8,8.3,6.4,8.5,6,9C5.7,9.4,5.5,10,5.5,11c0,1,0.2,1.7,0.5,2.1C6.4,13.4,6.8,13.7,7.3,13.7z&amp;quot;&amp;gt;&amp;lt;/path&amp;gt; &amp;lt;/svg&amp;gt;" data-fullscreen-icon="&amp;lt;svg preserveAspectRatio=&amp;quot;xMinYMin meet&amp;quot; viewBox=&amp;quot;0 0 18 18&amp;quot; class=&amp;quot;fullscreen-icon&amp;quot; aria-labelledby=&amp;quot;fullscreenIcon6955098&amp;quot; role=&amp;quot;img&amp;quot;&amp;gt; &amp;lt;title id=&amp;quot;fullscreenIcon6955098&amp;quot;&amp;gt;Full Screen&amp;lt;/title&amp;gt; &amp;lt;path d=&amp;quot;M17,9c-0.6,0-1-0.4-1-1V3.4l-4.2,4.2c-0.4,0.4-1,0.4-1.4,0c-0.4-0.4-0.4-1,0-1.4 L14.6,2H10C9.4,2,9,1.6,9,1s0.4-1,1-1h7c0.6,0,1,0.4,1,1v7C18,8.6,17.6,9,17,9z M8,18H1c-0.6,0-1-0.4-1-1v-7c0-0.6,0.4-1,1-1 c0.6,0,1,0.4,1,1v4.6l4.2-4.2c0.4-0.4,1-0.4,1.4,0c0.4,0.4,0.4,1,0,1.4L3.4,16H8c0.6,0,1,0.4,1,1S8.6,18,8,18z&amp;quot;&amp;gt;&amp;lt;/path&amp;gt; &amp;lt;/svg&amp;gt;" data-workspaces-icon="&amp;lt;svg preserveAspectRatio=&amp;quot;xMinYMin meet&amp;quot; viewBox=&amp;quot;0 0 22 22&amp;quot; class=&amp;quot;workspaces-outline-icon&amp;quot; aria-labelledby=&amp;quot;workspacesOutlineIcon5923497&amp;quot; role=&amp;quot;img&amp;quot;&amp;gt; &amp;lt;title id=&amp;quot;workspacesOutlineIcon5923497&amp;quot;&amp;gt;Workspaces&amp;lt;/title&amp;gt; &amp;lt;path d=&amp;quot;M18,22H4c-2.2,0-4-1.8-4-4V4c0-2.2,1.8-4,4-4h14c2.2,0,4,1.8,4,4v14 C22,20.2,20.2,22,18,22z M17,2H5C3.7,2,2.6,2.8,2.2,4h17.6C19.4,2.8,18.3,2,17,2z M20,6H2v11c0,1.7,1.3,3,3,3h12c1.7,0,3-1.3,3-3V6z M13.9,16.6c-0.4,0.4-1,0.4-1.4,0c-0.4-0.4-0.4-1,0-1.4l2.1-2.1l-2.1-2.1c-0.4-0.4-0.4-1,0-1.4c0.4-0.4,1-0.4,1.4,0l2.8,2.8 c0.4,0.4,0.4,1,0,1.4L13.9,16.6z M9.5,16.5c-0.4,0.4-1,0.4-1.4,0l-2.8-2.8c-0.4-0.4-0.4-1,0-1.4l2.8-2.8c0.4-0.4,1-0.4,1.4,0 c0.4,0.4,0.4,1,0,1.4L7.4,13l2.1,2.1C9.9,15.5,9.9,16.1,9.5,16.5z&amp;quot;&amp;gt;&amp;lt;/path&amp;gt; &amp;lt;/svg&amp;gt;" data-workspaces-path="/videos/110296/launch_workspace" data-track-video-view-url="/videos/110296/track/progress" data-track-video-segment-url="/videos/110296/track/segment" data-playback-rate="1.0"><source type="video/webm" src="https://videos.teamtreehouse.com/videos/WhatIsFSJS-InApp-720p.webm?token=67bc5ea4_fbea6ef6eb236ed0181880485891eeb0f45625bf" /><source type="video/mp4" src="https://videos.teamtreehouse.com/videos/WhatIsFSJS-InApp-720p.mp4?token=67bc5ea4_92a6dbf380eca64e3c0fe76c3dcf5e8df5c33c2f" /><track kind="subtitles" src="/videos/110296/captions" srclang="en" /></video> </div> </section> <section> <div class="td-submenu"> <h5><span class="grid-link">Why Techdegree</span></h5> <h5><span class="overview-link">Course Overview</span></h5> <h5><span class="pricing-link">Techdegree Pricing</span></h5> </div> </section> <section class="td-body p-t-3-xs p-t-4-md p-t-6-lg"> <div class="td-p1 p-b-4-md"> <h3 class="text-7-xs text-6-md text-4-lg text-center-xs">WHY TECHDEGREE</h3> <h2 class="text-4-xs text-center-xs m-t-1-md topic-full-stack-javascript">Launch your career</h2> <div class="td-grid"> <div class="td-grid-card round bg-purple"> <img alt="Project on a computer window" loading="lazy" width="85" height="58" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/homepage/techdegree-project-782dfed47d5546fb10ae4aaeaba1800ffe04879d5489a975b61913ca15a09f0f.webp" /> <h4 class="text-4-xs text-color-white">Real-world projects for your portfolio</h4> <h5 class="text-7-xs text-color-white">After completing a Techdegree, you’ll have a well-rounded portfolio of projects to demonstrate your newly-acquired expertise.</h5> </div> <div class="td-grid-card round"> <img alt="Cerificate" loading="lazy" width="85" height="63" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/homepage/techdegree-certificate-0f94a303f929a39d661939a9187b182f76939efbd6a49a15360305ba50a862c6.webp" /> <h4 class="text-4-xs">Certification through Accredible</h4> <h5 class="text-7-xs">Contact tech recruiters with your best foot forward—update your resume, polish up your project portfolio, and save your certification through Accredible.</h5> </div> <div class="td-grid-card round"> <img alt="Career Support" loading="lazy" width="72" height="72" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/homepage/career_support_badge-7a5376e0239d80865441e38c8b64d1076bc00925c6526ad3c5e107ba9150cb77.webp" /> <h4 class="text-4-xs">Career support and 1-on-1 sessions</h4> <h5 class="text-7-xs">Gain access to career support on Slack and meet twice over Zoom with Treehouse&#39;s Career Advisor for actionable insights that will empower you to make the most of your Techdegree experience.</h5> </div> </div> <h2 class="text-4-xs text-center-xs m-t-6-md topic-full-stack-javascript">How you'll learn</h2> <div class="td-grid"> <div class="td-grid-card round"> <img alt="Person on a call" loading="lazy" width="85" height="80" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/homepage/techdegree-support-4d337355415ca05f6e57a5cb86ddc8d7b0e7c4e702c3f9bcfae17f3bb7461074.webp" /> <h4 class="text-4-xs">Realtime student support</h4> <h5 class="text-7-xs">Throughout the Techdegree, you’ll interact closely with our student success team. Our team will review and help debug your projects, answer questions, and act as a sounding board via our exclusive Slack workspace and Zoom.</h5> </div> <div class="td-grid-card round"> <img alt="Computer monitor" loading="lazy" width="85" height="68" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/homepage/techdegree-quiz-b4e9096af766d2555628735ab6ddced9d8917521d7a4bd8956184d059e02611c.webp" /> <h4 class="text-4-xs">Interactive quizzes and code challenges</h4> <h5 class="text-7-xs">Test your knowledge with quizzes or test out of subjects you&#39;ve already mastered. Plus, use Treehouse&#39;s interactive Workspaces to create staging environments for the code you write.</h5> </div> <div class="td-grid-card round bg-blue"> <img alt="Stars resting on a person&#39;s hand" loading="lazy" width="85" height="88" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/homepage/techdegree-peer-8e4056877f10dd32d4fc364a6bea5226b04caef9c9fc60129cb0058ce8e15c4f.webp" /> <h4 class="text-4-xs text-color-white">Learn with others via Slack and peer reviews</h4> <h5 class="text-7-xs text-color-white">Connect with others in our exclusive Slack community, an integral part of the Techdegree experience. Real-world jobs also often involve reviewing code—gather experience by giving and receiving feedback with in-depth peer reviews.</h5> </div> </div> </div> </section> <section class="td-p2 p-t-2-xs p-t-6-lg"> <div class="td-p2-overview-video"> <div class="col-max"> <h3 class="text-7-xs text-5-md text-center-xs m-b-1-xs">COURSE OVERVIEW</h3> <h2 class="text-4-xs text-3-md text-center-xs m-b-1-xs m-b-4-md">Get an overview of the real-world projects you’ll build</h2> <video class="fixed-controls simple-controls" playsinline="" style="width: 100%; height: 100%" preload="none" poster="https://videos.teamtreehouse.com/stills/JS-LauraFSJSTechdegreePortfolio-stills-0.jpg?token=699aef24_c6dac91f249c73a9bdf7e031d4bb43beb41c2add" data-featurette="video-player" data-video-id="111087" data-duration="523333" data-play-icon="&amp;lt;svg preserveAspectRatio=&amp;quot;xMinYMin meet&amp;quot; viewBox=&amp;quot;0 0 11 12&amp;quot; class=&amp;quot;play-icon&amp;quot; aria-labelledby=&amp;quot;playIcon1686088&amp;quot; role=&amp;quot;img&amp;quot;&amp;gt; &amp;lt;title id=&amp;quot;playIcon1686088&amp;quot;&amp;gt;Play&amp;lt;/title&amp;gt; &amp;lt;path d=&amp;quot;M10.5,5.1l-9-5C1.3,0,1.2,0,1,0C0.8,0,0.6,0,0.5,0.1C0.2,0.3,0,0.6,0,1v10c0,0.4,0.2,0.7,0.5,0.9C0.6,12,0.8,12,1,12 c0.2,0,0.3,0,0.5-0.1l9-5C10.8,6.7,11,6.3,11,6C11,5.6,10.8,5.3,10.5,5.1z&amp;quot;&amp;gt;&amp;lt;/path&amp;gt; &amp;lt;/svg&amp;gt;" data-pause-icon="&amp;lt;svg preserveAspectRatio=&amp;quot;xMinYMin meet&amp;quot; viewBox=&amp;quot;0 0 16 20&amp;quot; class=&amp;quot;pause-icon&amp;quot; aria-labelledby=&amp;quot;pauseIcon140333&amp;quot; role=&amp;quot;img&amp;quot;&amp;gt; &amp;lt;title id=&amp;quot;pauseIcon140333&amp;quot;&amp;gt;Pause&amp;lt;/title&amp;gt; &amp;lt;path d=&amp;quot;M14,20c-1.1,0-2-0.9-2-2V2c0-1.1,0.9-2,2-2s2,0.9,2,2v16C16,19.1,15.1,20,14,20z M2,20c-1.1,0-2-0.9-2-2V2c0-1.1,0.9-2,2-2s2,0.9,2,2v16C4,19.1,3.1,20,2,20z&amp;quot;&amp;gt;&amp;lt;/path&amp;gt; &amp;lt;/svg&amp;gt;" data-speed-icon="&amp;lt;svg preserveAspectRatio=&amp;quot;xMinYMin meet&amp;quot; viewBox=&amp;quot;0 0 22 22&amp;quot; class=&amp;quot;speed-icon&amp;quot; aria-labelledby=&amp;quot;speedIcon9292251&amp;quot; role=&amp;quot;img&amp;quot;&amp;gt; &amp;lt;title id=&amp;quot;speedIcon9292251&amp;quot;&amp;gt;Speed&amp;lt;/title&amp;gt; &amp;lt;path d=&amp;quot;M11,22C4.9,22,0,17.1,0,11C0,4.9,4.9,0,11,0c6.1,0,11,4.9,11,11 C22,17.1,17.2,22,11,22z M11,2c-5,0-9,4-9,9c0,5,4,9,9,9c5,0,9-4,9-9C20,6,16,2,11,2z M18.5,11.5h-1c-0.3,0-0.5-0.2-0.5-0.5 c0-0.3,0.2-0.5,0.5-0.5h1c0.3,0,0.5,0.2,0.5,0.5C19,11.3,18.8,11.5,18.5,11.5z M16,16.6l-0.7-0.7c-0.2-0.2-0.2-0.5,0-0.7 s0.5-0.2,0.7,0l0.7,0.7c0.2,0.2,0.2,0.5,0,0.7C16.5,16.8,16.1,16.8,16,16.6z M15.9,6.8c-0.2,0.2-0.5,0.2-0.7,0 c-0.2-0.2-0.2-0.5,0-0.7L16,5.4c0.2-0.2,0.5-0.2,0.7,0c0.2,0.2,0.2,0.5,0,0.7L15.9,6.8z M10.6,18.1c-1.1-0.2-1.8-1.3-1.6-2.4 c0.2-1.1,2.9-7.2,3.4-7.1c0.5,0.1,0.8,6.8,0.6,7.9C12.8,17.5,11.7,18.3,10.6,18.1z M11.1,15.1c-0.5-0.1-1,0.2-1.1,0.8 c-0.1,0.5,0.2,1,0.8,1.1c0.5,0.1,1-0.2,1.1-0.8C12,15.7,11.7,15.1,11.1,15.1z M11,5c-0.3,0-0.5-0.2-0.5-0.5v-1C10.5,3.2,10.7,3,11,3 c0.3,0,0.5,0.2,0.5,0.5v1C11.5,4.8,11.3,5,11,5z M6,16.6c-0.2,0.2-0.5,0.2-0.7,0c-0.2-0.2-0.2-0.5,0-0.7l0.7-0.7 c0.2-0.2,0.5-0.2,0.7,0c0.2,0.2,0.2,0.5,0,0.7L6,16.6z M6.1,6.8L5.4,6c-0.2-0.2-0.2-0.5,0-0.7c0.2-0.2,0.5-0.2,0.7,0l0.7,0.7 C7,6.3,7,6.6,6.8,6.8C6.6,7,6.3,7,6.1,6.8z M4.5,11.5h-1C3.2,11.5,3,11.3,3,11c0-0.3,0.2-0.5,0.5-0.5h1C4.8,10.5,5,10.7,5,11 C5,11.3,4.8,11.5,4.5,11.5z&amp;quot;&amp;gt;&amp;lt;/path&amp;gt; &amp;lt;/svg&amp;gt;" data-rewind-icon="&amp;lt;svg preserveAspectRatio=&amp;quot;xMinYMin meet&amp;quot; viewBox=&amp;quot;0 0 22 25&amp;quot; class=&amp;quot;rewind-icon&amp;quot; aria-labelledby=&amp;quot;rewindIcon2988468&amp;quot; role=&amp;quot;img&amp;quot;&amp;gt; &amp;lt;title id=&amp;quot;rewindIcon2988468&amp;quot;&amp;gt;Rewind&amp;lt;/title&amp;gt; &amp;lt;path d=&amp;quot;M13.1,10.1c1.8,0,3,1.7,3,3.9v0c0,2.2-1.2,3.9-3,3.9c-1.8,0-3-1.7-3-3.9v0 C10.1,11.8,11.3,10.1,13.1,10.1z M11.4,14c0,1.5,0.7,2.7,1.8,2.7c1.1,0,1.8-1.2,1.8-2.7v0c0-1.5-0.7-2.7-1.8-2.7 C12,11.3,11.4,12.5,11.4,14L11.4,14z M22,14c0,6.1-4.9,11-11,11c-5.6,0-10.3-4.2-10.9-9.7C0,15.2,0,15.1,0,15c0-0.6,0.4-1,1-1 c0.6,0,1,0.4,1,1h0c0.5,4.5,4.3,8,8.9,8c5,0,9-4,9-9s-4-9-9-9H9.4l1.3,1.3c0.4,0.4,0.4,1,0,1.4c-0.4,0.4-1,0.4-1.4,0l-3-3 c-0.4-0.4-0.4-1,0-1.4l3-3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4L9.4,3H11C17,3,22,7.9,22,14z M6.8,10.1C7.1,10.1,7.3,10,7.5,10h0 c0.4,0,0.7,0.3,0.7,0.7v6.6c0,0.4-0.3,0.7-0.7,0.7c-0.4,0-0.7-0.3-0.7-0.7v-5.9L6,11.7c-0.1,0-0.2,0-0.3,0c-0.3,0-0.6-0.3-0.6-0.6 c0-0.3,0.2-0.5,0.5-0.6L6.8,10.1z M3.4,4l2.3,2.3c0.4,0.4,0.4,1,0,1.4c-0.4,0.4-1,0.4-1.4,0l-3-3c-0.4-0.4-0.4-1,0-1.4l3-3 c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4L3.4,4z&amp;quot;&amp;gt;&amp;lt;/path&amp;gt; &amp;lt;/svg&amp;gt;" data-volume-icon="&amp;lt;svg preserveAspectRatio=&amp;quot;xMinYMin meet&amp;quot; viewBox=&amp;quot;0 0 22 22&amp;quot; class=&amp;quot;volume-icon&amp;quot; aria-labelledby=&amp;quot;volumeIcon981470&amp;quot; role=&amp;quot;img&amp;quot;&amp;gt; &amp;lt;title id=&amp;quot;volumeIcon981470&amp;quot;&amp;gt;Volume&amp;lt;/title&amp;gt; &amp;lt;path d=&amp;quot;M19.1,21.2c-0.5,0.7-1.2,1.1-1.7,0.7c-0.4-0.3-0.4-1.1,0-1.8 c3.4-5.6,3.4-12.6,0-18.2c-0.4-0.7-0.4-1.4,0-1.8c0.4-0.3,1.2,0,1.7,0.7C22.9,7.1,22.9,14.9,19.1,21.2z M14.2,18.1 c-0.5-0.3-0.6-0.9-0.4-1.4c1.6-3.6,1.6-7.7,0-11.2c-0.2-0.5-0.1-1.2,0.4-1.4c0.5-0.3,1.1,0,1.4,0.6c1.9,4.1,1.9,8.8,0,12.9 C15.3,18.1,14.7,18.3,14.2,18.1z M10,19L10,19L10,19c-0.1,0-0.1-0.1-0.2-0.2L5,15l0,0H1c-0.6,0-1-1.8-1-4s0.4-4,1-4h4v0l4.8-3.8 C9.9,3.1,9.9,3,10,3c0.6,0,1,3.6,1,8S10.5,19,10,19z&amp;quot;&amp;gt;&amp;lt;/path&amp;gt; &amp;lt;/svg&amp;gt;" data-captions-icon="&amp;lt;svg preserveAspectRatio=&amp;quot;xMinYMin meet&amp;quot; viewBox=&amp;quot;0 0 22 22&amp;quot; class=&amp;quot;captions-icon&amp;quot; aria-labelledby=&amp;quot;captionsIcon2227148&amp;quot; role=&amp;quot;img&amp;quot;&amp;gt; &amp;lt;title id=&amp;quot;captionsIcon2227148&amp;quot;&amp;gt;Captions&amp;lt;/title&amp;gt; &amp;lt;path d=&amp;quot;M18,22H4c-2.2,0-4-1.8-4-4V4c0-2.2,1.8-4,4-4h14c2.2,0,4,1.8,4,4v14 C22,20.2,20.2,22,18,22z M20,5c0-1.7-1.3-3-3-3H5C3.3,2,2,3.3,2,5v12c0,1.7,1.3,3,3,3h12c1.7,0,3-1.3,3-3V5z M14.9,13.7 c0.4,0,0.7-0.1,1-0.4c0.3-0.3,0.5-0.6,0.6-1.2c0.3-0.8,1.6-0.5,1.5,0.5c0,0.4-0.6,1.5-1.1,1.9c-0.5,0.4-1.2,0.6-2,0.6 c-1,0-1.8-0.3-2.4-1c-0.6-0.7-1-1.7-1-2.9c0-1.3,0.3-2.3,1-3C13.1,7.4,14,7,15,7c0.9,0,1.6,0.3,2.2,0.8c0.3,0.3,0.6,0.7,0.8,1.4 c0.1,0.8-1,1.1-1.5,0.4c-0.1-0.5-0.3-0.7-0.5-0.9c-0.3-0.2-0.6-0.3-1-0.3c-0.5,0-1,0.2-1.3,0.6c-0.3,0.4-0.5,1.1-0.5,2 c0,1,0.2,1.7,0.5,2.1C13.9,13.4,14.4,13.7,14.9,13.7z M7.3,13.7c0.4,0,0.7-0.1,1-0.4C8.7,13,8.9,12.6,9,12c0.3-0.8,1.6-0.5,1.5,0.5 c0,0.4-0.6,1.5-1.1,1.9c-0.5,0.4-1.2,0.6-2,0.6c-1,0-1.8-0.3-2.4-1c-0.6-0.7-1-1.7-1-2.9c0-1.3,0.3-2.3,1-3C5.6,7.4,6.4,7,7.4,7 c0.9,0,1.6,0.3,2.2,0.8c0.3,0.3,0.6,0.7,0.8,1.4c0.1,0.8-1,1.1-1.5,0.4C8.8,9.1,8.7,8.9,8.4,8.7c-0.3-0.2-0.6-0.3-1-0.3 C6.8,8.3,6.4,8.5,6,9C5.7,9.4,5.5,10,5.5,11c0,1,0.2,1.7,0.5,2.1C6.4,13.4,6.8,13.7,7.3,13.7z&amp;quot;&amp;gt;&amp;lt;/path&amp;gt; &amp;lt;/svg&amp;gt;" data-fullscreen-icon="&amp;lt;svg preserveAspectRatio=&amp;quot;xMinYMin meet&amp;quot; viewBox=&amp;quot;0 0 18 18&amp;quot; class=&amp;quot;fullscreen-icon&amp;quot; aria-labelledby=&amp;quot;fullscreenIcon6664411&amp;quot; role=&amp;quot;img&amp;quot;&amp;gt; &amp;lt;title id=&amp;quot;fullscreenIcon6664411&amp;quot;&amp;gt;Full Screen&amp;lt;/title&amp;gt; &amp;lt;path d=&amp;quot;M17,9c-0.6,0-1-0.4-1-1V3.4l-4.2,4.2c-0.4,0.4-1,0.4-1.4,0c-0.4-0.4-0.4-1,0-1.4 L14.6,2H10C9.4,2,9,1.6,9,1s0.4-1,1-1h7c0.6,0,1,0.4,1,1v7C18,8.6,17.6,9,17,9z M8,18H1c-0.6,0-1-0.4-1-1v-7c0-0.6,0.4-1,1-1 c0.6,0,1,0.4,1,1v4.6l4.2-4.2c0.4-0.4,1-0.4,1.4,0c0.4,0.4,0.4,1,0,1.4L3.4,16H8c0.6,0,1,0.4,1,1S8.6,18,8,18z&amp;quot;&amp;gt;&amp;lt;/path&amp;gt; &amp;lt;/svg&amp;gt;" data-workspaces-icon="&amp;lt;svg preserveAspectRatio=&amp;quot;xMinYMin meet&amp;quot; viewBox=&amp;quot;0 0 22 22&amp;quot; class=&amp;quot;workspaces-outline-icon&amp;quot; aria-labelledby=&amp;quot;workspacesOutlineIcon6903002&amp;quot; role=&amp;quot;img&amp;quot;&amp;gt; &amp;lt;title id=&amp;quot;workspacesOutlineIcon6903002&amp;quot;&amp;gt;Workspaces&amp;lt;/title&amp;gt; &amp;lt;path d=&amp;quot;M18,22H4c-2.2,0-4-1.8-4-4V4c0-2.2,1.8-4,4-4h14c2.2,0,4,1.8,4,4v14 C22,20.2,20.2,22,18,22z M17,2H5C3.7,2,2.6,2.8,2.2,4h17.6C19.4,2.8,18.3,2,17,2z M20,6H2v11c0,1.7,1.3,3,3,3h12c1.7,0,3-1.3,3-3V6z M13.9,16.6c-0.4,0.4-1,0.4-1.4,0c-0.4-0.4-0.4-1,0-1.4l2.1-2.1l-2.1-2.1c-0.4-0.4-0.4-1,0-1.4c0.4-0.4,1-0.4,1.4,0l2.8,2.8 c0.4,0.4,0.4,1,0,1.4L13.9,16.6z M9.5,16.5c-0.4,0.4-1,0.4-1.4,0l-2.8-2.8c-0.4-0.4-0.4-1,0-1.4l2.8-2.8c0.4-0.4,1-0.4,1.4,0 c0.4,0.4,0.4,1,0,1.4L7.4,13l2.1,2.1C9.9,15.5,9.9,16.1,9.5,16.5z&amp;quot;&amp;gt;&amp;lt;/path&amp;gt; &amp;lt;/svg&amp;gt;" data-workspaces-path="/videos/111087/launch_workspace" data-track-video-view-url="/videos/111087/track/progress" data-track-video-segment-url="/videos/111087/track/segment" data-playback-rate="1.0"><source type="video/webm" src="https://videos.teamtreehouse.com/videos/JS-LauraFSJSTechdegreePortfolio-720p.webm?token=67bc5ea4_cfa1ff9daccff0440dcf53449148bf0c652d9162" /><source type="video/mp4" src="https://videos.teamtreehouse.com/videos/JS-LauraFSJSTechdegreePortfolio-720p.mp4?token=67bc5ea4_635215965a13f3fb2b5eff55fb5d76c6f7791bc0" /><track kind="subtitles" src="/videos/111087/captions" srclang="en" /></video> </div> </div> <div class="project-cards bg-turquoise"> <h3 class="text-7-xs text-5-md text-center-xs text-color-white">COURSE OVERVIEW</h3> <h2 class="text-center-xs">What you'll learn</h2> <ul class="project-list"> <li class="project-cards-project"> <header class="project-cards-project-header"> <div class="project-cards-project-header-left"> <div> <img alt="folder" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/shared/folder-icon-bff37d6c69c079b01f742fd465caaca460d840a6b76f64eda58a5b39ff651bbd.svg" width="11" height="9" /> <h4> Project 1 | 16 Activities </h4> </div> <h3> A Random Quote Generator </h3> </div> <div class="project-cards-project-header-right"> <svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.707098 1.37075L1.21089 0.866958C1.60142 0.476433 2.23458 0.476433 2.62511 0.866957L7.28459 5.52644C7.67512 5.91697 7.67512 6.55013 7.28459 6.94066L2.62511 11.6001C2.23458 11.9907 1.60142 11.9907 1.2109 11.6001L0.707098 11.0963C0.316574 10.7058 0.316574 10.0727 0.707098 9.68213L3.44857 6.94066C3.8391 6.55013 3.8391 5.91697 3.44857 5.52644L0.707098 2.78497C0.316574 2.39444 0.316574 1.76128 0.707098 1.37075Z" fill="currentColor"/> <path d="M5.98151 1.2109L6.48531 0.707107C6.87583 0.316582 7.509 0.316582 7.89952 0.707106L12.559 5.36659C12.9495 5.75711 12.9495 6.39028 12.559 6.7808L7.89952 11.4403C7.509 11.8308 6.87583 11.8308 6.48531 11.4403L5.98151 10.9365C5.59099 10.546 5.59099 9.9128 5.98151 9.52228L8.72299 6.7808C9.11351 6.39028 9.11351 5.75711 8.72299 5.36659L5.98151 2.62512C5.59099 2.23459 5.59099 1.60143 5.98151 1.2109Z" fill="currentColor"/> </svg> </div> </header> <div class="project-cards-project-card"> <h4 class="text-6-xs text-4-md m-t-1-xs"> Module Info & Overview </h4> <p class="m-t-1-xs"> Practice your knowledge of basic JavaScript syntax and data structures by building a Random Quote Generator, a program that displays a randomly selected quote each time the user clicks a button. </p> <a class="project-cards-project-card-button button primary button--primary-teal" element="a" data-featurette="modal-trigger" data-target="syllabus-download" href="#">Download Syllabus</a> </div> </li> <li class="project-cards-project"> <header class="project-cards-project-header"> <div class="project-cards-project-header-left"> <div> <img alt="folder" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/shared/folder-icon-bff37d6c69c079b01f742fd465caaca460d840a6b76f64eda58a5b39ff651bbd.svg" width="11" height="9" /> <h4> Project 2 | 17 Activities </h4> </div> <h3> Data Pagination and Filtering </h3> </div> <div class="project-cards-project-header-right"> <svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.707098 1.37075L1.21089 0.866958C1.60142 0.476433 2.23458 0.476433 2.62511 0.866957L7.28459 5.52644C7.67512 5.91697 7.67512 6.55013 7.28459 6.94066L2.62511 11.6001C2.23458 11.9907 1.60142 11.9907 1.2109 11.6001L0.707098 11.0963C0.316574 10.7058 0.316574 10.0727 0.707098 9.68213L3.44857 6.94066C3.8391 6.55013 3.8391 5.91697 3.44857 5.52644L0.707098 2.78497C0.316574 2.39444 0.316574 1.76128 0.707098 1.37075Z" fill="currentColor"/> <path d="M5.98151 1.2109L6.48531 0.707107C6.87583 0.316582 7.509 0.316582 7.89952 0.707106L12.559 5.36659C12.9495 5.75711 12.9495 6.39028 12.559 6.7808L7.89952 11.4403C7.509 11.8308 6.87583 11.8308 6.48531 11.4403L5.98151 10.9365C5.59099 10.546 5.59099 9.9128 5.98151 9.52228L8.72299 6.7808C9.11351 6.39028 9.11351 5.75711 8.72299 5.36659L5.98151 2.62512C5.59099 2.23459 5.59099 1.60143 5.98151 1.2109Z" fill="currentColor"/> </svg> </div> </header> <div class="project-cards-project-card"> <h4 class="text-6-xs text-4-md m-t-1-xs"> Module Info & Overview </h4> <p class="m-t-1-xs"> Displaying a large amount of data on a web page, like a list of 200 movie titles or 400 products, can overwhelm a user with too much information at once. A common solution is to create separate “pages” that each display a small portion of the data. In this project, you&#39;ll write JavaScript to display several “pages” of student data that the user can easily navigate and view. </p> <a class="project-cards-project-card-button button primary button--primary-teal" element="a" data-featurette="modal-trigger" data-target="syllabus-download" href="#">Download Syllabus</a> </div> </li> <li class="project-cards-project"> <header class="project-cards-project-header"> <div class="project-cards-project-header-left"> <div> <img alt="folder" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/shared/folder-icon-bff37d6c69c079b01f742fd465caaca460d840a6b76f64eda58a5b39ff651bbd.svg" width="11" height="9" /> <h4> Project 3 | 12 Activities </h4> </div> <h3> Interactive Form </h3> </div> <div class="project-cards-project-header-right"> <svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.707098 1.37075L1.21089 0.866958C1.60142 0.476433 2.23458 0.476433 2.62511 0.866957L7.28459 5.52644C7.67512 5.91697 7.67512 6.55013 7.28459 6.94066L2.62511 11.6001C2.23458 11.9907 1.60142 11.9907 1.2109 11.6001L0.707098 11.0963C0.316574 10.7058 0.316574 10.0727 0.707098 9.68213L3.44857 6.94066C3.8391 6.55013 3.8391 5.91697 3.44857 5.52644L0.707098 2.78497C0.316574 2.39444 0.316574 1.76128 0.707098 1.37075Z" fill="currentColor"/> <path d="M5.98151 1.2109L6.48531 0.707107C6.87583 0.316582 7.509 0.316582 7.89952 0.707106L12.559 5.36659C12.9495 5.75711 12.9495 6.39028 12.559 6.7808L7.89952 11.4403C7.509 11.8308 6.87583 11.8308 6.48531 11.4403L5.98151 10.9365C5.59099 10.546 5.59099 9.9128 5.98151 9.52228L8.72299 6.7808C9.11351 6.39028 9.11351 5.75711 8.72299 5.36659L5.98151 2.62512C5.59099 2.23459 5.59099 1.60143 5.98151 1.2109Z" fill="currentColor"/> </svg> </div> </header> <div class="project-cards-project-card"> <h4 class="text-6-xs text-4-md m-t-1-xs"> Module Info & Overview </h4> <p class="m-t-1-xs"> Full Stack JavaScript developers create forms to collect information from users for nearly every website and application they build. For this project, you’ll use your skills to enhance a form so that it’s engaging, interactive, and easy to use. </p> <a class="project-cards-project-card-button button primary button--primary-teal" element="a" data-featurette="modal-trigger" data-target="syllabus-download" href="#">Download Syllabus</a> </div> </li> <li class="project-cards-project"> <header class="project-cards-project-header"> <div class="project-cards-project-header-left"> <div> <img alt="folder" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/shared/folder-icon-bff37d6c69c079b01f742fd465caaca460d840a6b76f64eda58a5b39ff651bbd.svg" width="11" height="9" /> <h4> Project 4 | 8 Activities </h4> </div> <h3> OOP Game Show App </h3> </div> <div class="project-cards-project-header-right"> <svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.707098 1.37075L1.21089 0.866958C1.60142 0.476433 2.23458 0.476433 2.62511 0.866957L7.28459 5.52644C7.67512 5.91697 7.67512 6.55013 7.28459 6.94066L2.62511 11.6001C2.23458 11.9907 1.60142 11.9907 1.2109 11.6001L0.707098 11.0963C0.316574 10.7058 0.316574 10.0727 0.707098 9.68213L3.44857 6.94066C3.8391 6.55013 3.8391 5.91697 3.44857 5.52644L0.707098 2.78497C0.316574 2.39444 0.316574 1.76128 0.707098 1.37075Z" fill="currentColor"/> <path d="M5.98151 1.2109L6.48531 0.707107C6.87583 0.316582 7.509 0.316582 7.89952 0.707106L12.559 5.36659C12.9495 5.75711 12.9495 6.39028 12.559 6.7808L7.89952 11.4403C7.509 11.8308 6.87583 11.8308 6.48531 11.4403L5.98151 10.9365C5.59099 10.546 5.59099 9.9128 5.98151 9.52228L8.72299 6.7808C9.11351 6.39028 9.11351 5.75711 8.72299 5.36659L5.98151 2.62512C5.59099 2.23459 5.59099 1.60143 5.98151 1.2109Z" fill="currentColor"/> </svg> </div> </header> <div class="project-cards-project-card"> <h4 class="text-6-xs text-4-md m-t-1-xs"> Module Info & Overview </h4> <p class="m-t-1-xs"> Create a browser-based, word guessing game: &quot;Phrase Hunter.&quot; You’ll use JavaScript and OOP (Object-Oriented Programming) to select a random, hidden phrase. A player tries to guess the phrase by selecting individual letters from an onscreen keyboard. Can they guess the phrase before they run out of attempts? </p> <a class="project-cards-project-card-button button primary button--primary-teal" element="a" data-featurette="modal-trigger" data-target="syllabus-download" href="#">Download Syllabus</a> </div> </li> <li class="project-cards-project"> <header class="project-cards-project-header"> <div class="project-cards-project-header-left"> <div> <img alt="folder" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/shared/folder-icon-bff37d6c69c079b01f742fd465caaca460d840a6b76f64eda58a5b39ff651bbd.svg" width="11" height="9" /> <h4> Project 5 | 10 Activities </h4> </div> <h3> Public API Requests </h3> </div> <div class="project-cards-project-header-right"> <svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.707098 1.37075L1.21089 0.866958C1.60142 0.476433 2.23458 0.476433 2.62511 0.866957L7.28459 5.52644C7.67512 5.91697 7.67512 6.55013 7.28459 6.94066L2.62511 11.6001C2.23458 11.9907 1.60142 11.9907 1.2109 11.6001L0.707098 11.0963C0.316574 10.7058 0.316574 10.0727 0.707098 9.68213L3.44857 6.94066C3.8391 6.55013 3.8391 5.91697 3.44857 5.52644L0.707098 2.78497C0.316574 2.39444 0.316574 1.76128 0.707098 1.37075Z" fill="currentColor"/> <path d="M5.98151 1.2109L6.48531 0.707107C6.87583 0.316582 7.509 0.316582 7.89952 0.707106L12.559 5.36659C12.9495 5.75711 12.9495 6.39028 12.559 6.7808L7.89952 11.4403C7.509 11.8308 6.87583 11.8308 6.48531 11.4403L5.98151 10.9365C5.59099 10.546 5.59099 9.9128 5.98151 9.52228L8.72299 6.7808C9.11351 6.39028 9.11351 5.75711 8.72299 5.36659L5.98151 2.62512C5.59099 2.23459 5.59099 1.60143 5.98151 1.2109Z" fill="currentColor"/> </svg> </div> </header> <div class="project-cards-project-card"> <h4 class="text-6-xs text-4-md m-t-1-xs"> Module Info & Overview </h4> <p class="m-t-1-xs"> Many sites — Twitter, Facebook, IMDB, and Wikipedia to name a few — offer a vast sea of data that you can access and display on your own web pages. Using JavaScript, you’ll create an employee directory by communicating with a third-party API (Application Programming Interface). </p> <a class="project-cards-project-card-button button primary button--primary-teal" element="a" data-featurette="modal-trigger" data-target="syllabus-download" href="#">Download Syllabus</a> </div> </li> <li class="project-cards-project"> <header class="project-cards-project-header"> <div class="project-cards-project-header-left"> <div> <img alt="folder" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/shared/folder-icon-bff37d6c69c079b01f742fd465caaca460d840a6b76f64eda58a5b39ff651bbd.svg" width="11" height="9" /> <h4> Project 6 | 10 Activities </h4> </div> <h3> Static Node.js and Express Site </h3> </div> <div class="project-cards-project-header-right"> <svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.707098 1.37075L1.21089 0.866958C1.60142 0.476433 2.23458 0.476433 2.62511 0.866957L7.28459 5.52644C7.67512 5.91697 7.67512 6.55013 7.28459 6.94066L2.62511 11.6001C2.23458 11.9907 1.60142 11.9907 1.2109 11.6001L0.707098 11.0963C0.316574 10.7058 0.316574 10.0727 0.707098 9.68213L3.44857 6.94066C3.8391 6.55013 3.8391 5.91697 3.44857 5.52644L0.707098 2.78497C0.316574 2.39444 0.316574 1.76128 0.707098 1.37075Z" fill="currentColor"/> <path d="M5.98151 1.2109L6.48531 0.707107C6.87583 0.316582 7.509 0.316582 7.89952 0.707106L12.559 5.36659C12.9495 5.75711 12.9495 6.39028 12.559 6.7808L7.89952 11.4403C7.509 11.8308 6.87583 11.8308 6.48531 11.4403L5.98151 10.9365C5.59099 10.546 5.59099 9.9128 5.98151 9.52228L8.72299 6.7808C9.11351 6.39028 9.11351 5.75711 8.72299 5.36659L5.98151 2.62512C5.59099 2.23459 5.59099 1.60143 5.98151 1.2109Z" fill="currentColor"/> </svg> </div> </header> <div class="project-cards-project-card"> <h4 class="text-6-xs text-4-md m-t-1-xs"> Module Info & Overview </h4> <p class="m-t-1-xs"> Node.js and Express make a powerful pair when used together on the server side, and are used everyday to make fast, modular and dynamic web applications. For this project, you&#39;ll use Node.js, Express and Pug templates to create a portfolio site to show off the projects you&#39;ve built. </p> <a class="project-cards-project-card-button button primary button--primary-teal" element="a" data-featurette="modal-trigger" data-target="syllabus-download" href="#">Download Syllabus</a> </div> </li> <li class="project-cards-project"> <header class="project-cards-project-header"> <div class="project-cards-project-header-left"> <div> <img alt="folder" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/shared/folder-icon-bff37d6c69c079b01f742fd465caaca460d840a6b76f64eda58a5b39ff651bbd.svg" width="11" height="9" /> <h4> Project 7 | 10 Activities </h4> </div> <h3> React Gallery App </h3> </div> <div class="project-cards-project-header-right"> <svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.707098 1.37075L1.21089 0.866958C1.60142 0.476433 2.23458 0.476433 2.62511 0.866957L7.28459 5.52644C7.67512 5.91697 7.67512 6.55013 7.28459 6.94066L2.62511 11.6001C2.23458 11.9907 1.60142 11.9907 1.2109 11.6001L0.707098 11.0963C0.316574 10.7058 0.316574 10.0727 0.707098 9.68213L3.44857 6.94066C3.8391 6.55013 3.8391 5.91697 3.44857 5.52644L0.707098 2.78497C0.316574 2.39444 0.316574 1.76128 0.707098 1.37075Z" fill="currentColor"/> <path d="M5.98151 1.2109L6.48531 0.707107C6.87583 0.316582 7.509 0.316582 7.89952 0.707106L12.559 5.36659C12.9495 5.75711 12.9495 6.39028 12.559 6.7808L7.89952 11.4403C7.509 11.8308 6.87583 11.8308 6.48531 11.4403L5.98151 10.9365C5.59099 10.546 5.59099 9.9128 5.98151 9.52228L8.72299 6.7808C9.11351 6.39028 9.11351 5.75711 8.72299 5.36659L5.98151 2.62512C5.59099 2.23459 5.59099 1.60143 5.98151 1.2109Z" fill="currentColor"/> </svg> </div> </header> <div class="project-cards-project-card"> <h4 class="text-6-xs text-4-md m-t-1-xs"> Module Info & Overview </h4> <p class="m-t-1-xs"> React is one of the most popular development libraries on the web, which is why React developers are in such great demand. So let&#39;s up those skills and get some valuable practice and experience by using React to build a fast and lightweight gallery app with a modern approach. </p> <a class="project-cards-project-card-button button primary button--primary-teal" element="a" data-featurette="modal-trigger" data-target="syllabus-download" href="#">Download Syllabus</a> </div> </li> <li class="project-cards-project"> <header class="project-cards-project-header"> <div class="project-cards-project-header-left"> <div> <img alt="folder" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/shared/folder-icon-bff37d6c69c079b01f742fd465caaca460d840a6b76f64eda58a5b39ff651bbd.svg" width="11" height="9" /> <h4> Project 8 | 6 Activities </h4> </div> <h3> SQL Library Manager </h3> </div> <div class="project-cards-project-header-right"> <svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.707098 1.37075L1.21089 0.866958C1.60142 0.476433 2.23458 0.476433 2.62511 0.866957L7.28459 5.52644C7.67512 5.91697 7.67512 6.55013 7.28459 6.94066L2.62511 11.6001C2.23458 11.9907 1.60142 11.9907 1.2109 11.6001L0.707098 11.0963C0.316574 10.7058 0.316574 10.0727 0.707098 9.68213L3.44857 6.94066C3.8391 6.55013 3.8391 5.91697 3.44857 5.52644L0.707098 2.78497C0.316574 2.39444 0.316574 1.76128 0.707098 1.37075Z" fill="currentColor"/> <path d="M5.98151 1.2109L6.48531 0.707107C6.87583 0.316582 7.509 0.316582 7.89952 0.707106L12.559 5.36659C12.9495 5.75711 12.9495 6.39028 12.559 6.7808L7.89952 11.4403C7.509 11.8308 6.87583 11.8308 6.48531 11.4403L5.98151 10.9365C5.59099 10.546 5.59099 9.9128 5.98151 9.52228L8.72299 6.7808C9.11351 6.39028 9.11351 5.75711 8.72299 5.36659L5.98151 2.62512C5.59099 2.23459 5.59099 1.60143 5.98151 1.2109Z" fill="currentColor"/> </svg> </div> </header> <div class="project-cards-project-card"> <h4 class="text-6-xs text-4-md m-t-1-xs"> Module Info & Overview </h4> <p class="m-t-1-xs"> Working with databases — storing, retrieving, updating and deleting information — is an important software developer skill. In this project, you&#39;ll create a web application for listing, adding, updating, and deleting books in a library application, using JavaScript, Node.js, Express, Pug, and the SQL ORM Sequelize. </p> <a class="project-cards-project-card-button button primary button--primary-teal" element="a" data-featurette="modal-trigger" data-target="syllabus-download" href="#">Download Syllabus</a> </div> </li> <li class="project-cards-project"> <header class="project-cards-project-header"> <div class="project-cards-project-header-left"> <div> <img alt="folder" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/shared/folder-icon-bff37d6c69c079b01f742fd465caaca460d840a6b76f64eda58a5b39ff651bbd.svg" width="11" height="9" /> <h4> Project 9 | 8 Activities </h4> </div> <h3> REST API </h3> </div> <div class="project-cards-project-header-right"> <svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.707098 1.37075L1.21089 0.866958C1.60142 0.476433 2.23458 0.476433 2.62511 0.866957L7.28459 5.52644C7.67512 5.91697 7.67512 6.55013 7.28459 6.94066L2.62511 11.6001C2.23458 11.9907 1.60142 11.9907 1.2109 11.6001L0.707098 11.0963C0.316574 10.7058 0.316574 10.0727 0.707098 9.68213L3.44857 6.94066C3.8391 6.55013 3.8391 5.91697 3.44857 5.52644L0.707098 2.78497C0.316574 2.39444 0.316574 1.76128 0.707098 1.37075Z" fill="currentColor"/> <path d="M5.98151 1.2109L6.48531 0.707107C6.87583 0.316582 7.509 0.316582 7.89952 0.707106L12.559 5.36659C12.9495 5.75711 12.9495 6.39028 12.559 6.7808L7.89952 11.4403C7.509 11.8308 6.87583 11.8308 6.48531 11.4403L5.98151 10.9365C5.59099 10.546 5.59099 9.9128 5.98151 9.52228L8.72299 6.7808C9.11351 6.39028 9.11351 5.75711 8.72299 5.36659L5.98151 2.62512C5.59099 2.23459 5.59099 1.60143 5.98151 1.2109Z" fill="currentColor"/> </svg> </div> </header> <div class="project-cards-project-card"> <h4 class="text-6-xs text-4-md m-t-1-xs"> Module Info & Overview </h4> <p class="m-t-1-xs"> In this project, you’ll use the popular Express web application framework and a SQL database to create a REST API that lets users create, read, update, and delete items from a school database. </p> <a class="project-cards-project-card-button button primary button--primary-teal" element="a" data-featurette="modal-trigger" data-target="syllabus-download" href="#">Download Syllabus</a> </div> </li> <li class="project-cards-project"> <header class="project-cards-project-header"> <div class="project-cards-project-header-left"> <div> <img alt="folder" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/shared/folder-icon-bff37d6c69c079b01f742fd465caaca460d840a6b76f64eda58a5b39ff651bbd.svg" width="11" height="9" /> <h4> Project 10 | 5 Activities </h4> </div> <h3> Full Stack App with React and a REST API </h3> </div> <div class="project-cards-project-header-right"> <svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.707098 1.37075L1.21089 0.866958C1.60142 0.476433 2.23458 0.476433 2.62511 0.866957L7.28459 5.52644C7.67512 5.91697 7.67512 6.55013 7.28459 6.94066L2.62511 11.6001C2.23458 11.9907 1.60142 11.9907 1.2109 11.6001L0.707098 11.0963C0.316574 10.7058 0.316574 10.0727 0.707098 9.68213L3.44857 6.94066C3.8391 6.55013 3.8391 5.91697 3.44857 5.52644L0.707098 2.78497C0.316574 2.39444 0.316574 1.76128 0.707098 1.37075Z" fill="currentColor"/> <path d="M5.98151 1.2109L6.48531 0.707107C6.87583 0.316582 7.509 0.316582 7.89952 0.707106L12.559 5.36659C12.9495 5.75711 12.9495 6.39028 12.559 6.7808L7.89952 11.4403C7.509 11.8308 6.87583 11.8308 6.48531 11.4403L5.98151 10.9365C5.59099 10.546 5.59099 9.9128 5.98151 9.52228L8.72299 6.7808C9.11351 6.39028 9.11351 5.75711 8.72299 5.36659L5.98151 2.62512C5.59099 2.23459 5.59099 1.60143 5.98151 1.2109Z" fill="currentColor"/> </svg> </div> </header> <div class="project-cards-project-card"> <h4 class="text-6-xs text-4-md m-t-1-xs"> Module Info & Overview </h4> <p class="m-t-1-xs"> In your final project, you&#39;ll use React to create a client for your existing school database REST API (that you created in a previous project). When completed, your full stack JavaScript application will allow users to view a list of courses and the detail for a specific course, sign up to create an account or sign in with an existing account, and create, update, or delete courses. </p> <a class="project-cards-project-card-button button primary button--primary-teal" element="a" data-featurette="modal-trigger" data-target="syllabus-download" href="#">Download Syllabus</a> </div> </li> </ul> <div class="project-cards-desktop"> <ul class="desktop-project-list"> <li class="project-cards-project"> <header class="project-cards-project-header"> <div class="project-cards-project-header-left"> <div> <img alt="folder" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/shared/folder-icon-bff37d6c69c079b01f742fd465caaca460d840a6b76f64eda58a5b39ff651bbd.svg" width="11" height="9" /> <h4> Project 1 | 16 Activities </h4> </div> <h3> A Random Quote Generator </h3> </div> <div class="project-cards-project-header-right"> <svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.707098 1.37075L1.21089 0.866958C1.60142 0.476433 2.23458 0.476433 2.62511 0.866957L7.28459 5.52644C7.67512 5.91697 7.67512 6.55013 7.28459 6.94066L2.62511 11.6001C2.23458 11.9907 1.60142 11.9907 1.2109 11.6001L0.707098 11.0963C0.316574 10.7058 0.316574 10.0727 0.707098 9.68213L3.44857 6.94066C3.8391 6.55013 3.8391 5.91697 3.44857 5.52644L0.707098 2.78497C0.316574 2.39444 0.316574 1.76128 0.707098 1.37075Z" fill="currentColor"/> <path d="M5.98151 1.2109L6.48531 0.707107C6.87583 0.316582 7.509 0.316582 7.89952 0.707106L12.559 5.36659C12.9495 5.75711 12.9495 6.39028 12.559 6.7808L7.89952 11.4403C7.509 11.8308 6.87583 11.8308 6.48531 11.4403L5.98151 10.9365C5.59099 10.546 5.59099 9.9128 5.98151 9.52228L8.72299 6.7808C9.11351 6.39028 9.11351 5.75711 8.72299 5.36659L5.98151 2.62512C5.59099 2.23459 5.59099 1.60143 5.98151 1.2109Z" fill="currentColor"/> </svg> </div> </header> <div class="project-cards-project-card"> <h4 class="text-6-xs text-4-md m-t-1-xs"> Module Info & Overview </h4> <p class="m-t-1-xs"> Practice your knowledge of basic JavaScript syntax and data structures by building a Random Quote Generator, a program that displays a randomly selected quote each time the user clicks a button. </p> <a class="project-cards-project-card-button button primary button--primary-teal" element="a" data-featurette="modal-trigger" data-target="syllabus-download" href="#">Download Syllabus</a> </div> </li> <li class="project-cards-project"> <header class="project-cards-project-header"> <div class="project-cards-project-header-left"> <div> <img alt="folder" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/shared/folder-icon-bff37d6c69c079b01f742fd465caaca460d840a6b76f64eda58a5b39ff651bbd.svg" width="11" height="9" /> <h4> Project 2 | 17 Activities </h4> </div> <h3> Data Pagination and Filtering </h3> </div> <div class="project-cards-project-header-right"> <svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.707098 1.37075L1.21089 0.866958C1.60142 0.476433 2.23458 0.476433 2.62511 0.866957L7.28459 5.52644C7.67512 5.91697 7.67512 6.55013 7.28459 6.94066L2.62511 11.6001C2.23458 11.9907 1.60142 11.9907 1.2109 11.6001L0.707098 11.0963C0.316574 10.7058 0.316574 10.0727 0.707098 9.68213L3.44857 6.94066C3.8391 6.55013 3.8391 5.91697 3.44857 5.52644L0.707098 2.78497C0.316574 2.39444 0.316574 1.76128 0.707098 1.37075Z" fill="currentColor"/> <path d="M5.98151 1.2109L6.48531 0.707107C6.87583 0.316582 7.509 0.316582 7.89952 0.707106L12.559 5.36659C12.9495 5.75711 12.9495 6.39028 12.559 6.7808L7.89952 11.4403C7.509 11.8308 6.87583 11.8308 6.48531 11.4403L5.98151 10.9365C5.59099 10.546 5.59099 9.9128 5.98151 9.52228L8.72299 6.7808C9.11351 6.39028 9.11351 5.75711 8.72299 5.36659L5.98151 2.62512C5.59099 2.23459 5.59099 1.60143 5.98151 1.2109Z" fill="currentColor"/> </svg> </div> </header> <div class="project-cards-project-card"> <h4 class="text-6-xs text-4-md m-t-1-xs"> Module Info & Overview </h4> <p class="m-t-1-xs"> Displaying a large amount of data on a web page, like a list of 200 movie titles or 400 products, can overwhelm a user with too much information at once. A common solution is to create separate “pages” that each display a small portion of the data. In this project, you&#39;ll write JavaScript to display several “pages” of student data that the user can easily navigate and view. </p> <a class="project-cards-project-card-button button primary button--primary-teal" element="a" data-featurette="modal-trigger" data-target="syllabus-download" href="#">Download Syllabus</a> </div> </li> <li class="project-cards-project"> <header class="project-cards-project-header"> <div class="project-cards-project-header-left"> <div> <img alt="folder" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/shared/folder-icon-bff37d6c69c079b01f742fd465caaca460d840a6b76f64eda58a5b39ff651bbd.svg" width="11" height="9" /> <h4> Project 3 | 12 Activities </h4> </div> <h3> Interactive Form </h3> </div> <div class="project-cards-project-header-right"> <svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.707098 1.37075L1.21089 0.866958C1.60142 0.476433 2.23458 0.476433 2.62511 0.866957L7.28459 5.52644C7.67512 5.91697 7.67512 6.55013 7.28459 6.94066L2.62511 11.6001C2.23458 11.9907 1.60142 11.9907 1.2109 11.6001L0.707098 11.0963C0.316574 10.7058 0.316574 10.0727 0.707098 9.68213L3.44857 6.94066C3.8391 6.55013 3.8391 5.91697 3.44857 5.52644L0.707098 2.78497C0.316574 2.39444 0.316574 1.76128 0.707098 1.37075Z" fill="currentColor"/> <path d="M5.98151 1.2109L6.48531 0.707107C6.87583 0.316582 7.509 0.316582 7.89952 0.707106L12.559 5.36659C12.9495 5.75711 12.9495 6.39028 12.559 6.7808L7.89952 11.4403C7.509 11.8308 6.87583 11.8308 6.48531 11.4403L5.98151 10.9365C5.59099 10.546 5.59099 9.9128 5.98151 9.52228L8.72299 6.7808C9.11351 6.39028 9.11351 5.75711 8.72299 5.36659L5.98151 2.62512C5.59099 2.23459 5.59099 1.60143 5.98151 1.2109Z" fill="currentColor"/> </svg> </div> </header> <div class="project-cards-project-card"> <h4 class="text-6-xs text-4-md m-t-1-xs"> Module Info & Overview </h4> <p class="m-t-1-xs"> Full Stack JavaScript developers create forms to collect information from users for nearly every website and application they build. For this project, you’ll use your skills to enhance a form so that it’s engaging, interactive, and easy to use. </p> <a class="project-cards-project-card-button button primary button--primary-teal" element="a" data-featurette="modal-trigger" data-target="syllabus-download" href="#">Download Syllabus</a> </div> </li> <li class="project-cards-project"> <header class="project-cards-project-header"> <div class="project-cards-project-header-left"> <div> <img alt="folder" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/shared/folder-icon-bff37d6c69c079b01f742fd465caaca460d840a6b76f64eda58a5b39ff651bbd.svg" width="11" height="9" /> <h4> Project 4 | 8 Activities </h4> </div> <h3> OOP Game Show App </h3> </div> <div class="project-cards-project-header-right"> <svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.707098 1.37075L1.21089 0.866958C1.60142 0.476433 2.23458 0.476433 2.62511 0.866957L7.28459 5.52644C7.67512 5.91697 7.67512 6.55013 7.28459 6.94066L2.62511 11.6001C2.23458 11.9907 1.60142 11.9907 1.2109 11.6001L0.707098 11.0963C0.316574 10.7058 0.316574 10.0727 0.707098 9.68213L3.44857 6.94066C3.8391 6.55013 3.8391 5.91697 3.44857 5.52644L0.707098 2.78497C0.316574 2.39444 0.316574 1.76128 0.707098 1.37075Z" fill="currentColor"/> <path d="M5.98151 1.2109L6.48531 0.707107C6.87583 0.316582 7.509 0.316582 7.89952 0.707106L12.559 5.36659C12.9495 5.75711 12.9495 6.39028 12.559 6.7808L7.89952 11.4403C7.509 11.8308 6.87583 11.8308 6.48531 11.4403L5.98151 10.9365C5.59099 10.546 5.59099 9.9128 5.98151 9.52228L8.72299 6.7808C9.11351 6.39028 9.11351 5.75711 8.72299 5.36659L5.98151 2.62512C5.59099 2.23459 5.59099 1.60143 5.98151 1.2109Z" fill="currentColor"/> </svg> </div> </header> <div class="project-cards-project-card"> <h4 class="text-6-xs text-4-md m-t-1-xs"> Module Info & Overview </h4> <p class="m-t-1-xs"> Create a browser-based, word guessing game: &quot;Phrase Hunter.&quot; You’ll use JavaScript and OOP (Object-Oriented Programming) to select a random, hidden phrase. A player tries to guess the phrase by selecting individual letters from an onscreen keyboard. Can they guess the phrase before they run out of attempts? </p> <a class="project-cards-project-card-button button primary button--primary-teal" element="a" data-featurette="modal-trigger" data-target="syllabus-download" href="#">Download Syllabus</a> </div> </li> <li class="project-cards-project"> <header class="project-cards-project-header"> <div class="project-cards-project-header-left"> <div> <img alt="folder" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/shared/folder-icon-bff37d6c69c079b01f742fd465caaca460d840a6b76f64eda58a5b39ff651bbd.svg" width="11" height="9" /> <h4> Project 5 | 10 Activities </h4> </div> <h3> Public API Requests </h3> </div> <div class="project-cards-project-header-right"> <svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.707098 1.37075L1.21089 0.866958C1.60142 0.476433 2.23458 0.476433 2.62511 0.866957L7.28459 5.52644C7.67512 5.91697 7.67512 6.55013 7.28459 6.94066L2.62511 11.6001C2.23458 11.9907 1.60142 11.9907 1.2109 11.6001L0.707098 11.0963C0.316574 10.7058 0.316574 10.0727 0.707098 9.68213L3.44857 6.94066C3.8391 6.55013 3.8391 5.91697 3.44857 5.52644L0.707098 2.78497C0.316574 2.39444 0.316574 1.76128 0.707098 1.37075Z" fill="currentColor"/> <path d="M5.98151 1.2109L6.48531 0.707107C6.87583 0.316582 7.509 0.316582 7.89952 0.707106L12.559 5.36659C12.9495 5.75711 12.9495 6.39028 12.559 6.7808L7.89952 11.4403C7.509 11.8308 6.87583 11.8308 6.48531 11.4403L5.98151 10.9365C5.59099 10.546 5.59099 9.9128 5.98151 9.52228L8.72299 6.7808C9.11351 6.39028 9.11351 5.75711 8.72299 5.36659L5.98151 2.62512C5.59099 2.23459 5.59099 1.60143 5.98151 1.2109Z" fill="currentColor"/> </svg> </div> </header> <div class="project-cards-project-card"> <h4 class="text-6-xs text-4-md m-t-1-xs"> Module Info & Overview </h4> <p class="m-t-1-xs"> Many sites — Twitter, Facebook, IMDB, and Wikipedia to name a few — offer a vast sea of data that you can access and display on your own web pages. Using JavaScript, you’ll create an employee directory by communicating with a third-party API (Application Programming Interface). </p> <a class="project-cards-project-card-button button primary button--primary-teal" element="a" data-featurette="modal-trigger" data-target="syllabus-download" href="#">Download Syllabus</a> </div> </li> <li class="project-cards-project"> <header class="project-cards-project-header"> <div class="project-cards-project-header-left"> <div> <img alt="folder" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/shared/folder-icon-bff37d6c69c079b01f742fd465caaca460d840a6b76f64eda58a5b39ff651bbd.svg" width="11" height="9" /> <h4> Project 6 | 10 Activities </h4> </div> <h3> Static Node.js and Express Site </h3> </div> <div class="project-cards-project-header-right"> <svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.707098 1.37075L1.21089 0.866958C1.60142 0.476433 2.23458 0.476433 2.62511 0.866957L7.28459 5.52644C7.67512 5.91697 7.67512 6.55013 7.28459 6.94066L2.62511 11.6001C2.23458 11.9907 1.60142 11.9907 1.2109 11.6001L0.707098 11.0963C0.316574 10.7058 0.316574 10.0727 0.707098 9.68213L3.44857 6.94066C3.8391 6.55013 3.8391 5.91697 3.44857 5.52644L0.707098 2.78497C0.316574 2.39444 0.316574 1.76128 0.707098 1.37075Z" fill="currentColor"/> <path d="M5.98151 1.2109L6.48531 0.707107C6.87583 0.316582 7.509 0.316582 7.89952 0.707106L12.559 5.36659C12.9495 5.75711 12.9495 6.39028 12.559 6.7808L7.89952 11.4403C7.509 11.8308 6.87583 11.8308 6.48531 11.4403L5.98151 10.9365C5.59099 10.546 5.59099 9.9128 5.98151 9.52228L8.72299 6.7808C9.11351 6.39028 9.11351 5.75711 8.72299 5.36659L5.98151 2.62512C5.59099 2.23459 5.59099 1.60143 5.98151 1.2109Z" fill="currentColor"/> </svg> </div> </header> <div class="project-cards-project-card"> <h4 class="text-6-xs text-4-md m-t-1-xs"> Module Info & Overview </h4> <p class="m-t-1-xs"> Node.js and Express make a powerful pair when used together on the server side, and are used everyday to make fast, modular and dynamic web applications. For this project, you&#39;ll use Node.js, Express and Pug templates to create a portfolio site to show off the projects you&#39;ve built. </p> <a class="project-cards-project-card-button button primary button--primary-teal" element="a" data-featurette="modal-trigger" data-target="syllabus-download" href="#">Download Syllabus</a> </div> </li> <li class="project-cards-project"> <header class="project-cards-project-header"> <div class="project-cards-project-header-left"> <div> <img alt="folder" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/shared/folder-icon-bff37d6c69c079b01f742fd465caaca460d840a6b76f64eda58a5b39ff651bbd.svg" width="11" height="9" /> <h4> Project 7 | 10 Activities </h4> </div> <h3> React Gallery App </h3> </div> <div class="project-cards-project-header-right"> <svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.707098 1.37075L1.21089 0.866958C1.60142 0.476433 2.23458 0.476433 2.62511 0.866957L7.28459 5.52644C7.67512 5.91697 7.67512 6.55013 7.28459 6.94066L2.62511 11.6001C2.23458 11.9907 1.60142 11.9907 1.2109 11.6001L0.707098 11.0963C0.316574 10.7058 0.316574 10.0727 0.707098 9.68213L3.44857 6.94066C3.8391 6.55013 3.8391 5.91697 3.44857 5.52644L0.707098 2.78497C0.316574 2.39444 0.316574 1.76128 0.707098 1.37075Z" fill="currentColor"/> <path d="M5.98151 1.2109L6.48531 0.707107C6.87583 0.316582 7.509 0.316582 7.89952 0.707106L12.559 5.36659C12.9495 5.75711 12.9495 6.39028 12.559 6.7808L7.89952 11.4403C7.509 11.8308 6.87583 11.8308 6.48531 11.4403L5.98151 10.9365C5.59099 10.546 5.59099 9.9128 5.98151 9.52228L8.72299 6.7808C9.11351 6.39028 9.11351 5.75711 8.72299 5.36659L5.98151 2.62512C5.59099 2.23459 5.59099 1.60143 5.98151 1.2109Z" fill="currentColor"/> </svg> </div> </header> <div class="project-cards-project-card"> <h4 class="text-6-xs text-4-md m-t-1-xs"> Module Info & Overview </h4> <p class="m-t-1-xs"> React is one of the most popular development libraries on the web, which is why React developers are in such great demand. So let&#39;s up those skills and get some valuable practice and experience by using React to build a fast and lightweight gallery app with a modern approach. </p> <a class="project-cards-project-card-button button primary button--primary-teal" element="a" data-featurette="modal-trigger" data-target="syllabus-download" href="#">Download Syllabus</a> </div> </li> <li class="project-cards-project"> <header class="project-cards-project-header"> <div class="project-cards-project-header-left"> <div> <img alt="folder" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/shared/folder-icon-bff37d6c69c079b01f742fd465caaca460d840a6b76f64eda58a5b39ff651bbd.svg" width="11" height="9" /> <h4> Project 8 | 6 Activities </h4> </div> <h3> SQL Library Manager </h3> </div> <div class="project-cards-project-header-right"> <svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.707098 1.37075L1.21089 0.866958C1.60142 0.476433 2.23458 0.476433 2.62511 0.866957L7.28459 5.52644C7.67512 5.91697 7.67512 6.55013 7.28459 6.94066L2.62511 11.6001C2.23458 11.9907 1.60142 11.9907 1.2109 11.6001L0.707098 11.0963C0.316574 10.7058 0.316574 10.0727 0.707098 9.68213L3.44857 6.94066C3.8391 6.55013 3.8391 5.91697 3.44857 5.52644L0.707098 2.78497C0.316574 2.39444 0.316574 1.76128 0.707098 1.37075Z" fill="currentColor"/> <path d="M5.98151 1.2109L6.48531 0.707107C6.87583 0.316582 7.509 0.316582 7.89952 0.707106L12.559 5.36659C12.9495 5.75711 12.9495 6.39028 12.559 6.7808L7.89952 11.4403C7.509 11.8308 6.87583 11.8308 6.48531 11.4403L5.98151 10.9365C5.59099 10.546 5.59099 9.9128 5.98151 9.52228L8.72299 6.7808C9.11351 6.39028 9.11351 5.75711 8.72299 5.36659L5.98151 2.62512C5.59099 2.23459 5.59099 1.60143 5.98151 1.2109Z" fill="currentColor"/> </svg> </div> </header> <div class="project-cards-project-card"> <h4 class="text-6-xs text-4-md m-t-1-xs"> Module Info & Overview </h4> <p class="m-t-1-xs"> Working with databases — storing, retrieving, updating and deleting information — is an important software developer skill. In this project, you&#39;ll create a web application for listing, adding, updating, and deleting books in a library application, using JavaScript, Node.js, Express, Pug, and the SQL ORM Sequelize. </p> <a class="project-cards-project-card-button button primary button--primary-teal" element="a" data-featurette="modal-trigger" data-target="syllabus-download" href="#">Download Syllabus</a> </div> </li> <li class="project-cards-project"> <header class="project-cards-project-header"> <div class="project-cards-project-header-left"> <div> <img alt="folder" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/shared/folder-icon-bff37d6c69c079b01f742fd465caaca460d840a6b76f64eda58a5b39ff651bbd.svg" width="11" height="9" /> <h4> Project 9 | 8 Activities </h4> </div> <h3> REST API </h3> </div> <div class="project-cards-project-header-right"> <svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.707098 1.37075L1.21089 0.866958C1.60142 0.476433 2.23458 0.476433 2.62511 0.866957L7.28459 5.52644C7.67512 5.91697 7.67512 6.55013 7.28459 6.94066L2.62511 11.6001C2.23458 11.9907 1.60142 11.9907 1.2109 11.6001L0.707098 11.0963C0.316574 10.7058 0.316574 10.0727 0.707098 9.68213L3.44857 6.94066C3.8391 6.55013 3.8391 5.91697 3.44857 5.52644L0.707098 2.78497C0.316574 2.39444 0.316574 1.76128 0.707098 1.37075Z" fill="currentColor"/> <path d="M5.98151 1.2109L6.48531 0.707107C6.87583 0.316582 7.509 0.316582 7.89952 0.707106L12.559 5.36659C12.9495 5.75711 12.9495 6.39028 12.559 6.7808L7.89952 11.4403C7.509 11.8308 6.87583 11.8308 6.48531 11.4403L5.98151 10.9365C5.59099 10.546 5.59099 9.9128 5.98151 9.52228L8.72299 6.7808C9.11351 6.39028 9.11351 5.75711 8.72299 5.36659L5.98151 2.62512C5.59099 2.23459 5.59099 1.60143 5.98151 1.2109Z" fill="currentColor"/> </svg> </div> </header> <div class="project-cards-project-card"> <h4 class="text-6-xs text-4-md m-t-1-xs"> Module Info & Overview </h4> <p class="m-t-1-xs"> In this project, you’ll use the popular Express web application framework and a SQL database to create a REST API that lets users create, read, update, and delete items from a school database. </p> <a class="project-cards-project-card-button button primary button--primary-teal" element="a" data-featurette="modal-trigger" data-target="syllabus-download" href="#">Download Syllabus</a> </div> </li> <li class="project-cards-project"> <header class="project-cards-project-header"> <div class="project-cards-project-header-left"> <div> <img alt="folder" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/views/marketing/shared/folder-icon-bff37d6c69c079b01f742fd465caaca460d840a6b76f64eda58a5b39ff651bbd.svg" width="11" height="9" /> <h4> Project 10 | 5 Activities </h4> </div> <h3> Full Stack App with React and a REST API </h3> </div> <div class="project-cards-project-header-right"> <svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.707098 1.37075L1.21089 0.866958C1.60142 0.476433 2.23458 0.476433 2.62511 0.866957L7.28459 5.52644C7.67512 5.91697 7.67512 6.55013 7.28459 6.94066L2.62511 11.6001C2.23458 11.9907 1.60142 11.9907 1.2109 11.6001L0.707098 11.0963C0.316574 10.7058 0.316574 10.0727 0.707098 9.68213L3.44857 6.94066C3.8391 6.55013 3.8391 5.91697 3.44857 5.52644L0.707098 2.78497C0.316574 2.39444 0.316574 1.76128 0.707098 1.37075Z" fill="currentColor"/> <path d="M5.98151 1.2109L6.48531 0.707107C6.87583 0.316582 7.509 0.316582 7.89952 0.707106L12.559 5.36659C12.9495 5.75711 12.9495 6.39028 12.559 6.7808L7.89952 11.4403C7.509 11.8308 6.87583 11.8308 6.48531 11.4403L5.98151 10.9365C5.59099 10.546 5.59099 9.9128 5.98151 9.52228L8.72299 6.7808C9.11351 6.39028 9.11351 5.75711 8.72299 5.36659L5.98151 2.62512C5.59099 2.23459 5.59099 1.60143 5.98151 1.2109Z" fill="currentColor"/> </svg> </div> </header> <div class="project-cards-project-card"> <h4 class="text-6-xs text-4-md m-t-1-xs"> Module Info & Overview </h4> <p class="m-t-1-xs"> In your final project, you&#39;ll use React to create a client for your existing school database REST API (that you created in a previous project). When completed, your full stack JavaScript application will allow users to view a list of courses and the detail for a specific course, sign up to create an account or sign in with an existing account, and create, update, or delete courses. </p> <a class="project-cards-project-card-button button primary button--primary-teal" element="a" data-featurette="modal-trigger" data-target="syllabus-download" href="#">Download Syllabus</a> </div> </li> </ul> </div> </div> </section> <section class="td-p4 col-max p-tb-6-md"> <div class="col-80-xs col-90-md"> <h3 class="text-6-xs text-6-md text-4-lg text-center-xs">TECHDEGREE PRICING</h3> <h2 class="text-4-xs text-center-xs m-t-1-md topic-full-stack-javascript">Today is the day. Start your future for $199/month.</h2> <h4 class="text-7-xs text-5-lg text-center-xs m-t-1-xs p-lr-4-md p-lr-0-lg">You’ll learn both front end and back end web development with the Full Stack JavaScript Techdegree’s structured, project-based curriculum and incredible student support. Get excited—your new career building web applications awaits.</h4> </div> <ul class="td-p4-checkpoints"> <li class="text-7-xs text-5-lg">Guided learning paths</li> <li class="text-7-xs text-5-lg">Build a portfolio and get certified</li> <li class="text-7-xs text-5-lg">Technical and soft skills</li> <li class="text-7-xs text-5-lg">Exclusive Slack community</li> <li class="text-7-xs text-5-lg">Quizzes and code challenges</li> <li class="text-7-xs text-5-lg">Project and peer reviews</li> </ul> <div class="td-p4-btns"> <div class="flex-block-xs flex-justify-center-xs flex-justify-start-lg"> <a class="button primary button--primary-teal text-7-xs text-6-md text-4-lg" data-degree-id="92" data-degree-title="Full Stack JavaScript" href="/subscribe/new?plan=1412&amp;plan_addon_ids%5B%5D=372&amp;trial=yes">Enroll Now</a> </div> <a class="button text-7-xs text-6-md text-4-lg" href="/techdegree"> Explore Other Techdegrees </a> </div> <a class="td-p4-compare text-7-xs text-5-lg" href="/plans">Compare Plans</a> </section> <section class="td-p5 td-instructors-2023 bg-blue"> <h2>Your Instructors and Support Crew</h2> <div class="teacher-wrapper"> <button class="secondary button icon-prev-arrow border-none-xs" alt="previous"> <svg class="acute_caret_left-icon slide-control-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 76.73 93.06">.cls-1{fill:#818a91;}<g id="Layer_1-2"><path class="cls-1" d="M15.89,46.53c3.78,2.36,7.43,4.65,11.09,6.94,12.04,7.52,24.08,15.05,36.12,22.57,3.69,2.3,7.38,4.6,11.05,6.92,1.98,1.25,2.88,3.41,2.44,5.74-.38,2.07-2.11,3.8-4.28,4.24-1.57,.32-3-.09-4.34-.94-4.68-2.94-9.37-5.87-14.06-8.8-12.37-7.73-24.74-15.45-37.1-23.18-4.66-2.91-9.34-5.81-13.98-8.75-3.8-2.4-3.75-7.21,.06-9.6,13.17-8.23,26.35-16.47,39.52-24.7,8.48-5.3,16.99-10.56,25.42-15.94,3.13-2,6.67-.95,8.16,1.66,1.46,2.56,.7,5.73-1.86,7.35-4.26,2.71-8.55,5.36-12.84,8.04-14.93,9.33-29.86,18.67-44.79,28-.18,.11-.34,.24-.61,.43Z"></path></g></svg> </button> <div data-featurette="teacher-slider" class="teacherSlider"> <li class="td-instructors-2023-list-item teacher-wrapper"> <a class="td-instructors-2023-list-item-card" href="/profiles/brianjensen2"> <img alt="Brian Jensen" class="td-instructors-2023-list-item-img" loading="lazy" src="https://uploads.teamtreehouse.com/production/profile-photos/10527382/ipad_small_brian2.jpg" /> <div class="td-instructors-2023-list-item-info"> <h3 class="td-instructors-2023-list-item-info-author">Brian Jensen</h3> <span class="td-instructors-2023-list-item-info-sss-tag">Student Success Specialist</span> </div> </a> </li> <li class="td-instructors-2023-list-item teacher-wrapper"> <a class="td-instructors-2023-list-item-card" href="/profiles/rohald"> <img alt="Rohald van Merode" class="td-instructors-2023-list-item-img" loading="lazy" src="https://uploads.teamtreehouse.com/production/profile-photos/11666882/ipad_small_Rohald-profile.jpg" /> <div class="td-instructors-2023-list-item-info"> <h3 class="td-instructors-2023-list-item-info-author">Rohald van Merode</h3> <span class="td-instructors-2023-list-item-info-sss-tag">Student Success Specialist</span> </div> </a> </li> <li class="td-instructors-2023-list-item teacher-wrapper"> <a class="td-instructors-2023-list-item-card" href="/profiles/travisalstrand3"> <img alt="Travis Alstrand" class="td-instructors-2023-list-item-img" loading="lazy" src="https://uploads.teamtreehouse.com/production/profile-photos/11694118/ipad_small_travisbadge2.jpg" /> <div class="td-instructors-2023-list-item-info"> <h3 class="td-instructors-2023-list-item-info-author">Travis Alstrand</h3> <span class="td-instructors-2023-list-item-info-sss-tag">Student Success Specialist</span> </div> </a> </li> <li class="td-instructors-2023-list-item teacher-wrapper"> <a class="td-instructors-2023-list-item-card" href="/profiles/jenavievedance"> <img alt="Jenavieve Dance" class="td-instructors-2023-list-item-img" loading="lazy" src="https://uploads.teamtreehouse.com/production/profile-photos/11709719/ipad_small_Jenavieve_Circus_Tent.jpg" /> <div class="td-instructors-2023-list-item-info"> <h3 class="td-instructors-2023-list-item-info-author">Jenavieve Dance</h3> <span class="td-instructors-2023-list-item-info-sss-tag">Career Advisor</span> </div> </a> </li> <li class="td-instructors-2023-list-item teacher-wrapper"> <a class="td-instructors-2023-list-item-card" href="/profiles/nickpettit"> <img alt="Nick Pettit" class="td-instructors-2023-list-item-img" loading="lazy" src="https://uploads.teamtreehouse.com/production/profile-photos/278/ipad_small_2x_nick-2017.jpg" /> <div class="td-instructors-2023-list-item-info"> <h3 class="td-instructors-2023-list-item-info-author">Nick Pettit</h3> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #3659A2; border: solid 1px #3659A2">HTML</span> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #856fc4; border: solid 1px #856fc4">Game Development</span> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #4A4290; border: solid 1px #4A4290">Design</span> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #804197; border: solid 1px #804197">Machine Learning</span> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #733A88; border: solid 1px #733A88">Virtual Reality</span> </div> </a></li> <li class="td-instructors-2023-list-item teacher-wrapper"> <a class="td-instructors-2023-list-item-card" href="/profiles/chalkers"> <img alt="Andrew Chalkley" class="td-instructors-2023-list-item-img" loading="lazy" src="https://uploads.teamtreehouse.com/production/profile-photos/26170/ipad_small_2x_TeacherShoot-Andrew.jpg" /> <div class="td-instructors-2023-list-item-info"> <h3 class="td-instructors-2023-list-item-info-author">Andrew Chalkley</h3> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #3659A2; border: solid 1px #3659A2">JavaScript</span> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #be4e95; border: solid 1px #be4e95">Databases</span> </div> </a></li> <li class="td-instructors-2023-list-item teacher-wrapper"> <a class="td-instructors-2023-list-item-card" href="/profiles/hfszcmvzpv"> <img alt="Chris Ramacciotti" class="td-instructors-2023-list-item-img" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/content/default_avatar-445fbbabfc8dc9188fb5967fe43322ee0c3e0dd1e10f378bf8343784af5a13eb.webp" /> <div class="td-instructors-2023-list-item-info"> <h3 class="td-instructors-2023-list-item-info-author">Chris Ramacciotti</h3> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #004e61; border: solid 1px #004e61">Development Tools</span> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #0e8397; border: solid 1px #0e8397">Java</span> </div> </a></li> <li class="td-instructors-2023-list-item teacher-wrapper"> <a class="td-instructors-2023-list-item-card" href="/profiles/kdaigle"> <img alt="Kyle Daigle" class="td-instructors-2023-list-item-img" loading="lazy" src="https://uploads.teamtreehouse.com/production/profile-photos/4081452/ipad_small_2x_kyle_headshot_1mb.jpg" /> <div class="td-instructors-2023-list-item-info"> <h3 class="td-instructors-2023-list-item-info-author">Kyle Daigle</h3> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #004e61; border: solid 1px #004e61">Development Tools</span> </div> </a></li> <li class="td-instructors-2023-list-item teacher-wrapper"> <a class="td-instructors-2023-list-item-card" href="/profiles/alysonla"> <img alt="Alyson La" class="td-instructors-2023-list-item-img" loading="lazy" src="https://uploads.teamtreehouse.com/production/profile-photos/4081672/ipad_small_2x_Alyson_La_B_W.jpg" /> <div class="td-instructors-2023-list-item-info"> <h3 class="td-instructors-2023-list-item-info-author">Alyson La</h3> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #004e61; border: solid 1px #004e61">Development Tools</span> </div> </a></li> <li class="td-instructors-2023-list-item teacher-wrapper"> <a class="td-instructors-2023-list-item-card" href="/profiles/guil"> <img alt="Guil Hernandez" class="td-instructors-2023-list-item-img" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/content/default_avatar-445fbbabfc8dc9188fb5967fe43322ee0c3e0dd1e10f378bf8343784af5a13eb.webp" /> <div class="td-instructors-2023-list-item-info"> <h3 class="td-instructors-2023-list-item-info-author">Guil Hernandez</h3> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #3659A2; border: solid 1px #3659A2">CSS</span> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #3659A2; border: solid 1px #3659A2">JavaScript</span> </div> </a></li> <li class="td-instructors-2023-list-item teacher-wrapper"> <a class="td-instructors-2023-list-item-card" href="/profiles/jkraft"> <img alt="Joel Kraft" class="td-instructors-2023-list-item-img" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/content/default_avatar-445fbbabfc8dc9188fb5967fe43322ee0c3e0dd1e10f378bf8343784af5a13eb.webp" /> <div class="td-instructors-2023-list-item-info"> <h3 class="td-instructors-2023-list-item-info-author">Joel Kraft</h3> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #3659A2; border: solid 1px #3659A2">JavaScript</span> </div> </a></li> <li class="td-instructors-2023-list-item teacher-wrapper"> <a class="td-instructors-2023-list-item-card" href="/profiles/jaymcgavren"> <img alt="Jay McGavren" class="td-instructors-2023-list-item-img" loading="lazy" src="https://uploads.teamtreehouse.com/production/profile-photos/121450/ipad_small_2x_jay_teaching.jpg" /> <div class="td-instructors-2023-list-item-info"> <h3 class="td-instructors-2023-list-item-info-author">Jay McGavren</h3> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #0e8397; border: solid 1px #0e8397">Ruby</span> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #0e8397; border: solid 1px #0e8397">Go Language</span> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #004e61; border: solid 1px #004e61">Development Tools</span> </div> </a></li> <li class="td-instructors-2023-list-item teacher-wrapper"> <a class="td-instructors-2023-list-item-card" href="/profiles/ashleyboucher2"> <img alt="Ashley Boucher" class="td-instructors-2023-list-item-img" loading="lazy" src="https://uploads.teamtreehouse.com/production/profile-photos/9484152/ipad_small_2x_Shopify-partner-Studio-Ashley-Livingston_medium.jpg" /> <div class="td-instructors-2023-list-item-info"> <h3 class="td-instructors-2023-list-item-info-author">Ashley Boucher</h3> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #3659A2; border: solid 1px #3659A2">JavaScript</span> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #0e8397; border: solid 1px #0e8397">Python</span> </div> </a></li> <li class="td-instructors-2023-list-item teacher-wrapper"> <a class="td-instructors-2023-list-item-card" href="/profiles/alenaholligan"> <img alt="Alena Holligan" class="td-instructors-2023-list-item-img" loading="lazy" src="https://uploads.teamtreehouse.com/production/profile-photos/1539972/ipad_small_2x_alena-holligan.jpg" /> <div class="td-instructors-2023-list-item-info"> <h3 class="td-instructors-2023-list-item-info-author">Alena Holligan</h3> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #0e8397; border: solid 1px #0e8397">PHP</span> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #409BE9; border: solid 1px #409BE9">Security</span> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #3659A2; border: solid 1px #3659A2">WordPress</span> </div> </a></li> <li class="td-instructors-2023-list-item teacher-wrapper"> <a class="td-instructors-2023-list-item-card" href="/profiles/treasureporth"> <img alt="Treasure Porth" class="td-instructors-2023-list-item-img" loading="lazy" src="https://uploads.teamtreehouse.com/production/profile-photos/1372102/ipad_small_2x_headshot8002.jpg" /> <div class="td-instructors-2023-list-item-info"> <h3 class="td-instructors-2023-list-item-info-author">Treasure Porth</h3> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #3659A2; border: solid 1px #3659A2">HTML</span> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #004e61; border: solid 1px #004e61">Development Tools</span> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #3659A2; border: solid 1px #3659A2">JavaScript</span> </div> </a></li> <li class="td-instructors-2023-list-item teacher-wrapper"> <a class="td-instructors-2023-list-item-card" href="/profiles/reggiewilliams2"> <img alt="Reggie Williams" class="td-instructors-2023-list-item-img" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/content/default_avatar-445fbbabfc8dc9188fb5967fe43322ee0c3e0dd1e10f378bf8343784af5a13eb.webp" /> <div class="td-instructors-2023-list-item-info"> <h3 class="td-instructors-2023-list-item-info-author">Reggie Williams</h3> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #3659A2; border: solid 1px #3659A2">JavaScript</span> </div> </a></li> <li class="td-instructors-2023-list-item teacher-wrapper"> <a class="td-instructors-2023-list-item-card" href="/profiles/davemcfarland"> <img alt="Dave McFarland" class="td-instructors-2023-list-item-img" loading="lazy" src="https://uploads.teamtreehouse.com/production/profile-photos/408222/ipad_small_2x_1M7A0052.jpg" /> <div class="td-instructors-2023-list-item-info"> <h3 class="td-instructors-2023-list-item-info-author">Dave McFarland</h3> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #3659A2; border: solid 1px #3659A2">JavaScript</span> </div> </a></li> <li class="td-instructors-2023-list-item teacher-wrapper"> <a class="td-instructors-2023-list-item-card" href="/profiles/jameschurchill"> <img alt="James Churchill" class="td-instructors-2023-list-item-img" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/content/default_avatar-445fbbabfc8dc9188fb5967fe43322ee0c3e0dd1e10f378bf8343784af5a13eb.webp" /> <div class="td-instructors-2023-list-item-info"> <h3 class="td-instructors-2023-list-item-info-author">James Churchill</h3> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #0e8397; border: solid 1px #0e8397">C#</span> </div> </a></li> <li class="td-instructors-2023-list-item teacher-wrapper"> <a class="td-instructors-2023-list-item-card" href="/profiles/anwarmontasir"> <img alt="Anwar Montasir" class="td-instructors-2023-list-item-img" loading="lazy" src="https://uploads.teamtreehouse.com/production/profile-photos/10763582/ipad_small_2x_anwar-montasir-profile_2x.jpg" /> <div class="td-instructors-2023-list-item-info"> <h3 class="td-instructors-2023-list-item-info-author">Anwar Montasir</h3> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #4A4290; border: solid 1px #4A4290">Design</span> </div> </a></li> <li class="td-instructors-2023-list-item teacher-wrapper"> <a class="td-instructors-2023-list-item-card" href="/profiles/lauracoronel"> <img alt="Laura Coronel" class="td-instructors-2023-list-item-img" loading="lazy" src="https://uploads.teamtreehouse.com/production/profile-photos/11687903/ipad_small_2x_IMG_0912_2.jpg" /> <div class="td-instructors-2023-list-item-info"> <h3 class="td-instructors-2023-list-item-info-author">Laura Coronel</h3> </div> </a></li> <li class="td-instructors-2023-list-item teacher-wrapper"> <a class="td-instructors-2023-list-item-card" href="/profiles/racheljohnson5"> <img alt="Rachel Johnson" class="td-instructors-2023-list-item-img" loading="lazy" src="https://uploads.teamtreehouse.com/production/profile-photos/11677488/ipad_small_2x_rachel.webp" /> <div class="td-instructors-2023-list-item-info"> <h3 class="td-instructors-2023-list-item-info-author">Rachel Johnson</h3> <span class="td-instructors-2023-list-item-info-sss-tag" style="color: #0e8397; border: solid 1px #0e8397">Python</span> </div> </a></li> </div> <button class="secondary button icon-next-arrow border-none-xs" alt="next"> <svg class="acute_caret_right-icon slide-control-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 76.73 93.06">.cls-1{fill:#818a91;}<g id="Layer_1-2"><path class="cls-1" d="M60.83,46.53c-3.78-2.36-7.43-4.65-11.09-6.94-12.04-7.52-24.08-15.05-36.12-22.57-3.69-2.3-7.38-4.6-11.05-6.92C.59,8.84-.3,6.68,.13,4.35,.52,2.29,2.24,.55,4.42,.11c1.57-.32,3,.09,4.34,.94,4.68,2.94,9.37,5.87,14.06,8.8,12.37,7.73,24.74,15.45,37.1,23.18,4.66,2.91,9.34,5.81,13.98,8.75,3.8,2.4,3.75,7.21-.06,9.6-13.17,8.23-26.35,16.47-39.52,24.7-8.48,5.3-16.99,10.56-25.42,15.94-3.13,2-6.67,.95-8.16-1.66-1.46-2.56-.7-5.73,1.86-7.35,4.26-2.71,8.55-5.36,12.84-8.04,14.93-9.33,29.86-18.67,44.79-28,.18-.11,.34-.24,.61-.43Z"></path></g></svg> </button> </div> </section> <section class="career-roadmap light"> <div class="career-roadmap-inner"> <h2>Your career-oriented Techdegree roadmap</h2> <article class="roadmap"></article> </div> </section> <section class="techdegrees-2023-cta"> <div class="techdegrees-2023-cta-container"> <img alt="Computer" class="techdegrees-cta-image" loading="lazy" src="https://ecs-static.teamtreehouse.com/assets/views/degrees/techdegree-cta-b6fc0a624cfac60a66f5aa714f384e4ee6bbe14ef76f4b6a702b979548865617.webp" /> <div class="center-text m-t-1-xs m-t-0-lg"> <h2 class="text-color-white">Are you ready to start learning?</h2> <p class="text-color-white"> Learning with Treehouse for only 30 minutes a day can teach you the skills needed to land the job that you've been dreaming about. </p> <a class="button text-color-white" href="/subscribe/new?trial=yes"> Enroll Now </a> </div> </div> </section> </div> <svg xmlns="http://www.w3.org/2000/svg" class="color-bar-footer" width="100%" height="3" viewBox="0 0 1441 3" preserveAspectRatio="none"> <g fill="none" fill-rule="evenodd"> <rect width="144" height="3" fill="#0B88C3"/> <rect width="144" height="3" x="144" fill="#00D377"/> <rect width="144" height="3" x="288" fill="#00B950"/> <rect width="144" height="3" x="432" fill="#FFD247"/> <rect width="144" height="3" x="576" fill="#FF9800"/> <rect width="144" height="3" x="720" fill="#FF464F"/> <rect width="144" height="3" x="864" fill="#FF82B3"/> <rect width="144" height="3" x="1008" fill="#FF4385"/> <rect width="144" height="3" x="1152" fill="#A47DCC"/> <rect width="145" height="3" x="1296" fill="#875BB5"/> </g> </svg> <footer> <div class="footer"> <!-- Left --> <div class="footer-left"> <ul class="links-2020-footer list-unstyled"> <h4>Treehouse</h4> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked About" data-event-label="Source: Footer" href="/about">About</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Blog" data-event-label="Source: Footer" href="https://blog.teamtreehouse.com/">Blog</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Careers" data-event-label="Source: Footer" href="/jobs">Careers</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Community" data-event-label="Source: Footer" href="/community">Community</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Stories" data-event-label="Source: Footer" href="/stories">Stories</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Treehouse Shop" data-event-label="Source: Footer" href="https://teespring.com/stores/teamtreehouse">Shop</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Contact" data-event-label="Source: Footer" href="/support">Contact</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Contact" data-event-label="Source: Footer" href="/giftcard">Gift Card</a></li> </ul> </div> <!-- Middle --> <div class="footer-middle"> <h4 class="catcta"><a href="/library">See Full Catalogue</a></h4> <div class="footer-catalogue"> <div class="footer-catalogue-tech"> <h4><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Techdegrees" data-event-label="Source: Footer" href="/techdegree">Techdegree</a></h4> <ul class="links-2020-footer list-unstyled"> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Front End Web Development" data-event-label="Source: Footer" href="/techdegree/front-end-web-development">Front End Web Development</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Full Stack JavaScript" data-event-label="Source: Footer" href="/techdegree/full-stack-javascript">Full Stack JavaScript</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Python Development" data-event-label="Source: Footer" href="/techdegree/python-development">Python Development</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Data Analysis" data-event-label="Source: Footer" href="/techdegree/data-analysis">Data Analysis</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked UX Design" data-event-label="Source: Footer" href="/techdegree/ux-design">UX Design</a></li> </ul> </div> <div class="footer-catalogue-tracks"> <h4>Tracks</h4> <ul class="links-2020-footer list-unstyled"> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Learn to Code for Beginners" data-event-label="Source: Footer" href="/tracks/learn-to-code-for-beginners">Learn to Code for Beginners</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Beginning Python" data-event-label="Source: Footer" href="/tracks/beginning-python">Beginning Python</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Beginning SQL" data-event-label="Source: Footer" href="/tracks/beginning-sql">Beginning SQL</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Beginning Java" data-event-label="Source: Footer" href="/tracks/beginning-java">Beginning Java</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked See More Tracks" data-event-label="Source: Footer" href="/tracks">...see more</a></li> </ul> </div> <div class="footer-catalogue-courses"> <h4>Courses</h4> <ul class="links-2020-footer list-unstyled"> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked JavaDcript Basics" data-event-label="Source: Footer" href="/library/javascript-basics">JavaScript Basics</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Intro to HTML &amp; CSS" data-event-label="Source: Footer" href="/library/introduction-to-html-and-css">Intro to HTML &amp; CSS</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Python Basics" data-event-label="Source: Footer" href="/library/python-basics">Python Basics</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked CSS Layout" data-event-label="Source: Footer" href="/library/css-layout">CSS Layout</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked See more Courses" data-event-label="Source: Footer" href="/library">...see more</a></li> </ul> </div> </div> </div> <!-- Right --> <div class="footer-right"> <h4>Explore</h4> <ul class="links-2020-footer list-unstyled"> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Plans" data-event-label="Source: Footer" href="/plans">Plans</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Affiliates" data-event-label="Source: Footer" href="https://join.teamtreehouse.com/affiliates">Affiliates</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Perks" data-event-label="Source: Footer" href="/perks">Perks</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Physical Library Access" data-event-label="Source: Footer" href="/libraries/find-your-library">Free Treehouse Near Me</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Treehouse for Libraries" data-event-label="Source: Footer" href="https://join.teamtreehouse.com/libraries/">Treehouse for Libraries</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Treehouse for Teams" data-event-label="Source: Footer" href="/teams">Treehouse for Businesses</a></li> </ul> </div> </div> <div class="footer-tail"> <ul class="list-unstyled social"> <li><a title="Twitter" target="_blank" rel="noopener" data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Twitter Icon" data-event-label="Source: Footer" href="https://twitter.com/treehouse"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 24 24" class="twitter-icon" aria-labelledby="twitterIcon1654109" role="img"> <title id="twitterIcon1654109">Twitter</title> <path d="M19,8.3c-0.5,0.2-1,0.4-1.5,0.4c0.6-0.3,1-0.9,1.2-1.5c-0.5,0.3-1.1,0.5-1.7,0.7C16.5,7.3,15.8,7,15,7 c-1.5,0-2.7,1.2-2.7,2.8c0,0.2,0,0.4,0.1,0.6c-2.2-0.1-4.2-1.2-5.5-2.9C6.7,7.9,6.5,8.4,6.5,8.9c0,1,0.4,1.8,1.2,2.3 c-0.4,0-1.2-0.1-1.2-0.3c0,0,0,0,0,0c0,1.3,0.9,2.5,2.2,2.7c-0.2,0.1-0.4,0.1-0.7,0.1c-0.2,0-0.3,0-0.5-0.1c0.3,1.1,1.3,1.9,2.5,1.9 c-0.9,0.7-2.1,1.2-3.3,1.2c-0.2,0-0.4,0-0.6,0c1.2,0.8,2.6,1.2,4.1,1.2c4.9,0,7.6-4.2,7.6-7.9c0-0.1,0-0.2,0-0.4 C18.2,9.4,18.6,8.9,19,8.3z"></path> </svg></a></li> <li><a title="YouTube" target="_blank" rel="noopener" data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked YouTube Icon" data-event-label="Source: Footer" href="https://youtube.com/user/gotreehouse"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 24 24" class="youtube-icon" aria-labelledby="youtubeIcon6671922" role="img"> <title id="youtubeIcon6671922">YouTube</title> <path d="M19.5,8.2c-0.2-0.7-0.7-1.2-1.4-1.4C16.9,6.5,12,6.5,12,6.5s-4.9,0-6.1,0.3C5.2,7,4.7,7.6,4.5,8.2C4.2,9.5,4.2,12,4.2,12 s0,2.5,0.3,3.8c0.2,0.7,0.7,1.2,1.4,1.4c1.2,0.3,6.1,0.3,6.1,0.3s4.9,0,6.1-0.3c0.7-0.2,1.2-0.7,1.4-1.4c0.3-1.2,0.3-3.8,0.3-3.8 S19.8,9.5,19.5,8.2z M9.9,15V9l5.2,3L9.9,15z"></path> </svg></a></li> <li><a title="Facebook" target="_blank" rel="noopener" data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Facebook Icon" data-event-label="Source: Footer" href="https://facebook.com/teamtreehouse"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 24 24" class="facebook-icon" aria-labelledby="facebookIcon5201989" role="img"> <title id="facebookIcon5201989">Facebook</title> <path d="M10.3,19.8V13H7.8v-2.8h2.5V8c0-2.4,1.5-3.8,3.7-3.8c1.1,0,2.2,0.2,2.2,0.2v2.4h-1.2c-1.2,0-1.6,0.8-1.6,1.5v1.8h2.7 L15.6,13h-2.3v6.8H10.3z"></path> </svg></a></li> <li><a title="LinkedIn" target="_blank" rel="noopener" data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked LinkedIn Icon" data-event-label="Source: Footer" href="https://linkedin.com/company/treehouse-island-inc-"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 24 24" class="linked-in-icon" aria-labelledby="linkedinIcon4680033" role="img"> <title id="linkedinIcon4680033">LinkedIn</title> <path d="M17.5,5.5h-11C6,5.5,5.6,6,5.5,6.5v11.1c0,0.5,0.4,0.9,1,0.9h11c0.5,0,0.9-0.4,1-0.9V6.5C18.5,6,18.1,5.5,17.5,5.5z M9.4,16.6H7.5v-6.2h1.9V16.6z M8.4,9.5C7.8,9.5,7.3,9,7.3,8.4s0.5-1.1,1.1-1.1s1.1,0.5,1.1,1.1S9,9.5,8.4,9.5z M16.6,16.6h-1.9v-3 c0-0.7,0-1.7-1-1.7s-1.2,0.8-1.2,1.6v3.1h-1.9v-6.2h1.8v0.9c0.4-0.6,1-1,1.8-1c2,0,2.3,1.3,2.3,3L16.6,16.6z"></path> </svg></a></li> <li><a title="Instagram" target="_blank" rel="noopener" data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Instagram Icon" data-event-label="Source: Footer" href="https://instagram.com/teamtreehouse"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 24 24" class="instagram-icon" aria-labelledby="instagramIcon6108558" role="img"> <title id="instagramIcon6108558">Instagram</title> <path d="M16.6,18.5H7.4c-1,0-1.9-0.8-1.9-1.9V7.4c0-1,0.8-1.9,1.9-1.9h9.3c1,0,1.9,0.8,1.9,1.9v9.3C18.5,17.7,17.7,18.5,16.6,18.5z M12,10.1c-1,0-1.9,0.8-1.9,1.9s0.8,1.9,1.9,1.9s1.9-0.8,1.9-1.9S13,10.1,12,10.1z M15.7,7.4c-0.6,0-0.9,0.4-0.9,0.9 s0.4,0.9,0.9,0.9s0.9-0.4,0.9-0.9S16.3,7.4,15.7,7.4z M16.6,12h-0.9c0,2-1.7,3.7-3.7,3.7S8.3,14,8.3,12H7.4v3.7 c0,0.6,0.4,0.9,0.9,0.9h7.4c0.6,0,0.9-0.4,0.9-0.9V12z"></path> </svg></a></li> <li><a title="TikTok" target="_blank" rel="noopener" data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked TikTok Icon" data-event-label="Source: Footer" href="https://tiktok.com/@team.treehouse"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 24 24" class="tiktok-icon"> <g id="BXaky5.tif"> <g> <path d="M17.6,8.5C17.6,8.5,17.6,8.5,17.6,8.5c-0.1,0-0.1,0-0.2-0.1c-0.8-0.1-1.5-0.5-2-1.1C15,7,14.7,6.6,14.5,6.1 C14.5,6,14.4,6,14.3,6c-0.6,0-1.1,0-1.7,0c-0.2,0-0.2,0-0.2,0.2c0,2.6,0,5.2,0,7.8c0,1.1-0.8,1.9-1.9,1.9c-1,0-1.9-0.8-1.9-1.9 c0-1,0.8-1.9,1.9-1.9c0.2,0,0.4,0,0.6,0c0.1,0,0.2,0,0.2-0.2c0-0.6,0-1.2,0-1.8c0,0,0-0.1,0-0.1c-0.4,0-0.8,0-1.2,0 c-2.1,0.2-3.6,2.1-3.5,4.2c0.1,2.1,1.8,3.7,3.9,3.8c2.2,0,4.1-1.7,4.1-3.9c0-1.5,0-3.1,0-4.6c0-0.1,0-0.1,0-0.2 c0.8,0.8,1.7,1.2,2.8,1.3C17.4,9.8,17.5,9.2,17.6,8.5z"></path> </g> </g> </svg></a></li> <li><a title="Discord" target="_blank" rel="noopener" data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Discord Icon" data-event-label="Source: Footer" href="https://discord.com/invite/RNNxkTHAUT"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 14 11" class="discord-icon"> <g id="surface1"> <path d="M 11.859375 1.035156 C 10.941406 0.609375 9.96875 0.308594 8.972656 0.136719 C 8.835938 0.382812 8.710938 0.636719 8.601562 0.898438 C 7.539062 0.734375 6.457031 0.734375 5.394531 0.898438 C 5.285156 0.636719 5.160156 0.382812 5.027344 0.136719 C 4.027344 0.308594 3.054688 0.613281 2.136719 1.039062 C 0.308594 3.769531 -0.1875 6.4375 0.0585938 9.066406 C 1.128906 9.863281 2.328125 10.472656 3.601562 10.863281 C 3.886719 10.472656 4.140625 10.058594 4.359375 9.625 C 3.945312 9.46875 3.546875 9.277344 3.164062 9.050781 C 3.265625 8.976562 3.363281 8.902344 3.457031 8.828125 C 4.566406 9.355469 5.777344 9.628906 7 9.628906 C 8.222656 9.628906 9.433594 9.355469 10.542969 8.828125 C 10.636719 8.90625 10.734375 8.980469 10.835938 9.050781 C 10.453125 9.277344 10.050781 9.472656 9.636719 9.628906 C 9.855469 10.0625 10.109375 10.472656 10.394531 10.863281 C 11.671875 10.476562 12.871094 9.867188 13.941406 9.066406 C 14.230469 6.019531 13.445312 3.378906 11.859375 1.035156 Z M 4.675781 7.449219 C 3.984375 7.449219 3.414062 6.816406 3.414062 6.035156 C 3.414062 5.257812 3.964844 4.617188 4.671875 4.617188 C 5.378906 4.617188 5.945312 5.257812 5.933594 6.035156 C 5.921875 6.816406 5.378906 7.449219 4.675781 7.449219 Z M 9.324219 7.449219 C 8.632812 7.449219 8.066406 6.816406 8.066406 6.035156 C 8.066406 5.257812 8.617188 4.617188 9.324219 4.617188 C 10.035156 4.617188 10.597656 5.257812 10.585938 6.035156 C 10.570312 6.816406 10.027344 7.449219 9.324219 7.449219 Z M 9.324219 7.449219 "></path> </g> </svg></a></li> </ul> <div class="legal-links"> <a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Terms &amp; Conditions" data-event-label="Source: Footer" href="/terms">Terms &amp; Conditions</a></li> <span>|</span> <a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Privacy" data-event-label="Source: Footer" href="/privacy">Privacy</a></li> </div> <p class="copyright-message">&copy; 2025 Treehouse Island, Inc.</p> </div> </footer> </section> <div id="syllabus-download" class="modal" data-featurette="modal" style="; display: none;"> <div class="grid-container"> <div class="grid-50 tablet-grid-50 grid-parent centered"> <div class="contained"> <button class="button modal-close x-small square secondary" data-modal-close="close"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 12 12" class="close-icon" aria-labelledby="close1167703" role="img"> <title id="close1167703">Close</title> <path d="M8.2,6l3.3-3.3c0.6-0.6,0.6-1.6,0-2.2s-1.6-0.6-2.2,0L6,3.8L2.7,0.5c-0.6-0.6-1.6-0.6-2.2,0s-0.6,1.6,0,2.2L3.8,6L0.5,9.3 c-0.6,0.6-0.6,1.6,0,2.2c0.6,0.6,1.6,0.6,2.2,0L6,8.2l3.3,3.3c0.6,0.6,1.6,0.6,2.2,0c0.6-0.6,0.6-1.6,0-2.2L8.2,6z"></path> </svg></button> <div class="grid-100"> <h1 class="text-4-xs m-b-05-xs">Syllabus Request</h1> <p class="text-5-xs">Please fill out the information below and then click the download button.</p> </div> <div class="grid-100 m-tb-3-xs"> <script> hbspt.forms.create({ portalId: "7320745", formId: "6352991b-9d41-4b8c-bccb-0ae8ff2b69be", submitButtonClass: 'button button--primary-blue w-full-xs m-t-2-xs', cssClass: 'hubspot-form', errorClass: 'form-feedback-error form-text-input', errorMessageClass: 'form-feedback list-unstyled m-b-2-xs', onFormReady: function onFormReady($form, ctx) { $form.find('.hs-input').addClass('form-text-input') $form.find(".hs-input").on("change paste keyup", function(event) { $form.find(".hs-input").addClass("form-text-input"); }); $form.find('label').addClass('form-label') $form.find("label").on("change paste keyup", function(event) { $form.find("label").addClass("form-label"); }); $form.find('.hs-error-msgs').addClass('form-feedback') $form.find(".hs-error-msgs").on("change paste keyup", function(event) { $form.find(".hs-error-msgs").addClass("form-feedback"); }); } }); </script> </div> </div> </div> </div> </div> <div id="mini-profile-container"></div> <div id="tarp" class="modal-tarp" style="display: none;" data-featurette="tarp"></div> <script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/8.4.4/swiper-bundle.min.js" defer="defer" aysnc="true"></script> <script src="https://ecs-static.teamtreehouse.com/assets/marketing_vendor-163ead9f1d8d2d2591b51febdddf07a9fd489fa41a438fa8806cf70705a306f5.js" crossorigin="anonymous" defer="defer" integrity="sha256-Fj6tnx2NLSWRtR/r3d8Hqf1In6QaQ4+ogGz3BwWjBvU="></script> <script src="https://ecs-static.teamtreehouse.com/assets/views/pages/landing/techdegree_pages_project_select-4affc84d5a90fd9954a5599903c9749d936a0cfcff3c8702878d673c1411923d.js" crossorigin="anonymous" defer="defer" integrity="sha256-Sv/ITVqQ/ZlUpVmZA8l0nZNqDPz/PIcCh41nPBQRkj0="></script> <script src="https://ecs-static.teamtreehouse.com/assets/logged_out-a2cb882b5d388ba23763c3ef292e820991298ea585da237520f2da7962409084.js" crossorigin="anonymous" defer="defer" integrity="sha256-osuIK104i6I3Y8PvKS6CCZEpjqWF2iN1IPLaeWJAkIQ="></script> <!-- Segment.io Analytics --> <script type="text/plain" class="optanon-category-2" async> !function(){ var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on"];analytics.factory=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);analytics.push(e);return analytics}};for(var t=0;t<analytics.methods.length;t++){var e=analytics.methods[t];analytics[e]=analytics.factory(e)}analytics.load=function(t,e){var n=document.createElement("script");n.type="text/javascript";n.async=!0;n.src="https://cdn.segment.com/analytics.js/v1/"+t+"/analytics.min.js";var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(n,a);analytics._loadOptions=e};analytics.SNIPPET_VERSION="4.1.0"; analytics.load("DMUKccVYvuuUIVSJlokCJe0YQyGm9qVb"); analytics.ready(function(){ window.analytics.segmentDebug = window.analytics.debug; window.analytics.debug = function(state) { if (state == null) { state = true; } $.cookie("_treehouse_analytics_debug", state); return state; }; }) window.recordedAnalytics = [] function recordAnalyticsCall(callType, event, properties, options) { if ($.cookie("_treehouse_analytics_debug") == "true") { window.recordedAnalytics.push([callType, event, properties, options]) console.debug("Analytics: ", callType, ("'" + event + "'"), properties, options); } } analytics.on('alias', function(e, p, o) { recordAnalyticsCall('alias', e, p, o)}); analytics.on('identify', function(e, p, o) { recordAnalyticsCall('identify', e, p, o)}); analytics.on('group', function(e, p, o) { recordAnalyticsCall('group', e, p, o)}); analytics.on('track', function(e, p, o) { recordAnalyticsCall('track', e, p, o)}); analytics.on('page', function(e, p, o) { recordAnalyticsCall('page', e, p, o)}); var request_id = "43583f02-f1c2-4b13-885e-5de6d42dddce"; function trackIdentity() { window.analytics.identify({"visitor_id":"8981786482","session_id":"d79b2384-e083-47a5-bcf8-fd8ae9911fc7"}); } function trackPage() { window.analytics.page({ visitor_id: "8981786482", session_id: "d79b2384-e083-47a5-bcf8-fd8ae9911fc7", request_id: request_id }); } trackIdentity(); trackPage(); $(document).on("pjax:success", function(event, body, status, xhr, options) { request_id = xhr.getResponseHeader("X-Request-Id"); trackPage(); }); }}(); //# sourceURL=_analytics_footer.erb </script> <!-- Start of HubSpot Embed Code --> <script type="text/javascript" id="hs-script-loader" async defer src="//js.hs-scripts.com/7320745.js"></script> <!-- End of HubSpot Embed Code --> <script src="https://js.hscollectedforms.net/collectedforms.js" id="CollectedForms-7320745" async defer crossorigin="anonymous" data-leadin-portal-id="7320745" data-leadin-env="prod" data-loader="hs-scriptloader" data-hsjs-portal="7320745" data-hsjs-env="prod"></script> <script src="https://js.hs-analytics.net/analytics/1594941600000/7320745.js" id="hs-analytics" async class="optanon-category-3"></script> <script src="https://js.hsadspixel.net/fb.js" id="hs-ads-pixel-7320745" async data-ads-portal-id="7320745" data-ads-env="prod" data-loader="hs-scriptloader" data-hsjs-portal="7320745" data-hsjs-env="prod" class="optanon-category-4"></script> <!-- Include the recaptcha javascript library --> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10