<?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: Dmitriy Belyaev</title>
    <description>The latest articles on DEV Community by Dmitriy Belyaev (@dbelyaeff).</description>
    <link>https://dev.to/dbelyaeff</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%2F103898%2F52f0b48a-2497-45d1-9cc2-44872a2d6976.jpeg</url>
      <title>DEV Community: Dmitriy Belyaev</title>
      <link>https://dev.to/dbelyaeff</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dbelyaeff"/>
    <language>en</language>
    <item>
      <title>Livewire Notifier</title>
      <dc:creator>Dmitriy Belyaev</dc:creator>
      <pubDate>Sun, 11 Apr 2021 08:23:52 +0000</pubDate>
      <link>https://dev.to/dbelyaeff/livewire-notifier-585e</link>
      <guid>https://dev.to/dbelyaeff/livewire-notifier-585e</guid>
      <description>&lt;p&gt;Greetings!&lt;/p&gt;

&lt;p&gt;Let me to introduce new TALL-stack component &lt;a href="https://github.com/codespb/livewire-notifier" rel="noopener noreferrer"&gt;Livewire Notifier&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It brings modern notifications system both for Frontend and Backend. Messages can be spawned either by JavaScript from browser or by PHP from any Livewire Component or Laravel Controller. It has zero dependencies above TALL-stack itself.&lt;/p&gt;

&lt;p&gt;Let's start.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flzlqprw6bem4tq5ccsjq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flzlqprw6bem4tq5ccsjq.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Livewire - Notifier
&lt;/h1&gt;

&lt;p&gt;Livewire Notifier is a simple notifications system with zero dependencies above &lt;a href="https://tallstack.dev/" rel="noopener noreferrer"&gt;TALL-stack&lt;/a&gt; (Tailwind CSS, Alpine.JS, Laravel and Livewire).&lt;/p&gt;

&lt;h2&gt;
  
  
  Requirements
&lt;/h2&gt;

&lt;p&gt;Make sure that &lt;a href="https://laravel-livewire.com/" rel="noopener noreferrer"&gt;Livewire&lt;/a&gt; and &lt;a href="https://github.com/alpinejs/alpine" rel="noopener noreferrer"&gt;Alpine.JS&lt;/a&gt; are installed properly.&lt;br&gt;
The easiest way to do it is to install &lt;a href="https://jetstream.laravel.com" rel="noopener noreferrer"&gt;Laravel Jetstream&lt;/a&gt; with &lt;strong&gt;Livewire stack&lt;/strong&gt; (post-install command &lt;code&gt;php artisan jetstream:install livewire&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Alpine.JS&lt;/strong&gt; must be imported in &lt;code&gt;resources/js/app.js&lt;/code&gt; package:&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;alpinejs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Livewire&lt;/strong&gt; scripts and styles tags must be present in the layout file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;…
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
…
    &lt;span class="nt"&gt;&amp;lt;livewire:styles/&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;livewire:scripts/&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;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;Via Composer&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;composer require codespb/livewire-notifier
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Proceed with installation process:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;php artisan livewire-notifier:install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Afterwards the package config can be found at &lt;code&gt;config/livewire-notifier.php&lt;/code&gt; and views at &lt;code&gt;resources/views/vendor/livewire-notifier/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It's required because of Tailwind config is needed to be extended with new purge paths.&lt;/p&gt;

&lt;p&gt;Otherwise you won't see messages styled properly.&lt;/p&gt;

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

&lt;p&gt;Put Livewire-component &lt;code&gt;&amp;lt;livewire:notifier/&amp;gt;&lt;/code&gt; into the app layout.&lt;br&gt;
Make sure to insert it into correct context because it may be positioned absolutely.&lt;/p&gt;

&lt;p&gt;Now you can use it from frontend and backend both.&lt;/p&gt;
&lt;h2&gt;
  
  
  Message options
&lt;/h2&gt;

&lt;p&gt;Message added at backend (from any Livewire component) must have type of &lt;code&gt;array&lt;/code&gt;.&lt;br&gt;
Message added at frontend (from JavaScript) must have type of &lt;code&gt;object&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s1"&gt;'text'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Post is saved!'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="s1"&gt;'title'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Optional&lt;/span&gt;
        &lt;span class="s1"&gt;'type'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'success'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Optional. By default: success | optional: error (or fail), warning (or warn), info&lt;/span&gt;
        &lt;span class="c1"&gt;// you can find all types options in the config file&lt;/span&gt;
        &lt;span class="s1"&gt;'icon'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Optional. It replaces the default type icon. Can be pure html or svg code&lt;/span&gt;

        &lt;span class="c1"&gt;// Attention! The following options override ones from the config file&lt;/span&gt;

        &lt;span class="s1"&gt;'duration'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Optional. The time of message to be shown. To show infinitely set to 0&lt;/span&gt;
        &lt;span class="s1"&gt;'msgClass'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;  &lt;span class="s1"&gt;'bg-gradient-to-r from-green-200 to-green-300'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Optional. Tailwind class for message container&lt;/span&gt;
        &lt;span class="s1"&gt;'progressClass'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;  &lt;span class="s1"&gt;'bg-green-500'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Optional. Tailwind class for progress bar. If null progress bar won't be shown&lt;/span&gt;
        &lt;span class="s1"&gt;'closable'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Optional. True by default. Whether message is closable by click on message or Esc key press on window&lt;/span&gt;
    &lt;span class="p"&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="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Post is saved!&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;h3&gt;
  
  
  Backend
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Livewire event&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;From any Livewire component push &lt;code&gt;emit&lt;/code&gt; trigger to render new message.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="mf"&gt;...&lt;/span&gt;
    &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;emitTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'notifier'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'message'&lt;/span&gt;&lt;span class="p"&gt;,[&lt;/span&gt;&lt;span class="s1"&gt;'text'&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'The post is saved!'&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;strong&gt;Session flash variable&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="mf"&gt;...&lt;/span&gt;
    &lt;span class="nf"&gt;session&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;flash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'notifier'&lt;/span&gt;&lt;span class="p"&gt;,[&lt;/span&gt;&lt;span class="s1"&gt;'text'&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'The post is saved!'&lt;/span&gt;&lt;span class="p"&gt;)]);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;redirect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'posts'&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;h3&gt;
  
  
  Frontend
&lt;/h3&gt;

&lt;p&gt;Add new message from javascript:&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="nx"&gt;Livewire&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;emitTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;notifier&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;message&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,{&lt;/span&gt;&lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;The post is saved!&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;
    &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fcodespb%2Flivewire-notifier%2Fblob%2Fmain%2Fscreenshots%2Flivewire-notifier-basic.jpg%3Fraw%3Dtrue" 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%2Fgithub.com%2Fcodespb%2Flivewire-notifier%2Fblob%2Fmain%2Fscreenshots%2Flivewire-notifier-basic.jpg%3Fraw%3Dtrue" alt="Livewire Notifier"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;

&lt;p&gt;Try to put the following code (with Laravel Jetstream w/Livewire stack installed):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"flex flex-row space-x-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;x-jet-button&lt;/span&gt; &lt;span class="na"&gt;x-data=&lt;/span&gt;&lt;span class="s"&gt;"{}"&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;"Livewire.emitTo('notifier','message',{text:'Success',type:'success'})"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Success&lt;span class="nt"&gt;&amp;lt;/x-jet-button&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;x-jet-button&lt;/span&gt; &lt;span class="na"&gt;x-data=&lt;/span&gt;&lt;span class="s"&gt;"{}"&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;"Livewire.emitTo('notifier','message',{text:'Error',type:'error'})"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Error&lt;span class="nt"&gt;&amp;lt;/x-jet-button&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;x-jet-button&lt;/span&gt; &lt;span class="na"&gt;x-data=&lt;/span&gt;&lt;span class="s"&gt;"{}"&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;"Livewire.emitTo('notifier','message',{text:'Warning',type:'warning'})"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Warning&lt;span class="nt"&gt;&amp;lt;/x-jet-button&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;x-jet-button&lt;/span&gt; &lt;span class="na"&gt;x-data=&lt;/span&gt;&lt;span class="s"&gt;"{}"&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;"Livewire.emitTo('notifier','message',{text:'Info',type:'info'})"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Info&lt;span class="nt"&gt;&amp;lt;/x-jet-button&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;x-jet-button&lt;/span&gt; &lt;span class="na"&gt;x-data=&lt;/span&gt;&lt;span class="s"&gt;"{}"&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;"Livewire.emitTo('notifier','message',{text:'Default',type:'default'})"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Default&lt;span class="nt"&gt;&amp;lt;/x-jet-button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Config file
&lt;/h2&gt;

&lt;p&gt;After &lt;code&gt;php artisan livewire-notifier:install&lt;/code&gt; command is fired, config file will be published to &lt;code&gt;config/livewire-notifier.php&lt;/code&gt;. There you can change some value for customization.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="c1"&gt;// Messages container positioning&lt;/span&gt;
    &lt;span class="s1"&gt;'positionClass'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'absolute top-0 right-0'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="c1"&gt;// Default message Tailwind stylinh&lt;/span&gt;
    &lt;span class="s1"&gt;'defaultMsgClass'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'w-80 rounded-xl shadow-xl'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="c1"&gt;// Time of each message to be shown by default&lt;/span&gt;
    &lt;span class="s1"&gt;'duration'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;2200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="c1"&gt;// Messages types&lt;/span&gt;
    &lt;span class="s1"&gt;'types'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s1"&gt;'success'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="c1"&gt;// 'msgClass'=&amp;gt;'bg-green-200',&lt;/span&gt;
            &lt;span class="s1"&gt;'msgClass'&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="s1"&gt;'bg-gradient-to-r from-green-200 to-green-300'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s1"&gt;'progressClass'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'bg-green-500'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="c1"&gt;// View for icon&lt;/span&gt;
            &lt;span class="s1"&gt;'icon'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'livewire-notifier::icons.success'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="s1"&gt;'error'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="c1"&gt;// 'msgClass'=&amp;gt;'bg-red-200',&lt;/span&gt;
            &lt;span class="s1"&gt;'msgClass'&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="s1"&gt;'bg-gradient-to-r from-red-200 to-red-300'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s1"&gt;'progressClass'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'bg-red-500'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="c1"&gt;// View for icon&lt;/span&gt;
            &lt;span class="s1"&gt;'icon'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'livewire-notifier::icons.error'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="s1"&gt;'fail'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="c1"&gt;// 'msgClass'=&amp;gt;'bg-red-200',&lt;/span&gt;
            &lt;span class="s1"&gt;'msgClass'&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="s1"&gt;'bg-gradient-to-r from-red-200 to-red-300'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s1"&gt;'progressClass'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'bg-red-500'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="c1"&gt;// View for icon&lt;/span&gt;
            &lt;span class="s1"&gt;'icon'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'livewire-notifier::icons.error'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="s1"&gt;'warning'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="c1"&gt;// 'msgClass'=&amp;gt;'bg-yellow-200',&lt;/span&gt;
            &lt;span class="s1"&gt;'msgClass'&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="s1"&gt;'bg-gradient-to-r from-yellow-200 to-yellow-300'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s1"&gt;'progressClass'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'bg-yellow-500'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="c1"&gt;// View for icon&lt;/span&gt;
            &lt;span class="s1"&gt;'icon'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'livewire-notifier::icons.error'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="s1"&gt;'warn'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="c1"&gt;// 'msgClass'=&amp;gt;'bg-yellow-200',&lt;/span&gt;
            &lt;span class="s1"&gt;'msgClass'&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="s1"&gt;'bg-gradient-to-r from-yellow-200 to-yellow-300'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s1"&gt;'progressClass'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'bg-yellow-500'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="c1"&gt;// View for icon&lt;/span&gt;
            &lt;span class="s1"&gt;'icon'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'livewire-notifier::icons.error'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="s1"&gt;'info'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="c1"&gt;// 'msgClass'=&amp;gt;'bg-blue-200',&lt;/span&gt;
            &lt;span class="s1"&gt;'msgClass'&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="s1"&gt;'bg-gradient-to-r from-blue-200 to-blue-300'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s1"&gt;'progressClass'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'bg-blue-500'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="c1"&gt;// View for icon&lt;/span&gt;
            &lt;span class="s1"&gt;'icon'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'livewire-notifier::icons.info'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="s1"&gt;'default'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="c1"&gt;// 'msgClass'=&amp;gt;'bg-gray-200',&lt;/span&gt;
            &lt;span class="s1"&gt;'msgClass'&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="s1"&gt;'bg-gradient-to-r from-gray-200 to-gray-300'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s1"&gt;'progressClass'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'bg-gray-700'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="c1"&gt;// View for icon&lt;/span&gt;
            &lt;span class="s1"&gt;'icon'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'livewire-notifier::icons.info'&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;That is all!&lt;/p&gt;

&lt;p&gt;P.S. If you would like to support this package, please, give it a star on GitHub:&lt;br&gt;
&lt;a href="https://github.com/codespb/livewire-notifier" rel="noopener noreferrer"&gt;https://github.com/codespb/livewire-notifier&lt;/a&gt;&lt;/p&gt;

</description>
      <category>livewire</category>
      <category>tall</category>
      <category>alpine</category>
      <category>laravel</category>
    </item>
    <item>
      <title>Creating a plugin for Cogear.JS</title>
      <dc:creator>Dmitriy Belyaev</dc:creator>
      <pubDate>Tue, 09 Oct 2018 19:31:23 +0000</pubDate>
      <link>https://dev.to/cogear/creating-a-plugin-for-cogearjs-25h4</link>
      <guid>https://dev.to/cogear/creating-a-plugin-for-cogearjs-25h4</guid>
      <description>&lt;p&gt;&lt;a href="https://cogearjs.org" rel="noopener noreferrer"&gt;Cogear.JS&lt;/a&gt; is a modern static websites generator built with &lt;a href="https://nodejs.org" rel="noopener noreferrer"&gt;Node.JS&lt;/a&gt; and based on &lt;a href="https://webpack.js.org" rel="noopener noreferrer"&gt;Webpack&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you have missed introduction to &lt;strong&gt;Cogear.JS&lt;/strong&gt; article series, you're welcome:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;div class="ltag__link__content"&gt;
    &lt;div class="missing"&gt;
      &lt;h2&gt;Article No Longer Available&lt;/h2&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class="ltag__link"&gt;
  &lt;div class="ltag__link__content"&gt;
    &lt;div class="missing"&gt;
      &lt;h2&gt;Article No Longer Available&lt;/h2&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class="ltag__link"&gt;
  &lt;div class="ltag__link__content"&gt;
    &lt;div class="missing"&gt;
      &lt;h2&gt;Article No Longer Available&lt;/h2&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;It's time to talk about crafting plugins.&lt;/p&gt;

&lt;p&gt;Let’s start from giving a definition to a plugin.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Plugin is a module which can hook into the system core to change its behavior.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Node.JS&lt;/strong&gt; has first-party &lt;a href="https://nodejs.org/api/events.html" rel="noopener noreferrer"&gt;EventEmitter&lt;/a&gt; – a huge API surface with synchronous event emitting, magic error event and flawed memory leak detected. &lt;strong&gt;Cogear.JS&lt;/strong&gt; uses the small library called &lt;a href="https://github.com/sindresorhus/emittery" rel="noopener noreferrer"&gt;Emittery&lt;/a&gt;, which has none of that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cogear.JS&lt;/strong&gt; core is built from modules. Take a look at &lt;a href="https://github.com/codemotion/cogear.js/blob/master/lib/cogear.js" rel="noopener noreferrer"&gt;the main script file&lt;/a&gt; in the repository and all modules it has plugged in.&lt;/p&gt;

&lt;h3&gt;
  
  
  Source of &lt;code&gt;./lib/cogear.js&lt;/code&gt;
&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%2F3az9aq4mxh88vwmrzrmv.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%2F3az9aq4mxh88vwmrzrmv.png" alt="Source of ./lib/cogear.js"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Moreover &lt;strong&gt;Cogear.JS&lt;/strong&gt; main object class is globally available and extends Emittery, so events can be called throughout the entire code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cogear.JS&lt;/strong&gt; as an inheritor of &lt;strong&gt;Emittery&lt;/strong&gt; has two methods – &lt;code&gt;on&lt;/code&gt; and &lt;code&gt;emit&lt;/code&gt;. With &lt;code&gt;on&lt;/code&gt; method you can add callback function for named event. And with &lt;code&gt;emit&lt;/code&gt; method you call this event with or without arguments. &lt;/p&gt;

&lt;p&gt;Read more at the &lt;a href="https://github.com/sindresorhus/emittery" rel="noopener noreferrer"&gt;Emittery docs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Arguments can be easily fetched from the context of globally available &lt;code&gt;cogear&lt;/code&gt; instance. Or you can pass them manually.&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%2Fyvvbjdysc24wlfz03i3g.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%2Fyvvbjdysc24wlfz03i3g.png" alt="Cogear on ane emit methods"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To look through all the events use &lt;a href="https://github.com/codemotion/cogear.js/search?utf8=%E2%9C%93&amp;amp;q=cogear.emit&amp;amp;type=" rel="noopener noreferrer"&gt;search&lt;/a&gt; on GitHub repository. It will show all the event which you can hook into.&lt;/p&gt;

&lt;p&gt;So what is a plugin in &lt;strong&gt;Cogear.JS&lt;/strong&gt; environment? It’s a simple object with only one method required – which is called &lt;code&gt;apply&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;To engage you in further learning I encourage you to see a new video from our YouTube-channel:&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/V427GA4BZHk"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;It will reveal the topic of plugin crafting.&lt;/p&gt;

&lt;p&gt;You can also dive into proper docs section:&lt;br&gt;
&lt;a href="https://cogearjs.org/docs/plugins" rel="noopener noreferrer"&gt;https://cogearjs.org/docs/plugins&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And discover plugins in awesome-cogear repository:&lt;br&gt;
&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/dbelyaeff" rel="noopener noreferrer"&gt;
        dbelyaeff
      &lt;/a&gt; / &lt;a href="https://github.com/dbelyaeff/awesome-cogear" rel="noopener noreferrer"&gt;
        awesome-cogear
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      List of best plugins, themes, etc.
    &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;awesome-cogear&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Best plugins and themes for &lt;a href="https://cogearjs.org" rel="nofollow noopener noreferrer"&gt;&lt;strong&gt;Cogear.JS&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Plugins&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Assets&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/codemotion/cogear-plugin-compressor" rel="noopener noreferrer"&gt;Compressor&lt;/a&gt; – Compress pages and assets with gzip for faster loading.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/codemotion/cogear-plugin-pages-json" rel="noopener noreferrer"&gt;Pages JSON&lt;/a&gt; – Stores pages into &lt;code&gt;pages.json&lt;/code&gt;. Can be fetched and used on site with &lt;a href="https://reactjs.org" rel="nofollow noopener noreferrer"&gt;React&lt;/a&gt;, &lt;a href="https://vuejs.org" rel="nofollow noopener noreferrer"&gt;Vue.JS&lt;/a&gt;, &lt;a href="https://angular.io" rel="nofollow noopener noreferrer"&gt;Angular&lt;/a&gt;, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Video&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/codemotion/cogear-plugin-youtube" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt; – Embed youtube videos by links.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Frontend frameworks&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/codemotion/cogear-plugin-vue" rel="noopener noreferrer"&gt;Vue&lt;/a&gt; – Brings Vue SFC import to entry points.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Blogging&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/codemotion/cogear-plugin-blog" rel="noopener noreferrer"&gt;Blog&lt;/a&gt; – Simple blog with pagination and tags.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/codemotion/cogear-plugin-blog-rss" rel="noopener noreferrer"&gt;Blog-RSS&lt;/a&gt; – Adds RSS to blog.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Themes&lt;/h1&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/codemotion/cogear-theme-default" rel="noopener noreferrer"&gt;Default&lt;/a&gt; – Default theme. To learn how to.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/codemotion/cogear-theme-blog" rel="noopener noreferrer"&gt;Blog&lt;/a&gt; – Blog theme with no framework. Clone it and edit for your needs.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/codemotion/awesome-cogear" rel="noopener noreferrer"&gt;Bootstrap 4&lt;/a&gt; - Various Bootstrap 4 themes. Best used for responsive design (mobile, tablet, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/dtslvr/cogear-theme-ejs-bootstrap-blog" rel="noopener noreferrer"&gt;Bootstrap 4 in ejs&lt;/a&gt; — Bootstrap 4 theme based on EJS, provided by &lt;a href="https://github.com/dtslvr" rel="noopener noreferrer"&gt;@dtslvr&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Presets&lt;/h1&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/codemotion/cogear-preset-blog" rel="noopener noreferrer"&gt;Blog&lt;/a&gt; – Simple blog preset with responsive theme.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/dtslvr/cogear-preset-ejs-bootstrap-blog" rel="noopener noreferrer"&gt;Bootstrap 4 blog in ejs&lt;/a&gt; — Bootstrap 4 blog preset, provided by…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/dbelyaeff/awesome-cogear" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;If you like this video, please, subscribe &lt;a href="https://www.youtube.com/channel/UCYVvgPLMfRwA2K_ledHCZcw" rel="noopener noreferrer"&gt;Cogear.JS YouTube-channel&lt;/a&gt; and giva a star to the projects repository:&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/dbelyaeff" rel="noopener noreferrer"&gt;
        dbelyaeff
      &lt;/a&gt; / &lt;a href="https://github.com/dbelyaeff/cogear.js" rel="noopener noreferrer"&gt;
        cogear.js
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Modern static websites generator (Node.JS/Webpack)
    &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;THE PROJECT IS DEPRECTATED&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Cogear.JS – modern static websites generator&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/dbelyaeff/cogear.js#requirements" rel="noopener noreferrer"&gt;Requirements&lt;/a&gt; | &lt;a href="https://github.com/dbelyaeff/cogear.js#installation" rel="noopener noreferrer"&gt;Installation&lt;/a&gt; | &lt;a href="https://github.com/dbelyaeff/cogear.js#usage" rel="noopener noreferrer"&gt;Usage&lt;/a&gt; | &lt;a href="https://github.com/dbelyaeff/cogear.js#options" rel="noopener noreferrer"&gt;Options&lt;/a&gt; | &lt;a href="https://cogearjs.org" rel="nofollow noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;About&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Cogear.JS&lt;/strong&gt; is a static site generator built with &lt;a href="https://nodejs.org" rel="nofollow noopener noreferrer"&gt;Node.JS&lt;/a&gt; and based on &lt;a href="https://webpack.js.org" rel="nofollow noopener noreferrer"&gt;Webpack&lt;/a&gt; (v4.6).&lt;/p&gt;
&lt;p&gt;It's inspired by &lt;a href="https://jekyllrb.com" rel="nofollow noopener noreferrer"&gt;Jekyll&lt;/a&gt; and others, but built on the top of the latest frontend technologies.&lt;/p&gt;
&lt;p&gt;Providing awesome experience of on-the-fly hot reloading to instantly implementing any changes.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Introduction video&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a href="https://youtu.be/nDga67P6lag?list=PLBuIATAeU0NWhrpWnI--TRG76DwAgem1I" title="Introduction to Cogear.JS" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a23706c220fa5bb8dc244aaa3515317b708a2c25abed52fa913abae6a8a163ee/68747470733a2f2f692e696d6775722e636f6d2f637437787050462e706e67" alt="Introduction to Cogear.JS"&gt;&lt;/a&gt;&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;strong&gt;Modern stack technologies&lt;/strong&gt; Build modern static websites with bundled scripts and styles.Rapidly prototype and instantly deploy to the server.
Use &lt;strong&gt;any modern frontend stack&lt;/strong&gt; (&lt;strong&gt;webpack&lt;/strong&gt; bundled) – &lt;a href="https://vuejs.org" rel="nofollow noopener noreferrer"&gt;Vue.JS&lt;/a&gt;, &lt;a href="https://reactjs.org" rel="nofollow noopener noreferrer"&gt;React&lt;/a&gt;, &lt;a href="https://angular.io" rel="nofollow noopener noreferrer"&gt;Angular&lt;/a&gt;, &lt;a href="https://emberjs.org" rel="nofollow noopener noreferrer"&gt;Ember&lt;/a&gt;, etc.&lt;/li&gt;
&lt;li&gt;🚀  &lt;strong&gt;Blazing fast and reliable&lt;/strong&gt;
Performs nearly 1.000 pages per second (depends on the pages content and raw computer processor power).
Being online. Server can handle thousands requests per seconds to serve static files (even on tiny VPS).&lt;/li&gt;
&lt;li&gt;📦 &lt;strong&gt;For any hosting&lt;/strong&gt;
Doesn't requires &lt;strong&gt;any database&lt;/strong&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/dbelyaeff/cogear.js" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h1&gt;
  
  
  Join the Social Impact Hacktoberfest Challenge
&lt;/h1&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%2Fuser-images.githubusercontent.com%2F121322%2F46319645-ab50e200-c58f-11e8-8dd0-cf7a4b1a610e.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%2Fuser-images.githubusercontent.com%2F121322%2F46319645-ab50e200-c58f-11e8-8dd0-cf7a4b1a610e.png" alt="Join the Social Impact Hacktoberfest Challenge"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Learn how to win a cool t-shirt taking part in &lt;a href="https://hacktoberfest.digitalocean.com" rel="noopener noreferrer"&gt;Hacktoberfest&lt;/a&gt; via contributing to &lt;a href="https://cogearjs.org" rel="noopener noreferrer"&gt;Cogear.JS&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Right now we encourage developers to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://github.com/codemotion/cogear.js/issues/6" rel="noopener noreferrer"&gt;Create a plugin for React&lt;/a&gt; (just add a loader to Webpack).&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/codemotion/cogear.js/issues/7" rel="noopener noreferrer"&gt;Create a Bootstrap 4 theme&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>node</category>
      <category>cogearjs</category>
      <category>javascript</category>
      <category>hacktoberfest</category>
    </item>
    <item>
      <title>Deploying Cogear.JS-generated site to the Now.sh</title>
      <dc:creator>Dmitriy Belyaev</dc:creator>
      <pubDate>Fri, 05 Oct 2018 10:45:29 +0000</pubDate>
      <link>https://dev.to/cogear/deploying-cogearjs-generated-site-to-the-nowsh-367m</link>
      <guid>https://dev.to/cogear/deploying-cogearjs-generated-site-to-the-nowsh-367m</guid>
      <description>&lt;p&gt;&lt;a href="https://cogearjs.org" rel="noopener noreferrer"&gt;Cogear.JS&lt;/a&gt; is an open-sourcered static websites generator built with &lt;a href="https://nodejs.org" rel="noopener noreferrer"&gt;Node.JS&lt;/a&gt; and based on the latest &lt;a href="https://webpack.js.org" rel="noopener noreferrer"&gt;Webpack&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dev.to&lt;/strong&gt; members previously may read &lt;a href="https://dev.to/codemotion/cogearjs--modern-static-websites-generator-450a"&gt;the introduction article&lt;/a&gt; and the tutorial about &lt;a href="https://dev.to/cogear/creating-a-blog-with-cogearjs-21af"&gt;how to create a blog&lt;/a&gt; in a minutes with &lt;strong&gt;Cogear.JS&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Now it's time to talk about deploy.&lt;/p&gt;

&lt;p&gt;When a site is designed in &lt;code&gt;development&lt;/code&gt; mode and built-in &lt;code&gt;production&lt;/code&gt; or &lt;code&gt;build&lt;/code&gt; mode, it's time to deploy it to the remote server.&lt;/p&gt;

&lt;p&gt;Basically &lt;strong&gt;Cogear.JS&lt;/strong&gt; can upload it via &lt;strong&gt;FTP&lt;/strong&gt; or &lt;strong&gt;SFTP&lt;/strong&gt; protocols and even use &lt;a href="https://rsync.samba.org" rel="noopener noreferrer"&gt;rsync&lt;/a&gt; (if installed).&lt;/p&gt;

&lt;p&gt;Deploy methods speed comparsion:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;    Method    &lt;/th&gt;
&lt;th&gt;     Speed    &lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;FTP&lt;/td&gt;
&lt;td&gt;slowest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SFTP&lt;/td&gt;
&lt;td&gt;fast&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;rsync&lt;/td&gt;
&lt;td&gt;fastest&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You can read more about standard deploy ops in the docs:&lt;br&gt;
&lt;a href="https://cogearjs.org/docs/deploy" rel="noopener noreferrer"&gt;https://cogearjs.org/docs/deploy&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But now it's all about &lt;a href="https://now.sh" rel="noopener noreferrer"&gt;Now.sh&lt;/a&gt; which provides free hosting for static sites.&lt;/p&gt;
&lt;h1&gt;
  
  
  Getting Started
&lt;/h1&gt;

&lt;p&gt;You need to &lt;a href="https://zeit.co/download" rel="noopener noreferrer"&gt;download&lt;/a&gt; and install desktop &lt;strong&gt;Now.sh app&lt;/strong&gt;. It will provide command line utility called &lt;code&gt;now&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;When it has been installed deploy procedure becomes incredibly easy.&lt;/p&gt;

&lt;p&gt;Just compile your site (build it):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/Sites/site

&lt;span class="nv"&gt;$ &lt;/span&gt;cogear build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It will be compiled to the &lt;code&gt;output&lt;/code&gt; folder which is &lt;code&gt;./public&lt;/code&gt; by default.&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%2Fjktv0tu9imsd48rllb5r.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%2Fjktv0tu9imsd48rllb5r.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you are ready to deploy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;now &lt;span class="nt"&gt;--public&lt;/span&gt; public
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You send the command to &lt;strong&gt;Now&lt;/strong&gt; to upload the folder &lt;code&gt;./public&lt;/code&gt;  in &lt;code&gt;--public&lt;/code&gt; mode (it's required for non-paid accounts).&lt;/p&gt;

&lt;p&gt;Within a few seconds, your site is online!&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%2F1b7kou3t2xp7f9o6u6lx.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%2F1b7kou3t2xp7f9o6u6lx.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Site address has been copied to the clipboard.&lt;/p&gt;

&lt;p&gt;You may choose an appropriate domain with &lt;code&gt;now alias&lt;/code&gt; command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;now &lt;span class="nb"&gt;alias &lt;/span&gt;https://public-psuaoefsus.now.sh cogear.now.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Done!&lt;/p&gt;

&lt;p&gt;You can even use custom domain via DNS management. &lt;/p&gt;

&lt;p&gt;Like I do:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;now &lt;span class="nb"&gt;alias &lt;/span&gt;https://public-psuaoefsus.now.sh cogearjs.org
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://zeit.co/dns#get-started" rel="noopener noreferrer"&gt;Read more&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cogearjs.org" rel="noopener noreferrer"&gt;Cogear.JS official site&lt;/a&gt; is hosted at &lt;a href="https://now.sh" rel="noopener noreferrer"&gt;Now.sh&lt;/a&gt; absolutely for free.&lt;/p&gt;

</description>
      <category>node</category>
      <category>cogearjs</category>
      <category>bash</category>
      <category>devops</category>
    </item>
    <item>
      <title>Build a blog with Cogear.JS</title>
      <dc:creator>Dmitriy Belyaev</dc:creator>
      <pubDate>Fri, 28 Sep 2018 09:50:15 +0000</pubDate>
      <link>https://dev.to/cogear/creating-a-blog-with-cogearjs-21af</link>
      <guid>https://dev.to/cogear/creating-a-blog-with-cogearjs-21af</guid>
      <description>&lt;p&gt;Recently in comments to &lt;a href="https://dev.to/codemotion/cogearjs--modern-static-websites-generator-450a"&gt;Cogear.JS introduction post&lt;/a&gt; I've been asked about difference between it and &lt;a href="https://gatsbyjs.org" rel="noopener noreferrer"&gt;Gatsby&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Today I've read the post &lt;a href="https://dev.to/saigowthamr/build-a-blog-using-gatsbyjs--react--2lo"&gt;Build a blog using Gatsby.js &amp;amp; React&lt;/a&gt; at &lt;strong&gt;Dev.to&lt;/strong&gt;. I wanna to compare them via doing the same task.&lt;/p&gt;

&lt;p&gt;Let's build a blog with &lt;a href="https://cogearjs.org" rel="noopener noreferrer"&gt;Cogear.JS&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;First of all you can look at real working example:&lt;br&gt;
&lt;a href="https://cogearjs.org/blog" rel="noopener noreferrer"&gt;https://cogearjs.org/blog&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Installation
&lt;/h1&gt;

&lt;p&gt;Make sure to fit &lt;a href="https://cogearjs.org/docs#requirements" rel="noopener noreferrer"&gt;the requirements&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To install &lt;strong&gt;Cogear.JS&lt;/strong&gt; do next:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; cogear
&lt;span class="c"&gt;# or&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;yarn global add cogear
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


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

&lt;p&gt;We need to transform default site into blog.&lt;/p&gt;

&lt;p&gt;It requires two things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://github.com/codemotion/cogear-plugin-blog" rel="noopener noreferrer"&gt;Blog plugin&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/codemotion/cogear-theme-blog" rel="noopener noreferrer"&gt;Blog theme&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There is a standard way via built in generator:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/Sites
&lt;span class="nv"&gt;$ &lt;/span&gt;cogear new blog
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


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

&lt;p&gt;But I've prepared a preset for you which includes both plugin and theme.&lt;br&gt;
&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/dbelyaeff" rel="noopener noreferrer"&gt;
        dbelyaeff
      &lt;/a&gt; / &lt;a href="https://github.com/dbelyaeff/cogear-preset-blog" rel="noopener noreferrer"&gt;
        cogear-preset-blog
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Blog preset for Cogear.JS
    &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;Cogear.JS preset &lt;code&gt;blog&lt;/code&gt;
&lt;/h1&gt;

&lt;/div&gt;

&lt;p&gt;Ready to use site preset. Just clone repository, install dependencies and run &lt;code&gt;cogear&lt;/code&gt; in project directory from command line.&lt;/p&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/codemotion/cogear-theme-blog/raw/master/screenshot.jpg"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fcodemotion%2Fcogear-theme-blog%2Fraw%2Fmaster%2Fscreenshot.jpg" alt="screenshot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Installation&lt;/h1&gt;

&lt;/div&gt;

&lt;p&gt;Make sure that &lt;a href="https://cogearjs.org" rel="nofollow noopener noreferrer"&gt;Cogear.JS&lt;/a&gt; is installed. &lt;a href="https://cogearjs.org/docs/" rel="nofollow noopener noreferrer"&gt;How to install&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clone this repo to the target local directory:&lt;/p&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;&amp;gt;&lt;/span&gt; &lt;span class="pl-c1"&gt;cd&lt;/span&gt; &lt;span class="pl-k"&gt;~&lt;/span&gt;/Sites/
&lt;span class="pl-k"&gt;&amp;gt;&lt;/span&gt; git clone --recurse-submodules https://github.com/codemotion/cogear-preset-blog blog&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Pay attention to &lt;code&gt;--recurse-submodules&lt;/code&gt; option. It's required, because &lt;a href="https://github.com/codemotion/cogear-theme-blog" rel="noopener noreferrer"&gt;&lt;code&gt;cogear-theme-blog&lt;/code&gt;&lt;/a&gt; is presented as git &lt;a href="https://git-scm.com/book/en/v2/Git-Tools-Submodules" rel="nofollow noopener noreferrer"&gt;submodule&lt;/a&gt;.&lt;/p&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;&lt;span class="pl-k"&gt;&amp;gt;&lt;/span&gt; &lt;span class="pl-c1"&gt;cd&lt;/span&gt; &lt;span class="pl-k"&gt;~&lt;/span&gt;/Sites/blog
&lt;span class="pl-k"&gt;&amp;gt;&lt;/span&gt; npm install
or
&lt;span class="pl-k"&gt;&amp;gt;&lt;/span&gt; yarn install&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;You're ready to go! Fire up &lt;strong&gt;Cogear.JS&lt;/strong&gt; in &lt;code&gt;dev&lt;/code&gt; mode, your new blog will be opened in browser automatically!&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;&amp;gt;&lt;/span&gt; cogear &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; development mode by default&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Read the docs&lt;/h1&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://cogearjs.org/docs" rel="nofollow noopener noreferrer"&gt;https://cogearjs.org/docs&lt;/a&gt;&lt;/p&gt;

&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/dbelyaeff/cogear-preset-blog" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;Let's install blog with preset.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;git clone &lt;span class="nt"&gt;--recurse-submodules&lt;/span&gt; https://github.com/codemotion/cogear-preset-blog blog
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you need to install the dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/Sites/blog
&lt;span class="nv"&gt;$ &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;span class="c"&gt;# of&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;yarn &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Done
&lt;/h1&gt;

&lt;p&gt;Really, that was all you have to do.&lt;/p&gt;

&lt;p&gt;Now fire up &lt;strong&gt;Cogear.JS&lt;/strong&gt; in the development mode.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;cogear
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You blog is ready:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fcodemotion%2Fcogear-theme-blog%2Fraw%2Fmaster%2Fscreenshot.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fcodemotion%2Fcogear-theme-blog%2Fraw%2Fmaster%2Fscreenshot.jpg" alt="Cogear.JS blog"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I've uploaded the result to:&lt;br&gt;
&lt;a href="https://cogear-blog.now.sh" rel="noopener noreferrer"&gt;https://cogear-blog.now.sh&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check it out.&lt;/p&gt;

&lt;p&gt;It's time to create first post.&lt;/p&gt;

&lt;p&gt;Create &lt;code&gt;./src/pages/p/first-post.md&lt;/code&gt; file with the following content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;First post&lt;/span&gt;
&lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;news&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="gh"&gt;# This is my first post!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Well done. Save it and browser page will be reloaded automatically.&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%2Fcg6z5a9fzdqqerakxowh.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%2Fcg6z5a9fzdqqerakxowh.png" alt="Cogear.JS blog with post"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The result is also available by link:&lt;br&gt;
&lt;a href="https://cogear-blog-with-post.now.sh" rel="noopener noreferrer"&gt;https://cogear-blog-with-post.now.sh&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;P.S. Why &lt;code&gt;p&lt;/code&gt; folder has been chosen for blog? &lt;/p&gt;

&lt;p&gt;It's easy to customize this behaviour. &lt;/p&gt;

&lt;p&gt;Edit &lt;code&gt;./config.yaml&lt;/code&gt; file from this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Blog | Cogear.JS – modern static websites generator&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="na"&gt;keywords&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;blog&lt;/span&gt;
&lt;span class="na"&gt;blog&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;index&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
  &lt;span class="na"&gt;regex&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;^p/"&lt;/span&gt;
  &lt;span class="na"&gt;tagUri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;tag'&lt;/span&gt;
  &lt;span class="na"&gt;perPage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;
&lt;span class="na"&gt;pages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;^p/&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;layout&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;post&lt;/span&gt;
    &lt;span class="na"&gt;author&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;login&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Dmitriy Beliaev&lt;/span&gt;
      &lt;span class="na"&gt;avatar&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://www.gravatar.com/avatar/400caf343d3bab57ab93f63e21a12be7?s=24'&lt;/span&gt;
      &lt;span class="na"&gt;link&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://cogearjs.org&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to that&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Blog | Cogear.JS – modern static websites generator&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="na"&gt;keywords&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;blog&lt;/span&gt;
&lt;span class="na"&gt;blog&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;index&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
  &lt;span class="na"&gt;regex&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;^blog/"&lt;/span&gt;
  &lt;span class="na"&gt;tagUri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;tag'&lt;/span&gt;
  &lt;span class="na"&gt;perPage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;
&lt;span class="na"&gt;pages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;^blog/&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;layout&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;post&lt;/span&gt;
    &lt;span class="na"&gt;author&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;login&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Dmitriy Beliaev&lt;/span&gt;
      &lt;span class="na"&gt;avatar&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://www.gravatar.com/avatar/400caf343d3bab57ab93f63e21a12be7?s=24'&lt;/span&gt;
      &lt;span class="na"&gt;link&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://cogearjs.org&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And rename folder &lt;code&gt;./src/pages/p&lt;/code&gt; to &lt;code&gt;./src/pages/blog&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;More about config file in the following video:&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/hEUgZcoFKWM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;You questions are welcome!&lt;/p&gt;

</description>
      <category>node</category>
      <category>cogearjs</category>
      <category>webpack</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Cogear.JS — modern static websites generator</title>
      <dc:creator>Dmitriy Belyaev</dc:creator>
      <pubDate>Tue, 25 Sep 2018 17:31:18 +0000</pubDate>
      <link>https://dev.to/codemotion/cogearjs--modern-static-websites-generator-450a</link>
      <guid>https://dev.to/codemotion/cogearjs--modern-static-websites-generator-450a</guid>
      <description>

&lt;p&gt;&lt;strong&gt;Cogear.JS&lt;/strong&gt; is a static websites generator built with &lt;a href="https://nodejs.org"&gt;Node.JS&lt;/a&gt; (9.x or higher) and based on &lt;a href="https://webpack.js.org"&gt;Webpack&lt;/a&gt; (v4.6).&lt;/p&gt;

&lt;p&gt;It's inspired by &lt;a href="https://jekyllrb.com"&gt;Jekyll&lt;/a&gt; and others, but built on the top of the latest frontend technologies.&lt;/p&gt;

&lt;p&gt;Provides awesome hot reloading experience in &lt;code&gt;development&lt;/code&gt; mode.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🖥  &lt;strong&gt;Modern stack of technologies&lt;/strong&gt; Build modern static websites with bundled scripts and styles.Rapidly prototype and instantly deploy to the server.
Use &lt;strong&gt;any modern frontend stack&lt;/strong&gt; (&lt;strong&gt;webpack&lt;/strong&gt; bundled) – &lt;a href="https://vuejs.org"&gt;Vue.JS&lt;/a&gt;, &lt;a href="https://reactjs.org"&gt;React&lt;/a&gt;, &lt;a href="https://angular.io"&gt;Angular&lt;/a&gt;, &lt;a href="https://emberjs.org"&gt;Ember&lt;/a&gt;, etc.&lt;/li&gt;
&lt;li&gt;🚀  &lt;strong&gt;Blazing fast and reliable&lt;/strong&gt;
Performs nearly 1.000 pages per second (depends on the pages content and raw computer processor power).
Server can handle thousands requests per second to serve static files (even on tiny VPS).&lt;/li&gt;
&lt;li&gt;📦 &lt;strong&gt;For any hosting&lt;/strong&gt;
Doesn't requires &lt;strong&gt;any database&lt;/strong&gt; (data stored in flat files) and works with &lt;strong&gt;any hosting&lt;/strong&gt; (as it produces &lt;em&gt;static html and assets files&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;🚚  &lt;strong&gt;Deploy built in&lt;/strong&gt;
&lt;a href="https://cogearjs.org/docs/deploy"&gt;Create a preset&lt;/a&gt; and update your site to the server via FTP, SFTP or even &lt;code&gt;rsync&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;🔓 &lt;strong&gt;Secure. No updates needed&lt;/strong&gt; 
Just forget about annoying regular updates from usual CMS.
It's &lt;strong&gt;100% secure&lt;/strong&gt; for hacking because there is no backend after being deployed to the server.&lt;/li&gt;
&lt;li&gt;
&lt;i class="fab fa-osi"&gt;&lt;/i&gt; &lt;strong&gt;Free. Open Sourced&lt;/strong&gt;
Use it for free. For any needs. Forever.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://pages.github.com"&gt;Github Pages&lt;/a&gt; (or any similar project) you can host generated site &lt;strong&gt;for free&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it can be used for:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Rapid site prototyping &lt;/li&gt;
&lt;li&gt;Portfolio site&lt;/li&gt;
&lt;li&gt;Company site&lt;/li&gt;
&lt;li&gt;Product site&lt;/li&gt;
&lt;li&gt;Personal blog&lt;/li&gt;
&lt;li&gt;Artist or musician site&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Any site that has admin-generated content. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Multi-user content management can be provided via &lt;a href="https://github.com"&gt;Github&lt;/a&gt;. Just store your source in the repository, accept pull-requests from other users and build a site after commits (can be automated).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Using &lt;a href="https://firebase.google.com"&gt;Firebase&lt;/a&gt; or any other &lt;em&gt;backend&lt;/em&gt;, written in &lt;em&gt;any lang&lt;/em&gt; (&lt;strong&gt;PHP&lt;/strong&gt;, &lt;strong&gt;Ruby&lt;/strong&gt;, &lt;strong&gt;Python&lt;/strong&gt;, &lt;strong&gt;Node.JS&lt;/strong&gt;) or even with CMS like a &lt;strong&gt;WordPress&lt;/strong&gt;, with help of modern frontend technologies like &lt;a href="https://vuejs.org"&gt;Vue.JS&lt;/a&gt; or &lt;a href="https://reactjs.org"&gt;React&lt;/a&gt;, it can be turned into more dynamic site like &lt;strong&gt;e-commerce&lt;/strong&gt;, &lt;strong&gt;products catalog&lt;/strong&gt; and so on.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it cannot be used for:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Forum&lt;/li&gt;
&lt;li&gt;Social network&lt;/li&gt;
&lt;li&gt;Chat&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Or any other site type with great amount of user-generated content which relies on heavily database usage and dynamically generated pages.&lt;/p&gt;

&lt;p&gt;Of course you can try, but it has to be modern &lt;a href="https://en.wikipedia.org/wiki/Single-page_application"&gt;SPA&lt;/a&gt; which handles data from dedicated API.&lt;/p&gt;

&lt;h1&gt;
  
  
  Requirements
&lt;/h1&gt;

&lt;p&gt;You have &lt;a href="https://nodejs.org"&gt;Node.JS&lt;/a&gt; (9.x or higher) and &lt;a href="https://www.npmjs.com"&gt;NPM&lt;/a&gt; (usually comes together) to be installed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nodejs.org/en/download/"&gt;Download and install.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The latest version (v10.9.0) is recommended.&lt;/p&gt;

&lt;p&gt;You can also use &lt;a href="https://yarnpkg.com"&gt;Yarn&lt;/a&gt; instead of &lt;a href="https://www.npmjs.com"&gt;NPM&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cogear.JS&lt;/strong&gt; runs on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mac&lt;/li&gt;
&lt;li&gt;Linux&lt;/li&gt;
&lt;li&gt;Windows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You may want to use awesome &lt;a href="https://code.visualstudio.com"&gt;VSCode&lt;/a&gt; editor.&lt;/p&gt;

&lt;h1&gt;
  
  
  Installation
&lt;/h1&gt;

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

&lt;h1&gt;
  
  
  Usage
&lt;/h1&gt;

&lt;p&gt;Go to the directory where all your local sites are hosted.&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/Sites
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Create a new site via command:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;cogear new site.io &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="c"&gt;# where "site" is your site folder name&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



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

&lt;p&gt;After that go to site directory:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/Sites/site.io
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And start up &lt;strong&gt;Cogear.JS&lt;/strong&gt; in &lt;code&gt;development&lt;/code&gt; or &lt;code&gt;production&lt;/code&gt; mode (&lt;a href="https://cogearjs.org/docs/workflow#modes"&gt;learn more&lt;/a&gt;).&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;cogear &lt;span class="c"&gt;# run in develompent mode with hot-reload – by default&lt;/span&gt;

&lt;span class="nv"&gt;$ &lt;/span&gt;cogear production &lt;span class="c"&gt;# build a site and run local server&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Next time we will dive deeply into the workflow.&lt;/p&gt;

&lt;p&gt;Github repository:&lt;br&gt;
&lt;/p&gt;
&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--qF2jUiUG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-6a5bca60a4ebf959a6df7f08217acd07ac2bc285164fae041eacb8a148b1bab9.svg"&gt;&lt;a href="https://github.com/codemotion"&gt;codemotion&lt;/a&gt; / &lt;a href="https://github.com/codemotion/cogear.js"&gt;cogear.js&lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;Modern static websites generator (Node.JS/Webpack)&lt;/h3&gt;
  &lt;/div&gt;
&lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="instapaper_body md"&gt;
&lt;h1&gt;
Cogear.JS – modern static websites generator&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://raw.githubusercontent.com/codemotion/cogear.js/master/#requirements"&gt;Requirements&lt;/a&gt; | &lt;a href="https://raw.githubusercontent.com/codemotion/cogear.js/master/#installation"&gt;Installation&lt;/a&gt; | &lt;a href="https://raw.githubusercontent.com/codemotion/cogear.js/master/#usage"&gt;Usage&lt;/a&gt; | &lt;a href="https://raw.githubusercontent.com/codemotion/cogear.js/master/#options"&gt;Options&lt;/a&gt; | &lt;a href="https://cogearjs.org" rel="nofollow"&gt;Website&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
About&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Cogear.JS&lt;/strong&gt; is a static site generator built with &lt;a href="https://nodejs.org" rel="nofollow"&gt;Node.JS&lt;/a&gt; and based on &lt;a href="https://webpack.js.org" rel="nofollow"&gt;Webpack&lt;/a&gt; (v4.6).&lt;/p&gt;
&lt;p&gt;It's inspired by &lt;a href="https://jekyllrb.com" rel="nofollow"&gt;Jekyll&lt;/a&gt; and others, but built on the top of the latest frontend technologies.&lt;/p&gt;
&lt;p&gt;Providing awesome experience of on-the-fly hot reloading to instantly implementing any changes.&lt;/p&gt;
&lt;h1&gt;
Introduction video&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://youtu.be/nDga67P6lag?list=PLBuIATAeU0NWhrpWnI--TRG76DwAgem1I" title="Introduction to Cogear.JS" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/40f1f097ef4b0732c9ac26c4192fad4847065f96/68747470733a2f2f692e696d6775722e636f6d2f637437787050462e706e67" alt="Introduction to Cogear.JS"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
🖥  &lt;strong&gt;Modern stack technologies&lt;/strong&gt; Build modern static websites with bundled scripts and styles.Rapidly prototype and instantly deploy to the server.
Use &lt;strong&gt;any modern frontend stack&lt;/strong&gt; (&lt;strong&gt;webpack&lt;/strong&gt; bundled) – &lt;a href="https://vuejs.org" rel="nofollow"&gt;Vue.JS&lt;/a&gt;, &lt;a href="https://reactjs.org" rel="nofollow"&gt;React&lt;/a&gt;, &lt;a href="https://angular.io" rel="nofollow"&gt;Angular&lt;/a&gt;, &lt;a href="https://emberjs.org" rel="nofollow"&gt;Ember&lt;/a&gt;, etc.&lt;/li&gt;
&lt;li&gt;
🚀  &lt;strong&gt;Blazing fast and reliable&lt;/strong&gt;
Performs nearly 1.000 pages per second (depends on the pages content and raw computer processor power).
Being online. Server can handle thousands requests per seconds to serve static files (even on tiny VPS).&lt;/li&gt;
&lt;li&gt;
📦 &lt;strong&gt;For any hosting&lt;/strong&gt;
Doesn't requires &lt;strong&gt;any database&lt;/strong&gt; (data stored in flat…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
&lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/codemotion/cogear.js"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Official site:&lt;br&gt;
&lt;a href="https://cogearjs.org"&gt;https://cogearjs.org&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Docs:&lt;br&gt;
&lt;a href="https://cogearjs.org/docs/"&gt;https://cogearjs.org/docs/&lt;/a&gt;&lt;/p&gt;


</description>
      <category>opensource</category>
      <category>node</category>
      <category>webpack</category>
      <category>cogearjs</category>
    </item>
  </channel>
</rss>
