<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: WT Shek</title>
    <description>The latest articles on Forem by WT Shek (@wtshek).</description>
    <link>https://forem.com/wtshek</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%2F536595%2F580faf58-9789-4e4d-ad98-2ef128ceebf5.jpeg</url>
      <title>Forem: WT Shek</title>
      <link>https://forem.com/wtshek</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/wtshek"/>
    <language>en</language>
    <item>
      <title>I quitted many times, until this...</title>
      <dc:creator>WT Shek</dc:creator>
      <pubDate>Fri, 27 Jun 2025 20:13:53 +0000</pubDate>
      <link>https://forem.com/wtshek/i-quitted-many-times-until-this-53hl</link>
      <guid>https://forem.com/wtshek/i-quitted-many-times-until-this-53hl</guid>
      <description>&lt;p&gt;I’ve been building software for years now. But I always build for work, for learning or for (unsuccessful) side projects. &lt;/p&gt;

&lt;p&gt;Every side projects started the same way. I did market research, analyze competitors and convince myself that there is a gap or whatever reason it worths trying. Then I spend weeks building only to lose steam halfway. &lt;/p&gt;

&lt;p&gt;It felt like shooting arrows in the dark.&lt;/p&gt;

&lt;p&gt;This time I built something that I actually need and it changes everything. &lt;/p&gt;

&lt;h2&gt;
  
  
  The problem that I need to solve
&lt;/h2&gt;

&lt;p&gt;Last month, my partner and I got frustrated with managing our expenses. We want to keep track of how much we spend our individual and collective expenses and also how to split. &lt;/p&gt;

&lt;p&gt;There are solutions already for sure. But they are either too simple or too expensive and complex that includes tons of features that we don’t need. &lt;/p&gt;

&lt;p&gt;Why paid for something we don’t need? I can build it in a day or two. &lt;/p&gt;

&lt;p&gt;So I did.&lt;/p&gt;

&lt;h2&gt;
  
  
  The difference was night and day
&lt;/h2&gt;

&lt;p&gt;This time, I know exactly what I want to build and all the decisions were made effortlessly. &lt;/p&gt;

&lt;p&gt;Before that I would struggle with the UI design, the database and everything because I want to do it right, because I don’t know how it would change in the future. Because I don’t feel the problem.&lt;/p&gt;

&lt;p&gt;This time, I just choose the UI that I want and because this problem has been bothering me, I want to ship it quick so I choose to build in the fastest way I can, not the best way. &lt;/p&gt;

&lt;p&gt;The result? We solve the problem. &lt;/p&gt;

&lt;h2&gt;
  
  
  Clarity changes everything
&lt;/h2&gt;

&lt;p&gt;That's the power of clarity. When you truly understand the problem you're solving—not from research, but from living it—motivation becomes automatic.&lt;/p&gt;

&lt;p&gt;You keep going when you're stuck because you know exactly why what you're doing matters. Every line of code has purpose. Every feature solves a real frustration you experience.&lt;/p&gt;

&lt;p&gt;The obstacles don't disappear, but your reason for overcoming them becomes unshakeable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Lesson
&lt;/h2&gt;

&lt;p&gt;I'm not saying you should only build for yourself. But building something you genuinely need teaches you what clarity feels like. It shows you the difference between solving a real problem and building something you think might be useful.&lt;/p&gt;

&lt;p&gt;Once you know that feeling, you can recognize it in other projects. You can dig deeper into user research, spend more time understanding the problem. &lt;/p&gt;

&lt;p&gt;The goal isn't to be your own customer forever. It's to never again build something without truly understanding why it needs to exist.&lt;/p&gt;

&lt;p&gt;When you have that clarity, everything else becomes easier.&lt;/p&gt;

</description>
      <category>pwa</category>
      <category>productivity</category>
      <category>product</category>
    </item>
    <item>
      <title>SEO Optimization Checklist for Coding Your Website</title>
      <dc:creator>WT Shek</dc:creator>
      <pubDate>Sat, 11 Jan 2025 21:58:51 +0000</pubDate>
      <link>https://forem.com/wtshek/seo-optimization-checklist-for-coding-your-website-31on</link>
      <guid>https://forem.com/wtshek/seo-optimization-checklist-for-coding-your-website-31on</guid>
      <description>&lt;p&gt;SEO is important for a websites. To improve SEO, not only do we need excellent content, but also we need to provide good user experience and allow the search engine to understand our website easily. Here is the checklist for coding a SEO optimised website&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TLDR:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is your website structure simple and flat?&lt;/li&gt;
&lt;li&gt;Have you included correct meta tag?&lt;/li&gt;
&lt;li&gt;Did you create a XML sitemap?&lt;/li&gt;
&lt;li&gt;Did you create a the robot.txt file?&lt;/li&gt;
&lt;li&gt;Did you add hreflang and canonical information?&lt;/li&gt;
&lt;li&gt;Did you create schema markup?&lt;/li&gt;
&lt;li&gt;Did you code your image tag properly?&lt;/li&gt;
&lt;li&gt;How is your core web vitals? &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Is your website structure simple and flat?
&lt;/h2&gt;

&lt;p&gt;When building your website, it is ideal to have a clear picture of how your website structures. Using a flat structure is beneficial to SEO and user experience in many folds. &lt;/p&gt;

&lt;p&gt;It is easier to crawl by the search engines, provides stronger link equity and user can find the web pages faster because they are closer to the homepage. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fdl0ex45s9gw0270w5cor.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fdl0ex45s9gw0270w5cor.png" alt="flat structure vs complex structure" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Planning ahead can also avoid orphan page which is not linked by any other page. &lt;/p&gt;

&lt;h2&gt;
  
  
  Have you use the correct meta tag?
&lt;/h2&gt;

&lt;p&gt;What is meta tag? &lt;br&gt;
Meta tag is a piece of code place in the &lt;code&gt;&amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;&lt;/code&gt; that provide search engine informations about your web page&lt;/p&gt;

&lt;p&gt;Some common meta tags&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="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!-- Specifies the character encoding for the document --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!-- Ensures responsive design on mobile --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;http-equiv=&lt;/span&gt;&lt;span class="s"&gt;"X-UA-Compatible"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"IE=edge"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!-- Improves compatibility with Internet Explorer --&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- SEO Meta Tags --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"A detailed guide on the best travel destinations and tips."&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!-- Page description --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"keywords"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"travel, destinations, tips, blog"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!-- Keywords for search engines (less relevant now) --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"author"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Your Name"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!-- Author of the webpage --&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- Social Media Meta Tags (Open Graph Protocol) --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:title"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Best Travel Blog - Explore Destinations"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Discover the best travel tips and top destinations."&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:image"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/image.jpg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!-- Thumbnail image for sharing --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:url"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/travel-blog"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:type"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"website"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Best Travel Blog&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Welcome to the Best Travel Blog&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Did you create a XML sitemap?
&lt;/h2&gt;

&lt;p&gt;Sitemap can be defferentiate into 2 types, one is in XML format which allows search engine to crawl your website more easily. &lt;/p&gt;

&lt;p&gt;Example XML Sitemap:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;urlset&lt;/span&gt; &lt;span class="na"&gt;xmlns=&lt;/span&gt;&lt;span class="s"&gt;"http://www.sitemaps.org/schemas/sitemap/0.9"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;url&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;loc&amp;gt;&lt;/span&gt;https://example.com/&lt;span class="nt"&gt;&amp;lt;/loc&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;lastmod&amp;gt;&lt;/span&gt;2025-01-10&lt;span class="nt"&gt;&amp;lt;/lastmod&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;changefreq&amp;gt;&lt;/span&gt;daily&lt;span class="nt"&gt;&amp;lt;/changefreq&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;priority&amp;gt;&lt;/span&gt;1.0&lt;span class="nt"&gt;&amp;lt;/priority&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/url&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;url&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;loc&amp;gt;&lt;/span&gt;https://example.com/about&lt;span class="nt"&gt;&amp;lt;/loc&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;lastmod&amp;gt;&lt;/span&gt;2025-01-08&lt;span class="nt"&gt;&amp;lt;/lastmod&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;changefreq&amp;gt;&lt;/span&gt;monthly&lt;span class="nt"&gt;&amp;lt;/changefreq&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;priority&amp;gt;&lt;/span&gt;0.8&lt;span class="nt"&gt;&amp;lt;/priority&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/url&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/urlset&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Another is in human readable form that users can understand and navigate your website more fast and easy. Normally footer can serve the same function&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://media2.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%2F0ohka4bww5e2or75i0jw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F0ohka4bww5e2or75i0jw.png" alt="sitemap example" width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Did you create a the robot.txt file?
&lt;/h2&gt;

&lt;p&gt;Robots.txt is a plain text file that is placed on the root directory of your website. It provides instructions to the search engine on how to crawl your website. &lt;/p&gt;

&lt;p&gt;It specifies which part of your website/ resources should or should not be crawled.&lt;/p&gt;

&lt;p&gt;Example of robot.txt&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Block all crawlers from accessing the admin area
User-agent: *
Disallow: /admin/

# Allow Googlebot to access the entire site
User-agent: Googlebot
Disallow:

# Prevent all crawlers from accessing specific files
User-agent: *
Disallow: /private-info.html
Disallow: /temp/

# Provide a link to the sitemap
Sitemap: https://example.com/sitemap.xml

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Did you add hreflang and canonical information ?
&lt;/h2&gt;

&lt;p&gt;If your site is multilingual, it is best to add hreflang and canonical tags, so that search engine would know these pages with similar content are variants. &lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;link rel="canonical" href="https://example.com/" /&amp;gt;
&amp;lt;link rel="alternate" hreflang="en-us" href="https://example.com/us/" /&amp;gt;
&amp;lt;link rel="alternate" hreflang="en-ca" href="https://example.com/ca/" /&amp;gt;
&amp;lt;link rel="alternate" hreflang="x-default" href="https://example.com/" /&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Did you create schema markup?
&lt;/h2&gt;

&lt;p&gt;Schema markup, also known as structured data, is a piece of code that you added to your HTML files to help search engine understand your content. &lt;/p&gt;

&lt;p&gt;Remeber the recipes or product carousel on the top or right of Google search result you see when you’re searching? This is generated from the schema markup.&lt;/p&gt;

&lt;p&gt;There are various type of markup, like product markup, article markup or orgnisation markup. &lt;/p&gt;

&lt;p&gt;Here is an example of product markup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;script type="application/ld+json"&amp;gt;
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Smartphone XYZ",
  "image": "https://example.com/product-image.jpg",
  "description": "A high-performance smartphone with 128GB storage.",
  "brand": {
    "@type": "Brand",
    "name": "TechBrand"
  },
  "offers": {
    "@type": "Offer",
    "priceCurrency": "USD",
    "price": "499.99",
    "itemCondition": "https://schema.org/NewCondition",
    "availability": "https://schema.org/InStock",
    "url": "https://example.com/smartphone-xyz/"
  }
}
&amp;lt;/script&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Did you code your image tag properly?
&lt;/h2&gt;

&lt;p&gt;When it comes to the image, there is a lot to talk about. We focus the performance aspect in the next section. Here we look at the tag itself. &lt;/p&gt;

&lt;p&gt;Here is the most basic &lt;code&gt;img&lt;/code&gt; tag should look like&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;# include alt, width and height
&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"example.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"An example image"&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"600"&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"400"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should use proper &lt;code&gt;rel&lt;/code&gt; attribute if necessary&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;rel values&lt;/th&gt;
&lt;th&gt;usage&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;noopener&lt;/td&gt;
&lt;td&gt;used when linking to external sites to improve security and privacy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;noreferrer&lt;/td&gt;
&lt;td&gt;sed when linking to external sites to improve security and privacy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;nofollow&lt;/td&gt;
&lt;td&gt;tell search engines not to follow the link for SEO purposes, preventing the passing of link equity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sponsored&lt;/td&gt;
&lt;td&gt;indicates that a link is paid or sponsored&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How is your core web vitals?
&lt;/h2&gt;

&lt;p&gt;Website performance is one of the core metrics for ranking. Google search engine uses Core Web Vitals  (CWV) to measure how fast and how good your website user experience are. It consists of 3 metrics LCP, INP and CLS&lt;/p&gt;

&lt;p&gt;Here is the standard suggested by Google&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F6eaiogha1astrsh2mgff.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F6eaiogha1astrsh2mgff.png" alt="core web vitals standard" width="406" height="208"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To measure your Core Web Vitals score, you can use Lighthouse built in the Chrom Devtools and PageSpeed Insight provided by Google.&lt;/p&gt;

&lt;p&gt;To improve your score, here are some techniques you can consider: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Minify CSS, Javascript&lt;/li&gt;
&lt;li&gt;Rendering image with the correct size&lt;/li&gt;
&lt;li&gt;Use webp format for image&lt;/li&gt;
&lt;li&gt;Preloading critique assets&lt;/li&gt;
&lt;li&gt;Lazyloading when possible&lt;/li&gt;
&lt;li&gt;Use CDN, cache&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Above are some of the things to consider when building a SEO optimised. If there is anything missed, comment down belows!&lt;/p&gt;

</description>
      <category>seo</category>
      <category>frontend</category>
      <category>webdev</category>
      <category>performance</category>
    </item>
    <item>
      <title>How to make sure that your code match the design?</title>
      <dc:creator>WT Shek</dc:creator>
      <pubDate>Sun, 06 Mar 2022 02:10:34 +0000</pubDate>
      <link>https://forem.com/wtshek/how-to-make-sure-that-your-code-match-the-design-62m</link>
      <guid>https://forem.com/wtshek/how-to-make-sure-that-your-code-match-the-design-62m</guid>
      <description>&lt;p&gt;Sometimes programmer loss track of the CSS properties, especially the margin and padding. Yet the UI designers are always too smart to spot the difference. &lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
In my last week of work, I got my ticket (Jira ticket) sending back twice because my code didn’t match the design. For me, it looked the same. But somehow the designer caught the minor difference. &lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
So I asked them, how or what software do you use to compare the difference? In turns out, they are using simply Figma and Photoshop to overlay the screenshot of the final product I made on top of the design. &lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
But, as the developer, we don’t always has access to edit Figma, so I need to find other solution. Here is the &lt;a href="https://chrome.google.com/webstore/detail/perfectpixel-by-welldonec/dkaagdgjmgdmbnecmcefdhjekcoceebi"&gt;Perfect Pixel&lt;/a&gt; Chrome plugin! It allows to overlay the a photo on top of the current website. The difference can be found instantly by the developer without sending the ticket back and forth and slowing down the development process. &lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
To use the plugin, first you need to have a screenshot of your design. Figma has the export function to export the design directly. &lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
First select the layer, scroll down to the bottom of the design bar and you will find the export button. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6SY0baoq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7mmvzxf6qchbz6vxlbk0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6SY0baoq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7mmvzxf6qchbz6vxlbk0.png" alt="Showing how to export in figma" width="880" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
Then you add image to the plugin. Then it is done, you can now move around the image and experiment with it through the control panel.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
By the laying on image on top of the website, the difference is easily spot. Just like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iL8YVQZJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xxa88ffc905j635oow3b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iL8YVQZJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xxa88ffc905j635oow3b.png" alt="An example of using Perfect Pixel" width="880" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
 But make sure that the window size of your website is the same as your design. For example if the design is 1920 x 1080, then do make sure that your screen size is also 1920 x 1080. You can also use the inspector change the ration accordingly. &lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
Thanks to Perfect Pixel, we as frontend developer could make less trouble for the UI and QA team!&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
Subscribe to the &lt;a href="https://shekasdev.com/newsletter/"&gt;newsletter&lt;/a&gt; to receive the knowledge I have learnt in work each week!&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>css</category>
      <category>webdev</category>
      <category>design</category>
    </item>
    <item>
      <title>How to enhance your web app performance? And More!</title>
      <dc:creator>WT Shek</dc:creator>
      <pubDate>Sat, 26 Feb 2022 12:03:23 +0000</pubDate>
      <link>https://forem.com/wtshek/how-to-enhance-your-web-app-performance-and-more-1d29</link>
      <guid>https://forem.com/wtshek/how-to-enhance-your-web-app-performance-and-more-1d29</guid>
      <description>&lt;p&gt;Hey guys. How does your week going? As usual, there are lots of problem we face in week. Problems make us grow and learn more. And I am here to share what I have learnt this during my work. Learn together bit by bit!&lt;/p&gt;




&lt;h2&gt;
  
  
  Why does my style does not applied even though it is correctly set?
&lt;/h2&gt;

&lt;p&gt;It is one of the most irritating problem I guess because it is so small and trivial. Yet it literally spent me (and the other) 2 days and still not figuring it out. &lt;/p&gt;

&lt;p&gt;Here is the answer. &lt;strong&gt;Code Splitting&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The framework we use in the project is Preact and Preact Router and webkit browser.  And here is what the doc says: &lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Route" components are automatically code-splitted at build time to create smaller bundles and avoid loading more code than is needed by each page. This works by intercepting imports for route components with an &lt;a href="https://github.com/preactjs/preact-cli/tree/master/packages/async-loader"&gt;async loader&lt;/a&gt;, which returns a lightweight wrapper component that handles code splitting seamlessly.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Under investigation, we found that the style is applied after we turn off and on the style in the dev tool. So the style is there, but not correctly rendered. &lt;/p&gt;

&lt;p&gt;To solve this we simply moved it out the routes folder and avoid the default code splitting done by Preact. &lt;/p&gt;

&lt;p&gt;Here is another similar problem that may interest you:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/3485365/how-can-i-force-webkit-to-redraw-repaint-to-propagate-style-changes"&gt;https://stackoverflow.com/questions/3485365/how-can-i-force-webkit-to-redraw-repaint-to-propagate-style-changes&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why vscode isn’t suggesting the correct intellisense?
&lt;/h2&gt;

&lt;p&gt;The problem occur when I am using CRS with typescript and cypress for testing, instead of jest, which ships together with CRS. Under the hood, cypress uses chai, but in the test file, eslint keep linting the jest syntax instead of syntax, which is annoying. &lt;/p&gt;

&lt;p&gt;The fix is to have different tsconfig file.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// tsconfig.json
// exclude the test (unit test), spec (integration test)
{
  "compilerOptions": {
    "target": "es5",
    "lib": ["dom", "dom.iterable", "esnext"],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noFallthroughCasesInSwitch": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react-jsx",
    "types": ["cypress"]
  },
  "include": ["src", "node_modules/cypress"],
  "exclude": ["**/*.test.tsx"]
}


// tsconfig.cypress.json
// include only test related file
{
  "extends": "tsconfig.json",
  "compilerOptions": {
    "isolatedModules": false,
    "strict": true,
    "target": "es5",
    "lib": ["es5", "dom"],
    "types": ["cypress"],
    "noEmit": false,
    "baseUrl": "./node_modules"
  },
  "include": [
    "./node_modules/cypress",
    "src/**/*.spec.ts",
    "src/**/*.spec.tsx",
    "src/**/*.test.tsx"
  ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;h2&gt;
  
  
  How to make a the your web app lightening fast?
&lt;/h2&gt;

&lt;p&gt;Here are two great articles on this topic. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.openreplay.com/the-ultimate-guide-to-fixing-javascript-performance-problems-in-browser-devtools"&gt;The Ultimate Guide to Fixing JavaScript Performance Problems in Browser DevTools&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://web.dev/apply-instant-loading-with-prpl/"&gt;Apply instant loading with the PRPL pattern&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In addition, I created a checklist on how to enhance the website's performance. Click &lt;a href="https://shekasdev.com/wp-content/uploads/2022/02/Checklist-for-Optimising-Web-App-Performance.pdf"&gt;here&lt;/a&gt; to find it!&lt;/p&gt;




&lt;p&gt;If you want to know what real issues I faced in work. Subscribe to the newsletter &lt;a href="https://shekasdev.com/newsletter/"&gt;here&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>codenewbie</category>
    </item>
  </channel>
</rss>
