class: center, middle, bgGradient ![image](img/jamstack.png) [![img](img/Ahmad-Awais.png)](https://twitter.com/mrahmadawais/) .footCenter.bio[β οΈ Press f to go full-screen.] --- class: split-50 nopadding bkgpos_00 background-image: url(img/bright.png), linear-gradient(to bottom, #7F16F2, #1E1D40) .column_t2.font10em.partImgLeft[ <a class="imgLnk" href="https://twitter.com/mrahmadawais/"> <img class='w100p me' src="img/aa.png" /> </a> ] .column_t2[.vmiddle.pushfront[ #### π I'm # Ahmad Awais --- π¨βπ» Principal Developer Advocate (JS/FOSS) π³ Node.js TLC Community Committee Member π¦ Google Developers Expert in Web Technology π© Open Sourcerer & WordPress Core Developer π€― Over 1,781,061 devs use my open source code π Over 631,123 sites use the products I have built π·ββοΈ EE-CS Engineer turned Emojineer <small>Most definite #TrueStory</small> --- .bio[Rants on Twitter [@MrAhmadAwais β](https://twitter.com/mrahmadawais/)] .bio.smLnk[[FOSS GitHub](https://github.com/ahmadawais) | [AhmadAwais.com](https://AhmadAwais.com/) | [LinkedIn](https://www.linkedin.com/in/mrahmadawais/)] ]] --- class: split-50 nopadding bkgpos_00 background-image: url(img/bleft.png), linear-gradient(to bottom, #875EFF, #28A1F2) .column_t2[.vmiddle.pushfront.padRight[ #### π¦ Follow # .noLnk[[@MrAhmadAwais](https://twitter.com/mrahmadawais/)] --- βοΈ Using it as a mini personal blog π₯ .smLnk[[#OneDevMinute](https://Awais.dev/ODMTweets)] development tips! π€£ Developer jokes/rantsβ you name it π― I Retweet/Like Good Content <small><i>- No Automation there</i></small> --- .bio.smLnk[MOAR: [FOSS GitHub](https://github.com/ahmadawais) | [AhmadAwais.com](https://AhmadAwais.com/) | [LinkedIn](https://www.linkedin.com/in/mrahmadawais/)] ]] .column_t2.font10em.partImgRight[ <a class="imgLnk" href="https://twitter.com/mrahmadawais/"> <img class='w100p ' src="img/twitter.png" /> </a> ] --- class: split-50 nopadding bkgpos_00 background-image: url(img/bleft.png), linear-gradient(to bottom, #373277, #4D43D1) .column_t2[.vmiddle.pushfront.padRight[ # π¨βπ« .noLnk[[VSCode.pro](https://VSCode.pro)] --- After ten years of Sublime, in 2017 I completely switched over to this new open source code editor called Visual Studio Code. I couldn't be happier. --- β JavaScript Based Open Source Editor π I was able to contribute to VSCode π .smLnk[[Shades of purple β£](https://marketplace.visualstudio.com/items?itemName=ahmadawais.shades-of-purple)] my first code editor theme is used by over 1,555,060 developers in .smLnk[[VSCode](https://marketplace.visualstudio.com/items?itemName=ahmadawais.shades-of-purple)], .smLnk[[iTerm2](https://github.com/ahmadawais/shades-of-purple-iterm2)], .smLnk[[Hyper](https://github.com/ahmadawais/shades-of-purple-hyper)], .smLnk[[Slack](https://github.com/ahmadawais/shades-of-purple-slack)], .smLnk[[Alfred](https://github.com/ahmadawais/shades-of-purple-alfred)], .smLnk[[Highlight.js](https://github.com/ahmadawais/Shades-of-Purple-HighlightJS)], & .smLnk[[more](https://github.com/ahmadawais/shades-of-purple-vscode#put-shades-of-purple-in-other-places)]. --- π Sign up to [become a VSCode Power User β](https://VSCode.pro/) π¨βπ» π©βπ» 13,526+ Developers already learning --- ]] .column_t2.font10em.partImgRight[ <a class="imgLnk" href="https://VSCode.pro/"> <img class='w100p pulseImg ' src="img/vspro.png" /> </a> ] --- class: center, middle, bgGradient layout: false <iframe src="https://giphy.com/embed/3oAt2eHGmr68AHaXxS" width="480" height="270" frameBorder="0" class="giphy-embed" allowFullScreen></iframe> --- class: split-50 nopadding bkgpos_00 background-image: url(img/bright.png), linear-gradient(to bottom, #DCE35B, #48B749) .column_t2.font10em.partImgLeft[ <a class="imgLnk" href="https://cloudycam.dev"> <img class='w100p pulseImg cam' src="img/cloudycam.gif" /> </a> ] .column_t2[.vmiddle.pushfront[ # [CLOUDYCAM.dev](https://cloudycam.dev) --- Cloudinary's Developer Activation --- ]] --- class: split-50 nopadding bkgpos_00 background-image: url(img/bright.png), linear-gradient(to bottom, #DCE35B, #48B749) .column_t2.font10em.partImgLeft[ <a class="imgLnk" href="https://cloudycam.dev"> <img class='w100p pulseImg cam' src="img/cloudycam.gif" /> </a> ] .column_t2[.vmiddle.pushfront[ # [CLOUDYCAM.dev](https://cloudycam.dev) --- Cloudinary's Developer Activation --- π€ Internet of Things (IoT) ]] --- class: split-50 nopadding bkgpos_00 background-image: url(img/bright.png), linear-gradient(to bottom, #DCE35B, #48B749) .column_t2.font10em.partImgLeft[ <a class="imgLnk" href="https://cloudycam.dev"> <img class='w100p pulseImg cam' src="img/cloudycam.gif" /> </a> ] .column_t2[.vmiddle.pushfront[ # [CLOUDYCAM.dev](https://cloudycam.dev) --- Cloudinary's Developer Activation --- π€ Internet of Things (IoT) ποΈ Built with the JAMstack ]] --- class: split-50 nopadding bkgpos_00 background-image: url(img/bright.png), linear-gradient(to bottom, #DCE35B, #48B749) .column_t2.font10em.partImgLeft[ <a class="imgLnk" href="https://cloudycam.dev"> <img class='w100p pulseImg cam' src="img/cloudycam.gif" /> </a> ] .column_t2[.vmiddle.pushfront[ # [CLOUDYCAM.dev](https://cloudycam.dev) --- Cloudinary's Developer Activation --- π€ Internet of Things (IoT) ποΈ Built with the JAMstack π€© Progressive Web Application ]] --- class: center, middle, bgGradient layout: false # Project Requirements -- <hr> πΈ Take a picture <hr> -- πΌοΈ Upload to Cloudinary <hr> -- ποΈ Build a demo user page <hr> --- class: center, middle, bgGradient layout: false <iframe src="https://giphy.com/embed/d5wLVBuJdo8CY" width="480" height="270" frameBorder="0" class="giphy-embed" allowFullScreen></iframe> --- class: center, middle, bga11y layout: false # Developer Experience -- <hr> ποΈ Build in less than 15 seconds <hr> -- πΌοΈ Multiple simultaneous demos at an event <hr> -- π€ Multiple developer events with multiple demos <hr> --- class: center, middle, bgGradient layout: false <iframe src="https://giphy.com/embed/l1KVbUh3NprfY26R2" width="480" height="270" frameBorder="0" class="giphy-embed" allowFullScreen></iframe> --- class: split-50 nopadding bkgpos_00 background-image: url(img/bright.png), linear-gradient(to bottom, #F2C54B, #E44E27) .column_t2.font10em.partImgLeft[ <i class="pulse twa twa-2x twa-expressionless" style="position:absolute; bottom:2rem; left:7rem; margin:0 !important;"></i> ] .column_t2[.vmiddle.pushfront[ # DECISIONS --- ### π€ Frontend?! ]] --- class: split-50 nopadding bkgpos_00 background-image: url(img/bright.png), linear-gradient(to bottom, #F2C54B, #E44E27) .column_t2.font10em.partImgLeft[ <i class="pulse twa twa-2x twa-expressionless" style="position:absolute; bottom:2rem; left:7rem; margin:0 !important;"></i> ] .column_t2[.vmiddle.pushfront[ # DECISIONS --- ### π€ Frontend?! --- ### π€ Backend?! ]] --- class: split-50 nopadding bkgpos_00 background-image: url(img/bright.png), linear-gradient(to bottom, #F2C54B, #E44E27) .column_t2.font10em.partImgLeft[ <i class="pulse twa twa-2x twa-expressionless" style="position:absolute; bottom:2rem; left:7rem; margin:0 !important;"></i> ] .column_t2[.vmiddle.pushfront[ # DECISIONS --- ### π€ Frontend?! --- ### π€ Backend?! --- ### π€ Documentation?! ]] --- class: center, middle, bgGradient layout: false <iframe src="https://giphy.com/embed/6Dj7ZWBERpGU0" width="480" height="360" frameBorder="0" class="giphy-embed" allowFullScreen></iframe> # π β π« β π β π β π€ β π§ β β <br> <hr> <br> ## FEELING OVERWHELMED? --- class: split-50 nopadding bkgpos_00 background-image: url(img/bleft.png), linear-gradient(to bottom, #B0B0B9, #24243E) .column_t2[.vmiddle.pushfront.padRight[ # [JAMstack](https://jamstack.org/) --- A revolution in itself. Modern web development architecture based on client-side JavaScript, reusable APIs, and prebuilt Markup. --- π **JavaScript**: Running entirely on the client π€― **APIs**: Reusable APIs, accessed over HTTPS π€© **Markup**: Templated markup e.g. Markdown ]] .column_t2.font10em.partImgRight[ <a class="imgLnk" href="https://jamstack.org/"> <img class='w100p pulseImg jam' src="img/jam.png" /> </a> ] --- class: split-50 nopadding bkgpos_00 background-image: url(img/bright.png), linear-gradient(to bottom, #F0DB4F, #F0DB4F) .column_t2.font10em.partImgLeft[ <img class='w100p pulseImg js' src="img/js.jpg" /> ] .column_t2[.vmiddle.pushfront[ # JavaScript --- Best* programming language at the moment. --- β **JOBS**: High-paid jobs π₯ **FUN**: Super fun to write (*sometimes) β‘ **CUTTING EDGE**: Always improving; dev tools ]] --- class: split-50 nopadding bkgpos_00 background-image: url(img/bright.png), linear-gradient(to bottom, #E435AA, #703993) .column_t2.font10em.partImgLeft[ <img class='w100p pulseImg api' src="img/api.png" /> ] .column_t2[.vmiddle.pushfront[ # APIs --- Application programming interface --- β **REST**: GET, POST π₯ **GraphQL**: Query language for APIs β **WHAT API**: Best [explanation for APIs β](https://www.youtube.com/watch?v=s7wmiS2mSXY) ]] --- class: split-50 nopadding bkgpos_00 background-image: url(img/bright.png), linear-gradient(to bottom, #DCE35B, #48B749) .column_t2.font10em.partImgLeft[ <img class='w100p pulseImg md' src="img/md.png" /> ] .column_t2[.vmiddle.pushfront[ # Markup --- Markups are converted into HTML via build tools. --- π [**Markdown**](https://guides.github.com/pdfs/markdown-cheatsheet-online.pdf): The best lightweight [markup](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) π₯ [**MDX**](https://github.com/mdx-js/mdx): Markdown + JSX for JavaScript + React π **MOAAR**: [Pug](https://pugjs.org/) | {{ [mustache](http://mustache.github.io/) }} | [Handlebars.js](https://handlebarsjs.com/) ]] --- class: split-50 nopadding bkgpos_00 background-image: url(img/bright.png), linear-gradient(to bottom, #F2C54B, #E44E27) .column_t2.font10em.partImgLeft[ <i class="pulse twa twa-2x twa-thinking-face" style="position:absolute; bottom:2rem; left:7rem; margin:0 !important;"></i> ] .column_t2[.vmiddle.pushfront[ # Frontend Options --- β NEED: First class routing β NEED: Server Side Rendering βΉοΈ GOOD TO HAVE: PWA Support ]] --- class: split-50 nopadding bkgpos_00 background-image: url(img/bleft.png), linear-gradient(to bottom, #663399, #1E1D40) .column_t2[.vmiddle.pushfront.padRight[ # Gatsby.js --- Blazing fast modern site generator for React. --- π― Impressive [documentation β](https://www.gatsbyjs.org/docs/) π― Learn everything with this [Gatsby tutorial β](https://www.gatsbyjs.org/tutorial/) π React/GraphQL/Plugins/Community β has it all --- π€ Routing is a second tier citizen ]] .column_t2.font10em.partImgRight[ <a class="imgLnk" href="https://www.gatsbyjs.org/"> <img class='w100p pulseImg gatsby' src="img/gatsby.png" /> </a> ] --- class: split-50 nopadding bkgpos_00 background-image: url(img/bleft.png), linear-gradient(to bottom, #1E1D40, #2B84FF) .column_t2[.vmiddle.pushfront.padRight[ # Next.js --- Blazing fast modern site generator for React. --- π― Impressive [documentation β](https://nextjs.org/docs) π― Learn everything with this [tutorial β](https://nextjs.org/learn/basics/getting-started) π React/Examples/Community β has it all --- β Routing; well thought out & done right β SSR Server Side Rendering Β± Progressive Web Apps ]] .column_t2.font10em.partImgRight[ <a class="imgLnk" href="https://nextjs.org/"> <img class='w100p pulseImg next' src="img/next.png" /> </a> ] --- class: split-50 nopadding bkgpos_00 background-image: url(img/bright.png), linear-gradient(to bottom, #F2C54B, #E44E27) .column_t2.font10em.partImgLeft[ <i class="pulse twa twa-2x twa-thinking-face" style="position:absolute; bottom:2rem; left:7rem; margin:0 !important;"></i> ] .column_t2[.vmiddle.pushfront[ # Backend Options --- β NEED: Serverless setup β NEED: Backendless backend βΉοΈ GOOD TO HAVE: Monorepo Support ]] --- class: split-50 nopadding bkgpos_00 background-image: url(img/bleft.png), linear-gradient(to bottom, #6EC049, #333333) .column_t2[.vmiddle.pushfront.padRight[ # Node.js --- An open-source, cross-platform JavaScript run-time environment that executes JavaScript code outside of a browser. --- β¬οΈ [Download & Install β](https://nodejs.org/) π Cross platform JavaScript π² Built on Chrome's V8 JavaScript engine π― Incredibly amazing eco-system for developers ]] .column_t2.font10em.partImgRight[ <a class="imgLnk" href="https://nodejs.org/"> <img class='w100p pulseImg node' src="img/node.png" /> </a> ] --- class: split-50 nopadding bkgpos_00 background-image: url(img/bleft.png), linear-gradient(to bottom, #2B84FF, #000000) .column_t2[.vmiddle.pushfront.padRight[ # ZEIT Now --- All-in-one solution for static & JAMstack deployment for performance-obsessed teams. --- β No servers to manage, scale, orchestrate, etcβ¦ π Deploy React.js, Vue.js, Node.js, or even Go APIs π² Monorepo with nearly zero configuration π― GitHub to deploy upon every push ]] .column_t2.font10em.partImgRight[ <a class="imgLnk" href="https://zeit.co/"> <img class='w100p pulseImg zeit' src="img/zeit.png" /> </a> ] --- class: split-50 nopadding bkgpos_00 background-image: url(img/bright.png), linear-gradient(to bottom, #F2C54B, #E44E27) .column_t2.font10em.partImgLeft[ <i class="pulse twa twa-2x twa-thinking-face" style="position:absolute; bottom:2rem; left:7rem; margin:0 !important;"></i> ] .column_t2[.vmiddle.pushfront[ # Documentation --- β NEED: Markdown only β NEED: UI + Customizability βΉοΈ GOOD TO HAVE: Search Support ]] --- class: split-50 nopadding bkgpos_00 background-image: url(img/bleft.png), linear-gradient(to bottom, #3EAF7C, #414761) .column_t2[.vmiddle.pushfront.padRight[ # VuePress --- Vue-powered Static Documentation Site Generator --- π Pretty amazing [documentation](https://vuepress.vuejs.org/guide/) π― Build for docs/content focused sites π Markdown to rendered HTML Content π Content is searchable out of the box π² Configurable & customizable extensions π .smLnk[[so much more β](https://vuepress.vuejs.org/guide/)] ]] .column_t2.font10em.partImgRight[ <a class="imgLnk" href="https://vuepress.vuejs.org/"> <img class='w100p pulseImg vuepress' src="img/vuepress.png" /> </a> ] --- class: center, middle, bgGradient layout: false <iframe src="https://giphy.com/embed/5wFH11idPnpENpSZOi" width="480" height="362" frameBorder="0" class="giphy-embed" allowFullScreen></iframe> # π€ β π β π§ β π€ β π€« β π β π€ <br> <hr> <br> ## JAMstack (Next.js & Cloudinary) + Monorepo (ZEIT Now) === π―! --- class: center, middle, bgBluish layout: false .vidTtl[ ## .spanYellow[JAMstack with React, Vue & Node.js] ] <style>.embed-container { position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; } .embed-container iframe, .embed-container object, .embed-container embed { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }</style><div class='embed-container'><iframe src='https://player.vimeo.com/video/379449555' frameborder='0' webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></div> --- class: split-50 nopadding bkgpos_00 background-image: url(img/bright.png), linear-gradient(to bottom, #292F33, #654500) .column_t2.font10em.partImgLeft[ <i class="pulse twa twa-2x twa-smiling-face-with-sunglasses" style="position:absolute; bottom:2rem; left:7rem; margin:0 !important;"></i> ] .column_t2[.vmiddle.pushfront[ # Questions?! --- π― I'll share the slides [link on @MrAhmadAwais β](https://twitter.com/mrahmadawais/) --- .bio.smLnk[[FOSS GitHub](https://github.com/ahmadawais) | [AhmadAwais.com](https://AhmadAwais.com/) | [LinkedIn](https://www.linkedin.com/in/mrahmadawais/)] ]]