<?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>DEV Community: Yehezkiel Gunawan</title>
    <description>The latest articles on DEV Community by Yehezkiel Gunawan (@yehezkielgunawan).</description>
    <link>https://dev.to/yehezkielgunawan</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%2F521758%2F4f5cc57d-9b73-4406-8438-7d1f4beddf93.jpg</url>
      <title>DEV Community: Yehezkiel Gunawan</title>
      <link>https://dev.to/yehezkielgunawan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yehezkielgunawan"/>
    <language>en</language>
    <item>
      <title>Coffee Talk</title>
      <dc:creator>Yehezkiel Gunawan</dc:creator>
      <pubDate>Thu, 28 Jul 2022 10:11:00 +0000</pubDate>
      <link>https://dev.to/yehezkielgunawan/coffee-talk-429g</link>
      <guid>https://dev.to/yehezkielgunawan/coffee-talk-429g</guid>
      <description>&lt;h2&gt;
  
  
  Disclaimer
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;This article is made from my perspective and experience of making coffee talk sessions. Maybe not 100% valid but I hope this can enlarge your perspective about 1 on 1 sessions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;On the second week of July 2022, I made a free 1 on 1 session called “Ngupi”. It actually a slank word from “kopi” in Indonesian which means coffee. That time, I only created 3 slots for those who want to have an online coffee talk with me.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mtUcm-W8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/yehez/image/upload/v1658824884/Articles/Coffee%2520Talk/tweet_mvjcct.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mtUcm-W8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/yehez/image/upload/v1658824884/Articles/Coffee%2520Talk/tweet_mvjcct.png" alt="https://res.cloudinary.com/yehez/image/upload/v1658824884/Articles/Coffee%20Talk/tweet_mvjcct.png" width="611" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some of you may be wondering what is “coffee talk” actually? Actually, regarding the term itself, it’s like you’re going to a cafe with someone and talking about a topic while you’re enjoying the coffee at that place. But due to covid pandemic and restrictions, I made it online through G-Meet.&lt;/p&gt;

&lt;p&gt;By the way, thank you &lt;a href="https://twitter.com/dianyehezkiel_"&gt;Dian Yehezkiel&lt;/a&gt;, &lt;a href="https://twitter.com/fmgono"&gt;Fathan&lt;/a&gt;, and Bryan who attended my first 1 on 1 session. Actually, your knowledge and daily skill as a frontend engineer surpass mine🤣. As I’ve stated on Twitter that I even need to learn from you guys 😁.&lt;/p&gt;

&lt;p&gt;Based on my conversation with those three, here are two important points that I got through it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Brilliant Ideas Can Be Produced from A Casual Talk
&lt;/h2&gt;

&lt;p&gt;In Indonesia, we are usually familiar with the term “nongkrong” which means hanging out with some friends. I’ve experienced how casual talk can even influence my life until now. That moment happened in early 2020 before covid restriction began when I was working on my bachelor thesis. &lt;/p&gt;

&lt;p&gt;At that time, my friends and I got stuck with our thesis progress. I still remember almost every day I hang out with them just to go to a minimarket and buy some snacks. Then we just sit on the roadside in front of the campus. Some of them are smokers so they usually smoke while snacking, but non-smokers like me and some of my friends, generally just sit and snack together. Even we often did it with our lecturer regularly😂.&lt;/p&gt;

&lt;p&gt;There was an interesting thing for me at that time. When we were stuck on our bachelor thesis project, we just share our progress and even ask for informal counseling sessions with our lecturer that usually join us in snacking. After around an hour and we back to the lab to work on our thesis, we got a new idea to solve the problem that exists in our thesis, and it works🤯.&lt;/p&gt;

&lt;p&gt;I can tell you guys, that this casual counseling session with our lecture advisor is more useful than the formal one🤣. Why? Because when we’re in a casual talk, we become more authentic and just tell what we’ve faced and asked for help. It’s very different in a formal counseling session, we generally awkward.&lt;/p&gt;

&lt;p&gt;Same as this casual 1 on 1 session. It’s not a mockup interview session. Just casual talk. We can talk about random things like career, study, or even technical things like front-end development. Sometimes, this coffee talk session will have brilliant ideas or insights through this spontaneous session.&lt;/p&gt;

&lt;h2&gt;
  
  
  It is Like Counseling Session
&lt;/h2&gt;

&lt;p&gt;This 1 on 1 session is not like mockup interview. Mockup interview’s purpose is to prepare the attendee on how to get ready for the interview session when finding a job. Usually if the attendee wants to prepare himself for a technical interview (for a programming-related job), the mockup interview session will contain live coding and technical questions. In other words, it has technical and specific purposes.&lt;/p&gt;

&lt;p&gt;I actually want to help other people who want to work as a front-end engineer through the mockup interview session. But, I think I can’t for now because I still need to learn and my work experience is less than 2 years🤣. So this is why I create a casual 1 on 1 session where everyone who joins this can discuss everything (mostly technical).&lt;/p&gt;

&lt;p&gt;Through &lt;a href="http://Cal.com"&gt;Cal.com&lt;/a&gt; the attendee must explain what topic they want to be discussed, so we can make sure that it is not losing its essence. For example, the topic is sharing both of our experiences in frontend engineering to gain new insights. So during the session, we discuss our experience, what issues may be faced, and how to tackle them like a counseling session.&lt;/p&gt;

&lt;p&gt;Note that this “counseling” is actually not only for the attendee, but it also works for me. I also can learn and find out something new from the attendee’s perspective and experience. In other words, this is like two ways counseling session. Both attendee and the event creator learn and discuss a topic together to gain new insights.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;So yeah, this is my experience and story about casual 1 on 1 sessions. Don’t get me wrong, who knows if this small thing can change a person’s life through casual discussion? I think if the experienced developers in Indonesia also make this similar open session, we can contribute to generating the new excellent software engineers generation for this nation.&lt;/p&gt;

&lt;p&gt;Hope this article gives you another perspective. Let me know if you have some feedback or similar experience, you can share it in the comment section below.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>career</category>
      <category>softskill</category>
    </item>
    <item>
      <title>Life Update: Pursuing Master’s Degree</title>
      <dc:creator>Yehezkiel Gunawan</dc:creator>
      <pubDate>Fri, 08 Jul 2022 10:10:06 +0000</pubDate>
      <link>https://dev.to/yehezkielgunawan/life-update-pursuing-masters-degree-1hj8</link>
      <guid>https://dev.to/yehezkielgunawan/life-update-pursuing-masters-degree-1hj8</guid>
      <description>&lt;h2&gt;
  
  
  Disclaimer
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;This is pure my recent experience. All things in this article are purely my opinion. Maybe there are some of you who don’t relate to my story and maybe it cannot be 100% valid, but I hope this can help you to determine your future life path😁.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;The story started when I was about 2th semester college student in 2017. I still remember there’s a college subject named Computer &amp;amp; Society. On that subject, I learn a lot of theories about tech ethics and law in Indonesia. That subject is interesting because the lecturer is actually about an insurance company IT manager.&lt;/p&gt;

&lt;p&gt;One time, my friends and I have a casual talk with him after class and he shares why he wants to be a lecturer while working full-time as an IT manager. Here’s his answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I actually didn't want to be a lecturer at first. I just took a master's degree then I got a lifetime benefit, being a lecturer for undergraduate students. Don’t worry, I can still work on my full-time job as usual. But I also can be a lecturer on the weekend like this. When I teach you all, actually it’s a giving back from me.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;His statement made me consider continuing my graduate study after I graduated from the future that time. &lt;/p&gt;

&lt;p&gt;After I graduated in 2020, I worked at a software house at Gading Serpong. At that place, I know a senior from college who has to own a graduate degree. He was a backend engineer at that time. His name is ko &lt;a href="https://www.linkedin.com/in/vincentius-kurniawan-88759b146/"&gt;Vincentius Kurniawan&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;One day, I have a deep talk with him, asking him why he took a graduate study and become a lecturer too. He answered like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Having a master’s degree doesn’t make your dream smaller. Most people think that a person who has a master’s degree mostly just becomes a lecturer. But they forget, that being a lecturer is actually not a final dream. It’s a lifetime privilege, you can use it as a side hustle, for your hobby to teach, or just give back. You can still work on your full-time job while being a part-time or freelance lecturer.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I know he also teaches as a part-time lecturer at my former campus. In other words, he has a double job as a backend engineer on the weekdays and as a lecturer on the weekend.&lt;/p&gt;

&lt;p&gt;His statement made me more confident to take graduate study. And yeah, after working as a frontend engineer for around a year, I finally decided to pursue a master’s degree.&lt;/p&gt;

&lt;p&gt;Luckily, I got very supportive colleagues, a manager, and even my CTO who has signed a recommendation letter for me🤣. For your information, I still work as a frontend engineer as usual at my current workplace. I take a graduate study online program at &lt;a href="https://mmsi.binus.ac.id/"&gt;Binus&lt;/a&gt; (Information System), so I can learn outside of working hours online. And of course, remote working is also a benefit for me, so I don’t have to worry about commuting. The only things I need to worry about are electricity and internet connection🤣.&lt;/p&gt;

&lt;p&gt;So, here is the explanation of my reasons why I am finally pursuing a master’s degree in Information systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Degree vs Just Certificate
&lt;/h2&gt;

&lt;p&gt;There’s an old friend asking me why I should pursue the master’s degree while there’s a lot of Bootcamp and I can get a certificate from there too? Here’s my answer. &lt;/p&gt;

&lt;p&gt;A BootCamp usually last for about 3-6 months. At the end of the program, the participant can claim the certificate as a prove that he or she has completed all the courses and finished the final project. I can say this is a very good thing. You can use it to apply for a job and improve your first impression in front of recruiters.&lt;/p&gt;

&lt;p&gt;Now let’s compare this with the official master’s degree (and its certificate). Usually a master’s study take 1,5 - 2 years to be completed. I can get the master’s degree certificate after I finish the final thesis and publish it as a research paper. This also can prove that I’ve finished my master’s study and officially get a new degree behind my name🤣.&lt;/p&gt;

&lt;p&gt;Now, what’s the difference? Someone who has a master’s degree has more powerful benefits. After I get my master’s degree soon, I can have the authority to give a recommendation letter to another person who wants to pursue their graduate study. I also can be a lecturer if I want. And mostly someone who has completed his or her graduate study will get a promotion on their full-time job because there’s some rescaling on the salary and benefit at their workplace (depends on the workplace).&lt;/p&gt;

&lt;p&gt;Remember that,  people who pursue their graduate study doesn’t mean they just want to be a lecturer. That’s the wrong assumption. Being a lecturer is not a final dream, it’s a lifetime privilege to all those who has completed their graduate degree. I can be a part-time lecturer without leaving my full-time job as a front-end engineer. When I retired in the future, I can switch careers as a full-time lecturer if I want. It means I have an alternative income as a lecturer.&lt;/p&gt;

&lt;h2&gt;
  
  
  I Can Learn Beyond My Specialization
&lt;/h2&gt;

&lt;p&gt;At a Bootcamp, the participant usually just takes one subject that wants to be completed until the end of the program. For example, the participant takes Frontend Engineering BootCamp for 6 months. It means, in 6 months, he/she mainly or even only learns the frontend development. It means, the participant mainly just learns things that his or her preferences.&lt;/p&gt;

&lt;p&gt;I take an Information System major for my master's study. There are a lot of subjects that need to be completed for about 1,5 years. Even though I have a bachelor's degree in Informatics and work as a frontend engineer, I have to learn the subjects related to project management and software architecture which are beyond my current specialization. Got the point? I have to face subjects that maybe not be “my preferences”. But don’t get me wrong, things like this can enlarge my capacity to learn and break my mental block to understanding other fields.&lt;/p&gt;

&lt;p&gt;A friend of mine also asks me, “You have an informatics or computer science background. Why do you take an Information System major, not Informatics?”. My answer is simply because I have learned technical things for about 4 years of my undergraduate study. Then I worked as a frontend engineer for almost 2 years. Too many technical things that I’ve faced and experienced. I want to enlarge my skillset and prepare for my next career path, yeah being a tech lead😁.&lt;/p&gt;

&lt;p&gt;This is why I take an Information System major, so I can learn to be a product-minded software engineer. Who knows in 2-3 years I’ll be a frontend lead. It means I have to improve my communication and project management skills through this major.&lt;/p&gt;

&lt;h2&gt;
  
  
  Networking at University Feels Different
&lt;/h2&gt;

&lt;p&gt;Actually, networking can be gained everywhere. But I don’t know, networking through university colleagues feels different for me. At a BootCamp, someone can get new friends or new network who have the same interest in a field based on the chosen subject that he or she prefers for the Bootcamp. But in the university, I can know new people who have more diverse interests and backgrounds.&lt;/p&gt;

&lt;p&gt;For example, currently, I know several friends who have diverse backgrounds like Project Managers, SAP Consultants, IT Consultants, etc. When they’re asked about their thesis topic interest, some of them are interested in the security field, some in project management, and anything else. In this kind of diversity, I feel I can learn a lot from this kind of environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;So yeah, those are my three main reasons why I finally pursue a master's degree in Information systems. There are a lot of things that I want to tell here, but it seems hard to express them in the form of this short article. Should I talk about it on a Twitter Space or Podcast? Please invite me as a speaker if you don’t mind🤣. &lt;/p&gt;

&lt;p&gt;If you have something to be discussed here, you can comment in the comment section below.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>life</category>
    </item>
    <item>
      <title>How To Publish ESLint Rules as NPM Package</title>
      <dc:creator>Yehezkiel Gunawan</dc:creator>
      <pubDate>Wed, 22 Jun 2022 10:17:13 +0000</pubDate>
      <link>https://dev.to/yehezkielgunawan/how-to-publish-eslint-rules-as-npm-package-12ce</link>
      <guid>https://dev.to/yehezkielgunawan/how-to-publish-eslint-rules-as-npm-package-12ce</guid>
      <description>&lt;h2&gt;
  
  
  Disclaimer
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;In this tutorial, I’ll focus on the specific use case for typescript code-based. You don’t have to imitate this tutorial 100%. You can adjust the specific parts based on your needs&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Lately, I’ve been too lazy if I have to rewrite the exact same ESLint rules for my personal projects. Look at this. You maybe noticed this in my previous blog titled, &lt;a href="https://yehezgun.com/articles/standardize-your-nextjs-project"&gt;Standardize Your Next.js Project&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"node"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"extends"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"next/core-web-vitals"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"eslint:recommended"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"plugin:@typescript-eslint/recommended"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"parser"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@typescript-eslint/parser"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"plugins"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"import"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"unused-imports"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@typescript-eslint"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"settings"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"import/resolver"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"node"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"extensions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;".js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;".jsx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;".ts"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;".tsx"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"moduleDirectory"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"node_modules"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"src/"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"rules"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"no-unused-vars"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"off"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@typescript-eslint/no-unused-vars"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"off"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@typescript-eslint/explicit-module-boundary-types"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"off"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@typescript-eslint/no-non-null-assertion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"off"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@typescript-eslint/no-inferrable-types"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"off"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@next/next/no-img-element"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"off"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"unused-imports/no-unused-imports"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"unused-imports/no-unused-vars"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"warn"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"vars"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"all"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"varsIgnorePattern"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^_"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"after-used"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"argsIgnorePattern"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^_"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="nl"&gt;"no-eq-null"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"warn"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"import/order"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"warn"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"groups"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"builtin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"external"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"internal"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"parent"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"sibling"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"index"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"object"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"newlines-between"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"always"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"alphabetize"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"order"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"asc"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"caseInsensitive"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"complexity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"warn"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"no-console"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I knew an old friend who told me that he created his own ESLint rules as an npm package. You can see his &lt;a href="https://www.npmjs.com/package/eslint-config-sznm/v/0.1.14"&gt;here&lt;/a&gt;. Like before, I asked him why he put an effort to create this thing? Simply because when he creates a new project (especially a personal project), he just needs to extend the ESLint rules. No need to rewrite the whole ESLint rules from scratch.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;extends&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;sznm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So, his statement inspires me to create my own ESLint config library.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preparation
&lt;/h2&gt;

&lt;p&gt;First thing first, don’t forget to make an empty directory, then run &lt;code&gt;npm init&lt;/code&gt; or &lt;code&gt;yarn init&lt;/code&gt;. You can change &lt;code&gt;eslint-config-test&lt;/code&gt; with your preferred folder name. Remember that &lt;code&gt;eslint-config&lt;/code&gt; prefix must exist so it can be published at the NPM registry as the ESLint Config library.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;eslint-config-test
&lt;span class="nb"&gt;cd &lt;/span&gt;eslint-config-test
yarn init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will have &lt;code&gt;package.json&lt;/code&gt; file like this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"eslint-config-test"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"main"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"index.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"test"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"echo &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;Error: no test specified&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; &amp;amp;&amp;amp; exit 1"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"author"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"license"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ISC"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, install the dependencies that we’ll use to make our ESLint config. Remember, you don’t have to imitate this 100%. You may have some other preferred tools, that’s okay.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn add @typescript-eslint/eslint-plugin @typescript-eslint/parser eslint eslint-plugin-import eslint-plugin-sonarjs eslint-plugin-unused-imports
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Setup The ESLint Rules
&lt;/h2&gt;

&lt;p&gt;Now, you can start to write your own preferred ESLint rules. Start with creating &lt;code&gt;eslintrc.js&lt;/code&gt; file, then modify it. Here’s mine, you can use it as a reference.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;node&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;extends&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;eslint:recommended&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;plugin:@typescript-eslint/recommended&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;plugin:sonarjs/recommended&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;parser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@typescript-eslint/parser&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@typescript-eslint&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;import&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;unused-imports&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;settings&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;import/resolver&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;node&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.jsx&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.ts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.tsx&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="na"&gt;moduleDirectory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;node_modules&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;src/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;no-unused-vars&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;off&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;no-var&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;warn&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@typescript-eslint/no-unused-vars&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;off&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;unused-imports/no-unused-imports&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;error&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;unused-imports/no-unused-vars&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;warn&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;all&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;varsIgnorePattern&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;^_&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;after-used&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;argsIgnorePattern&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;^_&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@typescript-eslint/explicit-module-boundary-types&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;off&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@typescript-eslint/no-non-null-assertion&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;off&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@typescript-eslint/no-inferrable-types&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;off&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;import/order&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;warn&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;groups&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
          &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;builtin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;external&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;internal&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;parent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sibling&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;index&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;object&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;newlines-between&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;always&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;alphabetize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;order&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;asc&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;caseInsensitive&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;complexity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;warn&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;no-console&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;error&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After you finish this step, now you can import it at &lt;code&gt;index.js&lt;/code&gt; file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;eslintrc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./.eslintrc.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;eslintrc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Publish It To NPM Registry
&lt;/h2&gt;

&lt;p&gt;Yep, technically you can now publish your rules. You can run &lt;code&gt;npm publish&lt;/code&gt; or &lt;code&gt;yarn publish&lt;/code&gt;. Then follow the step in the terminal. You can also create an NPM registry account if you don’t have it before.&lt;/p&gt;

&lt;p&gt;Now how to use it? When you want to use it, you can easily extend it at your &lt;code&gt;eslintrc&lt;/code&gt; file in your project folder. Here’s mine, you can access it at &lt;a href="https://www.npmjs.com/package/eslint-config-yehezgun"&gt;eslint-config-yehezgun&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;This tutorial seems short, but it will have a long-term effect on you. You can now just need to adjust the ESLint config that has been published if you want to make some changes, then it will be implemented to all the projects that use the ESLint rules (you have to update the dependencies too).&lt;/p&gt;

&lt;p&gt;Thanks for reading, hope it helps.&lt;/p&gt;

&lt;p&gt;Reference:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.npmjs.com/package/eslint-config-sznm"&gt;eslint-config-sznm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Freecodecamp blog - &lt;a href="https://www.freecodecamp.org/news/creating-your-own-eslint-config-package/"&gt;How To Create Your Own ESLint Config Package&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Retrospective: After One Year Working as a Frontend Engineer</title>
      <dc:creator>Yehezkiel Gunawan</dc:creator>
      <pubDate>Fri, 27 May 2022 10:16:37 +0000</pubDate>
      <link>https://dev.to/yehezkielgunawan/retrospective-after-one-year-working-as-a-frontend-engineer-5fj8</link>
      <guid>https://dev.to/yehezkielgunawan/retrospective-after-one-year-working-as-a-frontend-engineer-5fj8</guid>
      <description>&lt;h2&gt;
  
  
  Disclaimer
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Again this is based on my experience. This story may not be 100% and relate to some people. At least this story can be your reference for your career life.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;The story began when I just graduated from college in June 2020. That was a challenging moment because the Covid-19 pandemic began to invade the whole world, including my country, Indonesia. Not only that, but my college friends also face the same issue. That was struggling to get a job. I even found several of my friends to work outside the IT (not linear with his degree) world to earn for living.&lt;/p&gt;

&lt;p&gt;After several weeks, one by one of my friends get their first job and that made me very anxious about my future. I've tried my best to apply to many companies but the covid-19 pandemic also causes so many hiring freezes. Thank God, in September 2020, with several of my college friends and even juniors, we got a job at a software house company at Gading Serpong. It is just a small company and the office is not too big, but at that time we only think to earn to live because of the pandemic situation no matter the salary or environment.&lt;/p&gt;

&lt;p&gt;At that time, I work as a frontend engineer but mainly used Ionic &amp;amp; Angular to develop a hybrid mobile app. That's &lt;a href="https://play.google.com/store/apps/details?id=com.kai.kaiticketing&amp;amp;hl=en_US"&gt;KAI Access&lt;/a&gt;. To be honest, I don't like this role. I actually prefer to work as a frontend engineer who focused on web development, but because of the situation at that time and I was still a fresh graduate, I still tried to be optimistic that this job may be the suitable one for me.&lt;/p&gt;

&lt;p&gt;I was wrong. In June 2021, I got burned out with my job. It even influences my physical body, so I have to take a rest and do WFH even though the company has implemented WFO. I had to work in a job that I don't like for about a year and finally, I realized at that time, that I should find another job.&lt;/p&gt;

&lt;p&gt;Luckily an old friend offer me a freelance project, so I joined him to make a warehouse system using React outside of working hours. That is the first time I learn React through a real case project. Since that, I started to like to craft something using React.&lt;/p&gt;

&lt;p&gt;In August 2021, I continued to learn React (and Next.js) by myself. The first thing I made using Next.js is my personal web, &lt;a href="https://yehezgun.com"&gt;yehezgun.com&lt;/a&gt;. It's just a mainstream project actually. But, since I published it on my Linkedin and caused some recruiters to approach me. This made me encouraged and keep posting my other mini-projects or articles about twice a month.&lt;/p&gt;

&lt;p&gt;Thank God, in November 2021 a recruiter from my current workplace approached me through Linkedin. I was offered a frontend engineer role, but this time for web development. I continue the recruitment process and finally, here I am now. So happy with my current role, because the environment is very supportive. My current manager also supports the employees if they have some activities outside primary work like joining the devs community or being a course instructor.&lt;/p&gt;

&lt;p&gt;For about a year (almost 2 years exactly😂), I learned so many things from getting my first full-time job, going through burnout, and getting a better job. Like a retrospective session, I'll share 4 primary points related to my previous story.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fundamental is Crucial
&lt;/h2&gt;

&lt;p&gt;I've written about this before in my previous article &lt;a href="https://yehezgun.com/articles/why-fundamental-matters"&gt;Why Fundamental Matters?&lt;/a&gt;. This made me realize that I should strengthen the fundamental things before going further.&lt;/p&gt;

&lt;p&gt;Back in the old days when I learn frontend development prematurely, I directly jump into tools and frameworks like React, Angular, and Vue without learning the Javascript basics first. I got my first job and it uses Angular (Ionic) as the main tech stack. Struggled enough when I have to handle some issues that cannot be resolved with any help from the third-party library, so I had to create the logic by myself.&lt;/p&gt;

&lt;p&gt;Another problem is when I joined my current workplace in January 2022. I have to relearn Javascript basics because I have to use React as my main tech stack. Not only that, I even have to understand the CSS basics because I work on a project that uses Tailwind CSS for styling purposes.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If only I have a solid understanding of the basics and fundamental things, it's not a big problem when I have to use tools or frameworks. I just need to adapt to the syntax and don't need to re-learn everything.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Focus on The Essential Things
&lt;/h2&gt;

&lt;p&gt;I don't know if it is just me or if someone else who also feels the same thing that the more experience we got in the real industry work, the more we realized that we need to choose wisely what tools or frameworks can solve the problem.&lt;/p&gt;

&lt;p&gt;For example, I've learned Angular for a long time since I was a college student until I worked in my first workplace at a software house. At first, I think that Angular is easy because with the CLI feature I can generate pages and components easily, and it's an imperative paradigm.&lt;/p&gt;

&lt;p&gt;Everything changes when I've worked for around 6 months and realized that the community support for Angular is quite rare and it's hard to find the related or relevant solution when doing some troubleshooting. So because of that, I even made some logic by myself from scratch😵. Not only that but when I was searching for a new job the common market required React as the main tech stack skill.&lt;/p&gt;

&lt;p&gt;I actually mentioned it in my previous article about &lt;a href="https://yehezgun.com/articles/frontend-fatigue"&gt;Frontend Fatigue&lt;/a&gt;. I should choose a framework that has proven, has huge community support and of course, it can help me to solve the problem that I want to solve.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Focus on problem-solving. Choose the right and suitable tools that can help us to solve the problem, not make it heavier😂.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What You Do Now Can Determine Your Future
&lt;/h2&gt;

&lt;p&gt;I still remember when I started a habit to publish the article routinely at the beginning of 2021. At first, I post articles in Indonesian (Bahasa) at &lt;a href="https://diskusi.tech/yehezkielgunawan"&gt;diskusi.tech&lt;/a&gt;. Not a hard topic, I just share my experience and how to handle the problem that I've faced.&lt;/p&gt;

&lt;p&gt;In the middle of 2021, I started to build my own personal website, &lt;a href="https://yehezgun.com"&gt;yehezgun. com&lt;/a&gt;. At that time, I started to expand my English writing skill and post some articles in English. Not only that, I also keep making and publishing some mini projects on my personal website.&lt;/p&gt;

&lt;p&gt;It took about six months until I was finally approached by some recruiters and finally I can get my current job because of that habit. I've mentioned it in my previous article about &lt;a href="https://yehezgun.com/articles/how-to-get-hired-without-applying"&gt;How To Get Hired Without Applying&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Not only my personal portfolio, but I also joined as a volunteer (cloud advisor) at Bangkit Academy. That's beyond my expertise and experience actually, because I didn't have any cloud computing background but I have to guide my students to learn about cloud engineering🤯. But don't get me wrong, with this experience I learn twice. I learn for myself, then I learn to deliver the material to my student so they can understand what they learn. This affects my career so much and helps me to understand the cloud-related things in my current job even though I'm just a frontend engineer.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Remember that the current version of yourself is built and developed by your previous version of yourself too.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Environment Matters
&lt;/h2&gt;

&lt;p&gt;At first, I think working at a software house can be fun because I can learn so many things through the projects that exist, but I was wrong. The project that I handled is based on the client's request and most of them "cannot be interrupted or adjusted". If the client says A, I have to deliver it as A, not B.&lt;/p&gt;

&lt;p&gt;The other problem is there's no proper code pattern. A lot of projects but each of them has its own code style and doesn't have a standardized code. When I have to deal with a project that I don't usually work on, I need a longer time just to understand the flow and how the code works.&lt;/p&gt;

&lt;p&gt;This made me realize, that I should work at an in-house company that has a dedicated product that usually has a standardized and proper development pattern. Finally, in November 2021, I resigned from my previous workplace and join my current workplace in January 2022.&lt;/p&gt;

&lt;p&gt;Working on a dedicated product is like you're adding a new puzzle piece to the existing puzzle board. Of course, because of that, the codes that are produced must be standardized and have the proper pattern so the quality of the product still can be maintained. But in my case, I got a project that has to rewrite the whole landing page from Vue to Next.js😁, but because of it, I can learn while working on it, especially about Next.js which is my current favorite go-to framework.&lt;/p&gt;

&lt;p&gt;The most interesting part is finally I have the seniors that can be my career mentor. This is the first time I can have a real mentor in my life. When I was stuck on my task, I can ask them for help with what approach I can use to solve the problem. Even though we work remotely, we can still communicate properly through G Meet or Slack Chat. For me, this is the best work culture that can help me to grow.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Culture fit is real. It helps a person to grow and become better from time to time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;So yeah, this is my story. Feels like a career retrospective right? I hope this can give you a new insight from the (not really😂) experienced frontend engineer perspective.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
      <category>mentalhealth</category>
    </item>
    <item>
      <title>Why Fundamental Matters?</title>
      <dc:creator>Yehezkiel Gunawan</dc:creator>
      <pubDate>Mon, 28 Mar 2022 10:28:03 +0000</pubDate>
      <link>https://dev.to/yehezkielgunawan/why-fundamental-matters-2g2a</link>
      <guid>https://dev.to/yehezkielgunawan/why-fundamental-matters-2g2a</guid>
      <description>&lt;h2&gt;
  
  
  Disclaimer
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Like previous articles, this is just based on my experiences and some of my friend's stories. Maybe you have a different story, but at least this story can be a reference for you.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;The story began when I was graduated in June 2020 and struggled a lot on finding a job. I skipped the fundamental one and learn the frontend frameworks like React, Vue, and Angular. It is kinda hard to pass the user interview session which uses the live coding interview method, because they usually ask the basic question and solve it fast without using any framework or tool, just with plain Javascript at that time.&lt;/p&gt;

&lt;p&gt;But it doesn’t bother me too much because I got my first job as a frontend engineer at my previous workplace (a software house company) in September 2020. At that time I use &lt;a href="https://ionicframework.com/"&gt;Ionic&lt;/a&gt; and Angular as the main tech stack. I rarely code custom CSS for about a year, because the built-in UI from Ionic is so fascinating and it’s more than enough to deliver the required app to the client.&lt;/p&gt;

&lt;p&gt;The new problem appears when I didn’t want to extend my contract there because I want to search for another opportunity to grow. Then I experienced the same problem as what I’ve done in 2020. Mostly I failed on user interview sessions that implement the live coding test.&lt;/p&gt;

&lt;p&gt;After struggling a lot, by the grace of God, finally, I can get my current job in December 2021 (onboard on January 2022). Luckily the entrance test is a take-home test so I can maximize my ability. The user interview session did well and I’ve decided to choose this place as my next career journey.&lt;/p&gt;

&lt;p&gt;Then another problem appears. For the first three months, I’ve been given some tasks related to styling things. I have no problem when coding the code for integration purposes like fetching data or data manipulation. But styling-related task actually is my greatest weakness.&lt;/p&gt;

&lt;p&gt;Like I’ve told you in my previous article titled “&lt;a href="https://yehezgun.com/articles/remake-using-tailwind-css"&gt;I Remake My Personal Site using Tailwind CSS&lt;/a&gt;”, I was too dependent on tools, library, or framework. In this case, I was too dependent on styling tools like Chakra UI. I can make the styling using Chakra UI, but when I have to deal with another tool that is not my preference, I struggled much.&lt;/p&gt;

&lt;p&gt;That time, I even struggled to make a simple layout for several hours using custom CSS and Tailwind CSS, LOL. This is why I realized, the fundamentals should be not skipped before you jump into tools like Chakra UI, Bootstrap, or other tools.&lt;/p&gt;

&lt;p&gt;After about 3 months of struggling with the basic things, here is my reason why you should start or even restart with the fundamentals before going further.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Fundamental Matters?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Imagine Struggling At A Job Which Not Use Your Preferred Framework
&lt;/h3&gt;

&lt;p&gt;This is what has happened to me actually😆. So in short, I skipped the fundamental of Javascript and CSS and directly jump into React, Next.js, and Chakra UI. &lt;/p&gt;

&lt;p&gt;When I got my first job as a frontend engineer, I got a project which use Ionic and Angular as the main tech stack. For the first three months, I struggled with Ionic and Angular syntax. But luckily I didn’t struggle much when doing some styling because Ionic has provided a nice base UI, so I usually just do some minor styling like changing color or just the font family.&lt;/p&gt;

&lt;p&gt;About one year later, I quit that job and found a new opportunity. While finding a job again, I back to my old bad habit, directly learning React and Chakra UI without learning the fundamentals, and successfully created &lt;a href="https://yehezgun.com/"&gt;my own personal site&lt;/a&gt;. Shortly, I finally can get my current job as a frontend engineer at the new company.&lt;/p&gt;

&lt;p&gt;Luckily I code using React and Next.js in my current workplace so I didn’t struggle much for the logic things. But for styling purposes, I have to use Tailwind CSS. As a UI Component user who switches to utility class tool, that’s very “horror” for me, because I have to understand CSS basics when I made some styling.&lt;/p&gt;

&lt;p&gt;During the probation period, I struggled a lot with these styling-related things😫. I even need several hours just to make a simple layout for the website. Luckily, along with the time I also learn Tailwind CSS in my free time and can cope with it. You can read my article &lt;a href="https://yehezgun.com/articles/remake-using-tailwind-css"&gt;here&lt;/a&gt; which contains my experience when learning Tailwind CSS.&lt;/p&gt;

&lt;p&gt;Okay, do you realize something here? &lt;strong&gt;You can directly jump into the framework or library without learning the fundamentals. That’s not a big problem until you got a job which not use your preferred framework. You will struggle a lot to adapt to it because there’s no core concept or solid understanding of it.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Soon or Later You Cannot Rely on Tools Anymore
&lt;/h3&gt;

&lt;p&gt;When I’m still a frontend engineer at my previous company, I was too dependent on third-party tools almost for every single task like making a timer and even displaying the formatted date. I was ever given a task by my former manager to display the map on the mobile app. At that time the only thing that existed in my mind is I have to find a suitable third party that can be used for that case.&lt;/p&gt;

&lt;p&gt;Several days later, finally I found the &lt;a href="https://angular-maps.com/"&gt;Angular Google Maps&lt;/a&gt; library and luckily can solve the problem for a while. But the new problem appears when the client asks for some customization. That’s the first thing that has made me sick for several days just to customize the layout of the displayed map. It’s easy to initialize and integrate, but again third-party tools are usually hard to customize.&lt;/p&gt;

&lt;p&gt;The second case is when I got my current job. I discussed with the UI/UX team about the new website project that will be developed. The manager proposes the tools that can be used for the styling purpose. But in the end, we decided to use Tailwind CSS (a utility class styling framework), because &lt;strong&gt;we need a customizable tool&lt;/strong&gt; and &lt;strong&gt;if the tool cannot be customized, we have to make our own tool to solve the problem.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My manager also said the same thing in my probation review statement.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Strengthen your fundamental understanding of CSS. One day you can’t rely on tools anymore.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How To Cope or Deal With It?
&lt;/h2&gt;

&lt;p&gt;How to deal with it? What if I’m already like you, skipped the fundamentals, and rely on tools?&lt;/p&gt;

&lt;p&gt;Don’t worry there’s still hope here, LOL. I even still struggle with this thing. But here are some tips from me. I even still doing these even I’m a full-time employee now and it’s very helpful for me.&lt;/p&gt;

&lt;h3&gt;
  
  
  Re-learn Again From Scratch
&lt;/h3&gt;

&lt;p&gt;If you have free time outside your main job, please spare time just to learn the basics again. You can learn from any sites like &lt;a href="https://www.freecodecamp.org/"&gt;Freecodecamp&lt;/a&gt; or &lt;a href="https://www.hackerrank.com/"&gt;Hackerrank&lt;/a&gt; to push yourself re-learn the basics through the coding challenges. If you’re a frontend engineer and want to sharpen your understanding of flexbox, you can try &lt;a href="https://flexboxfroggy.com/"&gt;Flexbox Froggy Game&lt;/a&gt;. It’s a free web-based game that can help you to learn about flexbox through its gameplay.&lt;/p&gt;

&lt;p&gt;In my case, it’s hard to find a suitable time for learning again from scratch because I’ve struggled in finding a job and need it quickly (when I was a job seeker). And now, still hard to find it because I’m a full-time frontend engineer in my current workplace. But it doesn’t mean I can’t learn the basics.&lt;/p&gt;

&lt;p&gt;In my free time, I usually follow &lt;a href="https://twitter.com/KevinJPowell"&gt;Kevin Powel&lt;/a&gt; on Twitter and watch some of his videos on Youtube to sharpen my concept and understanding of basic CSS. If finding suitable free time to learn is hard for you, at least push yourself to learn the basic concept by reading the official docs like &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS"&gt;MDN&lt;/a&gt; or watching some youtube videos that explain more about the basics.&lt;/p&gt;

&lt;h3&gt;
  
  
  Learn a Tools or Framework That Push You To Understand The Basics While Using It
&lt;/h3&gt;

&lt;p&gt;For me, this tip is very useful. When I have not much time to re-learn the basic, I choose a tool or framework that force me to understand the basics while using it. Like I’ve said before in my previous article &lt;a href="https://yehezgun.com/articles/remake-using-tailwind-css"&gt;here&lt;/a&gt;, I found it when I’m using Tailwind CSS.&lt;/p&gt;

&lt;p&gt;Even I’m not using the CSS syntaxes directly but I can learn and understand the basic CSS concepts through Tailwind syntaxes. To produce good and effective “styling” codes, I have to understand basic concepts like flex, grid, margin, padding, and other CSS concepts.&lt;/p&gt;

&lt;p&gt;This also works when I code in React. Even React is a Javascript library, but it contains Javascript syntax which made the developer must face and sharpen the basics first before going through.  I have even re-learn basic &lt;a href="https://dev.to/nsebhastian/javascript-basics-before-you-learn-react-38en"&gt;Javascript syntax&lt;/a&gt; so I can produce clean and effective code in React. &lt;/p&gt;

&lt;p&gt;Luckily, my current workplace also uses React and Tailwind CSS as the main tech stack so I can use my work time to work on the task and learn new things through it😁.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Learn the basics first before jumping into the framework or tools.&lt;/strong&gt; It will make your path smooth. You can easily solve any problems that you’ll face because you understand the concept, not only the tools that be used.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Soon or later you cannot rely on tools anymore. I’ve experienced it before when I was developing Map Feature for &lt;a href="https://play.google.com/store/apps/details?id=com.kai.kaiticketing&amp;amp;gl=US"&gt;KAI Access&lt;/a&gt; and it was very exhausting for me just to find the suitable tools that actually have deprecated.&lt;/p&gt;

&lt;p&gt;You’ll also struggle a lot to find a new job because nowadays most companies implement live code interviews or “agnostic” test cases for the programmer candidate. I even failed so many technical interviews before due to a lack of basic skills.&lt;/p&gt;

&lt;p&gt;But don’t worry, keep learning. Don’t fear missing out (FOMO). I know so many frameworks and tools out there. You can read my article about Frontend Fatigue for more details, hope it helps you to determine the suitable tools for you.&lt;/p&gt;

&lt;p&gt;But anyway again, &lt;strong&gt;learn the basics first!&lt;/strong&gt; I know this method will make you seem like a slow learner. &lt;strong&gt;It’s better to be a slow learner with solid understanding than you force yourself to learn everything and be burnout and exhausted.&lt;/strong&gt; Learning is a marathon, not a sprint.&lt;/p&gt;

&lt;p&gt;Thank you for reading my article, hope it helps. Let me know if there’s something that you want to discuss in the comment section below.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>career</category>
      <category>beginners</category>
    </item>
    <item>
      <title>I Remake My Personal Site using Tailwind CSS</title>
      <dc:creator>Yehezkiel Gunawan</dc:creator>
      <pubDate>Tue, 15 Mar 2022 10:41:02 +0000</pubDate>
      <link>https://dev.to/yehezkielgunawan/i-remake-my-personal-site-using-tailwind-css-dc8</link>
      <guid>https://dev.to/yehezkielgunawan/i-remake-my-personal-site-using-tailwind-css-dc8</guid>
      <description>&lt;h2&gt;
  
  
  Disclaimer
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;This post may seem opinionated. I just share why I finally move to Tailwind CSS as my main CSS utility tool.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;So, previously I used Chakra UI for my personal site &lt;a href="https://yehezgun.com" rel="noopener noreferrer"&gt;yehezgun.com&lt;/a&gt;. Everything changes when I got a new full-time job as a frontend engineer in my current company. I realized that I’m too dependent on the development tools like UI libraries and some npm registry packages.&lt;/p&gt;

&lt;p&gt;I was ever given a task to fix some layouts using native or vanilla CSS and it took about 2 hours for me just to give some styling for a static page. I realized I have to strengthen my fundamental skill again before going further.&lt;/p&gt;

&lt;p&gt;Then I found that &lt;a href="https://tailwindcss.com/" rel="noopener noreferrer"&gt;Tailwind CSS&lt;/a&gt; is interesting, so I started to create my own &lt;a href="https://nexttw-starter.yehezgun.com/" rel="noopener noreferrer"&gt;Next.js + TS + Tailwind CSS Starter Template&lt;/a&gt;. Thanks to &lt;a href="https://theodorusclarence.com/" rel="noopener noreferrer"&gt;Theodorus Clarence&lt;/a&gt;, his starter template helps me a lot to re-create this template on my own. I use his idea and components splitting concepts and modified them based on my current needs.&lt;/p&gt;

&lt;p&gt;I don’t say that Chakra UI is bad. Actually, it helps me a lot if I’m developing a site with a short deadline because it increases productivity. But for learning purposes, I prefer Tailwind CSS. Here are whys I finally use Tailwind CSS for my future personal projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  I Learn CSS Basics While Using Tailwind CSS
&lt;/h2&gt;

&lt;p&gt;Tailwind CSS is not UI Component, it is a utility-first framework for styling purposes. When we work with Bootstrap, Chakra UI, or other UI Component libraries, we just set for example class &lt;code&gt;btn&lt;/code&gt; if we want to make a button component or just set &lt;code&gt;&amp;lt;Button&amp;gt;&amp;lt;/Button&amp;gt;&lt;/code&gt; (usually in React UI Libraries).&lt;/p&gt;

&lt;p&gt;But in Tailwind CSS, I have to style the component from scratch as I did with plain CSS, but I can completely custom designs in the HTML class name. For me, it feels like writing the inline CSS styles but is a more elegant and much cleaner way.&lt;/p&gt;

&lt;p&gt;Code Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"bg-sky-600 py-1 px-2 rounded-md"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Save changes
&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If I want to add a hover effect, I just add &lt;code&gt;hover:bg-sky-700&lt;/code&gt; in the class name.&lt;/p&gt;

&lt;p&gt;Notice something?&lt;/p&gt;

&lt;p&gt;I realized that when I’m using Tailwind CSS, I also feel pushed to re-learn the CSS fundamentals again after a long time, LOL. This is interesting when I made a custom styling with Tailwind, I have to know which styling concept I have to use even I didn’t use the original CSS syntaxes.&lt;/p&gt;

&lt;p&gt;For example, when I want to create a layout like below. When I use the UI component like Chakra UI, I can easily use the Flex component and add some gaps and spacing using its props. But when I use Tailwind, I have to set my own flex, flex item, spacing. And of course, I have to custom the buttons below by myself using Tailwind.&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%2Fres.cloudinary.com%2Fyehez%2Fimage%2Fupload%2Fv1647335347%2FArticles%2FI%2520Remake%2520My%2520Personal%2520Site%2520using%2520Tailwind%2FYehez_Example_dljekw.png" 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%2Fres.cloudinary.com%2Fyehez%2Fimage%2Fupload%2Fv1647335347%2FArticles%2FI%2520Remake%2520My%2520Personal%2520Site%2520using%2520Tailwind%2FYehez_Example_dljekw.png" alt="https://res.cloudinary.com/yehez/image/upload/v1647335347/Articles/I%20Remake%20My%20Personal%20Site%20using%20Tailwind/Yehez_Example_dljekw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is very good for me. When I was finding a new job last year, I was interviewed by some users of the companies and they said the same thing, “You’re really good using these tools. But we need an employee who can write and understand the basics. In this case, that’s plain CSS because we still use it in our systems.”&lt;/p&gt;

&lt;p&gt;I’ve read &lt;a href="https://docs.thcl.dev/styling/css-scss" rel="noopener noreferrer"&gt;Theodorus Clarence’s docs site&lt;/a&gt;, he stated that you have to cover the fundamental of CSS before jumping into frameworks like Bootstrap, Chakra UI, or even Tailwind CSS. And this is very true. In my case, I was often rejected by the recruiter when I have to live code using plain CSS. That’s very embarrassing for me, LOL.&lt;/p&gt;

&lt;p&gt;As a full-time worker and has graduated almost two years ago from college, I need to find an effective learning method so I can adapt to the current situation and deliver it fast. Actually, I can learn CSS from scratch, but it takes a too long time and I need a job fast at that time when I was a job seeker.&lt;/p&gt;

&lt;p&gt;Until I found Tailwind CSS and yeah as I said before, I can learn the basic CSS through every Tailwind syntaxes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Very Customizable
&lt;/h2&gt;

&lt;p&gt;Because Tailwind CSS is a utility-first framework, you can fully customize every page or component in your website. You even can make your own design system if you want using Tailwind CSS.&lt;/p&gt;

&lt;p&gt;Have you seen &lt;a href="https://github.com/theodorusclarence/ts-nextjs-tailwind-starter" rel="noopener noreferrer"&gt;Theodorus Clarence’s Next.js + Tailwind CSS Starter Template&lt;/a&gt;? For me, it’s like a mini design system packed as a starter template. This inspired me to make a similar template of mine, so when I want to create a new project, I can generate it from the starter template and don’t have to worry about the base config or style and of course, I can be more focused on the development process.&lt;/p&gt;

&lt;p&gt;This thing made me realize that I have full control when styling the website using Tailwind CSS.&lt;/p&gt;

&lt;h2&gt;
  
  
  I Can Maximize The Use of HTML5 Tags
&lt;/h2&gt;

&lt;p&gt;This is very opinionated actually, LOL. But when using Tailwind, I can maximize the use and understanding of HTML5 tags.&lt;/p&gt;

&lt;p&gt;Like the first point explanation, when I use the base HTML5 tags, I actually learn about the structure of HTML5 and what’s the best practice that I can implement when creating the web structure.&lt;/p&gt;

&lt;p&gt;And like many people said, using proper HTML5 tags can also increase the SEO percentage. You can read the article &lt;a href="https://www.greengeeks.com/blog/html-tags-for-seo/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;If you found that learning the fundamentals takes a long time for you, learn and use a tool, library, or framework that forces you to understand the fundamentals through its features.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As full-time workers or job seekers who graduated from college, we have to find an effective learning method, because we’re racing against time, especially when we need a new job fast. Learning from scratch is sometimes too exhausting and we need more time for that.&lt;/p&gt;

&lt;p&gt;This is why we have to choose what tools, library, or framework wisely. Choose those that push you to understand the basics while you using them. In my case, Tailwind CSS is very helpful for me to understand the basic CSS syntaxes while I’m using it through its syntaxes.&lt;/p&gt;

&lt;p&gt;I hope you can also learn something from these articles, I’m still an amateur in this. Feel free to have some discussions, you can write it in the comment section below.&lt;/p&gt;

&lt;p&gt;References:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.thcl.dev/styling/css-scss" rel="noopener noreferrer"&gt;Theodorus Clarence’s Docs Site&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/theodorusclarence/ts-nextjs-tailwind-starter" rel="noopener noreferrer"&gt;Theodorus Clarence’s Next.js + Tailwind CSS Starter Template&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>tailwindcss</category>
      <category>webdev</category>
      <category>nextjs</category>
      <category>typescript</category>
    </item>
    <item>
      <title>How to Setup and Integrate Umami to Your Next.js Site</title>
      <dc:creator>Yehezkiel Gunawan</dc:creator>
      <pubDate>Sun, 20 Feb 2022 05:55:13 +0000</pubDate>
      <link>https://dev.to/yehezkielgunawan/how-to-setup-and-integrate-umami-to-your-nextjs-site-ahf</link>
      <guid>https://dev.to/yehezkielgunawan/how-to-setup-and-integrate-umami-to-your-nextjs-site-ahf</guid>
      <description>&lt;h2&gt;
  
  
  Disclaimer
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;In this article, I will focus on how to self-host and set up Umami, then integrate it into the Next.js-based project.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Often, when someone or organization wants to set up the web analytics tool, they usually use &lt;a href="https://analytics.withgoogle.com/" rel="noopener noreferrer"&gt;Google Analytics&lt;/a&gt;. But as some people know that we cannot collect real data because when there’s a person visit a website and he or she set an adblocker in their browser, the analytic tool cannot work properly. And of course, there’s also a privacy issue with this tool.&lt;/p&gt;

&lt;p&gt;Alright so are there any alternatives? Yes, I’ll recommend &lt;a href="https://umami.is/docs/about" rel="noopener noreferrer"&gt;Umami&lt;/a&gt;. Why? According to its official docs, Umami is open source and can be the privacy-focused alternative to Google Analytics.&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%2Fumami.is%2Fabout-screenshot.png" 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%2Fumami.is%2Fabout-screenshot.png" alt="Umami Web"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Okay, so let’s jump to the main point. How to set up and self-host Umami? In this article, I’ll explain how to set up Umami with Vercel and Supabase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preparing The Account
&lt;/h2&gt;

&lt;p&gt;First, of course, make sure you already have a &lt;a href="https://github.com/join" rel="noopener noreferrer"&gt;Github&lt;/a&gt; account. If you don’t have it yet, please make it first because it will be needed to deploy our self-host Umami. &lt;/p&gt;

&lt;p&gt;After you have a Github account, make sure you also registered at &lt;a href="https://vercel.com/signup" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt; and &lt;a href="https://supabase.com/" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup Supabase
&lt;/h2&gt;

&lt;p&gt;Now, you can log in to &lt;a href="https://supabase.com/" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt; and go to the main dashboard and click “New Project”. Use the organization and project’s name based on your preferences and needs.&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%2Fuploads%2Farticles%2Fl9nt4fhzvcwl8vi220o8.png" 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%2Fuploads%2Farticles%2Fl9nt4fhzvcwl8vi220o8.png" alt="New Project"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fill in the form fields based on your personal preferences. Also, select the closest region to your domicile in the region form field.&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%2Fuploads%2Farticles%2Fyaqc6mupm8jbg7j8vjcr.png" 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%2Fuploads%2Farticles%2Fyaqc6mupm8jbg7j8vjcr.png" alt="NewProjectForm"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After you click the “Create New Project” button, go to the SQL Editor section.&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%2Fuploads%2Farticles%2F0bz6iuw8dldov55dv1i2.png" 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%2Fuploads%2Farticles%2F0bz6iuw8dldov55dv1i2.png" alt="Supabase SQL Editor"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, you can copy the SQL Schema query from &lt;a href="https://github.com/mikecao/umami/blob/master/sql/schema.postgresql.sql" rel="noopener noreferrer"&gt;Umami’s Github Repository&lt;/a&gt;. After that, you can run the query.&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%2Fuploads%2Farticles%2Ftvpbz8ack0gpvd274v7y.png" 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%2Fuploads%2Farticles%2Ftvpbz8ack0gpvd274v7y.png" alt="Supabase Query"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploy on Vercel
&lt;/h2&gt;

&lt;p&gt;You can easily deploy Umami to Vercel just by open &lt;a href="https://umami.is/docs/running-on-vercel" rel="noopener noreferrer"&gt;Umami’s Docs (Running on Vercel section)&lt;/a&gt; and clicking the “Deploy” Button. Then, you can select Github and fill in the repository name and after that, you can just follow the default steps.&lt;/p&gt;

&lt;p&gt;If you have reached the step like the image below, head back for a while to Supabase.&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%2Fuploads%2Farticles%2F6f42lu9gpqrzufuaege9.png" 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%2Fuploads%2Farticles%2F6f42lu9gpqrzufuaege9.png" alt="Deploy Vercel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In Supabase, go to the Settings menu and then click the “Database” section. Go to the “Connection String” segment. Select “URI” and copy &amp;amp; paste it to DATABASE_URL on your Vercel settings. Don’t forget to change “YOUR_PASSWORD” into your own Supabase database password.&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%2Fuploads%2Farticles%2F218qfkelkvksn2we94pm.png" 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%2Fuploads%2Farticles%2F218qfkelkvksn2we94pm.png" alt="Connection String"&gt;&lt;/a&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6rquvx2g1wcr963a68m3.png" 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%2Fuploads%2Farticles%2F6rquvx2g1wcr963a68m3.png" alt="Configure Project Vercel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the HASH_SALT field, you can use &lt;a href="https://passwordsgenerator.net/" rel="noopener noreferrer"&gt;Password Generator&lt;/a&gt; to generate some random string and copy &amp;amp; paste it. After that, you can deploy it to Vercel.&lt;/p&gt;

&lt;p&gt;If you want to change the domain after the deploy process, you can go to the project settings and select the Domain menu, then click the “Edit” button.&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%2Fuploads%2Farticles%2F3qs3w6t786wqs90qmf7u.png" 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%2Fuploads%2Farticles%2F3qs3w6t786wqs90qmf7u.png" alt="Vercel Change Domain"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuring Your Umami
&lt;/h2&gt;

&lt;p&gt;Now you can open the deployed Umami on your browser. The default username is &lt;code&gt;admin&lt;/code&gt; and the password is &lt;code&gt;umami&lt;/code&gt;. You can change it later if you want. You can go to the Settings menu and go to the profile section to change your current password.&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%2Fuploads%2Farticles%2Fqh0mmgv1vez4d131i644.png" 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%2Fuploads%2Farticles%2Fqh0mmgv1vez4d131i644.png" alt="Umami Change Password"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding Umami to Your Website
&lt;/h2&gt;

&lt;p&gt;In the Settings menu, go to the Website section and click “Add Website” Button. You can add your website name and link there and enable the “Share URL” if you want.&lt;/p&gt;

&lt;p&gt;After the website is added, you can copy the “Tracking Code”. You can paste it into your project soon.&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%2Fuploads%2Farticles%2Fkk14xtn5wg1nld327z58.png" 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%2Fuploads%2Farticles%2Fkk14xtn5wg1nld327z58.png" alt="Add Umami to Your Site"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now for the final step, go to your web project folder. In my case, I use Next.js and I paste the code in the &lt;code&gt;_document.tsx&lt;/code&gt; file.&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%2Fuploads%2Farticles%2Fl6yyeu9g78ae0w3mbdk6.png" 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%2Fuploads%2Farticles%2Fl6yyeu9g78ae0w3mbdk6.png" alt="Next JS Integrate"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And yeah, congratulations! You just need to push the newest commit of your project and you can watch the statistics of your own site at Umami. The statistics will appear on your Umami dashboard within 24 hours.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;You can follow these same steps on your other projects. Hope it helps. Let me know if you have some feedback or something to discuss in the comment section.&lt;/p&gt;

&lt;p&gt;Reference: &lt;a href="https://dev.to/jakobbouchard/setting-up-umami-with-vercel-and-supabase-3a73"&gt;How to Setup Umami with Vercel and Supabase (by Jacob Bouchard)&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>nextjs</category>
      <category>javascript</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>This is How I Switch from Angular to React</title>
      <dc:creator>Yehezkiel Gunawan</dc:creator>
      <pubDate>Sat, 12 Feb 2022 06:44:47 +0000</pubDate>
      <link>https://dev.to/yehezkielgunawan/this-is-how-i-switch-from-angular-to-react-155g</link>
      <guid>https://dev.to/yehezkielgunawan/this-is-how-i-switch-from-angular-to-react-155g</guid>
      <description>&lt;h2&gt;
  
  
  Disclaimer
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Again, this is just based on my experience as a front-end engineer. You maybe have a different experience or context when you read this, but at least it can give you some reference for your career.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;The story began when I was working as a frontend engineer at my first workplace using Angular at that time. At first, I enjoyed Angular but it changed when I want to switch jobs in the mid of 2021. Most of the job vacancies required React as the main skillset. After that, I change my mind and take a maneuver from Angular to React as my main frontend tech stack.&lt;/p&gt;

&lt;p&gt;Not only that, when I did some troubleshooting or debugging I need more time to google some stuff if I code using Angular. It’s very different when I use React, I just enter some keywords and the search result will display more accurately based on my needs. This lasted for about almost one year until I finally realized it was time for me to change.&lt;/p&gt;

&lt;p&gt;Actually, most of the frontend frameworks still use Javascript (or Typescript) as the main programming language. The main difference is the approach implemented in each framework. This is what I did to overcome and I still do this until now. There are still many things that I don’t understand yet about React, but when I did this, it helps me and I can get a new job because of it. Hope it can help you.&lt;/p&gt;

&lt;h3&gt;
  
  
  Back to Fundamentals
&lt;/h3&gt;

&lt;p&gt;React, Angular, Vue, and Svelte are using Javascript (or Typescript) as the main programming language. The main difference is only the approach in each framework. &lt;strong&gt;So it will be easier to back to the basics first, learn Javascript fundamentals before switching to another framework.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;The framework can change over time, even in just months you maybe need to re-learn it again. If you skip the fundamentals, it will be hard to switch to another framework. Having a solid fundamental Javascript skill can make learning some frameworks easier and faster. You just need to adjust the related syntax according to the framework.&lt;/p&gt;

&lt;p&gt;In my case when switching to React, mostly I have to learn Javascript again because as I know React contains more Javascript syntax and logic. Very different when I use Angular, everything can be done with its CLI and default config. I have to make my own custom config while using React.&lt;/p&gt;

&lt;p&gt;A site like &lt;a href="http://freecodecamp.org"&gt;freecodecamp.org&lt;/a&gt; and &lt;a href="http://hackerrank.com"&gt;hackerrank.com&lt;/a&gt; is very helpful for me. I can re-learn Javascript syntax and features through it and train my problem-solving skill.&lt;/p&gt;

&lt;h3&gt;
  
  
  Learn The Framework Philosophy
&lt;/h3&gt;

&lt;p&gt;This is the most important part after you learn the basics. Before jumping into any frameworks, you have to discover its philosophy. Why? &lt;strong&gt;Because you have to know how it works, why the founder made the framework, and what problem this framework wants to solve.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Actually, I skipped this part about the first 3 months when I learn React, LOL. When I face some issues, it takes more time for me to discover what is the main problem of that issue because I didn’t know how it works. I often produced dirty code because I don’t know the best practice for this that time.&lt;/p&gt;

&lt;p&gt;Luckily, I follow &lt;a href="https://twitter.com/th_clarence"&gt;Theodorus Clarence&lt;/a&gt; on Twitter and he amazingly often tweet some basic things about React (and Next.js). I even just realized some basic things like state management and React DOM after about 6 months of learning and using React, LOL. Why didn’t start earlier, LOL. This is why you should follow useful accounts like him. It can give some new insight even through some simple tweets or tips and tricks.&lt;/p&gt;

&lt;p&gt;A friend of mine also gave me a Github repo that contains the explanation of React Philosophies. It can be accessed at &lt;a href="https://github.com/mithi/react-philosophies"&gt;React Philosophies&lt;/a&gt;. I still processing this, too many things to understand but now at least I can understand some best practices that I can implement by myself.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create Projects
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Remember that programming is about problem-solving&lt;/strong&gt;. You cannot learn programming just by watching tutorials on Youtube. You have to try it by yourself.&lt;/p&gt;

&lt;p&gt;You don’t need to create a complex project, just create a simple one and you can use it by yourself. For example, I created a &lt;a href="https://liff-de-mangan.vercel.app/"&gt;simple food app using React + Line Frontend Framework (LIFF) app&lt;/a&gt;. It just sends the food list that you’ve selected through LINE Browser. And through this, I can understand how the LIFF Framework works and can be used if I need it.&lt;/p&gt;

&lt;p&gt;There’s a term called “Tutorial Hell”. It usually happens you read or watch some tutorials and you feel that you have understood all the material, but there will be great confusion when you try it by yourself. I never experienced this, but I overcome it by directly creating a project using a framework that I want to learn.&lt;/p&gt;

&lt;p&gt;For example, instead of learning React, I’d rather create some projects using React and its supporting libraries.&lt;/p&gt;

&lt;h3&gt;
  
  
  Code Reviews
&lt;/h3&gt;

&lt;p&gt;When you finished your projects, don’t stop there. Review it by yourself or by your friends. &lt;strong&gt;Note that every programmer has their own blindspot so maybe there are some things that are missed when you create the project.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I remember when I worked on my first freelance project using React, I always ask my frontend friend to review my code before merging it at the GitLab Repository. At that time, the code that I made worked properly, but sometimes my friend found that there were some parts that can be improved or made more readable. &lt;/p&gt;

&lt;p&gt;Many may ask, how to produce better code? In my opinion, you have to regularly do some code review, either review it by yourself or ask your friend to review it. &lt;strong&gt;Experience never lies, you will know the right thing after you do or see the wrong ones.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;So yeah this is my story when I switched to React. I know maybe some of you have different contexts or testimonies, but I hope this can inspire and even help you if you want to switch to another framework. Let me know if there’s something that wants to be discussed.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>typescript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Standardize Your Next.js Project with ESLint and Husky</title>
      <dc:creator>Yehezkiel Gunawan</dc:creator>
      <pubDate>Sun, 30 Jan 2022 12:33:13 +0000</pubDate>
      <link>https://dev.to/yehezkielgunawan/standardized-your-nextjs-project-with-eslint-and-husky-8ia</link>
      <guid>https://dev.to/yehezkielgunawan/standardized-your-nextjs-project-with-eslint-and-husky-8ia</guid>
      <description>&lt;h2&gt;
  
  
  Disclaimer
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;In this article, I’ll focus on Next.js (using Typescript) based project. You can adapt it to your own needs based on your project source code and the problem that you’ve faced.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Based on my experience in the software development world, Javascript (and Typescript) is the “wildest” programming language. We can use any code styles or conventions by our own preference in every project if we use Javascript.&lt;/p&gt;

&lt;p&gt;When I work on a personal project, actually it’s not a big problem because I code for myself and only me who know the code, LOL. But imagine this, how if I have to work in a team with several people and each of them has their own code style? BOOOM, it will be chaos right?&lt;/p&gt;

&lt;p&gt;This is just a simple reason why we need a standardized convention in our project source code as software engineers. I think it’s a common problem that needs to be reminded so as a developer we have to keep our code structure clean as has been set.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why We Need Standardization In Our Project Source Code?
&lt;/h2&gt;

&lt;p&gt;Before we go too far, I think we have to start with “why” first. Why do we need the standardized convention in our code? Here’re the whys.&lt;/p&gt;

&lt;h3&gt;
  
  
  Every Team Member Has Their Own Code Style
&lt;/h3&gt;

&lt;p&gt;Like I’ve told in the Introduction section when I was making my personal projects, I code for myself so maybe I can use whatever code style I like. But everything changes when I have a full-time job and have to work in a team with several people. Every team member has their own code style and it may be confusing when I got a task and need to understand someone’s code that has a very different style.&lt;/p&gt;

&lt;p&gt;Not only me actually, when other teammates read my code, they were also confused with my code style, LOL. &lt;strong&gt;This is why we need to make an “agreement” so we can use a consistent code style in our code base.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  To Increase Maintainability and Readability
&lt;/h3&gt;

&lt;p&gt;I have been worked at a software house company that has a project-based work culture. Our task is finished when the requested app is delivered to the client.&lt;/p&gt;

&lt;p&gt;I was a newbie junior frontend engineer at that time and I code with barbaric style. In my mind, I just have to finish and deliver it to the client before the deadline. That was a dark moment in my career life, hahaha.&lt;/p&gt;

&lt;p&gt;The situation changes when I switch jobs to another company and now I’m working in an in-house company that has their own product that needs to be developed. The main focus is change now.&lt;/p&gt;

&lt;p&gt;In the previous company, my main focus is just to code and deliver. But in the current company, I also have to think about how to make my code is maintainable so it will be easier to be improved or updated when needed.&lt;/p&gt;

&lt;p&gt;The answer is quite simple, make and follow the code convention so the code style in the project code base is consistent even it was developed by different people. &lt;strong&gt;The consistent code style makes it readable, and if it’s readable, it will be easier to be maintained.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Not Only Code but Commit Message Also Need To Be Standardized
&lt;/h3&gt;

&lt;p&gt;When working with a team, it’s important to tell the informative message when pushing a commit to the Github (or Gitlab) repository. &lt;strong&gt;The best code style is useless if the commit message is bad.&lt;/strong&gt; Other team members don’t understand the changes that you’ve made, and it can cause confusion and chaos in the future.&lt;/p&gt;

&lt;p&gt;Thankfully, there’s &lt;a href="https://www.conventionalcommits.org/en/v1.0.0/" rel="noopener noreferrer"&gt;Conventional Commit&lt;/a&gt; that can help the developers to make a proper commit message before they push their code to the Git Repository. &lt;/p&gt;

&lt;h2&gt;
  
  
  How To Standardize The Project Source Code?
&lt;/h2&gt;

&lt;p&gt;I’ll tell you based on my experience as a front-end engineer. Luckily there are some tools that can help us to make the code convention. Here’s what I usually use.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://prettier.io/" rel="noopener noreferrer"&gt;Prettier&lt;/a&gt; (Code Formatter)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://eslint.org/" rel="noopener noreferrer"&gt;ESLint&lt;/a&gt; (Linter for JS-based project)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nextjs.org/docs/basic-features/eslint" rel="noopener noreferrer"&gt;Next Lint&lt;/a&gt; (built-in linter for Next.js)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/typicode/husky" rel="noopener noreferrer"&gt;Husky&lt;/a&gt; (automated linter trigger)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/okonet/lint-staged" rel="noopener noreferrer"&gt;Lint Staged&lt;/a&gt; (run linter before commit)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://commitlint.js.org/#/" rel="noopener noreferrer"&gt;Commit Lint&lt;/a&gt; (check the commit message before committing)&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;For giving an example purpose, I’ve prepared a simple Next.js (Typescript) project. You can use &lt;a href="https://github.com/yehezkielgunawan/next-tailwind-polos" rel="noopener noreferrer"&gt;https://github.com/yehezkielgunawan/next-tailwind-polos&lt;/a&gt; if you want to try to standardize the source code using those tools. You can clone it to your local device and don’t forget to install the dependencies using &lt;code&gt;yarn&lt;/code&gt; or &lt;code&gt;npm install&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here’s what we’ll do in the next section:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure &lt;a href="https://prettier.io/docs/en/install.html" rel="noopener noreferrer"&gt;Prettier&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Configure base &lt;a href="https://bobobox.atlassian.net/wiki/spaces/BD/pages/2520154113/Frontend+Recommended+Code+Style+Guide+React+Based#In-Next.js-Project-[TYPESCRIPT-Based]" rel="noopener noreferrer"&gt;ESLint&lt;/a&gt; rules&lt;/li&gt;
&lt;li&gt;Install &amp;amp; configure the base &lt;a href="https://typicode.github.io/husky/#/" rel="noopener noreferrer"&gt;husky&lt;/a&gt; setting (&lt;em&gt;Reference: Husky setting &lt;a href="https://github.com/yehezkielgunawan/yehezgun-new/tree/main/.husky" rel="noopener noreferrer"&gt;Yehez-Tailwind-Starter&lt;/a&gt;&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Install &amp;amp; configure &lt;a href="https://github.com/okonet/lint-staged" rel="noopener noreferrer"&gt;lint-staged&lt;/a&gt; and &lt;a href="https://commitlint.js.org/#/guides-local-setup" rel="noopener noreferrer"&gt;commitlint&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;In the steps below I’ll use yarn, actually, you can just adapt it by your preference if you use npm. You can see the official docs so you can match them by your need.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Prettier Configuration
&lt;/h3&gt;

&lt;p&gt;I assume that you’ve already cloned the example project source code, so I will focus on the tool's functionality.&lt;/p&gt;

&lt;p&gt;Make sure you’re open the project folder through VS Code or your terminal, then run &lt;code&gt;yarn add --dev --exact prettier&lt;/code&gt;. Then create a file named &lt;code&gt;.prettierrc.json&lt;/code&gt; in the root folder, or you can just run &lt;code&gt;echo {}&amp;gt; .prettierrc.json&lt;/code&gt; in your terminal.&lt;/p&gt;

&lt;p&gt;In the &lt;code&gt;.prettierrc.json&lt;/code&gt; file, you can fill the configuration like below or you can fill it by your needs (reference: &lt;a href="https://prettier.io/docs/en/options.html" rel="noopener noreferrer"&gt;Prettier Config Options&lt;/a&gt;).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"endOfLine"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"lf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"semi"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"singleQuote"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tabWidth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"trailingComma"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"es5"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, you can just run &lt;code&gt;yarn prettier --write [directory scope]&lt;/code&gt; to format your code. Or if you use VS Code, you can set &lt;strong&gt;Format on Save&lt;/strong&gt; in your VS Code Settings. You also can use the shortcut to manually format the file (using VS Code) by pressing &lt;code&gt;Shift + Option + F&lt;/code&gt; (in MacBook) or &lt;code&gt;Shift + CTRL + F&lt;/code&gt; (in Windows).&lt;/p&gt;

&lt;h3&gt;
  
  
  Configure The Base ESLint Rules
&lt;/h3&gt;

&lt;p&gt;Because we use Next.js we will use &lt;a href="https://nextjs.org/docs/basic-features/eslint" rel="noopener noreferrer"&gt;ESLint for Next.js&lt;/a&gt;. But luckily in the newest Next.js version, it has automatically installed when we initiate the project. So in this case, we just focus on the &lt;code&gt;eslintrc.json&lt;/code&gt; file wherein the root project.&lt;/p&gt;

&lt;p&gt;But make sure, the &lt;code&gt;lint&lt;/code&gt; command exists in the &lt;code&gt;package.json&lt;/code&gt; file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"dev"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"next dev"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"build"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"next build"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"next start"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"lint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"next lint"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here are my ESLint rules in &lt;code&gt;eslintrc.json&lt;/code&gt;. You don’t have to imitate this 100%, just match it by your own preference or current needs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"node"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"extends"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"next/core-web-vitals"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"eslint:recommended"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"plugin:@typescript-eslint/recommended"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"parser"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@typescript-eslint/parser"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"plugins"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"import"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"unused-imports"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@typescript-eslint"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"settings"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"import/resolver"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"node"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"extensions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;".js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;".jsx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;".ts"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;".tsx"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"moduleDirectory"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"node_modules"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"src/"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"rules"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"no-unused-vars"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"off"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@typescript-eslint/no-unused-vars"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"off"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@typescript-eslint/explicit-module-boundary-types"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"off"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@typescript-eslint/no-non-null-assertion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"off"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@typescript-eslint/no-inferrable-types"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"off"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@next/next/no-img-element"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"off"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"unused-imports/no-unused-imports"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"unused-imports/no-unused-vars"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"warn"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"vars"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"all"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"varsIgnorePattern"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^_"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"after-used"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"argsIgnorePattern"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^_"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="nl"&gt;"no-eq-null"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"warn"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"import/order"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"warn"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"groups"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"builtin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"external"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"internal"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"parent"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"sibling"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"index"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"object"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"newlines-between"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"always"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"alphabetize"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"order"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"asc"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"caseInsensitive"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"complexity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"warn"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"no-console"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this case, I use third-party ESLint plugins like &lt;a href="https://www.npmjs.com/package/eslint-plugin-import" rel="noopener noreferrer"&gt;import&lt;/a&gt;, &lt;a href="https://www.npmjs.com/package/eslint-plugin-unused-imports" rel="noopener noreferrer"&gt;unused-import&lt;/a&gt;, and &lt;a href="https://www.npmjs.com/package/@typescript-eslint/eslint-plugin" rel="noopener noreferrer"&gt;typescript-eslint&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;After the config process is finished, you can run &lt;code&gt;yarn lint&lt;/code&gt; to check if your code is already matched with the ESLint rules or not. You can also run &lt;code&gt;yarn lint --fix&lt;/code&gt; to automatically fix your code based on the rules that have been set. Remember that sometimes we need to manually edit the code, so don’t overly rely on the automated fixing code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configure Husky Base Setting
&lt;/h3&gt;

&lt;p&gt;Want some automation addition? I usually use &lt;a href="https://typicode.github.io/husky/#/" rel="noopener noreferrer"&gt;Husky&lt;/a&gt; to automate the checking process before committing or pushing to the Github Repository.&lt;/p&gt;

&lt;p&gt;Because we’re using yarn, we’ll install it by running &lt;code&gt;npx husky-init &amp;amp;&amp;amp; yarn&lt;/code&gt; in the terminal. It will automatically generate the &lt;code&gt;prepare&lt;/code&gt; command in &lt;code&gt;package.json&lt;/code&gt; and a base pre-commit config.&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%2Fuploads%2Farticles%2Fmow4oovc9qxz5omym7vt.gif" 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%2Fuploads%2Farticles%2Fmow4oovc9qxz5omym7vt.gif" alt="husky install"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After that, we’ll install the &lt;a href="https://github.com/okonet/lint-staged" rel="noopener noreferrer"&gt;Lint Staged&lt;/a&gt; to trigger and run lines on git staged files by executing &lt;code&gt;npx mrm@2 lint-staged&lt;/code&gt;. It will automatically generate the base command triggers in &lt;code&gt;pre-commit&lt;/code&gt; husky config file. After that, you can delete or modify the content by your own preference. After that, it will run the linter before the commit process. So you have to make sure that your code is matched with the linter rules.&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%2Fuploads%2Farticles%2Ftjua26xupptx6ldnzm8u.gif" 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%2Fuploads%2Farticles%2Ftjua26xupptx6ldnzm8u.gif" alt="Lint staged install"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Like I’ve mentioned before, not only code, we also need to standardize our commit message before pushing it to the Github repository. So we’ll set &lt;a href="https://commitlint.js.org/#/guides-local-setup" rel="noopener noreferrer"&gt;Commit Lint&lt;/a&gt; by executing &lt;code&gt;yarn add --dev @commitlint/config-conventional @commitlint/cli&lt;/code&gt; in the terminal.&lt;/p&gt;

&lt;p&gt;Don’t forget to set the commitlint config as our base commit config by running this command in the terminal.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"module.exports = { extends: ['@commitlint/config-conventional'] };"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; commitlint.config.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now integrate the commit lint into the husky config by executing &lt;code&gt;yarn husky add .husky/commit-msg 'yarn commitlint --edit $1'&lt;/code&gt; . It will generate a new husky config file named &lt;code&gt;commit-msg&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F582zmbmylmh0vtdomfrc.png" 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%2Fuploads%2Farticles%2F582zmbmylmh0vtdomfrc.png" alt="commit-msg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you cannot make any “barbaric” commit message anymore, LOL.&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%2Fuploads%2Farticles%2Fiydc23euxo6bbjaoxf3k.png" 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%2Fuploads%2Farticles%2Fiydc23euxo6bbjaoxf3k.png" alt="commitlint"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Want to add some additional config before pushing your code to Git Repository? For example, I run &lt;code&gt;npx husky add .husky/pre-push 'yarn lint'&lt;/code&gt; to generate the husky config that triggers the linter before pushing my code.&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%2Fuploads%2Farticles%2F2vwks591pfcxon0h0oui.gif" 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%2Fuploads%2Farticles%2F2vwks591pfcxon0h0oui.gif" alt="pre-push"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And YEAH!!! IT’S FINISHED. Note that, you don’t have to imitate my method 100%. You can match it with your needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;Actually this is not an absolute way. There are so many ways or even tools that also help us to standardize our source code. Hope it helps you guys. I’m sorry if still there’s some grammar error. I’m still learning how to write in English properly, hahaha. Let me know if you want to discuss something in the comment section.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>javascript</category>
      <category>typescript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How To Get Any Programming Project Ideas?</title>
      <dc:creator>Yehezkiel Gunawan</dc:creator>
      <pubDate>Tue, 11 Jan 2022 08:07:10 +0000</pubDate>
      <link>https://dev.to/yehezkielgunawan/how-to-get-any-programming-project-ideas-455n</link>
      <guid>https://dev.to/yehezkielgunawan/how-to-get-any-programming-project-ideas-455n</guid>
      <description>&lt;h2&gt;
  
  
  Disclaimer
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;This article may be opinionated because it is based on my personal experiences. But at least it can be your reference on your working for the portfolio as a programmer.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Several days after I published my article titled &lt;strong&gt;&lt;a href="https://yehezgun.com/articles/how-to-get-hired-without-applying"&gt;How To Get Hired Without Applying&lt;/a&gt;,&lt;/strong&gt; some of my friends asked me, &lt;code&gt;How you easily can get some ideas to create your project for your portfolio?&lt;/code&gt;.  This is the same question when I knew a friend who routinely develops his projects and publishes them.&lt;/p&gt;

&lt;p&gt;I knew exactly when we were just graduated in 2020 before getting a full-time job, he routinely publish his projects through Linkedin, Twitter, and his site. You can see some of his projects at &lt;a href="https://sznm.dev/projects"&gt;https://sznm.dev/projects&lt;/a&gt;ss. That time, I asked him the same question as the question in the previous paragraph.&lt;/p&gt;

&lt;p&gt;In general, these are what I got from his answer. This answer makes me realize that it’s not too hard to generate some ideas in your head.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start From What Problem You’ve Faced
&lt;/h2&gt;

&lt;p&gt;Remember, &lt;strong&gt;the “How” will not exist without “Why”.&lt;/strong&gt; When you want to create a solution, there must be a problem to be solved. This is the most crucial thing that I’ve tried when I wanted to switch jobs to another company last year.&lt;/p&gt;

&lt;p&gt;When I switch to React from Angular, I have to create something using React to strengthen my fundamental skill. That time I felt exhausted when I have to initiate a project from scratch, especially when I have to face the “config things” like husky, ESLint, and Prettier config.&lt;/p&gt;

&lt;p&gt;Like I said in my previous article titled &lt;strong&gt;&lt;a href="https://yehezgun.com/articles/why-making-a-starter-template-matters"&gt;Why Making A Starter Template Matters?&lt;/a&gt;&lt;/strong&gt; then I made a starter template using Next.js, Chakra UI, and Typescript. It may be confusing and exhausting in the first place, but when I want to create some projects in the future I just use the starter template that I’ve made before without getting burnout due to “config things”.&lt;/p&gt;

&lt;p&gt;Another example, when I post a microblog on Linkedin, I felt I need a link shortener. I think it’s better if I have my own link shortener so I can customize it with my own preferences. Then I made it at &lt;a href="https://link.yehezgun.com/"&gt;https://link.yehezgun.com/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Got the point? &lt;strong&gt;You can find out the problem that you’re facing&lt;/strong&gt;, then make a plan to solve it. After that, implement what you’ve planned.&lt;/p&gt;

&lt;h2&gt;
  
  
  You Don’t Need to Create Something from Scratch
&lt;/h2&gt;

&lt;p&gt;Thanks to technology, we now can search for information that we wanted through the internet.  I remember a time when I watched an online talk between Pak Sandhika Galih (Web Programming UnPas) and Mathdroid. The talk is titled &lt;strong&gt;&lt;a href="https://www.youtube.com/watch?v=LKATs6MDeCw"&gt;Tips Belajar Programming, Indie Hacker &amp;amp; Reverse Engineering&lt;/a&gt;.&lt;/strong&gt; You can watch it on Youtube (the talk is in Bahasa Indonesia).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In this modern world, when you want to create a project, especially a coding project, you can easily google for it, search the references that you need, then implement it into your project. You can even imitate someone's project, manipulate it then remake it by your preferences. &lt;strong&gt;~Mathdroid&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That statement was so inspiring for me. For your information, I actually have tried this method and because of it, I can get a new job.&lt;/p&gt;

&lt;p&gt;It will be exhausting when you create a coding project from scratch. But remember that they're so many tools or libraries out there that can be used for your project. &lt;strong&gt;For learning purpose, it will be better to create something from scratch to understand how it works in general, but in long term,&lt;/strong&gt; &lt;strong&gt;you will need tools that help and boosts your productivity due to deadlines or something else prior.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But don’t be wrong about this. &lt;strong&gt;The latest tools don’t mean the best. Find suitable tools for your problems!&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  You Even Can Remake A Project That Already Existing
&lt;/h2&gt;

&lt;p&gt;Can’t create something original? You can remake an app or project from what’s already existing. For your information, when I made my own &lt;a href="https://github.com/yehezkielgunawan/yehez-nextchakra-starter"&gt;Next.js + Chakra UI + TS Starter Template&lt;/a&gt;, I actually just imitate the idea from my friend, you can see his project at &lt;a href="https://github.com/sozonome/nextarter-chakra"&gt;https://github.com/sozonome/nextarter-chakra&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Imitate doesn’t mean I remake it with 100% similarities. I took the layout reference and what tools can be useful for me, then I remake it based on my needs. Don’t worry, by remaking it actually you also learn how to make it step by step. &lt;strong&gt;When you already know what to do, it will be easier for you to do the next step.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Analyze, imitate, then modify.&lt;/strong&gt; This is the very simple thing that enables a country in Asia which currently is one of the most developed countries. Yeah, you must know what I mean.&lt;/p&gt;

&lt;p&gt;Another example is when I made my &lt;a href="https://link.yehezgun.com/"&gt;Yehez-Shortin&lt;/a&gt; (link shortener). It actually a common idea. Most newbie web developers even made this when they just learned a new programming language. But I modified the layout and the feature based on my preferences, like dark mode and custom URL alias.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;In this modern era, you can easily find the idea. You just need an internet connection then google it by yourself. Even actually you can find an idea around you.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sometimes you tried hard to generate or find some ideas to create a coding project. Remember that, coding actually is problem-solving. So start to define or find a problem that you want to solve, then go ahead to solve it.&lt;/p&gt;

&lt;p&gt;Thanks for reading, hope it can trigger you to develop your project, LOL. I’m sorry if there are still many grammar errors due I’m learning to write in English properly.&lt;/p&gt;

&lt;p&gt;Reference: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bangkit Academy Class 6: Idea Generation &amp;amp; MVP Planning&lt;/li&gt;
&lt;li&gt;Agustinus Nathaniel’s Portfolio (&lt;a href="https://sznm.dev/"&gt;https://sznm.dev/&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>portfolio</category>
      <category>codenewbie</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>My 2021 Recap</title>
      <dc:creator>Yehezkiel Gunawan</dc:creator>
      <pubDate>Mon, 27 Dec 2021 09:09:57 +0000</pubDate>
      <link>https://dev.to/yehezkielgunawan/my-2021-recap-kk8</link>
      <guid>https://dev.to/yehezkielgunawan/my-2021-recap-kk8</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Well, without realizing it we are already at the end of 2021. Is it just me or not, this pandemic era makes time goes faster? I remember the last time we can meet each other by a person is about March 2020, and we're almost done everything online for nearly 2 years LOL.&lt;/p&gt;

&lt;p&gt;I hope you're all good until today. Like most people do at the end of the year, I'd like to write some of my yearly recap and hope for the next year as a newbie frontend developer. Feels opinionated, but I think this can give you some new insight for planning what to do for the next year. For me, writing this can also be a self-reminder for myself when I read it again.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I've Learned Throughout The Year
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Struggling to Overcome Burnout of Fulltime Job Workload
&lt;/h3&gt;

&lt;p&gt;We all know the Covid-19 pandemic has caused a lot of companies to enable Work From Home (WFH) regulation, except my previous company at that time LOL. From February 2021 until I resigned, still had to Work From Office (WFO) 100% every day even it's a software house company and very possible to do everything remotely.&lt;/p&gt;

&lt;p&gt;I started to feel that I'm not enjoying my job at my previous company due to the toxic environment. I even did not learn anything except about mitigation and survival, LOL. For about one year I work spontaneously rather than making planning like a sprint planning routine like common tech companies did. When there're requests from the client, then my senior and I just work on it based on the requests.&lt;/p&gt;

&lt;p&gt;The manager didn't give support at all. They just give ideas (actually add the workload for the devs) without explicit and concrete examples. So I have to think harder about the implementation. When the app is successfully developed, the developer never received any appreciation, only the managers.&lt;/p&gt;

&lt;p&gt;In August 2021, I got burned out and didn't have the energy to work anymore because of the workload and the workflow. It lasts for several weeks. Luckily it was not a busy moment because there's a lack of client requests at that time. Actually, I still love coding, but not for the company's tasks.&lt;/p&gt;

&lt;p&gt;I even spoke directly to him, and luckily the manager did not deny the facts that I've spoken. But the general environment and situation make the changes very impossible to be implemented. So I can say, there're no changes until I resigned from that place.&lt;/p&gt;

&lt;p&gt;I learned that &lt;strong&gt;work culture and environment are very crucial&lt;/strong&gt;. After I survived in this company for about one year and three months, I decided to not extend the work contract and luckily I got a new job for the next year.&lt;/p&gt;

&lt;h3&gt;
  
  
  My Favourite Learning Path
&lt;/h3&gt;

&lt;p&gt;In August 2021, after I healed from my burnout, I work on a freelance project with 2 of my former college friends. We made a web app using React (frontend) and Node.js (backend). I fell in love with React because of this.&lt;/p&gt;

&lt;p&gt;I struggled a lot on the first week because I used Angular before then I have to switch to React in a short time. But, when I understand the code pattern and the basic things of React I finally finished all of my tasks for the project. Thanks to &lt;a href="https://sznm.dev/"&gt;Agustinus Nathaniel&lt;/a&gt; for guiding and helping me to understand React properly.&lt;/p&gt;

&lt;p&gt;After that, I invested my money to buy a domain for myself and challenged myself to build my own portfolio site using Next.js. Finally, I can finish it within a month. Not only that, I still developed some personal projects using React &amp;amp; Next.js to sharpen my understanding of React things.&lt;/p&gt;

&lt;h3&gt;
  
  
  Finally I Got a New Job
&lt;/h3&gt;

&lt;p&gt;I remember the moment I decided to prepare for my resignation in September 2021. After I finished developing my personal site, I challenged myself to make several personal projects and published them on Linkedin. Sometimes I wrote some articles and published them on Linkedin once a week.&lt;/p&gt;

&lt;p&gt;My life changed since that time. I got several direct messages which contain a job offer as a frontend engineer (React-based). I also got a lot of phone calls from the talent hunter who offered me a job for their client company.&lt;/p&gt;

&lt;p&gt;Now, I'm very selective in finding a job because of my past job experience. I don't want to get into the same toxic place. So when I got a phone call from the talent hunter or recruiter, I &lt;strong&gt;did some research by myself to find out the information details about the company&lt;/strong&gt;, including the company reviews at &lt;a href="https://www.glassdoor.com/"&gt;Glassdoor&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I can identify the red flags regarding that company just by looking at the former employee reviews. Not only reviews, if the company does not have a professional profile like Linkedin Page, actually it can be a red flag too. &lt;/p&gt;

&lt;p&gt;Besides that, if I know that I have some friends who work there, I usually contact them and ask them about the work culture and situation there. Actually, I have got an offer letter from a Financial Technology (FinTech) company where some of my friends work there with a high salary. But without asking for more details, I canceled the offer because my friend often overwork and still have to work remotely from home on the weekend (hustle culture). I know the salary is interesting, but hustle culture is not for me and can lead me to burnout again.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What you see is what you get. If you know you've been warned through the red flag that you got from the previous reviews or the information that got from friends, the reality won't be far from that.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Luckily, in November 2021, a recruiter from another hospitality company reach me through Linkedin. Then I followed the recruitment process and finished the take-home project. The pleasant moment is when during the user interview session with the squad leader. The user was not judgemental. He was even amazed at my take-home project result when he reviewed it. We spent time for the interview for about one hour, talking about my previous projects and experiences. It was so fun.&lt;/p&gt;

&lt;p&gt;Several days later, I do the final interview with the manager. He is the first supportive manager that I've ever met. He cares about the employees' mental health and workload. He even explained and tell the truth of the company's current situation to me during the interview. We talk about many things during the interview for about more than one hour, LOL.&lt;/p&gt;

&lt;p&gt;Finally, after the salary negotiation and the last interview, I received the offer letter. The recruiter was very helpful. She even reminds me of when there are some mistakes in my submitted personal data.&lt;/p&gt;

&lt;p&gt;For your information, I live in Bogor, Indonesia, and the company is at Bandung. It's pretty far from my home city, but luckily I got the option to work remotely even after the pandemic ends, yeah!!!&lt;/p&gt;

&lt;p&gt;I'll start to work again in January 2022. Wish me luck and I hope this is the better job for me to grow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Projects I've Worked on in 2021
&lt;/h2&gt;

&lt;h3&gt;
  
  
  yehezgun.com
&lt;/h3&gt;

&lt;p&gt;As I mentioned before, this is the first personal project that I've done in 2021 using React &amp;amp; Next.js. You can access and take a look at &lt;a href="https://yehezgun.com"&gt;yehezgun.com&lt;/a&gt;. I don't like to make complex designs. I'd rather make the simple one so I can understand it by myself when I want to make some improvements, LOL.&lt;/p&gt;

&lt;h3&gt;
  
  
  Personalized Starter Template
&lt;/h3&gt;

&lt;p&gt;So far there are two starter templates that I've made.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://yehez-nextchakra-starter.yehezgun.com"&gt;yehez-nextchakra-starter.yehezgun.com&lt;/a&gt; -&amp;gt; Next.js (Typescript) + Chakra UI starter template&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://yehez-vitechakra-starter.yehezgun.com/"&gt;yehez-vitechakra-starter.yehezgun.com&lt;/a&gt; -&amp;gt; React (using  Typescript and Vite as builder) + Chakra UI starter template&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can read my previous article about the benefits of making your own starter template &lt;a href="https://yehezgun.com/articles/why-making-a-starter-template-matters"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Personal Link Shortener
&lt;/h3&gt;

&lt;p&gt;When I wrote an article, sometimes I refer to some links as references. So I thought it will be great if I can have my own link shortener, so I don't need to use and repeatedly search for a link shortener. You can access and even use it at &lt;a href="https://link.yehezgun.com/"&gt;link.yehezgun.com&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Personal Live Markdown Editor
&lt;/h3&gt;

&lt;p&gt;The reason I made this is because I need a live markdown previewer when I wrote documentation (Readme file) for a project that I have made. I made it using React Markdown Previewer to enable the live markdown preview. You can access the live demo at &lt;a href="https://markdown.yehezgun.com"&gt;markdown.yehezgun.com&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Personal Docs Site
&lt;/h3&gt;

&lt;p&gt;I've been exhausted from googling the same thing repeatedly. So I decided to make a site that contains the frequent things that I usually access or use to resolve "the redundancy" LOL. I made it using &lt;a href="https://github.com/shuding/nextra"&gt;Shuding's Nextra&lt;/a&gt;. You can see mine at &lt;a href="https://docs.yehezgun.com"&gt;docs.yehezgun.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can read my previous article about the reason why I made my own personal docs site &lt;a href="https://yehezgun.com/articles/why-I-made-my-own-personal-docs-site"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  KAI Access App &amp;amp; A Freelance Project
&lt;/h3&gt;

&lt;p&gt;As I told you before, I never worked on a freelance project with my friends. Unfortunately, it's a private project based on client requests. But I can explain a little about what we've made.&lt;/p&gt;

&lt;p&gt;We made a warehousing system in the form of web and mobile apps. One of my friends created the mobile app, and I developed the web app, especially the CRUD process. So the employee just needs to scan the QR Code of the goods and the changes will be automatically done on the server. The other employee can also check and validate the data through the website.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://play.google.com/store/apps/details?id=com.kai.kaiticketing&amp;amp;hl=en_US&amp;amp;gl=US"&gt;KAI Access App&lt;/a&gt;, actually it's an app developed by my senior and me when I was working in the previous company. My senior developed it from scratch using Ionic &amp;amp; Angular. I just developed the requested feature like the Taxi Order system and PPOB feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hope For 2022
&lt;/h2&gt;

&lt;p&gt;2021 is a tough year for me personally. You have read my experience about how I struggled to survive and finally can get the new job. Thank God I can survive this year, LOL.&lt;/p&gt;

&lt;p&gt;I know there're a lot of things changed and delayed due to the Covid-19 pandemic since 2020. But there're some things that I want to achieve and learn more deeply in 2022.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://tailwindcss.com/"&gt;Tailwind CSS&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I know I'm still a newbie in React development. I even still struggled with CSS even I'm a frontend engineer, LOL. So I decided to learn Tailwind CSS as my preferred and go-to CSS utility tool. Why? Because after I read the docs, it can push me to understand the design and little CSS fundamentals while I learn and use it. It also allows me to make my own design system.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Clean Code&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For about one year I work in the previous company, I got a bad legacy code. It was very exhausting when I have to improve some features. The code is like a mess, LOL. If I optimize my parts, it also means I have to optimize the following features. That's why I often code like a barbarian. I realized that I cannot do this anymore and had to change my behavior.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Work-Life Balance&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is actually the common dream. Every people want to achieve it, LOL. I wish can achieve it through my new job soon. Hopefully, I also get a healthy environment and work culture, especially supportive colleagues.&lt;/p&gt;

&lt;p&gt;Yeah, that's all from me. That's my 2021 recap and hope for the next year. What's yours?&lt;/p&gt;

</description>
      <category>2021</category>
      <category>javascript</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How To Get Hired Without Applying</title>
      <dc:creator>Yehezkiel Gunawan</dc:creator>
      <pubDate>Wed, 22 Dec 2021 09:54:55 +0000</pubDate>
      <link>https://dev.to/yehezkielgunawan/how-to-get-hired-without-applying-lak</link>
      <guid>https://dev.to/yehezkielgunawan/how-to-get-hired-without-applying-lak</guid>
      <description>&lt;h2&gt;
  
  
  Disclaimer
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;This is just my experience when finding a new job as a front-end engineer. Maybe it seems opinionated, but at least it can be a reference for you. I will tell my story from a front-end engineer perspective.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;The story starts when I was graduated from college in 2020. That is the moment when the Covid-19 pandemic began. I have no idea what to do after graduating because I feel overwhelmed with what subject can be focused on.&lt;/p&gt;

&lt;p&gt;It changes when a friend told me that there's a free scholarship course at &lt;a href="https://www.dicoding.com/"&gt;Dicoding Indonesia&lt;/a&gt;. So I registered for that scholarship and got free access to the class. I found that I enjoy crafting something using HTML, CSS, and Javascript at that time.&lt;/p&gt;

&lt;p&gt;Soon, I decided to learn some frontend frameworks like Angular, Vue, and React. I started to learn those frameworks by making a simple to-do list. Actually, among those frameworks, I mostly like React as my main framework, but suddenly I got an offer from a company that uses Angular in their codebase. I worked there for about 1 year and 3 months.&lt;/p&gt;

&lt;p&gt;During my first journey as a full-time front-end engineer, I realized that the bigger the community of a framework or library, the bigger also the support system. I struggled enough when I have to do some troubleshooting using Angular and it takes more time than when I used React (in my personal project).&lt;/p&gt;

&lt;p&gt;So, I started to re-learn React again after working for a year. Luckily, the company also considered migrating to React because some of the frontend engineers complained and told the same reason as I think before. We learned to React together at the office almost every day then.&lt;/p&gt;

&lt;p&gt;I learn React by making some mini-projects and publishing them on Linkedin. Then, many jobs offers come to me through phone calls and email until I finally found the suitable one for me. Actually, most of the projects are not spectacular, I even made it just for myself at first.&lt;/p&gt;

&lt;p&gt;I think similar things may work for you if currently, you're searching for a new job as a developer. Here are my tips based on my experiences. &lt;/p&gt;

&lt;h2&gt;
  
  
  Start with CRUD
&lt;/h2&gt;

&lt;p&gt;Everything in the developing world is about to Create, Read, Update, and Delete &lt;strong&gt;(CRUD)&lt;/strong&gt;. When I re-learned React again after a long time, I started again with CRUD. I just follow the &lt;a href="https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_getting_started"&gt;MDN React To-do list tutorial&lt;/a&gt; and re-code it in my VS Code. This seems very mainstream, but it helps me so much when I make a new project.&lt;/p&gt;

&lt;p&gt;This trick also works when you're learning a new framework. You can only need to think about how to Create, Read, Update, and Delete the data using the framework you learn while you trying to understand the syntax too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build Your Online Presence
&lt;/h2&gt;

&lt;p&gt;If you want to get recognized by the recruiter, you have to make yourself recognizable by building your online presence. As a developer, you can start by building your own site, developing &amp;amp; publishing your project on Linkedin and Github, and writing some articles or blogs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Build Your Own Site
&lt;/h3&gt;

&lt;p&gt;As a frontend engineer, you can start building it by making your own personal site using your framework or library preferences. For example, after I learned the basic CRUD, I push myself to build my own website using Next.js. You can access it at &lt;a href="https://yehezgun.com"&gt;yehezgun.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You don't have to make a spectacular one, just be yourself. Your site is your playground, don't be too a perfectionist. I even still trial and error in modifying something at my current personal site.&lt;/p&gt;

&lt;p&gt;You may be asked, &lt;code&gt;Why do I need to make my own site?&lt;/code&gt;.  Actually, there are no formal rules here, back to your preferences. For me, I can do some experiments on my own website because it's mine and &lt;strong&gt;I have full control of it.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Make Some Mini Projects
&lt;/h3&gt;

&lt;p&gt;In my opinion, this is the most effective way to understand the technical concept and even get hired. If you're confused about what project you should make, you can &lt;strong&gt;start to make a project that can be used by yourself.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For example, I started to make my own Next.js starter template. You can check it at &lt;a href="https://yehez-nextchakra-starter.yehezgun.com/"&gt;https://yehez-nextchakra-starter.yehezgun.com/&lt;/a&gt;. Why did I make it? The story began when I need to make a new project using Next.js, I wasted my time just doing some repetitive things like ESLint &amp;amp; husky config, base navbar, and base layout. So I decided to make my own starter template as a base template, so I can focus on the development process. You can read the details on my past article &lt;a href="https://yehezgun.com/articles/why-making-a-starter-template-matters"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Publish Your Project
&lt;/h3&gt;

&lt;p&gt;The next step is &lt;strong&gt;show your work&lt;/strong&gt;. I have to say, it's mandatory for a developer to have a Github (or Gitlab) account. GitHub is a great way to showcase your projects and show what other technologies you are interested in — by forking, starring, or contributing to them. It also gives other people an idea about the amount of work you have been putting in, by the number of contributions shown on your profile &lt;a href="https://medium.com/streamwriter/creating-an-online-presence-as-a-developer-369ec79fb311"&gt;(Mircea Oprea, 2019)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The other way to publish your project is through Linkedin. You can use this platform to attract the recruiter when they see your published project and offer you the job. For example, I re-code my personal site and publish it as a Linkedin Post &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:6878601141693886465/"&gt;here&lt;/a&gt;. Just in several days, I got so many private chats on Linkedin which are job offers. And finally, I can get a new job because of this simple thing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Share Your Idea or Story Through Article
&lt;/h3&gt;

&lt;p&gt;Why does writing a blog matter? By writing a tech blog that contains some tutorial, story, or just an idea, you're helping other developers out there to generate new insight or even help them to solve their problems. In other words, you have contributed to the developer world when you write a technical blog.&lt;/p&gt;

&lt;p&gt;You can start writing a blog by writing a process while making a project or making some simple tutorials. For example, I wrote an article about how to self-host the Notion API Worker, you can read it &lt;a href="https://yehezgun.com/articles/how-to-self-host-notion-api-worker"&gt;here&lt;/a&gt;. Without realizing it, I've helped some developers to self-host their own Notion API Worker when they want to use it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For me, writing can sharpen my understanding of something,&lt;/strong&gt; because you read twice or even several times when you write. You will surely read your own writings before publishing them and make sure the readers understand them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Join The Developers Community or Event
&lt;/h2&gt;

&lt;p&gt;This also gives a significant impact on my career as a front-end engineer. In early 2021, I joined a big event in Indonesia held by Google and the partner companies. Yes, you're right I joined Bangkit Academy as a volunteer.&lt;/p&gt;

&lt;p&gt;Yeah I know, I got nervous and feel inferior because of too many pro developers who join as volunteers. The most challenging moment is when I have to co-assist my partner in a live teaching session. His coding and technical skill amazed me because he can explain all the technical processes fluently. But, I'm proud for joining this event because I can &lt;strong&gt;enlarge my networking with other developers&lt;/strong&gt; and learn a lot of things from them.&lt;/p&gt;

&lt;p&gt;Sometimes this thing can give you a new opportunity if they offer a new job in their working place.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Build and strengthen your online presence. Soon or later, the opportunity will reach you. Just be consistent and keep going!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I did all those tips since September 2021, and &lt;strong&gt;it works&lt;/strong&gt;. Finally, after I struggled to find a new job opportunity, I found one. I even didn't apply it by myself. A recruiter reached me through my Linkedin and I follow the recruitment process. Indeed, I didn't need to do the live code session because I showed my previous work in the user interview session. So it can be called a &lt;em&gt;live code review session&lt;/em&gt; because they just review my previous works.&lt;/p&gt;

&lt;p&gt;Hope my story can inspire you, especially those who struggled to find a new job. Sorry if there's some grammar error here, I'm still an amateur at writing articles in English.&lt;/p&gt;

</description>
      <category>portfolio</category>
      <category>frontend</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
