<?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: Mehdi Hali</title>
    <description>The latest articles on DEV Community by Mehdi Hali (@mehdihali).</description>
    <link>https://dev.to/mehdihali</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%2F880941%2F7c30d5e8-e067-4fea-b4c7-28f557cb700a.jpg</url>
      <title>DEV Community: Mehdi Hali</title>
      <link>https://dev.to/mehdihali</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mehdihali"/>
    <language>en</language>
    <item>
      <title>What does a Modern Static Website looks like?</title>
      <dc:creator>Mehdi Hali</dc:creator>
      <pubDate>Sun, 25 Sep 2022 23:45:40 +0000</pubDate>
      <link>https://dev.to/mehdihali/what-does-a-modern-static-website-look-like-493m</link>
      <guid>https://dev.to/mehdihali/what-does-a-modern-static-website-look-like-493m</guid>
      <description>&lt;p&gt;In this story, I will take you on the journey of how I created a &lt;strong&gt;&lt;em&gt;special&lt;/em&gt;&lt;/strong&gt; static website that one of my friends described by saying,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“ The Latest and Greatest ! ” 😎&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Kinda exaggerating but I like to call it a &lt;strong&gt;&lt;em&gt;Modern Static Website&lt;/em&gt;&lt;/strong&gt; .&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%2Fobt8jtpga479rztx4n1n.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%2Fobt8jtpga479rztx4n1n.png" alt="https://cdn-images-1.medium.com/max/800/1*SVIKc00SaXnlFCVW_myLVg.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Problem statement:&lt;/p&gt;

&lt;p&gt;Imagine you are in this frequent situation where you are hired to code a simple 6 pages static website, For an event organized by your colleagues for example, But because you are kind of a nerd! You want your website to be more interesting because static website development is boring!&lt;/p&gt;

&lt;p&gt;So what does this &lt;strong&gt;Modern Static Website&lt;/strong&gt; look like?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DRY: replace repeated HTML code with &lt;strong&gt;reusable&lt;/strong&gt; UI commponents just like in modern SPAs.&lt;/li&gt;
&lt;li&gt;use modern modular javascript syntax (ESModules)&lt;/li&gt;
&lt;li&gt;Ability to install npm packages and benefit from the rich ecosystem of javascript packages ( in my case I installed &lt;strong&gt;GSAP:&lt;/strong&gt; Green Socket Animation Platform, To add some animations and an HTML minifier package )&lt;/li&gt;
&lt;li&gt;HMR: Hot Module Reloading, For a fast and seamless development experience.&lt;/li&gt;
&lt;li&gt;Build optimizations for a performant production website.&lt;/li&gt;
&lt;li&gt;Some serverless backend services like Newsletter and contact forms.&lt;/li&gt;
&lt;li&gt;use utility first classes for styling (like Tailwind Css).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All without compromising on the &lt;strong&gt;simplicity&lt;/strong&gt; that static websites are known for.&lt;/p&gt;

&lt;h3&gt;
  
  
  Let’s build it! 🧑‍💻
&lt;/h3&gt;

&lt;p&gt;First things first, make sure you have nodejs and npm installed on your machine. Why? Aren’t we building a static website? Yes, but as mentioned before we want to be able to use npm packages on our website.&lt;/p&gt;

&lt;p&gt;npm packages require modern javascript syntax like ESModules for import and exports, therefore we need a build tool to bundle our modern javascript modules into files that the browser can understand.&lt;/p&gt;

&lt;h3&gt;
  
  
  Say hi to Vitejs ⚡
&lt;/h3&gt;

&lt;p&gt;There are many javascript build tools out there, But what makes vitejs stand out is its blazing speed; Moreover, It is plain simple, just install it and you have it with zero configuration! this will help us conserve the simplicity of our &lt;strong&gt;Modern Static Website!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;⚠️ — I  will install tailwind with vitejs, But this is just a preference you can install vitejs alone. refer to &lt;a href="https://vitejs.dev/guide/#scaffolding-your-first-vite-project" rel="noopener noreferrer"&gt;vitejs docs&lt;/a&gt; if you have any issues with installation.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Terminal: create a vitejs project&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm create vite@latest my-modern-static-website
&lt;span class="nb"&gt;cd &lt;/span&gt;my-modern-static-website
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Terminal: install tailwind css&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; tailwindcss postcss autoprefixer
npx tailwindcss init &lt;span class="nt"&gt;-p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🔴 make sure you add every page you want tailwind to work-in in the content array.&lt;/p&gt;

&lt;p&gt;~ &lt;em&gt;tailwind.config.js&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="cm"&gt;/** @type {import('tailwindcss').Config} */&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="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;content&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;index.html&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="c1"&gt;// "edition.html",&lt;/span&gt;
    &lt;span class="c1"&gt;// "partners.html",&lt;/span&gt;
    &lt;span class="c1"&gt;// "team.html",&lt;/span&gt;
    &lt;span class="c1"&gt;// "about.html",&lt;/span&gt;
    &lt;span class="c1"&gt;// "contact.html",&lt;/span&gt;
    &lt;span class="c1"&gt;// "404.html",&lt;/span&gt;
     &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./src/**/*.{vue,js,ts,jsx,tsx}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="c1"&gt;//"./components/**/*.{vue,js,ts,jsx,tsx}",&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;extend&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;plugins&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;I left some of the pages that I had in my project commented so that you have an example of how the pages should be added to the file.&lt;/p&gt;

&lt;p&gt;🔴 Make sure you associate every entry page on your website with an entry in the &lt;em&gt;vite.config.js&lt;/em&gt; file like this :&lt;/p&gt;

&lt;p&gt;~ &lt;em&gt;vite.config.js&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;resolve&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;path&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineConfig&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vite&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;rollupOptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;main&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;__dirname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;index.html&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="c1"&gt;// team: resolve(__dirname, 'team.html'),&lt;/span&gt;
        &lt;span class="c1"&gt;// edition: resolve(__dirname, 'edition.html'),&lt;/span&gt;
        &lt;span class="c1"&gt;// partners: resolve(__dirname, 'partners.html'),&lt;/span&gt;
        &lt;span class="c1"&gt;// about: resolve(__dirname, 'about.html'),&lt;/span&gt;
        &lt;span class="c1"&gt;// contact: resolve(__dirname, 'contact.html'),&lt;/span&gt;
        &lt;span class="c1"&gt;// 404: resolve(__dirname, '404.html'),&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;~ &lt;em&gt;index.css&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@tailwind&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;@tailwind&lt;/span&gt; &lt;span class="n"&gt;components&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;@tailwind&lt;/span&gt; &lt;span class="n"&gt;utilities&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Terminal&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now you are ready to start benefiting from the huge ecosystem of npm packages!&lt;/p&gt;

&lt;p&gt;personally, I used &lt;a href="https://greensock.com/gsap/" rel="noopener noreferrer"&gt;GSAP&lt;/a&gt; to do some cool animations and &lt;strong&gt;&lt;a href="https://www.npmjs.com/package/html-minifier-terser" rel="noopener noreferrer"&gt;html-minifier-terser&lt;/a&gt;&lt;/strong&gt; to minify HTML code and make the bundle size smaller.&lt;/p&gt;

&lt;h3&gt;
  
  
  Other benefits of Vitejs ✨
&lt;/h3&gt;

&lt;p&gt;vitejs also ships with HMR — Hot Module Reloading — by default so you get a seamless development experience with ease, Also vitejs performs many production build optimizations.&lt;/p&gt;

&lt;p&gt;now with vitejs we ensured&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;modern js syntax compatibility&lt;/li&gt;
&lt;li&gt;npm packages&lt;/li&gt;
&lt;li&gt;speed and performance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All we left to do is &lt;strong&gt;Not Repeating our selves !&lt;/strong&gt; this is so frequent in HTML code.&lt;/p&gt;

&lt;p&gt;I am a huge fan of UI components like in modern SPAs, But these frameworks are not the right choice for this project because some of them ( React for example) are not SEO friendly and this is a problem  for static websites, Even though some frameworks like Nextjs solved this problem but they still add so much complexity which is not worth it for a 6 pages static website.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fortunately,&lt;/strong&gt; there is a native way to implement components using only the native Web APIs and we can use them when needed without any dependencies or installs!!&lt;/p&gt;

&lt;h3&gt;
  
  
  Web Components 🧩
&lt;/h3&gt;

&lt;p&gt;Web components API is a set of native web APIs that make possible creating custom HTML elements, A.k.a. &lt;strong&gt;components.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first component comes in mind when talking about static websites is the header of the website, It’s so annoying to hard-code the header in every page of the website and then imagine if you want to introduce a  small change to it, You have to repeat the change in every page; Therefore, let’s create a custom component for the header !&lt;/p&gt;

&lt;p&gt;to stay organized create a new folder call it “components”, Inside this folder create a new javascript file and call it “wc-header.js”.&lt;/p&gt;

&lt;p&gt;Then inside the newly created file define a new class that extends the HTMLElement class in order for our component to inherit the properties of a regular HTML element, Then call the parent constructor inside of the constructor like so…&lt;/p&gt;

&lt;p&gt;&lt;em&gt;~components/wc-header.js&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;wcHeader&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;HTMLElement&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="k"&gt;super&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;then set the &lt;strong&gt;innerHTML&lt;/strong&gt; property to the code of your HTML header as follows …&lt;/p&gt;

&lt;p&gt;&lt;em&gt;~components/wc-header.js&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;wcHeader&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;HTMLElement&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&amp;lt;h1&amp;gt; My Header &amp;lt;/h1&amp;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;Last step, define a custom HTML element using the &lt;strong&gt;define&lt;/strong&gt; method inside of the &lt;strong&gt;customElement&lt;/strong&gt; class.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;~components/wc-header.js&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;wcHeader&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;HTMLElement&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&amp;lt;h1&amp;gt; My Header &amp;lt;/h1&amp;gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;customElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;define&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;wc-header&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;wcHeader&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🔴 Make sure you have a dash “-” in the name you give to your custom element, Like in my example “wc-header”.&lt;/p&gt;

&lt;p&gt;🔴 You can’t use tailwind inside of web components at the moment, Ihope it will be possible soon, So only use inline css inside your components at the moment .&lt;/p&gt;

&lt;p&gt;Our component is READY !&lt;/p&gt;

&lt;p&gt;Include the component inside of your HTML and use it like&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;html&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;head&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;module&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/components/wc-header.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/script&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;My&lt;/span&gt; &lt;span class="nx"&gt;first&lt;/span&gt; &lt;span class="nx"&gt;web&lt;/span&gt; &lt;span class="nx"&gt;component&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/header&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/head&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!--&lt;/span&gt; &lt;span class="nx"&gt;use&lt;/span&gt; &lt;span class="nx"&gt;your&lt;/span&gt; &lt;span class="nx"&gt;component&lt;/span&gt; &lt;span class="nx"&gt;like&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;wc&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;header&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;it&lt;/span&gt; &lt;span class="nx"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;working&lt;/span&gt; &lt;span class="o"&gt;!!&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/body&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/html&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The newsletter &amp;amp; contact forms 📬
&lt;/h3&gt;

&lt;p&gt;There are plenty of third party services you can use easly in your website without any backend or serverside code.&lt;/p&gt;

&lt;p&gt;In my case i used &lt;strong&gt;&lt;a href="https://www.mailerlite.com/" rel="noopener noreferrer"&gt;Mailer Lite&lt;/a&gt;&lt;/strong&gt; for the newsletter and &lt;strong&gt;&lt;a href="https://smartforms.dev/" rel="noopener noreferrer"&gt;Smart Forms&lt;/a&gt;&lt;/strong&gt; for the contact form, they both have good free plans.&lt;/p&gt;

&lt;h3&gt;
  
  
  Congratulations! 🎉
&lt;/h3&gt;

&lt;p&gt;You now have all the ingredients to build a &lt;strong&gt;Modern static website&lt;/strong&gt; !!&lt;/p&gt;

&lt;p&gt;But we still need some backend functionality.&lt;/p&gt;

&lt;p&gt;That’s it, Thank you for reading !&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>webcomponents</category>
      <category>vite</category>
    </item>
  </channel>
</rss>
