Logo
    Search

    Supper Club × Make React 70% Faster! Million.js with 18 Year Old Aiden Bai

    enAugust 25, 2023

    Podcast Summary

    • Optimizing React rendering with Million.jsMillion.js is a new library that speeds up React rendering by optimizing the reconciliation process, using a compiler to determine where data goes into the JSX for faster updates, and supports both manual and automatic modes.

      Million.js, a new library, aims to make React rendering faster by optimizing the reconciliation process, which is the virtual DOM's role in updating the differences between the current page and the JSX. Currently, React renders components in two phases: first, it runs the component and calculates hooks and data; then, it performs reconciliation, where the virtual DOM identifies and updates the differences between the current page and the JSX. Million.js treats the virtual DOM as a reference and uses a compiler to determine where data goes into the JSX, enabling faster updates. The library supports both manual and automatic modes, with automatic mode automatically optimizing components for you. Essentially, Million.js replaces React's rendering engine with a faster version, improving React's performance.

    • Solid JS vs React: Direct DOM updates without DiffingSolid JS updates specific data in the virtual DOM directly, improving efficiency over React's virtual DOM and diffing method.

      Solid JS, unlike React, doesn't need to update every single div when dealing with count data in a deeply nested JSX. Instead, it directly updates the specific piece of data in the virtual DOM using the concept of "direct DOM updates without Diffing." This approach sets Solid JS apart from React, which uses a virtual DOM and diffing for updates. Additionally, Solid JS has a compiler that optimizes components and makes updates more efficient. However, this comes with trade-offs, such as not supporting conditional expressions or spread expressions in attributes. Creating a compiler is a complex process that requires deep knowledge of programming languages and technologies. The speaker, who discovered programming through a beginner JavaScript course, started learning advanced concepts like compiler development and rendering engines after gaining foundational skills. The process of creating a compiler involves walking through the AST (Abstract Syntax Tree) of the code and compiling it out using the same technology as Solid JS.

    • Contributing to open-source projects and creating innovative projects can lead to opportunitiesBenchmarking is crucial for ensuring performance and reliability, and sending your GitHub to potential employers can lead to opportunities

      Even as a new and young developer without a university education, creating innovative projects and contributing to established software can lead to recognition and opportunities within the industry. The speaker, who started programming casually in high school, was surprised to find people using and discussing his project, Millie, in meetings. He also shared his experience of interning at Wyze, where he optimized the RTC and implemented a million JS, improving the user experience significantly. To land the internship, he sent his GitHub to the CEO, who was impressed by the number of stars on his project. The speaker emphasized the importance of benchmarking to ensure the performance and reliability of projects. He uses the JS framework for testing, which measures painting times and provides various tests to evaluate the speed of the software.

    • Exploring performance testing in JavaScript frameworksPerformance testing is crucial for optimizing user experiences and ensuring websites function efficiently on various devices. It involves benchmarking different frameworks and identifying inconsistencies and differences in performance between low-end and high-end devices.

      Performance testing, specifically in JavaScript frameworks, is an essential aspect of web development. It's used to compare the speed and efficiency of different frameworks and to ensure that websites function optimally on various devices. The process can be time-consuming, with benchmarks taking minutes to run, but it's crucial to provide good user experiences, especially for those using older or less powerful devices. Performance testing became a focus for the speaker due to the frustration of seeing slow loading websites on older devices and the desire to optimize digital experiences for a wider audience. The speaker's interest in benchmarking grew as they delved deeper into the subject, exploring topics such as sampling methods, inconsistencies, and differences in performance between low-end and high-end devices. Performance testing is a necessary step in the development process, particularly for those claiming superior performance, as it provides concrete data to back up these claims.

    • Website rendering speed and UI responsiveness impact user experienceOptimizing website rendering and UI responsiveness is crucial for delivering a positive user experience, especially during high-intensity or data-heavy situations. Advanced rendering techniques like using a canvas API can improve the user experience, even on less powerful devices or poor internet connections.

      Website rendering speed and UI responsiveness significantly impact user experience, especially during high-intensity interactions or when dealing with large amounts of data. This was illustrated through personal experiences with slow ticket purchasing on Ticketmaster and using outdated editors. In the case of the ticket purchasing, the slow rendering prevented the user from securing their desired seat. With editors, the inability to handle large files resulted in crashes or unresponsiveness. Versus Code, for instance, has addressed this issue by employing advanced rendering techniques like using a canvas API to paint pixels on the screen. This results in a much smoother and faster user experience, even when dealing with massive files. The importance of rendering speed and UI responsiveness becomes even more critical when considering users with less powerful devices or poor internet connections. The discussion also highlighted that the perceived slowness of a UI can sometimes be subjective, and users may not realize the difference until they use a faster machine. In summary, optimizing website rendering and UI responsiveness is crucial for delivering a positive user experience, particularly in high-intensity or data-heavy situations.

    • Virtualization in JavaScript libraries improves rendering performanceVirtualization in libraries like 1,000,000 JS can lead to a 70% increase in speed for React applications with large numbers of components or complex CSS, but may involve trade-offs like loss of functionality with certain search methods or use of specific components.

      Virtualization in JavaScript libraries like 1,000,000 JS can significantly improve rendering performance by only rendering and updating a subset of components instead of the entire DOM. This can lead to a 70% increase in speed, especially for applications with large numbers of components or complex CSS. However, there are trade-offs, such as the potential loss of functionality with certain search methods or the use of specific components like `map` instead of `forEach`. It's important to note that virtualization may not be necessary for all applications, but it can be a valuable tool for optimizing performance in specific scenarios. Additionally, libraries like 1,000,000 JS offer features like support for React Virtualized and TanStack Virtual, which can help address common issues like rendering lag and slow search functionality. Overall, virtualization is a powerful technique for improving the speed and efficiency of React applications, particularly for those with large and complex component structures.

    • Optimizing React rendering with for component and macro APIUsing the for component with an array prop and callback builder for JSX children, and the macro API for pre-calculating values, can lead to faster and more efficient rendering in React applications.

      The use of the "for" component in React can significantly improve performance, especially when dealing with large arrays, by optimizing rendering and reconciliation through internal block optimization. This optimization is achieved by specifying an array in each prop with a callback builder for JSX in the children. The macro API is another feature that allows for pre-calculation of certain values at compile time, saving precious time during runtime. Examples of this include fetching git commits or calculating heavy functions. This optimization works with various bundlers like Webpack, Vite, and Babel, and the process of creating and supporting these bundlers is not a significant pain. Overall, these features contribute to faster and more efficient rendering in React applications.

    • Next.js, Astro, and Gatsby: Each with unique plugin systemsReact server components bring challenges for server-side rendering optimization but are crucial for client-rendered apps. Unplug, a new performance tool, offers significant gains but encounters issues with specific libraries and context. Developers are actively addressing these challenges and seeking integrations with real-world monitoring data.

      Next.js, Astro, and Gatsby each have their unique plugin systems, allowing developers to support various features easily. React server components present some challenges, especially for optimizing server-side rendering, but they're still essential for most client-rendered applications. The new performance optimization tool, unplug in, has shown significant gains in perf wins for several companies. However, it does encounter issues with context, extended JSX, and specific libraries like React 3 Fiber and Style Components. Developers are actively working on resolving these issues and exploring potential integrations with real-world monitoring data for more informed decisions. To stay updated on the project's progress, developers are encouraged to engage with the community and contribute to the GitHub issues.

    • Impressions of a manageable open source projectThe interviewee values good defaults and clear requirements for a spam-free open source project experience, and is passionate about optimizing developer and user experience in web development, with a focus on performance and sound design

      The interviewee is impressed with the manageable number of issues in the open source project they are working on, despite it being their first hit. They believe the project's good defaults and requirements for reproduction and description have kept spam issues at bay. The interviewee also shares their passion for optimizing both developer and user experience in web development, mentioning their interest in performance concerns and finding good defaults. They are studying computer science and have created a personal website with a VCR aesthetic, complete with sound effects. Despite not growing up with VCRs or DVDs, they have successfully captured the aesthetic in their website design. The interviewee expresses their belief that sound design is underrated in web interface design and should be given more attention. Overall, the interviewee comes across as an experienced and passionate developer with a focus on creating optimized solutions for both developers and users.

    • Creating a unique personal websiteExperiment with personal touches, new tech, and express yourself through design and functionality.

      Creating a unique and expressive personal website goes beyond just design and layout. It's about adding personal touches, experimenting with new technologies, and expressing your curiosity and love for the craft. The speaker shared his experience building a website using vanilla JS and a custom JSX transform, incorporating a VCR effect and glitch library to add whimsy and uniqueness. He emphasized the importance of making your personal site a reflection of yourself, rather than a generic or overused template. The speaker also touched on the popularity of the Y2K aesthetic and shared his experience sourcing a VCR for old VHS tapes. During the Supper Club Questions segment, the speaker discussed his use of a Keychron keyboard, a monitor from Costco, and his preference for a minimalist setup in Mac's Visual Studio Code with a Zen theme and Dropbox Material extension. He identified as a Mac user and mentioned using both VIM and BIM.

    • Learning through hands-on projects and staying updatedValue hands-on projects for learning, stay updated via select sources, and enjoy what you work on.

      The speaker values hands-on experience and building projects as a means of learning programming, rather than focusing too much on specific languages or frameworks. They also emphasize the importance of motivation and enjoying what you're working on. For staying updated in web development, they rely on sources like Twitter and select newsletters. An exciting development they mentioned is the ongoing work on the rfc-signals project, which aims to improve performance and collaboration between different frameworks. The speaker also shared their recent experiences watching "Barbie" and encouraged listeners to check out their open-source project, Millenium.js, and its React integrations.

    • Staying curious and inspired in the tech industryContinuously learn and seek inspiration from peers and mentors in the tech community to stay updated and grow.

      Importance of continuous learning and being inspired by others in the tech industry. Wes, Scott, and Aidan, as respected figures in the community, were appreciated for their valuable content and contributions. The speakers expressed their admiration and gratitude towards them, emphasizing the impact their work has had on their own learning journey. This conversation underscores the importance of staying curious, engaging with new ideas, and seeking inspiration from peers and mentors. It's a reminder that we can all learn something new every day, and that the tech community thrives on the exchange of knowledge and ideas. To keep up with the latest developments and stay inspired, head over to Syntax.fm for a full archive of their shows and don't forget to subscribe or leave a review if you enjoy their content.

    Recent Episodes from Syntax - Tasty Web Development Treats

    790: State of JS 2023 Reactions

    790: State of JS 2023 Reactions

    Scott and Wes dive into the 2023 State of JavaScript survey, breaking down the latest trends and pain points in front-end frameworks, build tools, and JavaScript runtimes. Tune in for their hot takes and insights on what’s shaping the JavaScript landscape this year!

    Show Notes

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    789: Do More With AI - LLMs With Big Token Counts

    789: Do More With AI - LLMs With Big Token Counts

    Join Scott and CJ as they dive into the fascinating world of AI, exploring topics from LLM token sizes and context windows to understanding input length. They discuss practical use cases and share insights on how web developers can leverage larger token counts to maximize the potential of AI and LLMs.

    Show Notes

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    CJ: X Instagram YouTube TwitchTV

    Randy: X Instagram YouTube Threads

    788: Supabase: Open Source Firebase for Fullstack JS Apps

    788: Supabase: Open Source Firebase for Fullstack JS Apps

    Scott and CJ chat with Paul Copplestone, CEO and co-founder of Supabase, about the journey of building an open source alternative to Firebase. Learn about the tech stack, the story behind their excellent documentation, and how Supabase balances business goals with open-source values.

    Show Notes

    • 00:00 Welcome to Syntax!
    • 00:30 Who is Paul Copplestone?
    • 01:17 Why ‘Supa’ and not ‘Super’?
    • 02:26 How did Supabase start?
    • 08:42 Simplicity in design.
    • 10:32 How do you take Supabase one step beyond the competition?
    • 12:35 How do you decide which libraries are officially supported vs community maintained?
      • 15:17 You don’t need a client library!
    • 16:48 Edge functions for server-side functionality.
    • 18:51 The genesis of pgvector.
    • 20:59 The product strategy.
    • 22:25 What’s the story behind Supabase’s awesome docs?
    • 25:26 The tech behind Supabase.
    • 35:46 How do you balance business goals with open source?
    • 42:01 What’s next for Supabase?
    • 44:15 Supabase’s GA + new features.
    • 48:24 Who runs the X account?
    • 50:39 Sick Picks + Shameless Plugs.

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    CJ: X Instagram YouTube TwitchTV

    Randy: X Instagram YouTube Threads

    787: You Should Try Vue.js

    787: You Should Try Vue.js

    Scott and CJ dive deep into the world of Vue.js, exploring what makes this frontend framework unique and why it stands out from React and Svelte. CJ gives a comprehensive tour, covering everything from getting started to advanced features like state management and Vue’s built-in styles.

    Show Notes

    Vue.js: The Documentary.

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    786: What Open Source license should you use?

    786: What Open Source license should you use?

    Scott and CJ dive into the world of open source, breaking down its meaning, benefits, and the various types of licenses you’ll encounter. From permissive licenses like MIT and Apache 2.0 to copy-left licenses such as GNU GPLv3, they’ll help you choose and apply the right license for your project.

    Show Notes

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    785: What’s Next for NextJS with Tim Neutkens

    785: What’s Next for NextJS with Tim Neutkens

    Scott and Wes dive into the world of Next.js with special guest Tim Neutkens from Vercel. They explore the latest updates, including the React Compiler and React Server Components, discussing their impact on developer workflows and the future of Next.js development.

    Show Notes

    • 00:00 Welcome to Syntax!
    • 00:30 What does the React Compiler do?
    • 05:04 Will React Compiler help with managing Context?
    • 06:39 What happens if you’re not using a React Compiler?
    • 09:30 Will this work on any NextJS version?
    • 12:18 What are React Server Components?
    • 16:28 Shipping all the data inside an encapsulated component.
    • 20:17 Clearing up the frustrations around retrofitting server components.
    • 23:13 Handing migration.
    • 28:30 Is this just a fetch request with props?
    • 36:41 How closely are the NextJS and React teams working?
    • 41:53 Will we ever get Async Client Components?
    • 43:52 Async Local Storage API.
    • 45:31 Turbopack.
    • 57:51 Sick Picks & Shameless Plugs.

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    784: Logging × Blogging × Testing × Freelancing

    784: Logging × Blogging × Testing × Freelancing

    In this Potluck episode, Scott and Wes tackle listener questions on modern blogging, website environmental impact, and using LangChain with LLMs. They also cover CSS hyphens, unit vs. integration testing, and balancing web development with new parenthood.

    Show Notes

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    783: How We Built a Netflix Style “Save for Offline” Feature Into Syntax

    783: How We Built a Netflix Style “Save for Offline” Feature Into Syntax

    Scott and Wes dive into the world of browser caching for audio files, exploring the File System API and the Cache API. They discuss size restrictions across different browsers, how tools like Riverside.fm leverage IndexedDB, and walk through code examples for creating, retrieving, and managing cached audio data.

    Show Notes

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott:X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    782: The Developer’s Guide To Fonts with Stephen Nixon

    782: The Developer’s Guide To Fonts with Stephen Nixon

    Scott and CJ are joined by Stephen Nixon of ArrowType to delve into the world of fonts and type for developers. They explore the intricacies of font creation, the utility of variable fonts, and offer tips for making visually appealing typography on the web.

    Show Notes

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott:X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    781: Potluck - The Value of TypeScript × Vue vs Svelte × Leetcode

    781: Potluck - The Value of TypeScript × Vue vs Svelte × Leetcode

    In this potluck episode of Syntax, Scott and CJ serve up a variety of community questions, from the nuances of beginner vs. advanced TypeScript to the pros and cons of SvelteKit. They also discuss falling out of love with React, shipping private packages via NPM, and the eternal struggle of always starting but never finishing projects.

    Show Notes

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott:X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    Related Episodes

    Coding Jake's App in L33t Hxcker Mode

    Coding Jake's App in L33t Hxcker Mode

    Watch this episode on YouTube: https://youtu.be/xGd5NUHgKMk

    Hey, dudes and dudettes, get stoked for this rad podcast episode with your hosts Seth Whiting and Jake Pacheco! Seth's the coding wizard from Portland, Maine, with a solid 10 years of coding under his belt, while Jake's the Augusta-based barber who's been riding the coding wave for about 14 weeks – talk about gnarly!

    They're cooking up a free reptile keeping app, perfect for all you reptile aficionados out there. It's your one-stop-shop for tracking your scaly pals' deets, from breeding stats to feeding schedules, and even some killer reptile pics and care sheets.

    But hold onto your boards, 'cause they're diving into the React world too! They'll school you on reactive variables, hooks, and the art of passing props between components. And you know what they say, sharing is caring!

    They're also dropping some knowledge on routers, page navigation, and how components in your app can vibe together. Plus, they'll add some slick style to the detail component – custom back buttons, anyone?

    In the final ride, they'll show you how to display those reptile deets like a pro and give you a taste of the virtual DOM. And don't bail just yet – they're all ears for your questions and feedback. So, grab your boards, hop on, and ride the coding wave with these two groovy hosts!

    Special thanks to Diarrhea Planet for our intro and outro music and @SkratchTopo for our artwork.

    Career Foundry Coding Bootcamp Review

    Career Foundry Coding Bootcamp Review

    I invited 3 Career Foundry graduates on to talk about their experience at the coding bootcamp. It's a self-paced program. While they don't have instructors, it sounds like they have mentors and tutors to help you along the way. This is another coding bootcamp that offers a "job guarantee". We read some of the requirements they impose on students in order for the coding bootcamp to have to honor the job guarantee - completely unrealistic expectations.. Also, see you if you can find the easter egg in this episode I left in here. It’s not subtle.. Enjoy!

    Host & Guests:
    Don Hansen - https://www.linkedin.com/in/donthedeveloper
    Nicole Villa - https://www.linkedin.com/in/nicole-villa
    Hunter Evanoff - https://www.linkedin.com/in/hunterevanoff
    Teresa Loafman - https://www.linkedin.com/in/teresa-loafman

    ---------------------------------------------------

    🤝 Join our junior friendly developer community:
    https://discord.gg/donthedeveloper

    ❤️ If you find my content helpful, please consider supporting me on Patreon and get access to additional perks. Every little contribution helps me continue to do this full-time.
    https://www.patreon.com/donthedeveloper

    A191 - What are lead generation techniques to get me out of the feast and famine revenue cycle?

    A191 - What are lead generation techniques to get me out of the feast and famine revenue cycle?

    In the last 5 episodes I shared with you a course called Stop the Cycle where Curtis McHale and myself to be delivered to you on November 30th at 3:30 PM EST.

    A few people who have registered, jumped in and shared some feedback they had, well because we asked them what is it that they hope to get out of the course. What sparked you in deciding to join us. We want to make sure whoever joins us, gets the most value from it.

    This came by way of some feedback from one of those people.

    So with anything in business, it comes down to who you are, who you work with, and most importantly what’s working right now.

    The great thing about the Stop the Cycle course is that you will get 2 people’s point of view on running a business that is quite similar.

    What’s worked for me hasn’t for Curtis and vice versa.

    We are going to give you our best strategies and techniques that has landed us great work over the past decade, and still does to this very day.

    What I want you to do right now is to think about what’s working for you today.

    Also I want you to think about what is it about that lead generation strategy that you want to get away from? And why?

    Podcasting

    See for me, podcasting has been a great lead generation strategy for me. Ever since I started my business I found podcasting to be beneficial to me in a variety of different ways including widening my network and positioning myself in the market.

    Writing

    Curtis is a writer of several books and does a ton of writing very well. He gets paid to write for other companies and it also brings in clients to him as well. He does a lot of content marketing, writing specifically, well to be honest, hasn’t worked as well for me.

    Seeking out specific conversations

    Another tactic that I will dive deep on is jumping into highly specific conversations on Twitter and Facebook. By targeting certain keywords, I built a system to look for those keywords and then ping me in Slack when a tweet contained that keyword.

    This way it allowed me to be mindful of my time so that I can not be distracted for 20, 30, or 60 minutes down the social media rabbit hole.

    If my sales bot pings me in Slack, I can look at it in realtime or later even, and if it’s relevant, jump into that conversation and then get back to work.

    Time Management

    Curtis will dive into the time management since he’s much better at this than I. He has literally written the book on Analog Productivity. Curtis has built his business to work around his schedule and he’ll show you how to do this so that you actually have the time to market yourself.

    If you are wondering what else you are going to get out of this course is that you’ll get lead generation strategies. A huge benefit of this course is that you will get both of us and hear our takes on various strategies, how we approached them, and hear how different things worked for us.

    We both have families that we enjoy spending time with, businesses that are stable that support our families and afford us to enjoy the kind of lives we want.

    Stop the Cycle is the foundation of our businesses.

    -------------------
    👉 For full show notes to this episode & more resources for you.
    -------------------

    Goddamnit, Improve Your Customer Care

    Goddamnit, Improve Your Customer Care

    I’m going to go on a bit of a rant today, but I promise if you listen all the way to the end, you’re going to learn the number one way to improve your sales and repeat customers.

    Literally, the number one thing that has kept my clients coming back to me, referring me to their friends and contacts, and giving me great reviews.

    Want to know what that is?

    Of course you do!

    Listen to today's episode to find out.

    Kelly and Karin: Speaking of Social Media

    Kelly and Karin: Speaking of Social Media
    Sometimes I really miss AIM. I used to leave away messages all the time and so did all my friends. Update people with what you're doing or put song lyrics in the away messages...I'm just not going to do that on Slack. Hosts Kelly Corey and Karin Thorne chat about their experiences with various social media accounts over the years. They also share the results of a recent listener poll and reminisce fondly about AIM. Music This episode features "Brain Power" by Mela (https://freemusicarchive.org/music/Mela/Mela_two) from the album Mela two. Follow Karin kethorne.com (http://www.kethorne.com/) | Twitter (https://twitter.com/kaythorne) | Instagram (https://www.instagram.com/karin_thorne/) | E-mail (mailto:contact@kethorne.com) JSWebb Development, LLC jswebbdevelopment.com (https://jswebbdevelopment.com/) | Twitter (https://twitter.com/JSWebb_Dev) | Instagram (https://www.instagram.com/jswebbdev/) | E-mail (mailto:jswebbdevelopment@gmail.com) Follow Kelly kell.dev (https://kell.dev/) | Twitter (https://twitter.com/kellytoearth) | Instagram (https://www.instagram.com/kellytoearth/) | E-mail (mailto:hello@kell.dev) Follow Salt City Code Twitter (https://twitter.com/saltcitycode) | Instagram (https://www.instagram.com/saltcitycode/) | E-mail (mailto:saltcitycode@gmail.com)