<?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: Erik Engi</title>
    <description>The latest articles on DEV Community by Erik Engi (@kireerik).</description>
    <link>https://dev.to/kireerik</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%2F67539%2Fcb7484ac-9f26-478c-a463-9a9b931c1524.jpeg</url>
      <title>DEV Community: Erik Engi</title>
      <link>https://dev.to/kireerik</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kireerik"/>
    <language>en</language>
    <item>
      <title>Refo - A website template for the modern web.</title>
      <dc:creator>Erik Engi</dc:creator>
      <pubDate>Sun, 24 Mar 2024 09:03:34 +0000</pubDate>
      <link>https://dev.to/kireerik/refo-a-website-template-for-the-modern-web-5fli</link>
      <guid>https://dev.to/kireerik/refo-a-website-template-for-the-modern-web-5fli</guid>
      <description>&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/kireerik"&gt;
        kireerik
      &lt;/a&gt; / &lt;a href="https://github.com/kireerik/refo"&gt;
        refo
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A website template for the modern web. ⭐️ Star to support our work!
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Refo&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;
    A website template for the modern web
    &lt;br&gt;Powerful developer experience meets lightweight output
&lt;/p&gt;

&lt;p&gt;
    &lt;a title="Refo maintainability details" href="https://codeclimate.com/github/kireerik/refo/maintainability" rel="nofollow"&gt;&lt;img alt="Refo maintainability details" src="https://camo.githubusercontent.com/425e2c1fb3b476d751ccb942a99dcbb8a2596481990dd0020c53936aa2265cf2/68747470733a2f2f6170692e636f6465636c696d6174652e636f6d2f76312f6261646765732f62366132626630353666393164623939646639332f6d61696e7461696e6162696c697479"&gt;&lt;/a&gt;
    &lt;a title="Refo package downloads" href="https://www.npmjs.com/package/refo" rel="nofollow"&gt;&lt;img alt="Refo package downloads" src="https://camo.githubusercontent.com/2794430ad07037bbeaf1a9e20dc4eaab3740c188365fc2c063206ba71664c0c0/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f64742f7265666f2e737667"&gt;&lt;/a&gt;
    &lt;a title="join the Refo community" href="https://github.com/kireerik/refo/discussions"&gt;&lt;img alt="join the Refo community" src="https://camo.githubusercontent.com/c9e8a432c15be1cd3982c9d617934e8ecdfd7e6c73dcdbe5705418379c0706b8/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f64697363757373696f6e732f6b6972656572696b2f7265666f3f6c6162656c436f6c6f723d25323338613262653226636f6c6f723d253233386132626532266c6162656c3d2546302539462539322541432532306a6f696e253230746865253230636f6d6d756e697479"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
    &lt;a title="⯅ Upvote to support our work!" href="https://www.producthunt.com/posts/refo?utm_source=badge-featured&amp;amp;utm_medium=badge&amp;amp;utm_souce=badge-refo" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/fda0c54f8327472504d2910a2ff93e3a58f111b3acd05e86efbb8f632deb409a/68747470733a2f2f6170692e70726f6475637468756e742e636f6d2f776964676574732f656d6265642d696d6167652f76312f66656174757265642e7376673f706f73745f69643d343433353132267468656d653d6c69676874" alt="Refo - A website template for the modern web | Product Hunt" width="250" height="54"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Effortless Static Site Generation with Flexibility&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Feeling overwhelmed by the static site generator landscape? Refo offers a refreshingly simple and customizable approach &lt;strong&gt;built entirely on Node.js&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Unlike Jekyll, Gatsby, Astro and others, we let you leverage the power of Node.js modules directly. This means you can generate any kind of website you can imagine, all with the flexibility of your favorite Node.js libraries and servers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key benefits:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Effortless Development&lt;/strong&gt;: Edit your modules and see instant updates thanks to hot reloading.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unmatched Flexibility&lt;/strong&gt;: Import &lt;code&gt;SVG&lt;/code&gt;s, utilize &lt;code&gt;raw&lt;/code&gt; imports, and &lt;code&gt;style&lt;/code&gt; your components with ease.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data-Driven Content&lt;/strong&gt;: Craft resumes, portfolios, or any data-driven website with ease.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Highly Customizable&lt;/strong&gt;: No rigid folder structures, minify class names, or even swap out SolidJS for React – it's entirely up to you.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Go beyond the limitations&lt;/strong&gt;…&lt;/p&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/kireerik/refo"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


</description>
      <category>javascript</category>
      <category>node</category>
      <category>webdev</category>
      <category>react</category>
    </item>
    <item>
      <title>Material-UI: Get started (Fast!) ⚡ React 16+</title>
      <dc:creator>Erik Engi</dc:creator>
      <pubDate>Sat, 14 Apr 2018 23:34:29 +0000</pubDate>
      <link>https://dev.to/kireerik/material-ui-get-started-fast--react-16-2815</link>
      <guid>https://dev.to/kireerik/material-ui-get-started-fast--react-16-2815</guid>
      <description>&lt;p&gt;How to get started with Material-UI?&lt;/p&gt;

&lt;p&gt;Here is the easy and the right way in my opinion.&lt;/p&gt;

&lt;p&gt;Just go and follow the &lt;a href="https://github.com/kireerik/razzle-material-ui-styled-example#getting-started" rel="noopener noreferrer"&gt;instructions&lt;/a&gt; right here:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&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%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/kireerik" rel="noopener noreferrer"&gt;
        kireerik
      &lt;/a&gt; / &lt;a href="https://github.com/kireerik/razzle-material-ui-styled-example" rel="noopener noreferrer"&gt;
        razzle-material-ui-styled-example
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Razzle Material-UI example with Styled Components using Express with compression
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Razzle Material-UI Styled Example&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;
    &lt;a title="Node.js" href="https://nodejs.org/en/" rel="nofollow noopener noreferrer"&gt;&lt;img alt="Node.js" src="https://camo.githubusercontent.com/9c24355bb3afbff914503b663ade7beb341079fa/68747470733a2f2f6e6f64656a732e6f72672f7374617469632f696d616765732f6c6f676f2d6c696768742e737667" width="104.49" height="64"&gt;&lt;/a&gt;
           &lt;a title="Yarn" href="https://yarnpkg.com/lang/en/" rel="nofollow noopener noreferrer"&gt;&lt;img alt="Yarn" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fyarnpkg%2Fassets%2Fmaster%2Fyarn-kitten-full.svg%3Fsanitize%3Dtrue" width="142.708" height="64"&gt;&lt;/a&gt;
           &lt;a title="Razzle" href="https://github.com/jaredpalmer/razzle" rel="noopener noreferrer"&gt;&lt;img alt="Razzle" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcloud.githubusercontent.com%2Fassets%2F4060187%2F26326651%2F1fc65eca-3f0a-11e7-9f45-02c2bf950418.png" width="222.813" height="64"&gt;&lt;/a&gt;
           &lt;a title="Express" href="https://expressjs.com/" rel="nofollow noopener noreferrer"&gt;&lt;img alt="Express" src="https://camo.githubusercontent.com/5e77c717bcbcc0b313b206fa310b54be4b4bb6f1e9b2260b3d9bbef205c57167/68747470733a2f2f63646e2e776f726c64766563746f726c6f676f2e636f6d2f6c6f676f732f657870726573732d3130392e737667" width="219.771" height="64"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
    &lt;a title="React" href="https://facebook.github.io/react/" rel="nofollow noopener noreferrer"&gt;&lt;img alt="React" src="https://camo.githubusercontent.com/6247e41c51a78039bece19eb4f7e9a01099f19061b9da350e4376f97ecf81ba8/68747470733a2f2f63646e2e776f726c64766563746f726c6f676f2e636f6d2f6c6f676f732f72656163742e737667" width="267.135" height="240"&gt;&lt;/a&gt;
           &lt;a title="Styled Components" href="https://www.styled-components.com/" rel="nofollow noopener noreferrer"&gt;&lt;img alt="Styled Components" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fstyled-components%2Fbrand%2Fmaster%2Fstyled-components.png" width="240" height="240"&gt;&lt;/a&gt;
           &lt;a title="Material-UI" href="http://www.material-ui.com/#/" rel="nofollow noopener noreferrer"&gt;&lt;img alt="Material-UI" src="https://camo.githubusercontent.com/6c167e85f4fdfb79727907fce90c9b4922c92fbec3f86fe5d49628bac393855c/68747470733a2f2f63646e2e776f726c64766563746f726c6f676f2e636f6d2f6c6f676f732f6d6174657269616c2d75692e737667" width="295.417" height="240"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
    &lt;br&gt;&lt;a title="GitPunch" href="https://gitpunch.com/" rel="nofollow noopener noreferrer"&gt;&lt;img alt="GitPunch" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fvfeskov%2Fgitpunch%2Fmaster%2Fclient%2Fsrc%2Fbig-logo.png" width="222" height="52"&gt;&lt;/a&gt;
    &lt;br&gt;⭐ Star and get notified about new releases via email
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a title="Razzle" href="https://github.com/jaredpalmer/razzle" rel="noopener noreferrer"&gt;&lt;img alt="Razzle" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcloud.githubusercontent.com%2Fassets%2F4060187%2F26326651%2F1fc65eca-3f0a-11e7-9f45-02c2bf950418.png" width="" height="18"&gt;&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;S&lt;/strong&gt;erver &lt;strong&gt;S&lt;/strong&gt;ide &lt;strong&gt;R&lt;/strong&gt;endering&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;H&lt;/strong&gt;ot &lt;strong&gt;M&lt;/strong&gt;odule &lt;strong&gt;R&lt;/strong&gt;eplacement for both client and server side &lt;a title="React" href="https://facebook.github.io/react/" rel="nofollow noopener noreferrer"&gt;&lt;img alt="React" src="https://camo.githubusercontent.com/6247e41c51a78039bece19eb4f7e9a01099f19061b9da350e4376f97ecf81ba8/68747470733a2f2f63646e2e776f726c64766563746f726c6f676f2e636f6d2f6c6f676f732f72656163742e737667" width="" height="18"&gt;&lt;/a&gt;&lt;a href="https://facebook.github.io/react/" rel="nofollow noopener noreferrer"&gt;React&lt;/a&gt; components&lt;/li&gt;
&lt;li&gt;Up to date JavaScript (&lt;a href="https://en.wikipedia.org/wiki/Ecma_International" rel="nofollow noopener noreferrer"&gt;&lt;strong&gt;E&lt;/strong&gt;CMA&lt;/a&gt;&lt;strong&gt;S&lt;/strong&gt;cript 6 (2015)) support&lt;/li&gt;
&lt;li&gt;Single route static site generation&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a title="Express" href="https://expressjs.com/" rel="nofollow noopener noreferrer"&gt;&lt;img alt="Express" src="https://camo.githubusercontent.com/5e77c717bcbcc0b313b206fa310b54be4b4bb6f1e9b2260b3d9bbef205c57167/68747470733a2f2f63646e2e776f726c64766563746f726c6f676f2e636f6d2f6c6f676f732f657870726573732d3130392e737667" width="" height="18"&gt;&lt;/a&gt; server with gzip &lt;a href="https://github.com/expressjs/compression" rel="noopener noreferrer"&gt;compression&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;HTML and inline CSS and JS minification with &lt;a href="https://github.com/kangax/html-minifier" rel="noopener noreferrer"&gt;HTMLMinifier&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a title="Styled Components" href="https://www.styled-components.com/" rel="nofollow noopener noreferrer"&gt;&lt;img alt="Styled Components" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fstyled-components%2Fbrand%2Fmaster%2Fstyled-components.png" width="18" height="18"&gt;&lt;/a&gt; &lt;a href="https://www.styled-components.com/" rel="nofollow noopener noreferrer"&gt;Styled Components&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a title="Material-UI" href="http://www.material-ui.com/#/" rel="nofollow noopener noreferrer"&gt;&lt;img alt="Material-UI" src="https://camo.githubusercontent.com/6c167e85f4fdfb79727907fce90c9b4922c92fbec3f86fe5d49628bac393855c/68747470733a2f2f63646e2e776f726c64766563746f726c6f676f2e636f6d2f6c6f676f732f6d6174657269616c2d75692e737667" width="" height="18"&gt;&lt;/a&gt; &lt;a href="http://www.material-ui.com/#/" rel="nofollow noopener noreferrer"&gt;Material-UI&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Getting Started&lt;/h2&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Initial steps
&lt;ul&gt;
&lt;li&gt;Install &lt;a title="Node.js" href="https://nodejs.org/en/" rel="nofollow noopener noreferrer"&gt;&lt;img alt="Node.js" src="https://camo.githubusercontent.com/9c24355bb3afbff914503b663ade7beb341079fa/68747470733a2f2f6e6f64656a732e6f72672f7374617469632f696d616765732f6c6f676f2d6c696768742e737667" width="" height="18"&gt;&lt;/a&gt; and &lt;a title="Yarn" href="https://yarnpkg.com/lang/en/" rel="nofollow noopener noreferrer"&gt;&lt;img alt="Yarn" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fyarnpkg%2Fassets%2Fmaster%2Fyarn-kitten-full.svg%3Fsanitize%3Dtrue" width="" height="18"&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/kireerik/razzle-material-ui-styled-example/archive/master.zip" rel="noopener noreferrer"&gt;Download&lt;/a&gt; or &lt;a href="https://github.com/kireerik/razzle-material-ui-styled-examplegithub-windows://openRepo/https://github.com/kireerik/razzle-material-ui-styled-example" rel="nofollow noopener noreferrer"&gt;clone&lt;/a&gt; this repository.&lt;/li&gt;
&lt;li&gt;Open a command prompt in the project folder.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Install dependencies:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;yarn install&lt;/pre&gt;

&lt;/div&gt;
&lt;/blockquote&gt;

&lt;p&gt;Start the server:&lt;/p&gt;

&lt;blockquote&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;yarn start&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;This command initiates a build process and starts the server in production mode.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Visit &lt;a href="http://localhost/" rel="nofollow noopener noreferrer"&gt;http://localhost/&lt;/a&gt; to access the web application.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Development&lt;/h3&gt;

&lt;/div&gt;

&lt;p&gt;Start the server in development mode:&lt;/p&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;yarn dev&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Single route static site generation&lt;/h3&gt;

&lt;/div&gt;

&lt;p&gt;Generate a static site:&lt;/p&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;yarn static&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Open the &lt;code&gt;index.html&lt;/code&gt; within the &lt;code&gt;static&lt;/code&gt; folder to access the web application. The…&lt;/p&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/kireerik/razzle-material-ui-styled-example" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;blockquote&gt;
&lt;p&gt;Wait! Are you on some kind of Unix based system? Mac? Linux? If so you might want to change the &lt;code&gt;PORT&lt;/code&gt; within the &lt;a href="https://github.com/kireerik/razzle-material-ui-styled-example/blob/6ad048dbb9fb6565070c9bd48bb0617a052b2572/.env#L2" rel="noopener noreferrer"&gt;&lt;code&gt;.env&lt;/code&gt;&lt;/a&gt; file, which I have set to &lt;code&gt;80&lt;/code&gt; which works on Windows. &lt;a href="https://github.com/jaredpalmer/razzle" rel="noopener noreferrer"&gt;Razzle&lt;/a&gt;'s default is &lt;code&gt;3000&lt;/code&gt; so you can remove that line if you feel like it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The project is up and running.&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fumu057rj5xoq0j7q0f5h.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fumu057rj5xoq0j7q0f5h.gif" alt="development mode"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go wild and experiment!&lt;/p&gt;

&lt;p&gt;I am not joking. Close this article right now and try the project instead!&lt;/p&gt;

&lt;p&gt;Just kidding! 😄 You can read on later...&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Are you lazy? &lt;a href="https://codenvy.io/dashboard/#/load-factory?id=factoryffyherfcfvcdm83r" rel="noopener noreferrer"&gt;Start the project on Codenvy&lt;/a&gt; instead! One click and the project is up and running after login.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Are you still reading? All right, I will hold your hand and walk you through it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;Things will get boring here. I have told you to try it yourself instead.&lt;/p&gt;

&lt;p&gt;All right, jokes aside. We are getting serious here.&lt;/p&gt;

&lt;h3&gt;
  
  
  Basic
&lt;/h3&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fx569tgx1153ux0mgd53o.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fx569tgx1153ux0mgd53o.png" alt="folder structure"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Folder structure&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;public ⬅Static files are here.&lt;/li&gt;
&lt;li&gt;src

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;application/&lt;strong&gt;&lt;a href="https://github.com/kireerik/razzle-material-ui-styled-example/blob/master/src/application/Main.js" rel="noopener noreferrer"&gt;Main.js&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt; ⬅The main React.js component.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;&lt;a href="https://github.com/kireerik/razzle-material-ui-styled-example/blob/master/src/server.js" rel="noopener noreferrer"&gt;server.js&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt; ⬅Serves the minified HTML.&lt;/li&gt;
&lt;li&gt;client.js, index.js, static.js ⬅"Lower level" scripts (will discuss later).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;As you may already figured out. The &lt;code&gt;Main.js&lt;/code&gt; contains the React.js component. So basically you can change the main content of your site &lt;a href="https://github.com/kireerik/razzle-material-ui-styled-example/blob/master/src/application/Main.js#L47-L55" rel="noopener noreferrer"&gt;here&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F1k1kehgi3glmbar37m0p.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F1k1kehgi3glmbar37m0p.png" alt="source code"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;server.js&lt;/code&gt; &lt;a href="https://github.com/kireerik/razzle-material-ui-styled-example/blob/master/src/server.js#L30" rel="noopener noreferrer"&gt;renders the React.js application, collects the styles&lt;/a&gt;, and serves all of this content as HTML when you visit the site.&lt;/p&gt;

&lt;p&gt;Inspect the source code! Yes, the dream came true. It is a properly minified one-liner. You can &lt;a href="https://github.com/kireerik/razzle-material-ui-styled-example/blob/master/src/server.js#L34-L56" rel="noopener noreferrer"&gt;modify your main HTML here&lt;/a&gt;, mainly your header.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/kireerik/razzle-material-ui-styled-example#getting-started" rel="noopener noreferrer"&gt;How to actually start the project&lt;/a&gt; is detailed in the already linked readme. &lt;a href="https://github.com/kireerik/razzle-material-ui-styled-example#features" rel="noopener noreferrer"&gt;Features&lt;/a&gt; of the example project are listed there too.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  📝 Code
&lt;/h4&gt;

&lt;p&gt;Styling components in &lt;code&gt;Main.js&lt;/code&gt; is this easy with &lt;a href="https://www.styled-components.com/" rel="noopener noreferrer"&gt;Styled Components&lt;/a&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="nx"&gt;styled&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;styled-components&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Div&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;styled&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="s2"&gt;`
    text-align: center;
`&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Main&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&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;Div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is how Server Side Rendering works with Styled Components in &lt;code&gt;server.js&lt;/code&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;renderToString&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;react-dom/server&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;ServerStyleSheet&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;styled-components&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Application&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;./application/Main&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sheet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ServerStyleSheet&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;renderToString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sheet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;collectStyles&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Application&lt;/span&gt; &lt;span class="o"&gt;/&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;css&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;sheet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getStyleTags&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;// server response to send:&lt;/span&gt;
    &lt;span class="s2"&gt;`&amp;lt;!DOCTYPE HTML&amp;gt;
    &amp;lt;html lang="en"&amp;gt;
        &amp;lt;head&amp;gt;`&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;css&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;`&amp;lt;/head&amp;gt;
        &amp;lt;body&amp;gt;
            &amp;lt;div id="root"&amp;gt;`&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;html&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;`&amp;lt;/div&amp;gt;
        &amp;lt;/body&amp;gt;
    &amp;lt;/html&amp;gt;`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It also includes some extra, like &lt;a href="https://github.com/kireerik/razzle-material-ui-styled-example/blob/master/src/server.js#L26-L27" rel="noopener noreferrer"&gt;compression for static resources&lt;/a&gt; and HTML minification:&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;minify&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;html-minifier&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="nf"&gt;minify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s2"&gt;`&amp;lt;!DOCTYPE HTML&amp;gt;&amp;lt;html lang="en"&amp;gt;...&amp;lt;/html&amp;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;collapseWhitespace&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="na"&gt;removeComments&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="na"&gt;minifyCSS&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="na"&gt;minifyJS&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Advanced
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;src/index.js&lt;/code&gt; is the main entry point for the &lt;strong&gt;server&lt;/strong&gt;. This is required by Razzle.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;src/client.js&lt;/code&gt; is the main entry point for the &lt;strong&gt;browser&lt;/strong&gt;. This is also required by Razzle.&lt;/p&gt;

&lt;p&gt;The optional &lt;code&gt;.env&lt;/code&gt; contains some environment variable definitions.&lt;/p&gt;

&lt;p&gt;You can find the build scripts in &lt;code&gt;package.json&lt;/code&gt; under the &lt;code&gt;scripts&lt;/code&gt; object.&lt;/p&gt;

&lt;h4&gt;
  
  
  📝 Code
&lt;/h4&gt;

&lt;p&gt;This is how the main entry point (&lt;code&gt;index.js&lt;/code&gt;) starts the server (&lt;code&gt;server.js&lt;/code&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="nx"&gt;express&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;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;server&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;./server&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;handle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is the full &lt;a href="https://github.com/kireerik/razzle-material-ui-styled-example/blob/d85a4f762220cfd33d45797f192858307b288d4e/src/index.js" rel="noopener noreferrer"&gt;simplest version of index.js&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/kireerik/razzle-material-ui-styled-example/blob/master/src/client.js" rel="noopener noreferrer"&gt;client.js&lt;/a&gt; entry point hydrates the already rendered application in the browser:&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;hydrate&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;react-dom&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Application&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;./application/Main&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="nf"&gt;hydrate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Application&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;root&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In &lt;a href="https://github.com/kireerik/razzle-material-ui-styled-example/blob/master/package.json#L2-L7" rel="noopener noreferrer"&gt;package.json&lt;/a&gt;, the &lt;code&gt;start&lt;/code&gt; script is using a build and run approach:&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;"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;"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;"razzle build &amp;amp;&amp;amp; cross-env NODE_ENV=production node build/server.js"&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;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fac6c8kl2xu1vals19v7u.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fac6c8kl2xu1vals19v7u.gif" alt="yarn start.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Material-UI
&lt;/h4&gt;

&lt;p&gt;Server Side Rendering makes it a bit more complex to use Material-UI properly. Setting the &lt;code&gt;userAgent&lt;/code&gt; is not necessarily straightforward (at least for me). However, the &lt;a href="http://www.material-ui.com/#/get-started/server-rendering" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; is not that bad.&lt;/p&gt;

&lt;p&gt;The following codes with the links are hopefully giving some context:&lt;br&gt;
&lt;a href="https://github.com/kireerik/razzle-material-ui-styled-example/blob/master/src/server.js#L30" rel="noopener noreferrer"&gt;server.js&lt;/a&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="nf"&gt;renderToString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Application&lt;/span&gt; &lt;span class="nx"&gt;userAgent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user-agent&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt; &lt;span class="sr"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/kireerik/razzle-material-ui-styled-example/blob/master/src/client.js#L6" rel="noopener noreferrer"&gt;client.js&lt;/a&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="nf"&gt;hydrate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Application&lt;/span&gt; &lt;span class="nx"&gt;userAgent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userAgent&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&amp;gt;, document.getElementById&lt;/span&gt;&lt;span class="se"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;'root'&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="err"&gt;)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/kireerik/razzle-material-ui-styled-example/blob/master/src/application/Main.js#L29" rel="noopener noreferrer"&gt;Main.js&lt;/a&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;Main&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Component&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="nx"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;)&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="nx"&gt;properties&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;muiTheme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getMuiTheme&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="na"&gt;userAgent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userAgent&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nx"&gt;render&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&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;MuiThemeProvider&lt;/span&gt; &lt;span class="nx"&gt;muiTheme&lt;/span&gt;&lt;span class="o"&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;muiTheme&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/MuiThemeProvider&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/37816998/react-server-side-rendering-with-express-warning-on-the-client-checksum-styl/43958663#43958663" rel="noopener noreferrer"&gt;Read this solution on Stack Overflow&lt;/a&gt; and press the vote up button if you find it useful too.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Single route static site generation
&lt;/h4&gt;

&lt;p&gt;The optional &lt;a href="https://github.com/kireerik/razzle-material-ui-styled-example/blob/master/src/static.js" rel="noopener noreferrer"&gt;static.js&lt;/a&gt; is &lt;a href="https://github.com/kireerik/razzle-material-ui-styled-example/blob/master/src/index.js#L25" rel="noopener noreferrer"&gt;called from the main server entry point&lt;/a&gt; (&lt;code&gt;index.js&lt;/code&gt;). It grabs the already generated static resources and copies them into the &lt;code&gt;static&lt;/code&gt; folder. Plus it visits the URL and saves the HTML response:&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="nx"&gt;http&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;http&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;fs&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;fs-extra&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;staticDirectory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;RAZZLE_STATIC_PATH&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;static&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http://&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;HOST&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;
    &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;headers&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;User-Agent&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="s1"&gt;all&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="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
    &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&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="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;staticDirectory&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&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="nx"&gt;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;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F81237x87taxesjq8lfqw.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F81237x87taxesjq8lfqw.gif" alt="static site generation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The static site generation script is somewhat complex:&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;"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;"static"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cross-env RAZZLE_STATIC=true razzle build &amp;amp;&amp;amp; cross-env NODE_ENV=production node build/server.js"&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;ol&gt;
&lt;li&gt;A regular Razzle build is created with the static setting (&lt;code&gt;RAZZLE_STATIC=true&lt;/code&gt;) baked into the generated server side code.&lt;/li&gt;
&lt;li&gt;This build is started in &lt;code&gt;production&lt;/code&gt; mode.&lt;/li&gt;
&lt;li&gt;The static generator is only executed this time. It performs the steps described before and closes the server.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  About the example
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Motivation
&lt;/h3&gt;

&lt;p&gt;I wanted to create a more current and appealing version of &lt;a href="https://searchisback.com/" rel="noopener noreferrer"&gt;Search is Back!&lt;/a&gt;. Why? Because I thought I could do it better and I still think I can.&lt;br&gt;
I quickly realized that I will need to combine a couple of technologies to implement my vision.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So "...after testing a bunch of example projects, I ended up finding and using Razzle." (&lt;a href="https://github.com/jaredpalmer/razzle/issues/289#issuecomment-306586593" rel="noopener noreferrer"&gt;source&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I also needed to choose between Material-UI and Muse UI. (Using material design was no question for me at this point.) I considered other libraries as well. But I quickly fell in love with Material-UI's &lt;a href="http://www.material-ui.com/#/components/checkbox" rel="noopener noreferrer"&gt;checkbox animation&lt;/a&gt;. It was really robust anyway.&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fmj567oylnus5hx27ghvg.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fmj567oylnus5hx27ghvg.gif" alt="checkbox animation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First, I wanted to go with Muse UI, which is a port of Material-UI because I thought I would like Vue.js more than React.js.&lt;/p&gt;

&lt;p&gt;However, its documentation was Chinese only at that time, so I choose the original library instead.&lt;/p&gt;

&lt;p&gt;Having the CSS and HTML kind of combined into JavaScript using React.js felt a bit strange for the first time. Later, when I used Vue.js for some small client projects, I realized that I actually like the React way a bit more, especially with Styled Components.&lt;/p&gt;

&lt;p&gt;Eventually, I created this example project. So I was able to start with my real one called &lt;a href="https://facebooksearcher.com/" rel="noopener noreferrer"&gt;Facebook Searcher&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://facebooksearcher.com/" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fclkoqfkhguxaombf2p9a.png" alt="Facebook Searcher"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is a simple search form that builds a link so you can make custom searches currently for people on Facebook the regular way.&lt;br&gt;
You can already use the implemented fields and it already gives more freedom than its competitor.&lt;/p&gt;

&lt;p&gt;For example, you can list Facebook users with an interest in both sexes (which Facebook supports). It is still under development and some features are waiting for implementation.&lt;br&gt;
So feel free to let me know if you want to support this project in any way!&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://github.com/michaelrambeau/bestofjs/issues/91#issuecomment-307631163" rel="noopener noreferrer"&gt;Other reasons&lt;/a&gt;
&lt;/h4&gt;

&lt;h3&gt;
  
  
  What is &lt;a href="https://github.com/jaredpalmer/razzle" rel="noopener noreferrer"&gt;Razzle&lt;/a&gt;?
&lt;/h3&gt;

&lt;p&gt;A framework-agnostic build tool for server-rendered universal JavaScript applications.&lt;/p&gt;

&lt;h4&gt;
  
  
  Why Razzle?
&lt;/h4&gt;

&lt;p&gt;Server side rendering is easy with Razzle. This was a must have for me. Plus, it doesn't force you to use solutions that you don't want to use.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So it "...is [...] minimalistic..." (&lt;a href="https://github.com/jaredpalmer/razzle/issues/289#issuecomment-306586593" rel="noopener noreferrer"&gt;source&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hot module reloading is also a nice feature to have. Customizing or extending defaults is simple too.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;All this makes Razzle "...a nearly framework-agnostic build system..." which "...will 100% work with Angular, Vue, Rax, Preact, Inferno, React-XP, RN-Web..." - Jared Palmer (&lt;a href="https://github.com/jaredpalmer/razzle/issues/289#issuecomment-306593963" rel="noopener noreferrer"&gt;source&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://github.com/jaredpalmer/razzle/issues/332" rel="noopener noreferrer"&gt;Who is using it?&lt;/a&gt;
&lt;/h4&gt;

&lt;h3&gt;
  
  
  What's next?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://facebooksearcher.com" rel="noopener noreferrer"&gt;Facebook Searcher&lt;/a&gt; was first "deployed" to an old-school hosting provider. I had Secure Shell access there, so I was able to install Node.js.&lt;/p&gt;

&lt;p&gt;I used Process Manager 2 to make sure it is running no matter what. Of course, this wasn't as fast as having a static website. Plus, I didn't have a good framework for deployments and updates in place. After a while, I started to save the HTML by hand and publish the application on Netlify this way. It was more reliable and the application loaded way faster too.&lt;/p&gt;

&lt;p&gt;Later on, I switched to Firebase Hosting, which is even faster and even more reliable in general. I implemented the static site generation feature somewhere at this point. Doing it by hand was unsustainable for sure. Now I can build and deploy Facebook Searcher with just one command. I can now focus hard on implementing the remaining features.&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fg4pfcbb29q2h8rgf0a0j.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fg4pfcbb29q2h8rgf0a0j.png" alt="firebase deploy.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Deploying our application to Firebase Hosting is easy. Moreover, we can still deploy it as a Firebase Function instead (&lt;a href="https://github.com/jaredpalmer/razzle/tree/master/examples/with-firebase-functions" rel="noopener noreferrer"&gt;basic example&lt;/a&gt;). Maybe this topic alone would worth another article regardless the easiness.&lt;/p&gt;

&lt;p&gt;Currently, my project doesn't come with rooting. If you need it for your project, you can add a router or you can consider using &lt;a href="https://github.com/jaredpalmer/after.js" rel="noopener noreferrer"&gt;After.js&lt;/a&gt; instead, which is basically Razzle with routing and related capabilities.&lt;/p&gt;

&lt;p&gt;I am also looking forward to updating the project to the 1. version of Material-UI once they release it and add back the checkbox animations that I love so much.&lt;/p&gt;

&lt;h2&gt;
  
  
  Take away
&lt;/h2&gt;

&lt;p&gt;Experimenting and or reading this article you can use Material-UI quickly and easily in a sophisticated way. So go ahead and build something wonderful! 🎉&lt;/p&gt;

&lt;p&gt;Would you use this setup? Do you prefer something else?&lt;/p&gt;

&lt;p&gt;⬇ &lt;strong&gt;Reply&lt;/strong&gt;, &lt;strong&gt;ask&lt;/strong&gt; and &lt;strong&gt;share your experience&lt;/strong&gt; in the comments below!&lt;/p&gt;

&lt;p&gt;Did you enjoy this article?&lt;/p&gt;

&lt;p&gt;⬇ 💖&lt;strong&gt;Heart&lt;/strong&gt; the article!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Share&lt;/strong&gt; this step-by-step guide &lt;strong&gt;with&lt;/strong&gt; your &lt;strong&gt;friends&lt;/strong&gt; and colleges!&lt;/p&gt;

&lt;p&gt;Copy the link from the address bar. Message your peers directly. 👋Say hi and send the article to them.&lt;/p&gt;

&lt;h3&gt;
  
  
  💌 Newsletter
&lt;/h3&gt;

&lt;p&gt;by Erik Engi&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://my.sendinblue.com/users/subscribe/js_id/32wxl/id/2" rel="noopener noreferrer"&gt;Subscribe now&lt;/a&gt;&lt;/strong&gt; and get actionable technical articles into your inbox.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Erik will only email you when he has something important to say. Just like you, he is usually very busy. So this will only happen every now and then and you can unsubscribe at any time.&lt;/p&gt;

&lt;p&gt;Follow &lt;a href="https://dev.to/kireerik"&gt;Erik Engi on DEV&lt;/a&gt; and &lt;a href="https://medium.com/@erikengi" rel="noopener noreferrer"&gt;on Medium&lt;/a&gt; to get notified about new articles.&lt;/p&gt;

&lt;h3&gt;
  
  
  Work with Erik Engi
&lt;/h3&gt;

&lt;p&gt;Do you or your company have valuable projects and products? Want to extend your team with a world-class developer?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSdRPRPFiYihG03lNUaKa1hU6z_BePrDwVCyV65S3ZLhvADyIw/viewform" rel="noopener noreferrer"&gt;Hire now&lt;/a&gt; – Erik is available for hire&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;center&gt;&lt;a href="https://oengi.com/" rel="noopener noreferrer"&gt;Oengi.com&lt;/a&gt;&lt;/center&gt;
&lt;/h3&gt;

&lt;p&gt;Erik can work full time for you or at your company.&lt;br&gt;
Do you or your team need programming help? &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSdRPRPFiYihG03lNUaKa1hU6z_BePrDwVCyV65S3ZLhvADyIw/viewform?entry.600696459=mentorship" rel="noopener noreferrer"&gt;Book 1:1 session&lt;/a&gt;s with Erik!&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.codementor.io/kireerik/material-ui-get-started-fast-react-16-fjan7erke" rel="noopener noreferrer"&gt;codementor.io&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>node</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
