<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Timo Ernst</title>
    <description>The latest articles on Forem by Timo Ernst (@timo_ernst).</description>
    <link>https://forem.com/timo_ernst</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F181670%2F9760518a-edfd-41f3-ad94-85425bff6fd4.jpg</url>
      <title>Forem: Timo Ernst</title>
      <link>https://forem.com/timo_ernst</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/timo_ernst"/>
    <language>en</language>
    <item>
      <title>JavaScript RPG Game Development | Episode 4: Music and Sound Effects</title>
      <dc:creator>Timo Ernst</dc:creator>
      <pubDate>Thu, 10 Mar 2022 17:10:50 +0000</pubDate>
      <link>https://forem.com/timo_ernst/javascript-rpg-game-development-episode-4-music-and-sound-effects-18af</link>
      <guid>https://forem.com/timo_ernst/javascript-rpg-game-development-episode-4-music-and-sound-effects-18af</guid>
      <description>&lt;p&gt;In this new episode we’ll add music and sound effects to our JRPG game.&lt;/p&gt;

&lt;p&gt;If you’re new to this series, make sure to check out episode 1 first: &lt;a href="https://youtu.be/W4SVdtY6wZs"&gt;https://youtu.be/W4SVdtY6wZs&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tutorial Video
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/bzkSqiMm3gs"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;My source code: &lt;a href="http://github.com/valnub/jrpg"&gt;http://github.com/valnub/jrpg&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;rpg.js &lt;a href="http://rpgjs.dev"&gt;http://rpgjs.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Free 16x16px spriteset (maps + chars) &lt;a href="https://opengameart.org/content/tiny-16-basic"&gt;https://opengameart.org/content/tiny-16-basic&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Music and sound effects from &lt;a href="https://wingless-seraph.net/en/material-music.html"&gt;https://wingless-seraph.net/en/material-music.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;My Blog &lt;a href="https://www.timo-ernst.net"&gt;https://www.timo-ernst.net&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter &lt;a href="https://www.twitter.com/timo_ernst"&gt;https://www.twitter.com/timo_ernst&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rpgjs</category>
      <category>html</category>
      <category>javascript</category>
    </item>
    <item>
      <title>How to embed YouTube videos into dev.to posts</title>
      <dc:creator>Timo Ernst</dc:creator>
      <pubDate>Sat, 05 Feb 2022 23:47:15 +0000</pubDate>
      <link>https://forem.com/timo_ernst/how-to-embed-youtube-videos-into-devto-posts-2ea7</link>
      <guid>https://forem.com/timo_ernst/how-to-embed-youtube-videos-into-devto-posts-2ea7</guid>
      <description>&lt;p&gt;First, go to the Youtube video you'd like to embed and have a look at the url, it should look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://www.youtube.com/watch?v=&amp;lt;your-video-url&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Right after the &lt;code&gt;v=&lt;/code&gt; part you should find your video id, so for example in the following case &lt;code&gt;l4kFO6VQPfA&lt;/code&gt; would be our id:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://www.youtube.com/watch?v=l4kFO6VQPfA&amp;amp;t=1s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, create a new post on dev.to and add the following liquid tag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{% youtube &amp;lt;your-video-id&amp;gt; %}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So, in our example it would be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{% youtube l4kFO6VQPfA %}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Do not copy other parts of the url. For example in our case we did not copy &lt;code&gt;&amp;amp;t=1s&lt;/code&gt; at the end of the url.&lt;/p&gt;

&lt;p&gt;Hope this was helpful :-)&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.timoernst.tv"&gt;My YouTube channel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.timo-ernst.net"&gt;My Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.twitter.com/timo_ernst"&gt;My Twitter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>dev</category>
      <category>devto</category>
      <category>youtube</category>
    </item>
    <item>
      <title>How to Enable Autoplay for SwiperJS React</title>
      <dc:creator>Timo Ernst</dc:creator>
      <pubDate>Sat, 05 Feb 2022 23:38:48 +0000</pubDate>
      <link>https://forem.com/timo_ernst/how-to-turn-on-autoplay-for-swiper-react-enable-javascript-carousel-tutorial-34lk</link>
      <guid>https://forem.com/timo_ernst/how-to-turn-on-autoplay-for-swiper-react-enable-javascript-carousel-tutorial-34lk</guid>
      <description>&lt;p&gt;I'm often asked how to activate the autoplay feature in Swiper React carousel galleries, so I made a quick 5 minute tutorial video about it:&lt;/p&gt;

&lt;h2&gt;
  
  
  Turn on autoplay for Swiper React video
&lt;/h2&gt;

&lt;p&gt;Was this video helpful? If so, why not subscribe to my &lt;a href="http://www.timoernst.tv"&gt;YouTube channel&lt;/a&gt; so you don't miss on the next tutorial video :-)&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/tmNtM0Gin-E"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/valnub/swiper-autoplay"&gt;Source code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.timoernst.tv"&gt;My YouTube channel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.timo-ernst.net"&gt;My Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.twitter.com/timo_ernst"&gt;My Twitter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>swiper</category>
      <category>react</category>
      <category>javascript</category>
    </item>
    <item>
      <title>JavaScript RPG Game Development | Episode 3: NPCs and Dialogs</title>
      <dc:creator>Timo Ernst</dc:creator>
      <pubDate>Sun, 30 Jan 2022 09:20:57 +0000</pubDate>
      <link>https://forem.com/timo_ernst/lets-code-a-final-fantasy-style-browser-game-with-rpgjs-add-npcs-dialogs-and-events-episode-3-5jn</link>
      <guid>https://forem.com/timo_ernst/lets-code-a-final-fantasy-style-browser-game-with-rpgjs-add-npcs-dialogs-and-events-episode-3-5jn</guid>
      <description>&lt;p&gt;Moving on to episode 3 we add our first NPC the main character can talk to.&lt;/p&gt;

&lt;p&gt;If you're new to this series, make sure to check out episode 1 first: &lt;a href="https://youtu.be/W4SVdtY6wZs"&gt;https://youtu.be/W4SVdtY6wZs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Question for you:&lt;/strong&gt; Have you started creating your own RPG yet? How's the progress? Let me know in the comments section! :-)&lt;/p&gt;

&lt;h2&gt;
  
  
  Tutorial Video
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/fzHTHFpszMg"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;My source code: &lt;a href="http://github.com/valnub/jrpg"&gt;http://github.com/valnub/jrpg&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;rpg.js &lt;a href="http://rpgjs.dev"&gt;http://rpgjs.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Free 16x16px spriteset (maps + chars) &lt;a href="https://opengameart.org/content/tiny-16-basic"&gt;https://opengameart.org/content/tiny-16-basic&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;My Blog &lt;a href="https://www.timo-ernst.net"&gt;https://www.timo-ernst.net&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter &lt;a href="https://www.twitter.com/timo_ernst"&gt;https://www.twitter.com/timo_ernst&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rpgjs</category>
      <category>html</category>
      <category>javascript</category>
    </item>
    <item>
      <title>JavaScript RPG Game Development | Episode 2: Map- and Character Creation</title>
      <dc:creator>Timo Ernst</dc:creator>
      <pubDate>Sat, 08 Jan 2022 23:39:58 +0000</pubDate>
      <link>https://forem.com/timo_ernst/lets-code-a-final-fantasy-style-browser-game-with-rpgjs-map-and-character-creation-episode-2-8ia</link>
      <guid>https://forem.com/timo_ernst/lets-code-a-final-fantasy-style-browser-game-with-rpgjs-map-and-character-creation-episode-2-8ia</guid>
      <description>&lt;p&gt;In this 2nd episode of our series I finally manage to create a custom spritesheet for building the map and characters of our game. I struggled quite a lot as the documentation of rpg.js is not the best and some important information is lacking. So, if you're also running into problems getting your spritesheet into the game, try the video below :-)&lt;/p&gt;

&lt;p&gt;This is the spritesheet I use: &lt;a href="https://opengameart.org/content/tiny-16-basic"&gt;Tiny 16 Basic&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, I have 2 questions for you:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What do you think about Rumi's proposal for the storyline in &lt;a href="https://youtu.be/W4SVdtY6wZs"&gt;episode 1&lt;/a&gt; comments section of the video?&lt;/li&gt;
&lt;li&gt;What do you think we should name the game?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/EzSPxNsx9C4"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;My source code: &lt;a href="http://github.com/valnub/jrpg"&gt;http://github.com/valnub/jrpg&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;rpg.js &lt;a href="http://rpgjs.dev"&gt;http://rpgjs.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Free 16x16px spriteset (maps + chars) &lt;a href="https://opengameart.org/content/tiny-16-basic"&gt;https://opengameart.org/content/tiny-16-basic&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;My Blog &lt;a href="https://www.timo-ernst.net"&gt;https://www.timo-ernst.net&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter &lt;a href="https://www.twitter.com/timo_ernst"&gt;https://www.twitter.com/timo_ernst&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rpgjs</category>
      <category>html</category>
      <category>javascript</category>
    </item>
    <item>
      <title>JavaScript RPG Game Development | Episode 1: Getting Started With rpg.js</title>
      <dc:creator>Timo Ernst</dc:creator>
      <pubDate>Mon, 03 Jan 2022 11:42:03 +0000</pubDate>
      <link>https://forem.com/timo_ernst/lets-build-a-final-fantasy-style-browser-game-with-rpgjs-episode-1-2588</link>
      <guid>https://forem.com/timo_ernst/lets-build-a-final-fantasy-style-browser-game-with-rpgjs-episode-1-2588</guid>
      <description>&lt;p&gt;In my childhood I loved playing games like Final Fantasy or Shining Force for Playstation and Sega Genesis which are so called JRPGs (Japanese Role Playing Games). By today’s standards they can easily be called retro as their graphics do not hold up when compared to current-gen consoles. However, I still believe that these games have a certain charm and character to them, so I wanted to try to code a JRPG myself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing rpg.js
&lt;/h2&gt;

&lt;p&gt;So, after doing some research, I stumbled over this framework called &lt;a href="http://rpgjs.dev/"&gt;rpg.js&lt;/a&gt;, which is a framework for – you guessed it – RPGs. Based on a first glance, I immediately noticed how mature it seems to be and it is actively maintained (last commit is just 14 days ago!). It’s based on TypeScript, Node and VueJs which is an amazing tech stack.&lt;/p&gt;

&lt;p&gt;As I have pretty much zero experience with this framework, I thought, why not make this a community project? So, I kicked off this YouTube video series below in which you can join me doing first steps in creating the game. I’d love to have your input by providing ideas for the name, game mechanics and storyline. If you have anything to contribute, please don’t hesitate and put your thoughts into the comments section!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/W4SVdtY6wZs"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;My source code: &lt;a href="http://github.com/valnub/jrpg"&gt;http://github.com/valnub/jrpg&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;rpg.js &lt;a href="http://rpgjs.dev"&gt;http://rpgjs.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Free 16x16px spriteset (maps + chars) &lt;a href="https://opengameart.org/content/tiny-16-basic"&gt;https://opengameart.org/content/tiny-16-basic&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;My Blog &lt;a href="https://www.timo-ernst.net"&gt;https://www.timo-ernst.net&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter &lt;a href="https://www.twitter.com/timo_ernst"&gt;https://www.twitter.com/timo_ernst&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rpgjs</category>
      <category>html</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Create AppleTV UI Animation with AtroposJS | HTML CSS JavaScript Tutorial</title>
      <dc:creator>Timo Ernst</dc:creator>
      <pubDate>Sun, 19 Dec 2021 18:10:07 +0000</pubDate>
      <link>https://forem.com/timo_ernst/create-appletv-ui-animation-with-atroposjs-html-css-javascript-tutorial-4kam</link>
      <guid>https://forem.com/timo_ernst/create-appletv-ui-animation-with-atroposjs-html-css-javascript-tutorial-4kam</guid>
      <description>&lt;p&gt;In this AtroposJS video I will explain how to create a super cool 3D animation effect that you get when using your AppleTV while hovering over a movie poster image.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3EJhu14S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6owpi1182xd2zn6zr32f.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3EJhu14S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6owpi1182xd2zn6zr32f.gif" alt="Atropos Example Gif" width="381" height="525"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  AtroposJS Tutorial Video
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/BU9IZHk1LPc"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;My Blog: &lt;a href="https://www.timo-ernst.net"&gt;https://www.timo-ernst.net&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;My Twitter: &lt;a href="https://www.twitter.com/timo_ernst"&gt;https://www.twitter.com/timo_ernst&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;On DEV: &lt;a href="https://dev.to/timo_ernst"&gt;https://dev.to/timo_ernst&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;AtroposJS Docs: &lt;a href="https://atroposjs.com/docs"&gt;https://atroposjs.com/docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Source code: &lt;a href="https://github.com/valnub/atropos-demo"&gt;https://github.com/valnub/atropos-demo&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>html</category>
      <category>atropos</category>
      <category>atroposjs</category>
      <category>appletv</category>
    </item>
    <item>
      <title>Parallax Beginner Tutorial: A Cool 3D Effect With HTML, CSS, JavaScript</title>
      <dc:creator>Timo Ernst</dc:creator>
      <pubDate>Wed, 05 May 2021 18:21:33 +0000</pubDate>
      <link>https://forem.com/timo_ernst/parallax-beginner-tutorial-a-cool-3d-effect-with-html-css-javascript-4h7i</link>
      <guid>https://forem.com/timo_ernst/parallax-beginner-tutorial-a-cool-3d-effect-with-html-css-javascript-4h7i</guid>
      <description>&lt;p&gt;I found this great &lt;a href="https://www.youtube.com/watch?v=0PaA82YzNOE&amp;amp;t=0s"&gt;Photoshop tutorial&lt;/a&gt; by Dev Ed which inspired me to create my own implementation of a parallax effect based on his video in order to create more depth to websites and hey – a bit of eye candy never hearts, right? :-) So, here is my implementation below.&lt;/p&gt;

&lt;p&gt;As you can see in the gif above – every time the user scrolls down the bush in bottom left as well as the house in the bottom right move at a different speed compared to the background which creates the overall illusion of depth. If you want to learn how to achieve this effect have a look at my video tutorial down below :-)&lt;/p&gt;

&lt;p&gt;Let me know how you like it and if you have any similar or even better cool looking eye candy effects which you like using on your websites. I’d love to see them!&lt;/p&gt;

&lt;h2&gt;
  
  
  Video Tutorial
&lt;/h2&gt;

&lt;p&gt;In this video I will guide you through a step-by-step tutorial how to create the parallax effect above. We will use just HTML, CSS and JavaScript. No external libraries. No React, Angular or Vue. Plain and simple. If you prefer a less minimalistic solution you can also check out &lt;a href="https://youtu.be/Nt70Ld0dJCM"&gt;this video&lt;/a&gt; by Dev Ed in which he does the same thing but does heavy usage of external libraries. The benefit of his approach is more convenience while coding but at the same time you will have less control over the code, rely on external dependencies and probably won't learn as much :-)&lt;/p&gt;

&lt;p&gt;If you have any questions or suggestions for improvements please let me know in the comments down below.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/sfy9hHE7AYc"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;p&gt;Here you can find couple of links related to my video including the source code as well as a live demo. If you want feel free to follow me on Twitter. I’m very active there and post regularly on stuff related to web dev in general, React and Node.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Source code on GitHub: &lt;a href="https://github.com/valnub/3d-depth-example"&gt;https://github.com/valnub/3d-depth-example&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Live demo: &lt;a href="http://www.timo-ernst.net/misc/3d-depth-effect"&gt;http://www.timo-ernst.net/misc/3d-depth-effect&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;My Twitter: &lt;a href="https://www.twitter.com/timo_ernst"&gt;https://www.twitter.com/timo_ernst&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;My Blog: &lt;a href="https://www.timo-ernst.net"&gt;https://www.timo-ernst.net&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>parallax</category>
      <category>html</category>
      <category>css</category>
      <category>javascript</category>
    </item>
    <item>
      <title>How to Deploy a Framework7 App to AWS via CI/CD</title>
      <dc:creator>Timo Ernst</dc:creator>
      <pubDate>Wed, 31 Mar 2021 16:40:54 +0000</pubDate>
      <link>https://forem.com/timo_ernst/how-to-deploy-a-framework7-app-to-aws-via-ci-cd-56if</link>
      <guid>https://forem.com/timo_ernst/how-to-deploy-a-framework7-app-to-aws-via-ci-cd-56if</guid>
      <description>&lt;p&gt;In this tutorial I will explain the easiest way to create an automatic CI/CD pipeline in order to deploy a &lt;a href="https://www.timo-ernst.net/blog/tag/framework7/" rel="noopener noreferrer"&gt;Framework7&lt;/a&gt; app to AWS. The goal is to have your pipeline automatically build and deploy your project every time you commit a change to the main GitHub branch. In order for you to follow along I assume you already have a F7 app and it is hosted on a public GitHub repository. If you don’t have an application yet, use the &lt;a href="https://framework7.io/cli/" rel="noopener noreferrer"&gt;F7 CLI&lt;/a&gt; to create one. Also, make sure you are signed up to &lt;a href="http://aws.amazon.com" rel="noopener noreferrer"&gt;AWS&lt;/a&gt; by creating an account there.&lt;/p&gt;

&lt;h2&gt;
  
  
  1 Create a new S3 Bucket on AWS
&lt;/h2&gt;

&lt;p&gt;In AWS Management Console enter “S3” and select “Buckets”.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.timo-ernst.net%2Fwp-content%2Fuploads%2F2021%2F03%2FAWS-S3-Buckets.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.timo-ernst.net%2Fwp-content%2Fuploads%2F2021%2F03%2FAWS-S3-Buckets.jpg" alt="AWS S3 Buckets"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, fill out the form like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Give it a name&lt;/li&gt;
&lt;li&gt;Choose a region&lt;/li&gt;
&lt;li&gt;Deselect “Block all public access”&lt;/li&gt;
&lt;li&gt;Enable “I acknowledge that the current settings might result in this bucket and the objects within becoming public”&lt;/li&gt;
&lt;li&gt;Leave the rest as is&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.timo-ernst.net%2Fwp-content%2Fuploads%2F2021%2F03%2FCreate-AWS-S3-Bucket-735x1024.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.timo-ernst.net%2Fwp-content%2Fuploads%2F2021%2F03%2FCreate-AWS-S3-Bucket-735x1024.jpg" alt="Create AWS S3 Bucket"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2 Set AWS S3 Bucket Policies
&lt;/h2&gt;

&lt;p&gt;In your bucket list click on the one you just created. Click the “Permissions” tab and then scroll down to Bucket policy and click on “Edit”. Paste in the following code:&lt;/p&gt;






&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    {
        "Version": "2012-10-17",
        "Id": "Policy1589309574299",
        "Statement": [
            {
                "Sid": "Stmt1589309569196",
                "Effect": "Allow",
                "Principal": "*",
                "Action": "s3:GetObject",
                "Resource": "REPLACE_WITH_BUCKET_ARN/*"
            }
        ]
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Disclaimer: This snippet I shamelessly copied from Anna Aitchison’s excellent &lt;a href="https://dev.to/ara225/how-to-host-a-static-website-on-aws-with-https-and-ci-cd-33of"&gt;article&lt;/a&gt; on dev.to.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Do not save yet!&lt;/strong&gt; Instead, change the placeholder REPLACE_WITH_BUCKET_ARN under “Ressource”. You can find your ARN in the properties tab in your bucket info. Also &lt;strong&gt;do not remove&lt;/strong&gt; the &lt;code&gt;/*&lt;/code&gt; part at the end!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.timo-ernst.net%2Fwp-content%2Fuploads%2F2021%2F03%2FAWS-Bucket-ARN.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.timo-ernst.net%2Fwp-content%2Fuploads%2F2021%2F03%2FAWS-Bucket-ARN.jpg" alt="AWS Bucket ARN"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3 Enable AWS S3 Static Hosting
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Go to the Properties tab&lt;/li&gt;
&lt;li&gt;Scroll down all the way to “Static website hosting”&lt;/li&gt;
&lt;li&gt;Click on edit&lt;/li&gt;
&lt;li&gt;Click on enable&lt;/li&gt;
&lt;li&gt;Under “Index document” put in &lt;code&gt;index.html&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Leave the rest as is&lt;/li&gt;
&lt;li&gt;Hit “Save changes”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.timo-ernst.net%2Fwp-content%2Fuploads%2F2021%2F03%2FAWS-S3-Enable-Hosting.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.timo-ernst.net%2Fwp-content%2Fuploads%2F2021%2F03%2FAWS-S3-Enable-Hosting.jpg" alt="AWS Enable Static Hosting for S3 Buckets"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4 Enable HTTPS
&lt;/h2&gt;

&lt;p&gt;It is a good practice to always force-enable SSL for our Framework7 app, so let’s do that using AWS CloudFront. This will also provide you a nice cloudfront.net url. To get started follow these steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search for “CloudFront” in your AWS Console search bar and select it&lt;/li&gt;
&lt;li&gt;Click on “Create Distribution”&lt;/li&gt;
&lt;li&gt;Under Web, choose “Get Started”&lt;/li&gt;
&lt;li&gt;In “Origin Domain Name” pick the bucket your just created&lt;/li&gt;
&lt;li&gt;For Viewer Protocol Policy, choose Redirect HTTP to HTTPS. This will force SSL&lt;/li&gt;
&lt;li&gt;Leave the rest as is and click on “Create Distribution” in the bottom right corner&lt;/li&gt;
&lt;li&gt;Give it a few minutes to create the distribution&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.timo-ernst.net%2Fwp-content%2Fuploads%2F2021%2F03%2FAWS-create-distribution.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.timo-ernst.net%2Fwp-content%2Fuploads%2F2021%2F03%2FAWS-create-distribution.jpg" alt="Create AWS Distribution"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Once it’s done click on the newly created distribution. Scroll down to “Domain Name”. It will show something in the form of 123whatever.cloudfront.net where 123whatever is a random series of letters and numbers &lt;strong&gt;which is specific to your account, so this value will be different!&lt;/strong&gt; Your website will be available via &lt;code&gt;https://123whatever.cloudfront.net&lt;/code&gt; later when our CI/CD pipeline is done.&lt;/p&gt;

&lt;h2&gt;
  
  
  5 Create IAM User
&lt;/h2&gt;

&lt;p&gt;In order for our Framework7 CI/CD pipeline to work with GitHub actions we need to provide an access key and an id. For this a new user on AWS must be created.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In your AWS Management Console enter “IAM” and then select it&lt;/li&gt;
&lt;li&gt;On the left click on “users”&lt;/li&gt;
&lt;li&gt;Click on “Add user”&lt;/li&gt;
&lt;li&gt;Choose a name&lt;/li&gt;
&lt;li&gt;Set Access type to “Programmatic access”&lt;/li&gt;
&lt;li&gt;In the bottom right corner click “Next”&lt;/li&gt;
&lt;li&gt;On the following page click “Attach existing policies directly”&lt;/li&gt;
&lt;li&gt;Search for “S3”&lt;/li&gt;
&lt;li&gt;Select “AmazonS3FullAccess”&lt;/li&gt;
&lt;li&gt;Click “Next”&lt;/li&gt;
&lt;li&gt;Skip “Add Tags” and click “Next”&lt;/li&gt;
&lt;li&gt;Your result should look something like on the screenshot below&lt;/li&gt;
&lt;li&gt;Click “Create user”&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.timo-ernst.net%2Fwp-content%2Fuploads%2F2021%2F03%2FAWS-create-user.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.timo-ernst.net%2Fwp-content%2Fuploads%2F2021%2F03%2FAWS-create-user.jpg" alt="AWS Create User"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; On the next page copy both Access key and Secret Access key and store them on your computer in a secure way.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.timo-ernst.net%2Fwp-content%2Fuploads%2F2021%2F03%2FAWS-Acess-key-and-id-1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.timo-ernst.net%2Fwp-content%2Fuploads%2F2021%2F03%2FAWS-Acess-key-and-id-1.jpg" alt="AWS Access Key and ID"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  6 Add Secrets to GitHub
&lt;/h2&gt;

&lt;p&gt;I assume that you have published your Framework7 app to a GitHub repository. If you haven’t done so, do it now.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In your repo go to “Settings”&lt;/li&gt;
&lt;li&gt;Then choose “Secrets” on the left side&lt;/li&gt;
&lt;li&gt;Click on “New Repository Secret”&lt;/li&gt;
&lt;li&gt;As name enter AWS_ACCESS_KEY_ID&lt;/li&gt;
&lt;li&gt;As value enter your access key you received in the previous step&lt;/li&gt;
&lt;li&gt;Repeat with

&lt;ul&gt;
&lt;li&gt;AWS_SECRET_ACCESS_KEY&lt;/li&gt;
&lt;li&gt;S3_BUCKET&lt;/li&gt;
&lt;li&gt;S3_BUCKET_REGION&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Tip: To find the correct values for S3_BUCKET and S3_BUCKET_REGION go to your bucket list in AWS, select the bucket and open the “Properties” tab. You will find the values here. In my case S3_BUCKET_REGION is &lt;code&gt;eu-central-1&lt;/code&gt; and S3_BUCKET is &lt;code&gt;arn:aws:s3:::deploy-test-2&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.timo-ernst.net%2Fwp-content%2Fuploads%2F2021%2F03%2FAWS-Bucket-Region-and-ARN.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.timo-ernst.net%2Fwp-content%2Fuploads%2F2021%2F03%2FAWS-Bucket-Region-and-ARN.jpg" alt="AWS Bucket Region and ARN"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7 Setup CI/CD Pipeline on GitHub
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Go back to your GitHub repo&lt;/li&gt;
&lt;li&gt;Select “Actions” from the top bar&lt;/li&gt;
&lt;li&gt;Click on Skip this and &lt;strong&gt;set up a workflow yourself&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Paste in the following code:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  name: Framework7 AWS Deploy
  on: [push]
  jobs:
  run:
  runs-on: ubuntu-latest
  env:
  AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
  AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
  steps: - uses: actions/checkout@v2

        - name: Install dependencies
          run: npm install

        - name: Build
          run: npm run build

        - name: Deploy
          uses: reggionick/s3-deploy@v3
          with:
            folder: www
            bucket: ${{ secrets.S3_BUCKET }}
            bucket-region: ${{ secrets.S3_BUCKET_REGION }}
            delete-removed: true
            no-cache: true
            private: true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Click on “Start Commit” (Green button)&lt;/li&gt;
&lt;li&gt;Click on “Commit new file”&lt;/li&gt;
&lt;li&gt;Go back to Actions tab&lt;/li&gt;
&lt;li&gt;You should now see how:

&lt;ul&gt;
&lt;li&gt;The build is created&lt;/li&gt;
&lt;li&gt;The app is pushed to AWS&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  8 View Your Framework7 App
&lt;/h2&gt;

&lt;p&gt;Let GitHub Action do its job. This will take a couple minutes! It will show the status for each workflow in the table on that page. Once it’s done open your deployed Framework7 app like this: &lt;code&gt;https://123whatever.cloudfront.net/index.html&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Replace 123whatever with the correct ID of your app. See step 4 in this tutorial what your personal url will be.&lt;/p&gt;

&lt;h2&gt;
  
  
  Congratulations!
&lt;/h2&gt;

&lt;p&gt;We have now fully created a CI/CD pipeline with GitHub Actions and successfully deployed the Framework7 app. Every time you push to your main branch in GitHub a new build is automatically created and the update is deployed to AWS. Please let me know if this tutorial worked for you in the comments down below :)&lt;/p&gt;

&lt;p&gt;You can find more Framework7 tutorials on my YouTube channel &lt;a href="http://www.timoernst.tv" rel="noopener noreferrer"&gt;http://www.timoernst.tv&lt;/a&gt;&lt;/p&gt;

</description>
      <category>framework7</category>
      <category>aws</category>
      <category>github</category>
      <category>devops</category>
    </item>
    <item>
      <title>Faster Wordpress in 8 Steps</title>
      <dc:creator>Timo Ernst</dc:creator>
      <pubDate>Wed, 21 Oct 2020 09:20:01 +0000</pubDate>
      <link>https://forem.com/timo_ernst/faster-wordpress-in-8-steps-1cb4</link>
      <guid>https://forem.com/timo_ernst/faster-wordpress-in-8-steps-1cb4</guid>
      <description>&lt;p&gt;Just recently I was fed up with my &lt;a href="https://www.timo-ernst.net"&gt;Wordpress based blog&lt;/a&gt;. I was using a pre-canned theme and overall felt like the whole thing was sluggish and confusing in terms of usability and general visual appearance. As I was always jealous about dev.to's lightning fast loading speed I thought hey – why not turn this into a statically generated page using Gatsby? I mean, static is the new hype so why not use it?&lt;/p&gt;

&lt;h2&gt;
  
  
  Gatsby was not the answer
&lt;/h2&gt;

&lt;p&gt;After tinkering with Gatsby for quite a while I got something to work. The most difficult part was to export all Wordpress posts into Markdown – which was difficult but doable. However, I wasn't very happy with the themes available for Gatsby Blog. I wanted something extremely minimalistic but aesthetically pleasing at the same time. So, when I briefly checked one of my Wordpress posts I noticed that the time to first byte actually wasn't that bad and I thought: &lt;em&gt;Mhh... what if I could just tweak my Wordpress installation a bit and make it blazingly fast?&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenge Accepted
&lt;/h2&gt;

&lt;p&gt;So, here are the actions I took:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Found a &lt;a href="https://wordpress.org/themes/gutenbook"&gt;WP theme&lt;/a&gt; which was visually close enough to what I wanted&lt;/li&gt;
&lt;li&gt;Overwrote with custom CSS to get it cleaner&lt;/li&gt;
&lt;li&gt;Removed all "Featured Images" from homepage&lt;/li&gt;
&lt;li&gt;Installed &lt;a href="https://wordpress.org/plugins/wp-fastest-cache"&gt;WP Fastest Cache&lt;/a&gt; and enabled all settings&lt;/li&gt;
&lt;li&gt;Registered my site at &lt;a href="https://www.cloudflare.com/"&gt;Cloudflare&lt;/a&gt; and have WP Fastest Cache push all static content to Cloudflare&lt;/li&gt;
&lt;li&gt;Installed plugin &lt;a href="https://wordpress.org/plugins/disable-remove-google-fonts"&gt;Disable/Remove Google Fonts&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Changed css &lt;code&gt;font-family&lt;/code&gt; so it works without Google Fonts&lt;/li&gt;
&lt;li&gt;Used WP plugin &lt;a href="https://wordpress.org/plugins/wp-smushit"&gt;Smush&lt;/a&gt; to compress all images&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The results
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Super clean new design&lt;/li&gt;
&lt;li&gt;Average time to first byte: &lt;em&gt;350ms&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Average full load in: &lt;em&gt;450ms&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;100/100 PageSpeed Insight Points for desktop computers&lt;/li&gt;
&lt;li&gt;98/100 PageSpeed Insight Points for mobile devices&lt;/li&gt;
&lt;li&gt;Webpagetest.org results for speed:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--g4EznWme--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/x34es2x5mh9j6is43lsv.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--g4EznWme--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/x34es2x5mh9j6is43lsv.jpg" alt="Webpagetest Results"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Creating super-fast websites with Wordpress/PHP is absolutely possible. The most important trick here is static caching and CDN usage. Check the result at &lt;a href="https://www.timo-ernst.net"&gt;https://www.timo-ernst.net&lt;/a&gt;. I'm a very happy webdev panda now 🐼. Got more tips on how to improve loading speed? Let me know in the comments below :-)&lt;/p&gt;

&lt;p&gt;Ps: Follow my web dev journey on &lt;a href="https://www.twitter.com/timo_ernst"&gt;Twitter&lt;/a&gt; if you want more stories like this one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Question on SEO
&lt;/h2&gt;

&lt;p&gt;If there are any SEO experts reading this – I removed all featured images from the homepage to improve performance and kept images only within posts. Would this negatively impact SEO?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>webperf</category>
      <category>php</category>
      <category>wordpress</category>
    </item>
    <item>
      <title>Can You Code On iPhone?</title>
      <dc:creator>Timo Ernst</dc:creator>
      <pubDate>Tue, 13 Oct 2020 19:47:06 +0000</pubDate>
      <link>https://forem.com/timo_ernst/can-you-code-on-iphone-4c4i</link>
      <guid>https://forem.com/timo_ernst/can-you-code-on-iphone-4c4i</guid>
      <description>&lt;p&gt;Few days ago while watching the Apple iPhone 12 keynote I wondered – Could you use this thing as a device to do programming on? So I tried. In this Video I will try to build a React + Node/Express app entirely on my iPhone SE using my favourite iOS IDE PlayJs.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/9PkPEyZ-M2M"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;For more crazy dev videos follow me here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.twitter.com/timo_ernst"&gt;www.twitter.com/timo_ernst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.timo-ernst.net"&gt;www.timo-ernst.net&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.youtube.com/xvalmar"&gt;www.youtube.com/xvalmar&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ios</category>
      <category>iphone</category>
      <category>react</category>
      <category>node</category>
    </item>
    <item>
      <title>Choosing Between Angular, React, Vue and Svelte – 4 Tips!</title>
      <dc:creator>Timo Ernst</dc:creator>
      <pubDate>Sun, 11 Oct 2020 16:00:00 +0000</pubDate>
      <link>https://forem.com/timo_ernst/choosing-between-angular-react-vue-and-svelte-4-tips-2m2l</link>
      <guid>https://forem.com/timo_ernst/choosing-between-angular-react-vue-and-svelte-4-tips-2m2l</guid>
      <description>&lt;p&gt;Choosing between modern web frameworks can be hard, especially if you’re not familiar with all of them. But don’t worry, I don’t either and you won’t have to as well. However, here are 4 tips on choosing the right tool for your next project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffv1xswxz8z42buhyh6i6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffv1xswxz8z42buhyh6i6.jpg" alt="Choosing the right framework can be hard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1 Choosing based on Project Requirements
&lt;/h2&gt;

&lt;p&gt;Look at the requirements of your project. Which technology framework fits the best? Is there already existing code written using a certain library? Then it wouldn’t make sense to choose a different one, right? Do you need server-side rendering and optimal SEO support? Choose something that supports it like NextJS or Nuxt. Need inline-styles for whatever reason? Go React. Need superfast rendering speed and code cleanliness? Try Svelte. Need an all-in one TypeScript solution without the need for 3rd party libs? Go Angular.&lt;/p&gt;

&lt;h2&gt;
  
  
  2 Team Skills
&lt;/h2&gt;

&lt;p&gt;Look at your team. If you have 5 Angular developers and 1 who knows React. Does it make sense to kick off using Vue? Leverage the skills and knowledge you already have except if you’re actively looking to expand your team’s knowledge. In this case I recommend to pick which ever framework you know the least about.&lt;/p&gt;

&lt;h2&gt;
  
  
  3 Personal Preference
&lt;/h2&gt;

&lt;p&gt;Don’t let your personal preference make the choice. Look, I’m a huge React/JSX fan but before I start a new project I ask myself: Objectively, is React the right choice here or should I use something else? Don’t pick a certain technology because that’s what you’ve been using for the past months and know the most about. Get out of your comfort zone!&lt;/p&gt;

&lt;h2&gt;
  
  
  4 Leaving the Comfort Zone
&lt;/h2&gt;

&lt;p&gt;Let’s say you discussed with your team which library to use and you decided on the one you like the least and don’t have much experience with. GREAT! See it as a challenge to expand your skillset and learn more about a piece of technology you’re not familiar with. It’ll grow your skillset and give you better chances on the job market in the future. Now get out there and do some coding!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/yoJC2K6rCzwNY2EngA/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/yoJC2K6rCzwNY2EngA/giphy.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For more dev tips you can follow me here on social media:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.timo-ernst.net/" rel="noopener noreferrer"&gt;My Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.twitter.com/timo_ernst" rel="noopener noreferrer"&gt;On Twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.timoernst.tv/" rel="noopener noreferrer"&gt;YouTube Channel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>angular</category>
      <category>react</category>
      <category>vue</category>
      <category>svelte</category>
    </item>
  </channel>
</rss>
