Logo
    Search

    Desktop & Mobile Apps With a Single Codebase

    enOctober 02, 2019

    Podcast Summary

    • Building a Desktop App with JavaScript: Missive's StoryMissive, a Canadian email client, stands out with its collaborative features like shared inboxes, email delegation, and real-time chat rooms for efficient team communication.

      Etienne Lemay from Missive shared his experience of building a desktop app, specifically an email client, entirely using JavaScript. Missive is a full-featured email client that offers modern tools like news, send later, undo send, and rules. However, what sets Missive apart is its collaborative features, such as sharing conversations with colleagues, delegating email accounts, and turning email conversations into chat rooms with real-time collaborative composing, tasks, assignments, and labels. Etienne started using Missive due to its Canadian origin and its superior features for managing team email workflows. He highlighted the convenience of having a shared inbox, assigning emails to team members, and the chat room feature for efficient communication. For those looking for a tool to streamline email support or manage shared inboxes, Missive's unique features make it an excellent choice.

    • Combining React and Backbone for effective app developmentUsing older technologies like React and Backbone together can lead to powerful apps, even in 2023. The choice of technology is not the only factor in success.

      Using a combination of technologies, like React and Backbone, can lead to the development of powerful and effective applications, even if some of those technologies are considered "legacy" or "older." The speaker in this conversation had a specific requirement for an Android app and was impressed with an email management app called Missive, which uses a React frontend and Backbone for the rest of its structure. The team behind Missive started using these technologies in 2014, before they were widely adopted, and have continued to use them due to their effectiveness. They have not yet considered transitioning to newer technologies like TypeScript due to the large codebase and the effort required to make such a change. Despite the use of older technologies, the app is still successful and efficient, demonstrating that the choice of technology is not the only factor in creating a great application.

    • Creating a Desktop Email App with React and BackboneThe team built a desktop email app using React and Backbone, implementing event-based state management and using the same JavaScript file for web, Electron, and Cordova.

      The team developed their desktop application using React and Backbone, without relying on popular libraries like Create React App or Next.js. They started with a bare-bone React setup, creating routes and components, and used the React Backbone library to connect React and Backbone models. They used webpack for tooling and bundling, and the same JavaScript file was used for web, Electron, and Cordova. State management was event-based with Backbone models, and components could listen to specific events and update the state accordingly. Although JavaScript allowed for UI customization, the team found creating gestures to be the most challenging aspect. Overall, the team was able to create a polished email app entirely in JavaScript, despite the challenges.

    • Innovative UX design enhances user experienceMissive's multi-conversation swipe feature improved efficiency and engagement by allowing users to dismiss or archive multiple emails at once with a single swipe, resulting in a unique selling point for the app.

      The user experience (UX) design, including gestures and interactions, plays a crucial role in making apps effective and engaging. The example given is the multi-conversation swipe feature in Missive, which allows users to dismiss or archive multiple emails at once with a single swipe. This interaction was a unique selling point for Missive and was a result of finding a more efficient way to handle multiple conversations at once. The technical implementation of this feature involved swiping on the screen and mapping the x and y coordinates to the corresponding conversations, without querying the DOM. The challenge was ensuring the smoothness of the animation and transition, especially on older devices. Overall, the UX design and innovative interactions can significantly enhance the user experience and differentiate an app from competitors.

    • Optimizing JavaScript mobile apps for performanceImplement complex animations with 3D transforms, cache element positions, and use LogRocket for debugging to deliver a fast and feature-rich JavaScript mobile app experience.

      Developing a smooth and performant mobile app experience, even when built using JavaScript, is achievable with careful optimization and attention to detail. The team behind Missive achieved this by implementing complex 3D transforms for animations and caching element positions to avoid excessive DOM queries. They also shared that LogRocket, a sponsor of the podcast, is a valuable tool for debugging mobile app issues, providing a comprehensive view into user sessions and app performance. Moreover, the team revealed a surprising fact: the Missive mobile app is built using the same codebase as the desktop app. This means that the same components are shared, and the app's challenges and technicalities are identical across platforms. By utilizing this approach, the team was able to deliver a fast and feature-rich app with a small team and deploy it on all platforms simultaneously. These strategies and techniques demonstrate that a JavaScript-built mobile app can provide a native-like experience, challenging the common perception that JavaScript apps may lack the performance and smoothness of native apps.

    • Missive's email app uses Cordova for consistent UI and access to native featuresMissive's email app uses Cordova to deliver a consistent UI and access native functionalities across iOS and Android through plugins.

      Missive's email app is built using Cordova, which allows them to create a consistent UI experience across iOS and Android platforms using WebKit, while also having access to native functionalities through an ecosystem of plugins. This approach differs from React Native, where the UI is done natively on each platform and the logic runs in JavaScript. The use of Cordova has been a positive experience for Missive, despite the need to build a custom structure around it to handle platform-specific plugin issues. They also use Fastlane for app automation and building, and have not encountered any problems with Apple regarding the use of JavaScript in their app. Overall, Cordova has enabled Missive to create a seamless email app experience across multiple platforms.

    • Adhering to Apple's rules for JavaScript appsMinimize server queries and use advanced storage solutions like IndexedDB to create fast, responsive JavaScript apps that meet Apple's approval standards

      Developing a JavaScript app for Apple's App Store involves adhering to strict rules, including going through the official update process and not downloading assets outside of the App Store. This approach ensures a smooth user experience and Apple's approval. The email client app, Missive, achieves this by prioritizing the rendering of conversation lists and fetching email content only when necessary. They rely on the browser's capabilities to make requests and use IndexedDB, a more advanced version of local storage, for persisting data. By doing so, they minimize server queries and provide a fast and responsive app. Overall, the success of Missive in the App Store demonstrates the potential for JavaScript apps to deliver high-quality, Apple-approved experiences.

    • Automated Testing with Cypress: A Game-Changer for Web ApplicationsAutomated testing with Cypress streamlines the process, enabling user-friendly interaction and end-to-end testing for web applications built using Chrome or Chromium-based browsers.

      Testing is an essential aspect of software development, and it's important to ensure that applications function correctly on various devices. While manual testing is an option, it can be time-consuming and laborious. Automated testing tools like Cypress can be a game-changer, allowing for end-to-end testing and visual interaction with the application. Cypress is particularly useful for testing web applications built using Chrome or Chromium-based browsers, like Electron. Unlike traditional testing libraries, Cypress provides a more user-friendly interface, enabling users to interact with the application as if they were using it manually. It's worth noting that while Cypress is limited to Chrome-based browsers, it can still be a valuable addition to a testing suite, especially for quick testing and ensuring the application's overall functionality. Additionally, having a continuous integration (CI) system in place, like the one using Puppeteer, can help streamline testing and ensure that the client-side code is running smoothly.

    • Using Backbone.js, Cordova, Flexbox, and SASS for a conversation systemEffectively using familiar tools like Backbone.js, Cordova, Flexbox, and SASS can lead to efficient and functional applications. Choosing tools based on team expertise and comfort can be more beneficial than constantly chasing the latest technology.

      Effective use of tools, old or new, is crucial for a development team. In the discussion, the team explained how they use Backbone.js and Cordova to build a conversation system with labeling functionality. They highlighted how applying labels triggers automatic actions, but they're still testing the real-world impact of these actions. Regarding the UI, they use a stripped-down approach with Flexbox and SASS, aiming for a CSS API that simplifies styling. They find this utility-based CSS approach efficient and popular among developers. The team's decision to stick with these tools comes from considering their worth, ease of use, and team integration. The conversation underscores the importance of choosing tools that work best for a team, rather than constantly chasing the latest technology. By focusing on their team's expertise and the tools they're most comfortable with, they can build effective and functional applications.

    • Missive's quick response and dedication to support set it apartMissive's technology stack allows for swift updates and great user experience, while their team's dedication to support sets them apart from competitors.

      The quick response and adaptability of Missive's technology stack enable them to roll out changes and updates swiftly, providing a great user experience. The team's dedication to support and following up on every request is another key aspect that sets Missive apart. Despite not engaging in traditional marketing methods, the podcast hosts were genuinely impressed by Missive and appreciated the opportunity to share their positive experiences with their audience. Email and chat applications may have standard protocols, but dealing with various sources of data updates and APIs from providers like Gmail and Outlook presents challenges for the back-end team. The shift away from IMAP towards proprietary APIs adds to the complexity, requiring attention in the future. Overall, Missive's innovative approach, commitment to user experience, and responsiveness make it a noteworthy player in the email and chat space.

    • Exploring the Impressive Design and Functionality of Missive Email Client and Recommending Useful ToolsMissive email client offers an inspiring design and functionality, while the Wagner Flexio paint spray gun simplifies painting tasks, and Prettier is a valuable code formatter for web development projects.

      The interview with the creator of Missive email client was inspiring for the podcast hosts, who are primarily focused on web development. They were fascinated by the email client's impressive design and functionality, which reminded them of the Danger Crew game interview. The hosts recommended giving Missive a try. In the "Sick Picks" segment, one of the hosts shared their excitement about the Wagner Flexio paint spray gun. This airless gun allows for easy painting with any color and is more cost-effective than traditional spray paint. The host shared their positive experience using the 590 model, which they purchased at Canadian Tire. Another host mentioned Prettier as their pick. Prettier is a code formatter that saves time in web development projects, particularly when working with CoffeeScript. The host found it to be a valuable tool in their stack, especially for side projects and microservices.

    • Exploring Intriguing Resources: Podcasts and CoursesDiscover dark music history stories through 'Disgraceland' podcast or learn Svelte programming basics with 'Svelte for Beginners' course

      The speakers shared their recommendations for interesting and informative resources, from a podcast about disgraceful events in music history to a beginner's course on Svelte programming. Scott recommended the podcast "Disgraceland" by iHeartRadio, which delves into dark stories from music history that are not necessarily crime-related but intriguing nonetheless. Wes talked about his latest course, "Svelte for Beginners," which teaches the basics of this lightweight JavaScript framework. They also took turns promoting their respective projects, with Wes mentioning his courses at westbos.com/forward/courses and Etienne plugging Missive, an email client with a well-designed interface. Overall, the conversation provided valuable insights and recommendations for those interested in music, programming, or just looking for new content to explore.

    Recent Episodes from Syntax - Tasty Web Development Treats

    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

    780: Cloud Storage: Bandwidth, Storage and BIG ZIPS

    780: Cloud Storage: Bandwidth, Storage and BIG ZIPS

    Today, Scott and Wes dive into cloud storage solutions—why you might need them, how they use them, and what you need to know about the big players, fees, and more.

    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

    779: Why SQLite is Taking Over with Brian Holt & Marco Bambini

    779: Why SQLite is Taking Over with Brian Holt & Marco Bambini

    Scott and CJ dive into the world of SQLite Cloud with special guests Brian Holt and Marco Bambini. They explore why SQLite is gaining traction, its unique features, and the misconceptions surrounding its use—let’s get into it!

    Show Notes

    • 00:00 Welcome to Syntax!
    • 01:20 Who is Brian Holt?
    • 02:26 Who is Marco Bambini?
    • 05:12 Why are people starting to talk so much about SQLite now?
    • 08:47 What makes SQLite special or interesting?
    • 09:46 What is a big misconception about SQLite?
    • 11:13 Installed by default in operating systems.
    • 12:03 A perception that SQLite is intended for single users.
    • 13:36 Convincing developers it’s a full-featured solution.
    • 15:11 What does SQLite do better than Postgres or MySQL?
    • 17:30 SQLite Cloud & local first features.
    • 20:38 Where does SQLite store the offline information?
    • 23:08 Are you typically reaching for ORMs?
    • 25:00 What is SQLite Cloud?
    • 27:29 What makes for an approachable software?
    • 29:18 What make SQLite cloud different from other hosted SQLite options?
    • 32:13 Is SQLite still evolving?
    • 34:40 What about branching?
    • 37:37 What is the GA timeline?
    • 40:04 How does SQLite actually work?
    • 41:19 Questions about security.
    • 44:28 But does it scale?
    • 45:52 Sick Picks + Shameless Plugs.

    Sick Picks

    Brian: Trainer Road
    Marco: Tennis

    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

    Potluck — Is it worth it to still learn WordPress? × Is Safari the new IE11? × Mobile website testing × Pirated content × Styled components × SSGs × Transitioning to full-time freelance × More!

    Potluck — Is it worth it to still learn WordPress? × Is Safari the new IE11? × Mobile website testing × Pirated content × Styled components × SSGs × Transitioning to full-time freelance × More!

    It’s another Potluck! In this episode, Scott and Wes answer your questions about blogging best practices, support IE11, Nest.js, mobile website testing, pirated course content, building .edu websites, transitioning to full-time freelance work, and more!

    Sanity - Sponsor

    Sanity.io is a real-time headless CMS with a fully customizable Content Studio built in React. Get a Sanity powered site up and running in minutes at sanity.io/create. Get an awesome supercharged free developer plan on sanity.io/syntax.

    Sentry - Sponsor

    If you want to know what’s happening with your code, track errors and monitor performance with Sentry. Sentry’s Application Monitoring platform helps developers see performance issues, fix errors faster, and optimize their code health. Cut your time on error resolution from hours to minutes. It works with any language and integrates with dozens of other services. Syntax listeners new to Sentry can get two months for free by visiting Sentry.io and using the coupon code TASTYTREAT during sign up.

    Cloudinary - Sponsor

    Cloudinary is the best way to manage images and videos in the cloud. Edit and transform for any use case, from performance to personalization, using Cloudinary’s APIs, SDKs, widgets, and integrations.

    Show Notes

    02:20 - I am adding a blog to my custom written personal website and I wanted to know if there is any best practices for storing blog posts? My hope is to write them in markdown, host them somewhere and then automatically feed them into my website so they are all formatted to the style of my website.

    05:37 - Do you care if people share cool, unique tips from your courses publicly on social media? For example, I once shared out a trick from one of Wes’ courses for how to set your VS Code windows different colors to distinguish your server and client code windows (giving all credit to Wes’ course for the concept). But it felt a little weird that I was sharing out a portion of his paid content for free. Is that okay? Where’s the line?

    18:18 - With official support of IE11 coming to an end on August 17, 2021, do you think developers should still try to support ir or focus only on new modern browsers? Also, will there be a new “lowest common denominator” that we should be aware of and support?

    07:20 - Thanks for an awesome podcast! Have you looked into Nest.js (not to be confused with Next.js) for backend work? It is an open source TypeScript Node framework that is becoming pretty popular

    22:48 - Do you think it’s worth learning WordPress for freelancing if you aren’t too confident in your JavaScript front-end design? Also, I don’t want to get stuck in only WordPress land just because of the money.

    30:11 - Hi guys, I have been listening to you guys for a while and just recently launched my first website! Your podcast has been a huge help in terms of getting started. For the website I made, I tested the iPhone view on Chrome dev tools and everything looked fine. However, when viewing the website on an actual iPhone, the button is too small and the word “Menu” turns into “Men”. Any advice on how to more accurately test sites on mobile devices without pushing to a production branch?

    36:52 - Do you guys ever see your premium courses pirated on sites like UdemySkillshare, any of the other video course platforms? Meaning somebody downloaded your videos and uploaded them as if they were the creator. Any tips to protect against this?

    39:53 - Looking at uses.tech and thinking, I see a lot of class names with almost the same style, gKxjCc and hSiXhL. I really want to know the science behind generating those. Do you have a shared classes that some magic tool transfers them into ugly names and copies over? What is that tool? And is it worth it?

    42:57 - Have you ever developed a .edu site? If so, what did you use to manage the enormous archives in addition to giving the site a simple page builder for departments to contribute with little or no interaction from the developer? No Joomla or Drupal please - been there. Thanks for the great help guys!

    50:35 - Hi Wes & Scott, thank you so much for giving me my weekly motivation boost to try out new stuff. Currently, I am experimenting with Next.js and SSG and I would like to know how I can generate a page at build time but only show it to an authorized user. I know I could use SSR with getServerSideProps to check allowance, however, the page is completely static without any dynamic content and I don’t want to regenerate it with every request. Is there a way to achieve this? Keep up the great work.

    54:59 - I love the show guys! I want to make the transition into full-time freelancing and wanted to know what you think about having a talk with my current employer to see if they’d be willing to take me from full-time to a contract/freelance basis. Bad idea? Thoughts? Advice?

    Links

    ××× SIIIIICK ××× PIIIICKS ×××

    Shameless Plugs

    Tweet us your tasty treats!

    How to Get Better at Debugging

    How to Get Better at Debugging

    Scott and Wes detail the tips and tools you need to get better at debugging.

    Freshbooks - Sponsor

    Get a 30 day free trial of Freshbooks at freshbooks.com/syntax and put SYNTAX in the “How did you hear about us?” section.

    Coffeecup’s CSS Grid Builder Tool

    Check out Coffeecup’s CSS Grid.cc builder tool and resources to learn, prototype and build next gen layouts with CSS Grid!

    Show Notes

    4:00

    • Read the stack trace

    7:35

    • Make sure you aren’t debugging production
    • Make sure you’re not cached

    8:40

    • Check the network panel for the whole response
    • CORS (Cross-Origin Resource Sharing)

    12:04

    • Use debugger commands in the browser
    • Set breakpoints (race conditions

    13:40

    • Use Source Maps

    15:29

    • Make full use of all console methods
      • console.group/groupEnd/info/
      • console.log({objNAme})

    17:02

    • View your code in other browers
    • Make sure your browser is up to date

    18:50

    • Step into and step over function
    • Useful for especially tricky issues

    19:47

    • Look into Scope in dev tools panel

    20:33

    • Recreate it in CodePen or Create React App
      • Helps to quarantine your code
      • Verify where the problem actually is

    24:12

    • Take a break
      • Helps clear your head and approach your problem from a different angle

    25:40

    • Rubber Duck Debugging
      • Forcing yourself to talk it out will often reveal problems/issues

    26:40

    • Check Github issues / ask in Slack
      • Leave your solution in the comments for others

    28:12

    • Use Node --inspect flag

    29:57

    • Read the code in your libs (if you can)

    32:34 - Chrome Dev Tools Tabs Rundown

    • 33:10 - Network tab
    • 34:15 - Preformance tab
    • 35:58 - Lesser known tools
      • 36:15 - Firefox Grid Debug
      • 36:20 - Firefox Fonts tab
      • 37:10 - More tools (three dots menu in top right of Chrome Dev Tools window)
      • 37:39 - Chrome Animations Inspector
      • 38:34 - /dev tips & Modern DevTools Course
      • 39:41 - Chrome & FF Layers for 3d and full view of canvas & window
      • 40:51 - Sensors for overriding fake devices sensors
        • Hot tip: Use Instagram on the desktop - Go to Instagram and set the user agent to iPad and it will work as it does on that actual device
        • Hot tip: Get free internet on a plane - If the airplane offers free internet for a certain device, change your user agent to that device and then switch back
      • 43:12 - Favorite DevTools extensions
    • 44:06 - Application/Storage tab
    • 44:41 - FireFox Grid Inspector

    ××× SIIIIICK ××× PIIIICKS ×××

    • Scott: Hotel Tonight App
    • Wes: Coffee table - If you’re trying to build an outdoor coffee table, use a peice of granite

    Shameless Plugs

    Tweet us your tasty treats!

    From React To SvelteKit

    From React To SvelteKit

    In this episode of Syntax, Scott talks with Wes about moving Level Up Tutorials from React to SvelteKit — why he did it, how, benefits, things to watch out for, and more!

    Prismic - Sponsor

    Prismic is a Headless CMS that makes it easy to build website pages as a set of components. Break pages into sections of components using React, Vue, or whatever you like. Make corresponding Slices in Prismic. Start building pages dynamically in minutes. Get started at prismic.io/syntax.

    Sentry - Sponsor

    If you want to know what’s happening with your code, track errors and monitor performance with Sentry. Sentry’s Application Monitoring platform helps developers see performance issues, fix errors faster, and optimize their code health. Cut your time on error resolution from hours to minutes. It works with any language and integrates with dozens of other services. Syntax listeners new to Sentry can get two months for free by visiting Sentry.io and using the coupon code TASTYTREAT during sign up.

    Cloudinary - Sponsor

    Cloudinary is the best way to manage images and videos in the cloud. Edit and transform for any use case, from performance to personalization, using Cloudinary’s APIs, SDKs, widgets, and integrations.

    Show Notes

    07:28 - Thoughts

    • Apples to oranges, so unfortunately, no super legit ability to compare.
      • SvelteKit isn’t analogous with a custom React setup that uses CSR
        • SSR is usually going to be faster - we can ship less JS
        • Some big things changed beyond React → SvelteKit
        • HLS starts grabbing chunks immediately, so it’s hard to get accurate load time and transfer.
    • Whole conversion took a couple of months.
    • Hardest part was making UI choices and changes, straight up converting components one by one wasn’t actually that tough

    16:14 - Converting React components to Svelte

    • useState becomes just a straight-up variable
    • Graphql calls were hooks now just imported generated functions
    • Remove extranous fragments
    • Convert {things && } to {#if thing}{/if}
    •  becomes 

    24:06 - Spark joys

    • State
      • Our checkout flow became way more transparent, way easier with Svelte stores
    • Render flow
      • Was never something we needed to really think about. Didn’t think about memoizing, or worrying about too many renders down the line, just never needed to
    • Overall developer experience
      • It’s honestly a joy to work in and I don’t want to go back
    • Making a library
    • Creating a sitemap was extremely easy, because of server-side routes. file.returnformat.ts ie sitemap.xml.ts
    • CSS without a css-in-js library for scoping is a dream. CSS props are now 100% via CSS variables using the https://svelte.dev/docs#style_props
    • Animations are all done with Svelte’s internal animations lib

    32:45 - Hosting

    • adapter-node
    • Hosted on render.com as a straight-up node process $7/m for more than enough RAM and CPU,
    • Lots of other options for static, Vercel, workers whatever, I like having just a straight-up node app you can host anywhere

    35:50 - Things to do

    • Admin tools

    37:00 - Challenges

    • ESM is not always smooth sailin
      • Import has from ‘lodash/has’ didn’t working in dev, but import has from ‘lodash/has.js’ didn’t work in prod.
        • Solution was to use lodash.has as the dependency
        • Apollo included all React as a dep unless you import from @core
    • TS is great, but there was once where I wanted to define the entire props ts object for a spread prop, but was not possible
    • Drag animations

    Cloudinary

    42:46 - Wes’ questions

    • What about the ecosystem?
    • What about forms + DOM data?
    • Serverless functions?
    • Do you always bind to state? Or just access directly?
     formData = writable({   title: "yo" })  {$formData.title}    

    Links

    ××× SIIIIICK ××× PIIIICKS ×××

    Shameless Plugs

    Tweet us your tasty treats!

    Top 18 New Things in JS - Part 2

    Top 18 New Things in JS - Part 2

    In this episode Wes and Scott continue the discussion of their favorite top 18 new things in Javascript.

    Freshbooks - Sponsor

    Get a 30 day free trial of Freshbooks at freshbooks.com/syntax and put SYNTAX in the “How did you hear about us?” section.

    Graph CMS - Sponsor

    GraphCMS is trying to be the world’s most developer friendly CMS. It’s a great way to build a GraphQL API without having to write a custom GraphQL server. Try out the API-first CMS of the future today at graphcms.com/syntaxfm.

    Show Notes

    3:30

    • Spread

    8:40

    • Rests

    11:54

    • Arrow Functions

    15:48

    • Default Function Arguments

    19:47

    • Named params

    21:26

    • Modules

    35:35

    • Classes

    41:54

    • Things we never use

    Links

    ××× SIIIIICK ××× PIIIICKS ×××

    Shameless Plugs

    Tweet us your tasty treats!