-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
executable file
·1 lines (1 loc) · 51.5 KB
/
index.html
File metadata and controls
executable file
·1 lines (1 loc) · 51.5 KB
1
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="description" content=""><meta name="author" content=""><title>Albert Chang: Portfolio</title><meta name="description" content='Explore Albert Chang's fast, elegant, and user-friendly web projects, and gain insight into his life!'><meta content="Albert Chang" name="author"><meta content="website" property="og:type"><meta prefix="og: http://ogp.me/ns#" content="http://i.imgur.com/Nz8dAf3.png" property="og:image"><meta content='Explore Albert Chang's fast, elegant, and user-friendly web projects, and gain insight into his life!'><meta content="http://www.albertchanged.me" property="og:url"><meta content="Albert Chang: Portfolio" property="og:title"><link rel="icon" href="img/portfolio/Portfolio-Tab-Icon-Round op.png"/><link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet"><link href="finalStyle.min.css" rel="stylesheet"><link href="vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"><link href="https://fonts.googleapis.com/css?family=Montserrat:300,400,500,600,700,800" rel="stylesheet" type="text/css"><link href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic" rel="stylesheet" type="text/css"><link href="https://fonts.googleapis.com/css?family=Sriracha" rel="stylesheet"><link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700,800" rel="stylesheet"><link href="https://fonts.googleapis.com/css?family=Libre+Franklin:200,300,400,500,700" rel="stylesheet"> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> <![endif]--></head><body id="page-top" class="index"> <script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');ga('create','UA-90796663-5','auto');ga('send','pageview');</script> <div id="skipnav"><a href="#maincontent">Skip to main content</a></div> <nav id="mainNav" class="navbar navbar-default navbar-fixed-top navbar-custom"><div class="container"><div class="navbar-header page-scroll"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> <span class="sr-only">Toggle navigation</span><i class="fa fa-bars"></i> </button> <a class="navbar-brand navbarlink" href="#page-top"><span class="light"><span style="color: black">Albert</span></span><span style="color: #848484; font-weight: 500">Chang</span><span style="color: #01A9DB; font-weight: 600">ED</span></a></div><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav navbar-right"><li class="hidden"> <a href="#page-top"></a></li><li class="page-scroll"> <a href="#skills">Skills</a></li><li class="page-scroll"> <a href="#experience">Experience</a></li><li class="page-scroll"> <a href="#portfolio">Portfolio</a></li><li class="page-scroll"> <a href="#about">About</a></li><li class="page-scroll" style="padding-right: 0px;"> <a href="#contact">Contact</a></li></ul></div></div> </nav> <header><div class="container" id="maincontent" tabindex="-1"><div class="row"><div class="col-lg-12"><div class="intro-text"><h1 class="name1" style="letter-spacing: 2px; display: inline-block;"><span style="color: #01BCF5">Albert</span></h1><h1 class="name2" style="margin-top: 0px; letter-spacing: 2px; display: inline-block;">Chang</h1> <object><embed src="img/portfolio/svg/PortfolioFinal4.svg" id="animation"></object> <br><h4 class="headerh4"><span class="skills1" style="font-family: 'Helvetica Neue', 'Open Sans'; font-weight: 300">Developer.</span></h4><h4 class="headerh4 headerh4-1"><span class="skills2" style="font-family: 'Helvetica Neue', 'Open Sans'; font-weight: 300">Designer.</span></h4><h4 class="headerh4 headerh4-2"><span class="skills3" style="font-family: 'Helvetica Neue', 'Open Sans'; font-weight: 300">DJ. </span></h4><div class="page-scroll"> <a href="#skills"><div class="arrow headerbounce" id="headerarrow"></div></a></div></div></div></div></div> </header> <section class="skills" id="skills"><div class="container" id="skillsid"><div class="row"><div class="col-lg-12 text-center"><h2 class="skillsh2">Skills</h2><h3 style="font-size: 16px; color: #848484; font-weight: 400">Interact with them to learn more!</h3><hr class="sectionhr skillshr" style="width: 80px"></div></div><h2 class="skills-title">Front End</h2><div class="row text-center skillrow" style="position: relative;"><div class="col-lg-4"><div class="skillbox text-center"><div class="skillshape"><h2 class="skilldescription" id="js" style="text-transform: none;">REACT</h2></div><div class="skillinfo skillinfo_topleft"> <strong>React JS<br>Redux / React Redux<br>Higher-Order Components</strong></div></div></div><div class="col-lg-4"><div class="skillbox text-center"><div class="skillshape"><h2 class="skilldescription" id="css" style="text-transform: none;">JAVASCRIPT</h2></div><div class="skillinfo skillinfo_top"> <strong>ES6 JavaScript<br/>Asynchronous Programming<br>Functional Programming</strong></div></div></div><div class="col-lg-4"><div class="skillbox text-center"><div class="skillshape"><h2 class="skilldescription" id="js" style="text-transform: none;">CSS</h2></div><div class="skillinfo skillinfo_topright"> <strong>CSS3<br>Sass / Less<br>BEM Naming</strong></div></div></div><div class="col-lg-4"><div class="skillbox text-center"><div class="skillshape"><h2 class="skilldescription" id="js" style="text-transform: none;">HTML</h2></div><div class="skillinfo skillinfo_bottomleft"> <strong>HTML5<br>Web Components<br/>Canvas</strong></div></div></div><div class="col-lg-4"><div class="skillbox text-center"><div class="skillshape"><h2 class="skilldescription" id="design">DESIGN</h2></div><div class="skillinfo skillinfo_bottom"> <strong>Mobile-first UI Design<br>Adobe Illustrator/Photoshop<br>Drawing/Sketching Accuracy</strong></div></div></div><div class="col-lg-4"><div class="skillbox text-center"><div class="skillshape"><h2 class="skilldescription" id="php">TESTING</h2></div><div class="skillinfo skillinfo_bottomright"> <strong>Unit & Integration Testing<br>End-To-End Testing<br>Jest, Mocha.js, Chai.js</strong></div></div></div></div> <br/><h2 class="skills-title" style="color: #424242">Back End</h2><div class="row text-center skillrow" style="position: relative;"><div class="col-lg-4"><div class="skillbox text-center"><div class="skillshape-secondary"><h2 class="skilldescription" id="sql">SERVERS</h2></div><div class="skillinfo skillinfo_bottomleft"> <strong>Node.js & File System<br>Koa.js & Express.js<br>AJAX & Axios</strong></div></div></div><div class="col-lg-4"><div class="skillbox text-center"><div class="skillshape-secondary"><h2 class="skilldescription" id="js" style="text-transform: none;">DATABASE</h2></div><div class="skillinfo skillinfo_bottom"> <strong>PostgreSQL<br>MySQL<br>MongoDB</strong></div></div></div><div class="col-lg-4"><div class="skillbox text-center"><div class="skillshape-secondary"><h2 class="skilldescription" id="ux">BASH</h2></div><div class="skillinfo skillinfo_bottomright"> <strong>Computer Automation<br>Shell Scripting<br>Git Version Control</strong></div></div></div></div></div> </section><section class="experience" id="experience"><div class="container" id="experienceid"><div class="row"><div class="col-lg-12 text-center"><h2 class="experienceh2">Experience</h2><hr class="sectionhr portfoliohr"> <br></div></div><div class="experiencerow1"> <img src="./img/portfolio/Cisco-Blue-Logo op.png" class="experience-logo"/> <br/><div class="experience-header"><div class="experience-header-title"><h2 class="portfolioh2" style="color: #424242">FRONT END SOFTWARE ENGINEER</h2><h3 class="portfolioh2">@ Cisco Systems, Inc.</h3></div><div><p class="experience-dates">Sep 2018 - Nov 2020</p></div></div><div class="experience-body"><div class="experience-bullet"><div class="dot-container"><span class="dot"></span></div><div class="experience-p"><strong>Converted</strong> from Contractor to Full Time Employee in Sep 2018 (3 months early!)</div></div><div class="experience-bullet"><div class="dot-container"><span class="dot"></span></div><div class="experience-p"><strong>Owned and shipped</strong> robust ‘System 360’ dashboard web application to 3,000+ Cisco DNA Center customers worldwide</div></div><div class="experience-bullet"><div class="dot-container"><span class="dot"></span></div><div class="experience-p"><strong>Developed</strong> ‘Service Explorer‘, a responsive System debugging tool that helps users monitor microservices in a hierarchical tree layout; used React and Cisco‘s HTML Canvas framework</div></div><div class="experience-bullet"><div class="dot-container"><span class="dot"></span></div><div class="experience-p"><strong>Implemented</strong> a modern product landing experience for Cisco’s DNA Management System product that features Geo Map & Table views and Web Components</div></div><div class="experience-bullet"><div class="dot-container"><span class="dot"></span></div><div class="experience-p"><strong>Optimized</strong> applications by utilizing React composition patterns and enabling real-time data flow throughout components via Web Sockets</div></div></div> <br/><div class="experience-photo-title"><p style="color: white">System 360 (Dashboard)</p></div> <img src="./img/portfolio/System 360 - Generic - Nov 2020 op.png" width="100%" height="100%" class="experience-project-photo" style="box-shadow: 5px 5px 2px #D8D8D8; margin-bottom: 40px" title="Full-page screenshot of System 360 Dashboard" alt="Full-page screenshot of System 360 Dashboard"/><div class="experience-photo-title"><p style="color: white">Service Explorer (Hierarchical Tree)</p></div> <img src="./img/portfolio/Service Explorer - Generic - Nov 2020 op.png" width="100%" height="100%" class="experience-project-photo" style="box-shadow: 5px 5px 2px #D8D8D8;" title="Full-page screenshot of Service Explorer tree with Sidebar open" alt="Full-page screenshot of Service Explorer tree with Sidebar open"/></div> <br/><hr class="experience-hr"/> <br/><div class="experiencerow2"> <img src="./img/portfolio/Cisco-Blue-Logo op.png" class="experience-logo"/> <br/><div class="experience-header"><div class="experience-header-title"><h2 class="portfolioh2" style="color: #424242">FRONT END SOFTWARE ENGINEER <span style="color: #6E6E6E">(Contract)</span></h2><h3 class="portfolioh2">@ Cisco Systems, Inc.</h3></div><div><p class="experience-dates">Jun 2018 - Sep 2018</p></div></div><div class="experience-body"><div class="experience-bullet"><div class="dot-container"><span class="dot"></span></div><div class="experience-p"><strong>Built</strong> Proof-of-Concept for ‘System 360‘, a new dashboard web application that centralizes System area information to help users monitor and manage their Cisco DNA Center product</div></div><div class="experience-bullet"><div class="dot-container"><span class="dot"></span></div><div class="experience-p"><strong>Reduced</strong> initial React, JavaScript, HTML5, and CSS3 code by 40% by modularizing into reusable React components that transfer global data via Redux and REST</div></div><div class="experience-bullet"><div class="dot-container"><span class="dot"></span></div><div class="experience-p"><strong>Presented</strong> multiple iterations to stakeholders, designers, & developers, and worked closely with them to determine long-term product vision for ‘System 360‘</div></div></div> <br/><div class="experience-photo-title"><p style="color: white">Proof-of-Concept for System 360 (Dashboard)</p></div> <img src="./img/portfolio/System 360 - Generic - Sep 2018 op.png" width="100%" height="100%" class="experience-project-photo" style="box-shadow: 5px 5px 2px #D8D8D8;z-index: 100" title="Screenshot of the first-ever iteration of System 360 Dashboard" alt="Screenshot of the first-ever iteration of System 360 Dashboard"/> <br/></div></div> </section> <section class="portfolio" id="portfolio"><div class="container" id="portfolioid"> <br/><div class="row"><div class="col-lg-12 text-center"><h2 class="portfolioh2">Portfolio</h2><h3 style="font-size: 16px; color: #8D8D8D; font-weight: 400">Click on them for more information!</h3><hr class="sectionhr portfoliohr"> <br></div></div><div class="row portfoliorow1"><div class="col-lg-4 portfolio-item"> <a href="#portfolioModal6" class="portfolio-link" data-toggle="modal"><div class="caption"><div class="caption-content"> <i class="fa fa-search-plus fa-3x"></i> <br><br> <strong><span style="font-size: 25px">Netflix Content Microservice</span></strong> <br> <span style="color: #01A9DB">Software Engineer</span></div></div> <img src="img/portfolio/netflixcontent.png" class="img-responsive portfolio_pics" alt="portfolio display" style="opacity: 0.75"> </a></div><div class="col-lg-4 portfolio-item"> <a href="#portfolioModal7" class="portfolio-link" data-toggle="modal"><div class="caption"><div class="caption-content"> <i class="fa fa-search-plus fa-3x"></i> <br><br> <strong><span style="font-size: 25px">Rebasebook</span></strong> <br> <span style="color: #01A9DB">Full Stack Software Engineer</span></div></div> <img src="img/portfolio/rebasebookop.png" class="img-responsive portfolio_pics" alt="portfolio display" style="opacity: 0.95"> </a></div><div class="col-lg-4 portfolio-item"> <a href="#portfolioModal8" class="portfolio-link" data-toggle="modal"><div class="caption"><div class="caption-content"> <i class="fa fa-search-plus fa-3x"></i> <br><br> <strong><span style="font-size: 25px">Ticketfaster</span></strong> <br> <span style="color: #01A9DB">Full Stack Software Engineer</span></div></div> <img src="img/portfolio/ticketfasterop.png" class="img-responsive portfolio_pics" alt="portfolio display" style="opacity: 0.95"> </a></div></div><div class="row portfoliorow2"><div class="col-lg-4 portfolio-item"> <a href="#portfolioModal9" class="portfolio-link" data-toggle="modal"><div class="caption"><div class="caption-content"> <i class="fa fa-search-plus fa-3x"></i> <br><br> <strong><span style="font-size: 25px">Toppit (Legacy Application)</span></strong> <br> <span style="color: #01A9DB">Full Stack Software Engineer</span></div></div> <img src="img/portfolio/toppit.png" class="img-responsive portfolio_pics" alt="portfolio display" style="opacity: 0.95"> </a></div><div class="col-lg-4 portfolio-item"> <a href="#portfolioModal1" class="portfolio-link" data-toggle="modal"><div class="caption"><div class="caption-content"> <i class="fa fa-search-plus fa-3x"></i> <br><br> <strong><span style="font-size: 25px">www.albertchanged.me</span></strong> <br> <span style="color: #01A9DB">Full Stack Web Developer</span></div></div> <img src="img/portfolio/portfoliodisplayop.png" class="img-responsive portfolio_pics" alt="portfolio display" style="opacity: 0.95"> </a></div><div class="col-lg-4 portfolio-item"> <a href="#portfolioModal2" class="portfolio-link" data-toggle="modal"><div class="caption"><div class="caption-content"> <i class="fa fa-search-plus fa-3x"></i> <br><br> <strong><span style="font-size: 25px">YouTube Topics </span></strong> <br> <span style="color: #01A9DB">React Web App / Tool Developer</span></div></div> <img src="img/portfolio/youtubetopicsop.png" class="img-responsive portfolio_pics" alt="YouTube Topics Display"> </a></div></div><div class="row portfoliorow3"><div class="col-lg-4 portfolio-item"> <a href="#portfolioModal3" class="portfolio-link" data-toggle="modal"><div class="caption"><div class="caption-content"> <i class="fa fa-search-plus fa-3x"></i> <br><br> <strong><span style="font-size: 25px">FLMWRK Landing Page</span></strong> <br> <span style="color: #01A9DB">Animated Website Developer</span></div></div> <img src="img/portfolio/flmwrkop.png" class="img-responsive portfolio_pics" alt="FLMWRK Landing Page Display" style="opacity: 0.9"> </a></div><div class="col-lg-4 portfolio-item"> <a href="#portfolioModal4" class="portfolio-link" data-toggle="modal"><div class="caption"><div class="caption-content"> <i class="fa fa-search-plus fa-3x"></i> <br><br> <strong><span style="font-size: 25px">Win Her Love</span></strong> <br> <span style="color: #01A9DB">JavaScript Web Game Developer</span></div></div> <img src="img/portfolio/winherloveop.png" class="img-responsive portfolio_pics" alt="Win Her Love Display"> </a></div><div class="col-lg-4 portfolio-item"> <a href="#portfolioModal5" class="portfolio-link" data-toggle="modal"><div class="caption"><div class="caption-content"> <i class="fa fa-search-plus fa-3x"></i> <br><br> <strong><span style="font-size: 25px">Golden State Watches</span></strong> <br> <span style="color: #01A9DB">Online Storefront Developer</span></div></div> <img src="img/portfolio/gswhomeop.png" class="img-responsive portfolio_pics" alt="Golden State Watches Display" style="opacity: 0.9"> </a></div></div></div> </section> <section class="about" id="about"><div class="container" id="aboutid"><div class="row"><div class="col-lg-12 text-center"><h2 class="abouth2">About</h2><hr class="sectionhr abouthr" style="width: 80px"><p style="font-family: 'Helvetica Neue', 'Open Sans'; font-size: 25px; display: inline-block; color: #848484; font-weight: 300">I love being able to combine art and code to make something</p><p id="beautiful" style="font-family: 'Sriracha', cursive; font-size: 26px; display: inline-block; padding-left: 0.5%; margin-top: -15px"> beautiful.</p></div></div><div class="row aboutrow"><div class="col-lg-4"><div id="about1" class="fadein aboutsection1"><h3 class="abouth3">EDUCATION</h3><hr class="sectionhr aboutsectionhr" style="width: 90px"><p style="padding-top: 4%; color: #424242"><strong>HACK REACTOR '18</strong></p><p>Advanced <strong><span style="color: #606060">Software Engineering</span></strong></p><p style="padding-top: 4%; color: #424242"><strong>SAN JOSE STATE UNIVERSITY '17</strong></p><p>Majored in <strong><span style="color: #606060">Management Info Systems</span></strong><br>Minored in <strong><span style="color: #555555">Computer Science</span></strong></p><p style="padding-top: 2%; color: #00A1D2"><strong>Awards & Distinctions</strong></p><p>Hack Reactor - <strong><span style="color: #606060">Class President (2018)</span></strong><br>IBM/GameStop Hackathon - <strong><span style="color: #606060">2nd Place</span></strong><br>SJSU - <strong><span style="color: #606060">Dean's Scholar (2016-2017)</span></strong></p></div></div><div class="col-lg-4"><div id="about2" class="fadein aboutsection2"><h3 class="abouth3">HOBBIES</h3><hr class="sectionhr aboutsectionhr" style="width: 80px"> <strong><p style="padding-top: 4%;"><span style="color: #606060; font-weight: 500">DJing:</span> I mix quickly and embrace musical variety. Check out my mixes and mashups! <a href="https://soundcloud.com/flmwrk" style="color: #009BCA" target="_blank"><strong>FLMWRK</strong></a></p></strong> <strong><p><span style="color: #606060; font-weight: 500">Programming:</span> I am results-driven and love problem solving. Check out my <a href="https://www.github.com/albertchanged" style="color: #009BCA" target="_blank"><strong>GitHub</strong></a>!</p></strong> <strong><p><span style="color: #606060; font-weight: 500">Designing: </span>I have loved art since I was 5. Won two t-shirt design contests at SJSU!</p></strong> <strong><p><span style="color: #606060; font-weight: 500">Weightlifting: </span>The body works as one, as physical strength builds mental strength. Look good, feel good!</p></strong></div></div><div class="col-lg-4"><div id="about3" class="fadein aboutsection3"><h3 class="abouth3">GOALS</h3><hr class="sectionhr aboutsectionhr" style="width: 50px"><p style="padding-top: 4%;">With my solid front end <u>and</u> back end skillset, as well as my quick absorption of new technologies, I strive to enhance the world as a <span style="color: #424242"><strong>software engineer</strong></span>.</p><p>I enjoy seeing others succeed, and constantly search for ways to improve myself in many facets of my life.</p><p>But above all, I hope to be part of something that transcends personal growth — one that <strong><span style="color: #00A1D2">changes countless lives for the better</span></strong>.</p></div></div><div class="col-lg-8 col-lg-offset-2 text-center page-scroll"> <br><p id="prebutton"><strong>Like what you have read?</strong></p> <a href="#contact" class="btn btn-lg btn-outline"> Let's create some magic together. </a></div></div></div></div> </section> <section class="contact" id="contact"><div class="container" id="contactid"><div class="row"><div class="col-lg-12 text-center"><h2 class="contacth2">Contact</h2><hr class="sectionhr contacthr" style="width: 80px"></div></div><div class="row"><div class="col-lg-8 col-lg-offset-2"><p class="contactp">Please email me at <span style="font-weight: 600"><a href="mailto:albertchanged@gmail.com" class="emaillink">albertchanged@gmail.com</a></span> or fill out the form below!</p><form name="sentMessage" id="contactForm" novalidate><div class="row control-group"><div class="form-group col-xs-12 floating-label-form-group controls"> <label for="name" style="color: #01BCF5">Name</label> <input type="text" class="form-control" placeholder="Name" id="name" required data-validation-required-message="Please enter your name." style="padding-bottom: 10px"><p class="help-block text-danger"></p></div></div><div class="row control-group"><div class="form-group col-xs-12 floating-label-form-group controls"> <label for="email" style="color: #01BCF5">Email Address</label> <input type="email" class="form-control" placeholder="Email Address" id="email" required data-validation-required-message="Please enter your email address."><p class="help-block text-danger"></p></div></div><div class="row control-group"><div class="form-group col-xs-12 floating-label-form-group controls"> <label for="message" style="color: #01BCF5">Message</label><textarea rows="3" class="form-control" placeholder="Enjoyed my website? Have an exciting career opportunity? I would love to hear from you!" id="message" required data-validation-required-message="Please enter a message."></textarea></div></div> <br><div id="success"></div><div class="row"><div class="form-group col-xs-12"> <button type="submit" class="btn btn-success btn-lg">Send</button></div></div></form></div></div></div> </section> <footer class="text-center"><div class="footer-above"><div class="container"><div class="row"><div class="footer-col col-md-12"><h3 class="footerh3">CONNECT WITH ME!</h3><ul class="list-inline"><li class="socialbutton1"> <a href="https://www.linkedin.com/in/albertchanged/" target="_blank" class="btn-social btn-outline btn1"><span class="sr-only">LinkedIn</span><i class="fa fa-fw fa-linkedin"></i></a></li><li class="socialbutton2"> <a href="https://github.com/albertchanged" target="_blank" class="btn-social btn-outline btn2"><span class="sr-only">GitHub</span><i class="fa fa-fw fa-github"></i></a></li><li class="socialbutton3"> <a href="https://soundcloud.com/flmwrk" target="_blank" class="btn-social btn-outline btn3"><span class="sr-only">SoundCloud</span><i class="fa fa-fw fa-soundcloud"></i></a></li></ul></div></div></div></div><div class="footer-below"><div class="container"><div class="row"><div class="col-lg-12"><p class="footerp"> <strong>Updated with <span style="color: #F70000;" id="heart">♥</span> by <span style="font-weight: 700">Albert Chang</span>, 2020</strong></p></div></div></div></div> </footer><div class="scroll-top page-scroll hidden-sm hidden-xs hidden-lg hidden-md"> <a class="btn btn-primary" href="#page-top"> <i class="fa fa-chevron-up"></i> </a></div><div class="portfolio-modal modal fade" id="portfolioModal1" tabindex="-1" role="dialog" aria-hidden="true"><div class="modal-content"><div class="close-modal" data-dismiss="modal"><div class="lr"><div class="rl"></div></div></div><div class="container"><div class="row"><div class="col-lg-8 col-lg-offset-2"><div class="modal-body"><h2 class="portfoliotitle">albertchanged.me</h2><h3 class="portfoliorole fullstack">Full Stack Web Developer</h3><hr class="portfoliohr" style="border-top: 4px solid white;"><p class="portfolioinfo dividertitle"><strong>Overview</strong><p><p class="portfolioinfo">You are on it right now!</p><p class="portfolioinfo">This is a culmination of nearly everything I have worked on over my past 4 years of development. Though the YouTube Topics ♫ app is the most useful, this is by far my favorite project.</p><p class="portfolioinfo">There were many steps in building this, so I will just discuss the three most difficult ones.</p><p class="portfolioinfo">I designed the homepage artwork SVG in Adobe Illustrator. Then I used CSS animations to create the 'CODE' and music notes visuals. I also learned a new way to keep an object in place as it rotates, so once I applied that to the head, I synchronized the head bob with the other animations.</p><p class="portfolioinfo">Next, I made CSS hover transitions on the skill boxes follow the direction of their page placement (corner-wise and edge-wise). Try them out when you get to the Skills section!</p><p class="portfolioinfo">Lastly, I edited border radii of the objects on the About section, divided the Portfolio section into two rows, and assigned both of them CSS animations. I then utilized jQuery and ES6 JavaScript to watch scroll events, which trigger the animations when the user scrolls the respective objects into view.</p><p class="portfolioinfo">Check out the <a href="https://github.com/albertchanged/Portfolio" target="_blank">GitHub repo</a>!</p><p class="portfolioinfo dividertitle"><strong>Technologies Used</strong></p><p class="portfolioinfo" style="margin-bottom: 30px"><span style="color: white"><strong>FRONT END: </strong></span>Bootstrap, HTML5, CSS3, Sass/Scss <br><span style="color: white"><strong>BACK END: </strong></span> ES6 JavaScript, jQuery, PHP</p> <button type="button" class="btn btn-default portfolio-button" data-dismiss="modal"><i class="fa fa-times"></i> Close</button></div></div></div></div></div></div><div class="portfolio-modal modal fade" id="portfolioModal1" tabindex="-1" role="dialog" aria-hidden="true"><div class="modal-content"><div class="close-modal" data-dismiss="modal"><div class="lr"><div class="rl"></div></div></div><div class="container"><div class="row"><div class="col-lg-8 col-lg-offset-2"><div class="modal-body"><h2 class="portfoliotitle">Netflix Content Microservice</h2><h3 class="portfoliorole fullstack">Software Engineer</h3><hr class="portfoliohr" style="border-top: 4px solid white;"><p class="portfolioinfo dividertitle"><strong>Overview</strong><p><p class="portfolioinfo">You are on it right now!</p><p class="portfolioinfo">This is a culmination of nearly everything I have learned over the past 2 years of development. Though the YouTube Topics ♫ app is the most useful, this is by far my favorite project.</p><p class="portfolioinfo">There were many steps in building this, so I will just discuss the three most difficult ones.</p><p class="portfolioinfo">I designed the homepage artwork SVG in Adobe Illustrator. Then I used CSS animations to create the 'CODE' and music notes visuals. I also learned a new way to keep an object in place as it rotates, so once I applied that to the head, I synchronized the head bob with the other animations.</p><p class="portfolioinfo">Next, I made CSS hover transitions on the skill boxes follow the direction of their page placement (corner-wise and edge-wise). Try them out when you get to the Skills section!</p><p class="portfolioinfo">Lastly, I edited border radii of the objects on the About section, divided the Portfolio section into two rows, and assigned both of them CSS animations. I then utilized jQuery and ES6 JavaScript to watch scroll events, which trigger the animations when the user scrolls the respective objects into view.</p><p class="portfolioinfo">Check out the <a href="https://github.com/albertchanged/Portfolio" target="_blank">GitHub repo</a>!</p><p class="portfolioinfo dividertitle"><strong>Technologies Used</strong></p><p class="portfolioinfo" style="margin-bottom: 30px"><span style="color: white"><strong>FRONT END: </strong></span>Bootstrap, HTML5, CSS3, Sass/Scss <br><span style="color: white"><strong>BACK END: </strong></span> ES6 JavaScript, jQuery, PHP</p> <button type="button" class="btn btn-default portfolio-button" data-dismiss="modal"><i class="fa fa-times"></i> Close</button></div></div></div></div></div></div><div class="portfolio-modal modal fade" id="portfolioModal2" tabindex="-1" role="dialog" aria-hidden="true"><div class="modal-content"><div class="close-modal" data-dismiss="modal"><div class="lr"><div class="rl"></div></div></div><div class="container"><div class="row"><div class="col-lg-8 col-lg-offset-2"><div class="modal-body"> <a href="https://github.com/albertchanged/YouTube-Topics" target="_blank" class="titlelink"><h2 class="portfoliotitle">YouTube Topics ♫<img src="img/portfolio/linkblue.png" class="linkpic"/></h2></a><h3 class="portfoliorole">React Web App / Tool Developer</h3><hr class="portfoliohr" style="border-top: 4px solid white;"><p class="portfolioinfo dividertitle"><strong>Overview</strong><p><p class="portfolioinfo">Say goodbye to unofficial lyric videos and bad audio on YouTube!</p><p class="portfolioinfo">This YouTube-esque web application populates search results directly from YouTube’s ‘Topic’ channels to provide the highest quality music to the user.</p><p class="portfolioinfo">With the help of <a href="https://github.com/StephenGrider" target="_blank">Stephen Grider's</a> <a href="https://www.udemy.com/react-redux/" target="_blank">Udemy course</a>, I designed components / states in ES6 to create the site's backbone, and bundled the application with Babel and Webpack.</p><p class="portfolioinfo">Then I took off running, querying the search results to return only videos from 'Topic' channels and using jQuery to select/deselect videos as the user chooses. I also learned to organize my CSS with Sass, which greatly improved the source code's readability.</p><p class="portfolioinfo">Check out the <a href="https://github.com/albertchanged/YouTube-Topics" target="_blank">GitHub repo</a>!</p><p class="portfolioinfo dividertitle"><strong>Technologies Used</strong></p><p class="portfolioinfo"><span style="color: white"><strong>FRONT END: </strong></span> React JS, Sass/Scss, Bootstrap, HTML5, CSS3 <br><span style="color: white"><strong>BACK END: </strong></span> ES6 JavaScript, jQuery, Webpack, YouTube Data API</p><hr class="portfoliohr" style="margin-bottom: 35px; border-top: 4px solid white;"><a href="https://github.com/albertchanged/YouTube-Topics" target="_blank"><img src="img/portfolio/screenshotyoutubeop.png" class="img-responsive img-centered portfolio_pics" alt="Screenshot of YouTube Topics ♫ page" style="box-shadow: 0px 0px 10px #A4A4A4;"></a> <button type="button" class="btn btn-default portfolio-button" data-dismiss="modal"><i class="fa fa-times"></i> Close</button></div></div></div></div></div></div><div class="portfolio-modal modal fade" id="portfolioModal3" tabindex="-1" role="dialog" aria-hidden="true"><div class="modal-content"><div class="close-modal" data-dismiss="modal"><div class="lr"><div class="rl"></div></div></div><div class="container"><div class="row"><div class="col-lg-8 col-lg-offset-2"><div class="modal-body"> <a href="https://albertchanged.github.io/FLMWRK/" target="_blank" class="titlelink"><h2 class="portfoliotitle">FLMWRK<img src="img/portfolio/linkblue.png" class="linkpic"/></h2></a><h3 class="portfoliorole">Animated Website Developer</h3><hr class="portfoliohr" style="border-top: 4px solid white;"><p class="portfolioinfo dividertitle"><strong>Overview</strong><p><p class="portfolioinfo">Besides tackling cool projects to deepen my skill set and show what I could do as YOUR next software developer, I also love DJing! And what better way to combine the two than to create a simple yet effective landing page for my DJ persona, <a href="https://soundcloud.com/FLMWRK" target="_blank">FLMWRK</a>?</p><p class="portfolioinfo">I first created a minimalistic footer. Then I converted my self-designed logo into SVGs in Adobe Illustrator, and used CSS animations to trace, fill, and fade them in following a specific order.</p><p class="portfolioinfo">Lastly, I needed to emphasize the 'FLM' (flame) in 'FLMWRK', so I set animation delays on certain aspects of my logo in order to emulate a cool "flaming" illusion.</p><p class="portfolioinfo">Check out the <a href="https://github.com/albertchanged/FLMWRK" target="_blank">Github repo</a>!</p><p class="portfolioinfo dividertitle"><strong>Technologies Used</strong></p><p class="portfolioinfo"><span style="color: white"><strong>FRONT END:</strong></span> HTML5, CSS3 <br><span style="color: white"><strong>MISC. TOOLS: </strong></span> SVG, Adobe Illustrator CS5</p><hr class="portfoliohr" style="margin-bottom: 35px; border-top: 4px solid white;"><a href="https://albertchanged.github.io/FLMWRK/" target="_blank"><img src="img/portfolio/screenshotflmwrkop.png" class="img-responsive img-centered portfolio_pics" alt="Screenshot of FLMWRK Landing Page" style="box-shadow: 0px 0px 5px #A4A4A4;"></a><button type="button" class="btn btn-default portfolio-button" data-dismiss="modal"><i class="fa fa-times"></i> Close</button></div></div></div></div></div></div><div class="portfolio-modal modal fade" id="portfolioModal4" tabindex="-1" role="dialog" aria-hidden="true"><div class="modal-content"><div class="close-modal" data-dismiss="modal"><div class="lr"><div class="rl"></div></div></div><div class="container"><div class="row"><div class="col-lg-8 col-lg-offset-2"><div class="modal-body"> <a href="https://albertchanged.github.io/Win-Her-Love/" target="_blank" class="titlelink"><h2 class="portfoliotitle">Win Her Love<img src="img/portfolio/linkblue.png" class="linkpic"/></h2></a><h3 class="portfoliorole">JavaScript Web Game Developer</h3><hr class="portfoliohr" style="border-top: 4px solid white;"><p class="portfolioinfo dividertitle"><strong>Overview</strong><p><p class="portfolioinfo"><strong><span style="color: white">Objective:</span> Evade Bug swarms to collect Hearts from a Princess at the end of the board.</strong></p><p class="portfolioinfo">Alright, I cannot take ALL the credit for this Frogger-esque game!</p><p class="portfolioinfo">HUGE thank you to the <a href="https://www.udacity.com/course/front-end-web-developer-nanodegree--nd001" target="_blank">Udacity Front End Web Developer Nanodegree course</a> for providing the artwork, game engine, and starting code for the Boy and Bug sprites.</p><p class="portfolioinfo">Having that foundation allowed me to expand on each aspect of the game using ES6 JavaScript. I first edited the game engine to extend the gameboard. I also figured out how to vary the Bugs' frequency and speed, and recalibrated both their and the Boy's impact radii.</p><p class="portfolioinfo">Then I inserted a Princess who moves to a random block after each interaction with the Boy, which causes the Hearts, Score, and amount of Bugs to update. This was the most difficult algorithm to devise because it required multiple JavaScript prototypes to listen to each other.</p><p class="portfolioinfo">Finally, I used HTML Local Storage to cache the player's highest score so he/she can try to beat it in the future!</p><p class="portfolioinfo"><span style="color: white"><strong>***More game instructions are on the right side of <a href="https://albertchanged.github.io/Win-Her-Love/" target="_blank">its page</a>.***</strong></span></p><p class="portfolioinfo">Check out the <a href="https://github.com/albertchanged/Win-Her-Love" target="_blank">Github repo</a>!</p><p class="portfolioinfo dividertitle"><strong>Technologies Used</strong></p><p class="portfolioinfo"><span style="color: white"><strong>FRONT END: </strong></span> HTML5, CSS3 <br><span style="color: white"><strong>BACK END: </strong></span> ES6 JavaScript</p><hr class="portfoliohr" style="margin-bottom: 35px; border-top: 4px solid white;"><a href="https://albertchanged.github.io/Win-Her-Love/" target="_blank"><img src="img/portfolio/screenshotwinherloveop.png" class="img-responsive img-centered portfolio_pics" alt="Screenshot of Win Her Love Page" style="box-shadow: 0px 0px 10px #A4A4A4;"></a><button type="button" class="btn btn-default portfolio-button" data-dismiss="modal"><i class="fa fa-times"></i> Close</button></div></div></div></div></div></div><div class="portfolio-modal modal fade" id="portfolioModal5" tabindex="-1" role="dialog" aria-hidden="true"><div class="modal-content"><div class="close-modal" data-dismiss="modal"><div class="lr"><div class="rl"></div></div></div><div class="container"><div class="row"><div class="col-lg-8 col-lg-offset-2"><div class="modal-body"> <a href="http://goldenstatecoder.altervista.org/" target="_blank" class="titlelink"><h2 class="portfoliotitle">Golden State Watches<img src="img/portfolio/linkblue.png" class="linkpic"/></h2></a><h3 class="portfoliorole">Online Storefront Developer</h3><hr class="portfoliohr" style="border-top: 4px solid white;"><p class="portfolioinfo dividertitle"><strong>Overview</strong><p><p class="portfolioinfo">This was a group project for my Web Based Computing course in college. Two teammates and I created an online storefront for gold watches. I was the lead developer.</p><p class="portfolioinfo">First, I combined 3 Bootstrap templates to connect the parallax structure, product view modals, and team member section together.</p><p class="portfolioinfo">I gave each product view modal a title->image->table->form layout. As my teammates filled product view modals with watch information and images, I searched for ways to spice up the interface. I found a ticking Canvas clock online and superimposed it onto the home page.</p><p class="portfolioinfo">A teammate and I implemented a dynamic star-rating and feedback system within HTML forms in the product view modals. I edited the PHP code given by my professor to display this feedback on an internal page. Lastly, we reworked the CSS to establish the site's overall feel.</p><p class="portfolioinfo dividertitle"><strong>Technologies Used</strong></p><p class="portfolioinfo"><span style="color: white"><strong>FRONT END: </strong></span> HTML5, CSS3, Bootstrap <br><span style="color: white"><strong>BACK END: </strong></span> ES6 JavaScript, PHP, MySQL</p><hr class="portfoliohr" style="margin-bottom: 35px; border-top: 4px solid white;"><a href="http://goldenstatecoder.altervista.org/" target="_blank"><img src="img/portfolio/screenshotgswop.png" class="img-responsive img-centered portfolio_pics" alt="Screenshot of Golden State Watches Page" style="box-shadow: 0px 0px 5px #A4A4A4;"></a><button type="button" class="btn btn-default portfolio-button" data-dismiss="modal"><i class="fa fa-times"></i> Close</button></div></div></div></div></div></div><div class="portfolio-modal modal fade" id="portfolioModal6" tabindex="-1" role="dialog" aria-hidden="true"><div class="modal-content"><div class="close-modal" data-dismiss="modal"><div class="lr"><div class="rl"></div></div></div><div class="container"><div class="row"><div class="col-lg-8 col-lg-offset-2"><div class="modal-body"> <a href="https://github.com/albertchanged/netflix-content" target="_blank" class="titlelink"><h2 class="portfoliotitle">Netflix Content Microservice<img src="img/portfolio/linkblue.png" class="linkpic"/></h2></a><h3 class="portfoliorole">Software Engineer</h3><hr class="portfoliohr" style="border-top: 4px solid white;"><p class="portfolioinfo dividertitle"><strong>Overview</strong><p><p class="portfolioinfo"> This application centered around optimization and scalability. I simulated vigorous Netflix site activity through stress tests that conjured 3,500+ concurrent users. Though there were 3 use cases, my primary focus was to provide another microservice with full video data (15 sections) from my Cassandra database of 10,000,000 unique records – in each request I received!</p><p class="portfolioinfo"> Using Koa.js in a Node.js runtime environment, I authored all route, endpoint, database, and test files to provide my Artillery stress test endpoints to attack with requests. My primary endpoint was called 'GET content/:id'.</p><p class="portfolioinfo"> Initially, my functionality could only reach a throughput of 400 requests per second (RPS), and at some points, took 2,600 milliseconds (ms) to complete a request. However, after implementing Redis to cache results and achieve constant time retrieval, I increased my throughput by 400% to 1,300 RPS and reduced my latency by 75% to 630 ms!</p><p class="portfolioinfo"> I then enlisted a Docker Swarm to deploy my service on Amazon Web Services EC2 Linux Instances. I started with 1 t2.medium instance to hold Cassandra, Redis, and a proxy server, and 1 t2.micro to hold my application's web server.</p><p class="portfolioinfo"> My deployment goal was to achieve 1,000+ RPS and a latency below 200 ms. Stress testing this setup yielded a throughput of 650 RPS and latency of 722 ms. Not quite there yet.</p><p class="portfolioinfo"> So, to distribute request load across more nodes, I horizontally scaled my service by adding 2 more t2.micro instances, both of which carried my web server as well. With this new and robust setup, I more than doubled my throughput to 1,400 RPS and cut my latency by 85% to 115 ms!</p><p class="portfolioinfo">Check out the <a href="https://github.com/albertchanged/netflix-content" target="_blank">GitHub repo</a>!</p><p class="portfolioinfo dividertitle"><strong>Technologies Used</strong></p><p class="portfolioinfo"><span style="color: white"><strong>DEPLOYMENT: </strong></span> Amazon Web Services, Docker, Docker Swarm <br><span style="color: white"><strong>BACK END: </strong></span> Node.js, Koa.js, Cassandra DB, Redis</p><hr class="portfoliohr" style="margin-bottom: 35px; border-top: 4px solid white;"><p>Best metrics achieved: 1400 RPS, latency of < 125 ms</p> <a href="https://i.imgur.com/676rcCs.png" target="_blank"><img src="img/portfolio/netflixop.png" class="img-responsive img-centered portfolio_pics" alt="Achieved Metrics for Netflix Content Microservice" style="box-shadow: 0px 0px 5px #A4A4A4;"></a><button type="button" class="btn btn-default portfolio-button" data-dismiss="modal"><i class="fa fa-times"></i> Close</button></div></div></div></div></div></div><div class="portfolio-modal modal fade" id="portfolioModal7" tabindex="-1" role="dialog" aria-hidden="true"><div class="modal-content"><div class="close-modal" data-dismiss="modal"><div class="lr"><div class="rl"></div></div></div><div class="container"><div class="row"><div class="col-lg-8 col-lg-offset-2"><div class="modal-body"> <a href="https://github.com/albertchanged/rebasebook" target="_blank" class="titlelink"><h2 class="portfoliotitle">Rebasebook<img src="img/portfolio/linkblue.png" class="linkpic"/></h2></a><h3 class="portfoliorole">Full Stack Software Engineer</h3><hr class="portfoliohr" style="border-top: 4px solid white;"><p class="portfolioinfo dividertitle"><strong>Overview</strong><p><p class="portfolioinfo">Welcome to the social media for programmers!</p><p class="portfolioinfo">This application was heavily inspired by Facebook's functionalities, look, and feel.</p><p class="portfolioinfo"><p class="portfolioinfo">I led the development of Rebasebook in a team with 3 other engineers, creating the initial scaffolding, authoring several key React components, implementing React Router, editing most styles, and working with fellow engineers on their components' CSS.</p><p class="portfolioinfo"> I architected the CreatePost, Post, and PostList components, which were reusable throughout the application – mainly within the Feed and Profile components.</p><p class="portfolioinfo">The biggest challenge? The Liking and Unliking functionality, including showing which users have already Liked a Post. Of the 10+ database and React methods that I wrote, the ones concerning Likes were the most complicated because of their queries' nested JOINs.</p><p class="portfolioinfo">Another difficulty was rendering different Profiles upon URL changes. I solved this by incorporating a React lifecycle method called componentWillReceiveProps, in which I detected changes in URL parameters and pushed them to a React Router redirect function to render a new Profile.</p><p class="portfolioinfo">Despite the bumps, my team and I were able to piece together an amazingly accurate Facebook replica!</p><p class="portfolioinfo"></p><p class="portfolioinfo">Check out the <a href="https://github.com/albertchanged/rebasebook" target="_blank">GitHub repo</a>!</p><p class="portfolioinfo dividertitle"><strong>Technologies Used</strong></p><p class="portfolioinfo"><span style="color: white"><strong>FRONT END: </strong></span> React JS, React Router, CSS, HTML <br><span style="color: white"><strong>BACK END: </strong></span> PostgreSQL, Express.js</p><hr class="portfoliohr" style="margin-bottom: 35px; border-top: 4px solid white;"><iframe class="video-embed" src="https://www.youtube.com/embed/c8W4gY5V11w" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe> <br><br> <button type="button" class="btn btn-default portfolio-button" data-dismiss="modal"><i class="fa fa-times"></i> Close</button></div></div></div></div></div></div><div class="portfolio-modal modal fade" id="portfolioModal8" tabindex="-1" role="dialog" aria-hidden="true"><div class="modal-content"><div class="close-modal" data-dismiss="modal"><div class="lr"><div class="rl"></div></div></div><div class="container"><div class="row"><div class="col-lg-8 col-lg-offset-2"><div class="modal-body"> <a href="https://github.com/albertchanged/ticketfaster" target="_blank" class="titlelink"><h2 class="portfoliotitle">Ticketfaster<img src="img/portfolio/linkblue.png" class="linkpic"/></h2></a><h3 class="portfoliorole">Full Stack Software Engineer</h3><hr class="portfoliohr" style="border-top: 4px solid white;"><p class="portfolioinfo dividertitle"><strong>Overview</strong><p><p class="portfolioinfo">Tired of ads and other irrelevant aspects on ticket purchasing websites?</p><p class="portfolioinfo">Ticketfaster is a ticket purchasing platform that finds you exactly what you are looking for: event tickets, faster!</p><p class="portfolioinfo">I architected the front end portion with React, and powered the application with Ticketmaster's API and a back end of Sequelize ORM (in MySQL dialect) and Express.js.</p><p class="portfolioinfo">The biggest challenge that I faced while developing Ticketfaster was enabling components to re-render with new data within the same page.</p><p class="portfolioinfo">I accomplished that by adding multi-layer callback functions that set component states to new data, thereby re-rendering them as desired.</p><p class="portfolioinfo">Check out the <a href="https://github.com/albertchanged/ticketfaster" target="_blank">GitHub repo</a>!</p><p class="portfolioinfo dividertitle"><strong>Technologies Used</strong></p><p class="portfolioinfo"><span style="color: white"><strong>FRONT END: </strong></span> React JS, CSS, HTML <br><span style="color: white"><strong>BACK END: </strong></span> Sequelize ORM, Express.js, Ticketmaster API</p><hr class="portfoliohr" style="margin-bottom: 35px; border-top: 4px solid white;"><iframe class="video-embed" src="https://www.youtube.com/embed/p5ptaZFyc_w" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe> <br><br><button type="button" class="btn btn-default portfolio-button" data-dismiss="modal"><i class="fa fa-times"></i> Close</button></div></div></div></div></div></div><div class="portfolio-modal modal fade" id="portfolioModal9" tabindex="-1" role="dialog" aria-hidden="true"><div class="modal-content"><div class="close-modal" data-dismiss="modal"><div class="lr"><div class="rl"></div></div></div><div class="container"><div class="row"><div class="col-lg-8 col-lg-offset-2"><div class="modal-body"> <a href="https://github.com/albertchanged/toppit" target="_blank" class="titlelink"><h2 class="portfoliotitle">Toppit (Legacy Application)<img src="img/portfolio/linkblue.png" class="linkpic"/></h2></a><h3 class="portfoliorole">Full Stack Software Engineer</h3><hr class="portfoliohr" style="border-top: 4px solid white;"><p class="portfolioinfo dividertitle"><strong>Overview</strong><p><p class="portfolioinfo">My engineering team and I inherited a Reddit-esque topic sharing platform from another team. This version of Toppit utilized React Router and MongoDB, and offered the following functionalities: Passport Authentication, Login, Sign Up, Create Topic, and Upvote.</p><p class="portfolioinfo">To further our understanding of state management and challenge ourselves with new concepts, we collaborated to refactor the application to React Redux, modularize it into inner pages called Subtoppits (like Subreddits), add a Chat window, and implement nested commenting.</p><p class="portfolioinfo">I led the Redux refactoring and tackled the nested commenting functionality.</p><p class="portfolioinfo">My biggest challenge was undoubtedly getting a nested comment to even show up, because it involved recursive React components and threaded MongoDB queries. Though my threaded MongoDB query function worked, I encountered many 'Maximum Call Stack Exceeded' errors from React.</p><p class="portfolioinfo">I finally accomplished the feat by adding detailed Axios GET requests in componentDidMount and utilizing Promise.all to consolidate all data for new Comments and store that in the global store. This way, I was able to pull down the desired state to populate a nested Comment component instance.</p><p class="portfolioinfo">Check out the <a href="https://github.com/albertchanged/toppit" target="_blank">GitHub repo</a>!</p><p class="portfolioinfo dividertitle"><strong>Technologies Used</strong></p><p class="portfolioinfo"><span style="color: white"><strong>FRONT END: </strong></span> React JS, React Redux, React Router, CSS, HTML <br><span style="color: white"><strong>BACK END: </strong></span> MongoDB, Express.js, Passport for Google Auth & GitHub Auth</p><hr class="portfoliohr" style="margin-bottom: 35px; border-top: 4px solid white;"><iframe class="video-embed" src="https://www.youtube.com/embed/2-ckm0LOT-M" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe> <br><br><button type="button" class="btn btn-default portfolio-button" data-dismiss="modal"><i class="fa fa-times"></i> Close</button></div></div></div></div></div></div><div class="page-scroll"><a href="#page-top"><div class=""><div class="arrow topbounce" id="backtotoparrow"><p id="arrowlabel">TOP</p></div> </a></div></div> <script src="vendor/jquery/jquery.min.js"></script> <script>$(document).ready(function(){$('#animation').css('visibility','visible');$("#backtotoparrow").fadeOut(duration);var offset=250;var duration=700;$(window).scroll(function(){if($(this).scrollTop()>offset){$("#backtotoparrow").fadeIn(duration);} else{$("#backtotoparrow").fadeOut(duration);}});$("#backtotoparrow").click(function(event){event.preventDefault();$("html, body").animate({scrollTop:0},500);return false;});});</script> <script src="vendor/bootstrap/js/bootstrap.min.js"></script> <script src="js/jquery.easing.min.js"></script> <script src="js/jqBootstrapValidation.min.js"></script> <script src="js/contact_me.min.js"></script> <script src="js/freelancer.min.js"></script> <script src="js/skills.js"></script> <script src="js/scrollanimate.js"></script> <script>$(function(){$('modal-content').modal({show:false}).on('hidden.bs.modal',function(){$(this).find('modal')[0].pause();});});$(window).on('popstate',function(){$('.modal').modal('hide');});</script> </body></html>