about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--api/index.js7
-rw-r--r--app.html10
-rw-r--r--components/ChroniclePost.vue60
-rw-r--r--components/NavBar.vue18
-rw-r--r--components/NavLink.vue11
-rw-r--r--layouts/default.vue30
-rw-r--r--netlify.toml7
-rw-r--r--nuxt.config.js50
-rw-r--r--package-lock.json448
-rw-r--r--package.json16
-rw-r--r--pages/kronika/_year/_month/_day/_title/index.vue82
-rw-r--r--pages/kronika/index.vue52
-rwxr-xr-xscripts/generateApi.js23
-rwxr-xr-xscripts/postbuild.sh6
-rwxr-xr-xscripts/prebuild.sh12
-rw-r--r--static/assets/og/default.jpgbin0 -> 136365 bytes
-rw-r--r--tests/components/FacebookFeed.test.js (renamed from test/components/FacebookFeed.test.js)0
-rw-r--r--tests/components/FacebookFindUsButton.test.js (renamed from test/components/FacebookFindUsButton.test.js)0
-rw-r--r--tests/components/Footer.test.js (renamed from test/components/Footer.test.js)0
-rw-r--r--tests/components/JoinUs.test.js (renamed from test/components/JoinUs.test.js)0
-rw-r--r--tests/components/NavBar.test.js (renamed from test/components/NavBar.test.js)0
-rw-r--r--tests/components/NavLink.test.js (renamed from test/components/NavLink.test.js)0
-rw-r--r--tests/components/__snapshots__/FacebookFeed.test.js.snap (renamed from test/components/__snapshots__/FacebookFeed.test.js.snap)0
-rw-r--r--tests/components/__snapshots__/FacebookFindUsButton.test.js.snap (renamed from test/components/__snapshots__/FacebookFindUsButton.test.js.snap)0
-rw-r--r--tests/components/__snapshots__/Footer.test.js.snap (renamed from test/components/__snapshots__/Footer.test.js.snap)0
-rw-r--r--tests/components/__snapshots__/JoinUs.test.js.snap (renamed from test/components/__snapshots__/JoinUs.test.js.snap)0
-rw-r--r--tests/components/__snapshots__/NavBar.test.js.snap (renamed from test/components/__snapshots__/NavBar.test.js.snap)2
-rw-r--r--tests/components/__snapshots__/NavLink.test.js.snap (renamed from test/components/__snapshots__/NavLink.test.js.snap)0
-rw-r--r--tests/pages/404.test.js (renamed from test/pages/404.test.js)0
-rw-r--r--tests/pages/__snapshots__/404.test.js.snap (renamed from test/pages/__snapshots__/404.test.js.snap)0
-rw-r--r--tests/pages/__snapshots__/download.test.js.snap (renamed from test/pages/__snapshots__/download.test.js.snap)0
-rw-r--r--tests/pages/__snapshots__/index.test.js.snap (renamed from test/pages/__snapshots__/index.test.js.snap)0
-rw-r--r--tests/pages/__snapshots__/kontakt.test.js.snap (renamed from test/pages/__snapshots__/kontakt.test.js.snap)0
-rw-r--r--tests/pages/__snapshots__/o-nas.test.js.snap (renamed from test/pages/__snapshots__/o-nas.test.js.snap)0
-rw-r--r--tests/pages/download.test.js (renamed from test/pages/download.test.js)0
-rw-r--r--tests/pages/index.test.js (renamed from test/pages/index.test.js)0
-rw-r--r--tests/pages/kontakt.test.js (renamed from test/pages/kontakt.test.js)0
-rw-r--r--tests/pages/o-nas.test.js (renamed from test/pages/o-nas.test.js)0
39 files changed, 656 insertions, 180 deletions
diff --git a/.gitignore b/.gitignore
index 8c6652c..53c3292 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
+content
+
 # Created by .ignore support plugin (hsz.mobi)
 ### Node template
 # Logs
diff --git a/api/index.js b/api/index.js
new file mode 100644
index 0000000..5658365
--- /dev/null
+++ b/api/index.js
@@ -0,0 +1,7 @@
+import Kronikarz from 'kronikarz'
+
+const POSTS_PATH = './content/wpisy'
+
+const k = new Kronikarz(POSTS_PATH)
+
+export default k
diff --git a/app.html b/app.html
new file mode 100644
index 0000000..90f5368
--- /dev/null
+++ b/app.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html {{ HTML_ATTRS }}>
+  <head {{ HEAD_ATTRS }}>
+    {{ HEAD }}
+    <meta property="fb:pages" content="496021544115239" />
+  </head>
+  <body {{ BODY_ATTRS }}>
+    {{ APP }}
+  </body>
+</html>
diff --git a/components/ChroniclePost.vue b/components/ChroniclePost.vue
new file mode 100644
index 0000000..7b2c527
--- /dev/null
+++ b/components/ChroniclePost.vue
@@ -0,0 +1,60 @@
+<template>
+  <a :href="route" class="post">
+    <div>
+      <h4 class="post-title">{{title}}</h4>
+      <p class="post-description">{{shortenedDescription}}...</p>
+    </div>
+  </a>
+</template>
+
+<script>
+export default {
+  name: 'ChroniclePost',
+  props: {
+    title: {
+      type: String,
+      required: true
+    },
+    description: {
+      type: String,
+      default: ''
+    },
+    route: {
+      type: String,
+      required: true
+    }
+  },
+  computed: {
+    shortenedDescription() {
+      const first30Words = this.description.split(' ').slice(0, 30)
+      return first30Words.join(' ')
+    }
+  }
+}
+</script>
+
+<style scoped>
+.post {
+  margin: 20px;
+  flex-basis: 410px;
+  text-decoration: none;
+}
+
+.post > div {
+  background: #ffffff;
+  box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.25);
+  padding: 20px;
+
+  text-align: left;
+}
+
+.post-title {
+  color: #181818;
+  font-size: 1.3em;
+}
+
+.post-description {
+  color: #484848;
+  font-size: 0.9em;
+}
+</style>
\ No newline at end of file
diff --git a/components/NavBar.vue b/components/NavBar.vue
index e564fb0..4bbae72 100644
--- a/components/NavBar.vue
+++ b/components/NavBar.vue
@@ -8,14 +8,21 @@
     <button @click="toggleMenu" class="menu-toggler">Menu</button>
     <ul :class="linksClass" @click="toggleMenu">
       <!-- Loop for generating links -->
-      <NavLink v-for="route in routes" :key="route.path" :link="route.path" :name="route.name"></NavLink>
+      <NavLink v-for="route in routes" :key="route.path" :link="route.path" :name="route.name" />
+      <NavLink
+        v-for="route in staticRoutes"
+        :key="route.path"
+        :link="route.path"
+        :name="route.name"
+        pure
+      />
       <NavLink
         v-for="route in externalRoutes"
         :key="route.path"
         :link="route.path"
         :name="route.name"
-        :external="true"
-      ></NavLink>
+        external
+      />
     </ul>
   </nav>
 </template>
@@ -30,6 +37,7 @@ export default {
   props: {
     routes: Array,
     externalRoutes: Array,
+    staticRoutes: Array,
     title: String,
     logo: String
   },
@@ -161,10 +169,10 @@ export default {
     display: flex !important;
     flex-direction: column;
     justify-content: center;
-    align-items: center;
+    align-items: flex-start;
 
     margin-bottom: 0;
-    padding: 50px 0;
+    padding: 50px 10px;
 
     width: 100%;
     left: 0;
diff --git a/components/NavLink.vue b/components/NavLink.vue
index 253dde9..bb86ef8 100644
--- a/components/NavLink.vue
+++ b/components/NavLink.vue
@@ -1,6 +1,7 @@
 <template>
   <li class="navlink">
     <a v-if="external" class="link" target="_blank" rel="”noopener”" :href="link">{{ name }}</a>
+    <a v-else-if="pure" class="link" :href="link">{{ name }}</a>
     <nuxt-link v-else class="link" :to="link">{{ name }}</nuxt-link>
   </li>
 </template>
@@ -10,7 +11,8 @@ export default {
   props: {
     link: String,
     name: String,
-    external: { type: Boolean, default: false }
+    external: { type: Boolean, default: false },
+    pure: { type: Boolean, default: false }
   }
 }
 </script>
@@ -22,6 +24,7 @@ export default {
   font-family: 'Roboto Slab', serif;
   -webkit-font-smoothing: antialiased;
   -moz-osx-font-smoothing: grayscale;
+  font-weight: bold;
 
   text-decoration: none;
   color: #181818;
@@ -45,6 +48,12 @@ export default {
   background-color: #ececec !important;
 }
 
+@media (min-width: 900px) {
+  .link {
+    font-weight: normal;
+  }
+}
+
 @media (max-width: 1300px) {
   .navlink {
     margin: 0;
diff --git a/layouts/default.vue b/layouts/default.vue
index 8feaff6..0e5ca9c 100644
--- a/layouts/default.vue
+++ b/layouts/default.vue
@@ -1,13 +1,8 @@
 <template>
   <div id="app">
-    <NavBar
-      :routes="routes"
-      :externalRoutes="externalRoutes"
-      title="19 PDH Puszcza"
-      logo="/assets/krajka-logo.svg"
-    />
-    <nuxt id="content" />
-    <Footer :routes="routes" :specialRoutes="specialRoutes" />
+    <NavBar :routes="routes" title="19 PDH Puszcza" logo="/assets/krajka-logo.svg" />
+    <nuxt id="content" :key="$route.path" />
+    <Footer :routes="routes" />
   </div>
 </template>
 
@@ -21,23 +16,10 @@ export default {
   data() {
     return {
       routes: [
-        { path: '/', name: 'Home' },
-        { path: '/o-nas', name: 'O nas' },
+        { path: '/', name: 'Strona główna' },
         { path: '/download', name: 'Do pobrania' },
-        { path: '/kontakt', name: 'Kontakt' }
-      ],
-      externalRoutes: [
-        // {
-        //   path: 'https://kronika-puszcza.netlify.com',
-        //   name: 'Kronika'
-        // },
-        // { path: 'https://kronika-puszcza.netlify.com/galeria', name: 'Galeria' }
-      ],
-      specialRoutes: [
-        // {
-        //   name: 'Akcja "Ratujmy pszczoły"',
-        //   path: "/ratujmy-pszczoly"
-        // }
+        { path: '/kontakt', name: 'Kontakt' },
+        { path: '/kronika', name: 'Kronika' }
       ]
     }
   }
diff --git a/netlify.toml b/netlify.toml
index 3a88ace..5c94b41 100644
--- a/netlify.toml
+++ b/netlify.toml
@@ -1,4 +1,9 @@
 [build]
 
 publish = "dist/"
-command = "npm run generate"
\ No newline at end of file
+command = "npm run build"
+
+[[redirects]]
+    from = "/api/posts"
+    to = "/api/posts.json"
+    status = 200
\ No newline at end of file
diff --git a/nuxt.config.js b/nuxt.config.js
index 2663e3b..4c07f72 100644
--- a/nuxt.config.js
+++ b/nuxt.config.js
@@ -1,3 +1,7 @@
+import k from './api'
+
+const BASE_URL = process.env.DEPLOY_PRIME_URL || 'http://localhost:3000'
+
 export default {
   mode: 'universal',
   /*
@@ -5,7 +9,8 @@ export default {
    */
   head: {
     htmlAttrs: {
-      lang: 'pl'
+      lang: 'pl',
+      prefix: 'og: http://ogp.me/ns#'
     },
     title: '19 PDH Puszcza',
     meta: [
@@ -20,6 +25,11 @@ export default {
       {
         name: 'google-site-verification',
         content: 'V9-RG4-ertDzO9hqxuG29PkDUM8PGqaSOYUMiMaGUOY'
+      },
+      {
+        hid: 'og:image',
+        name: 'og:image',
+        content: `${BASE_URL}/assets/og/default.jpg`
       }
     ],
     link: [
@@ -31,6 +41,12 @@ export default {
       }
     ]
   },
+  env: {
+    baseUrl: process.env.DEPLOY_URL || 'http://localhost:3000'
+  },
+  generate: {
+    routes: k.getPosts().map(post => post.route)
+  },
   /*
    ** Customize the progress-bar color
    */
@@ -64,15 +80,37 @@ export default {
   /*
    ** Build configuration
    */
+  markdownit: {
+    preset: 'default',
+    linkify: true,
+    breaks: true
+  },
   build: {
     /*
      ** You can extend webpack config here
      */
-    extend(config, ctx) {}
+    extend(config, { isDev, isClient }) {
+      if (isClient) {
+        config.node = {
+          fs: 'empty',
+          child_process: 'empty',
+          tls: 'empty',
+          net: 'empty'
+        }
+      }
+      config.module.rules.push({
+        test: /\.md$/,
+        use: ['raw-loader']
+      })
+    }
   },
-  markdownit: {
-    preset: 'default',
-    linkify: true,
-    breaks: true
+  hooks: {
+    generate: {
+      routeCreated({ route, path, errors }) {
+        console.log(route)
+        console.log(path)
+        console.log(errors)
+      }
+    }
   }
 }
diff --git a/package-lock.json b/package-lock.json
index 03499ad..bcf0064 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1963,6 +1963,28 @@
         "@types/istanbul-lib-report": "1.1.1"
       }
     },
+    "@types/jsdom": {
+      "version": "12.2.4",
+      "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-12.2.4.tgz",
+      "integrity": "sha512-q+De3S/Ri6U9uPx89YA1XuC+QIBgndIfvBaaJG0pRT8Oqa75k4Mr7G9CRZjIvlbLGIukO/31DFGFJYlQBmXf/A==",
+      "requires": {
+        "@types/node": "*",
+        "@types/tough-cookie": "*",
+        "parse5": "^4.0.0"
+      },
+      "dependencies": {
+        "parse5": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+          "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA=="
+        }
+      }
+    },
+    "@types/node": {
+      "version": "12.7.12",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.12.tgz",
+      "integrity": "sha512-KPYGmfD0/b1eXurQ59fXD1GBzhSQfz6/lKBxkaHX9dKTzjXbK68Zt7yGUxUsCS1jeTy/8aL+d9JEr+S54mpkWQ=="
+    },
     "@types/q": {
       "version": "1.5.2",
       "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz",
@@ -1974,6 +1996,11 @@
       "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==",
       "dev": true
     },
+    "@types/tough-cookie": {
+      "version": "2.3.5",
+      "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.5.tgz",
+      "integrity": "sha512-SCcK7mvGi3+ZNz833RRjFIxrn4gI1PPR3NtuIS+6vMkvmsGjosqTJwRt5bAEFLRz+wtJMWv8+uOnZf2hi2QXTg=="
+    },
     "@types/yargs": {
       "version": "13.0.2",
       "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.2.tgz",
@@ -2295,10 +2322,9 @@
       "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="
     },
     "abab": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.1.tgz",
-      "integrity": "sha512-1zSbbCuoIjafKZ3mblY5ikvAb0ODUbqBnFuUb7f6uLeQhhGJ0vEV4ntmtxKLT2WgXCO94E07BjunsIw1jOMPZw==",
-      "dev": true
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.2.tgz",
+      "integrity": "sha512-2scffjvioEmNz0OyDSLGWDfKCVwaKc6l9Pm9kOIREU13ClXZvHpg/nRL5xyjSSSLhOnXqft2HpsAzNEEA8cFFg=="
     },
     "abbrev": {
       "version": "1.1.1",
@@ -2321,10 +2347,9 @@
       "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA=="
     },
     "acorn-globals": {
-      "version": "4.3.3",
-      "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.3.tgz",
-      "integrity": "sha512-vkR40VwS2SYO98AIeFvzWWh+xyc2qi9s7OoXSFEGIP/rOJKzjnhykaZJNnHdoq4BL2gGxI5EZOU16z896EYnOQ==",
-      "dev": true,
+      "version": "4.3.4",
+      "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz",
+      "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==",
       "requires": {
         "acorn": "6.3.0",
         "acorn-walk": "6.2.0"
@@ -2464,8 +2489,7 @@
     "array-equal": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
-      "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
-      "dev": true
+      "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM="
     },
     "array-flatten": {
       "version": "1.1.1",
@@ -2481,7 +2505,6 @@
       "version": "0.2.4",
       "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
       "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
-      "dev": true,
       "requires": {
         "safer-buffer": "2.1.2"
       }
@@ -2523,8 +2546,7 @@
     "assert-plus": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-      "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
-      "dev": true
+      "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
     },
     "assign-symbols": {
       "version": "1.0.0",
@@ -2550,8 +2572,7 @@
     "asynckit": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
-      "dev": true
+      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
     },
     "atob": {
       "version": "2.1.2",
@@ -2575,14 +2596,12 @@
     "aws-sign2": {
       "version": "0.7.0",
       "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
-      "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
-      "dev": true
+      "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
     },
     "aws4": {
       "version": "1.8.0",
       "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
-      "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
-      "dev": true
+      "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
     },
     "axios": {
       "version": "0.19.0",
@@ -2893,7 +2912,6 @@
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
       "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
-      "dev": true,
       "requires": {
         "tweetnacl": "0.14.5"
       }
@@ -3059,8 +3077,7 @@
     "browser-process-hrtime": {
       "version": "0.1.3",
       "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz",
-      "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==",
-      "dev": true
+      "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw=="
     },
     "browser-resolve": {
       "version": "1.11.3",
@@ -3388,8 +3405,7 @@
     "caseless": {
       "version": "0.12.0",
       "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
-      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
-      "dev": true
+      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
     },
     "chalk": {
       "version": "2.4.2",
@@ -3615,7 +3631,6 @@
       "version": "1.0.8",
       "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
       "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
-      "dev": true,
       "requires": {
         "delayed-stream": "1.0.0"
       }
@@ -4215,14 +4230,12 @@
     "cssom": {
       "version": "0.3.8",
       "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
-      "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
-      "dev": true
+      "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="
     },
     "cssstyle": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz",
       "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==",
-      "dev": true,
       "requires": {
         "cssom": "0.3.8"
       }
@@ -4241,7 +4254,6 @@
       "version": "1.14.1",
       "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
       "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
-      "dev": true,
       "requires": {
         "assert-plus": "1.0.0"
       }
@@ -4250,8 +4262,8 @@
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",
       "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",
-      "dev": true,
       "requires": {
+<<<<<<< HEAD
         "abab": "2.0.1",
         "whatwg-mimetype": "2.3.0",
         "whatwg-url": "7.0.0"
@@ -4268,6 +4280,11 @@
             "webidl-conversions": "4.0.2"
           }
         }
+=======
+        "abab": "^2.0.0",
+        "whatwg-mimetype": "^2.2.0",
+        "whatwg-url": "^7.0.0"
+>>>>>>> origin/develop
       }
     },
     "date-now": {
@@ -4302,8 +4319,7 @@
     "deep-is": {
       "version": "0.1.3",
       "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
-      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
-      "dev": true
+      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
     },
     "deepmerge": {
       "version": "4.0.0",
@@ -4363,8 +4379,7 @@
     "delayed-stream": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
-      "dev": true
+      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
     },
     "depd": {
       "version": "1.1.2",
@@ -4461,7 +4476,6 @@
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
       "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
-      "dev": true,
       "requires": {
         "webidl-conversions": "4.0.2"
       }
@@ -4535,7 +4549,6 @@
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
       "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
-      "dev": true,
       "requires": {
         "jsbn": "0.1.1",
         "safer-buffer": "2.1.2"
@@ -4707,7 +4720,6 @@
       "version": "1.12.0",
       "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz",
       "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==",
-      "dev": true,
       "requires": {
         "esprima": "3.1.3",
         "estraverse": "4.3.0",
@@ -4719,14 +4731,12 @@
         "esprima": {
           "version": "3.1.3",
           "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
-          "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
-          "dev": true
+          "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM="
         },
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
           "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true,
           "optional": true
         }
       }
@@ -4964,8 +4974,7 @@
     "extend": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
-      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
-      "dev": true
+      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
     },
     "extend-shallow": {
       "version": "3.0.2",
@@ -5092,8 +5101,7 @@
     "extsprintf": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
-      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
-      "dev": true
+      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
     },
     "fast-deep-equal": {
       "version": "2.0.1",
@@ -5114,8 +5122,7 @@
     "fast-levenshtein": {
       "version": "2.0.6",
       "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
-      "dev": true
+      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
     },
     "fb-watchman": {
       "version": "2.0.0",
@@ -5288,14 +5295,12 @@
     "forever-agent": {
       "version": "0.6.1",
       "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
-      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
-      "dev": true
+      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
     },
     "form-data": {
       "version": "2.3.3",
       "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
       "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
-      "dev": true,
       "requires": {
         "asynckit": "0.4.0",
         "combined-stream": "1.0.8",
@@ -5353,6 +5358,14 @@
         }
       }
     },
+    "front-matter": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-3.0.2.tgz",
+      "integrity": "sha512-iBGZaWyzqgsrPGsqrXZP6N4hp5FzSKDi18nfAoYpgz3qK5sAwFv/ojmn3VS60SOgLvq6CtojNqy0y6ZNz05IzQ==",
+      "requires": {
+        "js-yaml": "^3.13.1"
+      }
+    },
     "fs-extra": {
       "version": "7.0.1",
       "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
@@ -5443,7 +5456,6 @@
       "version": "0.1.7",
       "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
       "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
-      "dev": true,
       "requires": {
         "assert-plus": "1.0.0"
       }
@@ -5515,9 +5527,9 @@
       "integrity": "sha512-CuGRGMNnCp8RJ70zeoTX37sX4ctoT8BpmkStI2TYQwBBtWzQQFXQ/jsBUCqd34grt3IJQ+hkUXAU84/IuErVLQ=="
     },
     "handlebars": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz",
-      "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==",
+      "version": "4.4.3",
+      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.4.3.tgz",
+      "integrity": "sha512-B0W4A2U1ww3q7VVthTKfh+epHx+q4mCt6iK+zEAzbMBpWQAwxCeKxEGpj/1oQTpzPXDNSOG7hmG14TsISH50yw==",
       "dev": true,
       "requires": {
         "neo-async": "2.6.1",
@@ -5537,14 +5549,12 @@
     "har-schema": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
-      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
-      "dev": true
+      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
     },
     "har-validator": {
       "version": "5.1.3",
       "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
       "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
-      "dev": true,
       "requires": {
         "ajv": "6.10.2",
         "har-schema": "2.0.0"
@@ -5719,7 +5729,6 @@
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
       "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
-      "dev": true,
       "requires": {
         "whatwg-encoding": "1.0.5"
       }
@@ -5882,7 +5891,6 @@
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
       "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
-      "dev": true,
       "requires": {
         "assert-plus": "1.0.0",
         "jsprim": "1.4.1",
@@ -6008,6 +6016,11 @@
       "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
       "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo="
     },
+    "ip-regex": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
+      "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk="
+    },
     "ipaddr.js": {
       "version": "1.9.0",
       "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
@@ -6251,8 +6264,7 @@
     "is-typedarray": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
-      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
-      "dev": true
+      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
     },
     "is-whitespace": {
       "version": "0.3.0",
@@ -6288,8 +6300,7 @@
     "isstream": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
-      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
-      "dev": true
+      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
     },
     "istanbul-lib-coverage": {
       "version": "2.0.5",
@@ -6490,12 +6501,99 @@
       "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==",
       "dev": true,
       "requires": {
+<<<<<<< HEAD
         "@jest/environment": "24.9.0",
         "@jest/fake-timers": "24.9.0",
         "@jest/types": "24.9.0",
         "jest-mock": "24.9.0",
         "jest-util": "24.9.0",
         "jsdom": "11.12.0"
+=======
+        "@jest/environment": "^24.9.0",
+        "@jest/fake-timers": "^24.9.0",
+        "@jest/types": "^24.9.0",
+        "jest-mock": "^24.9.0",
+        "jest-util": "^24.9.0",
+        "jsdom": "^11.5.1"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "5.7.3",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+          "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+          "dev": true
+        },
+        "jsdom": {
+          "version": "11.12.0",
+          "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz",
+          "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==",
+          "dev": true,
+          "requires": {
+            "abab": "^2.0.0",
+            "acorn": "^5.5.3",
+            "acorn-globals": "^4.1.0",
+            "array-equal": "^1.0.0",
+            "cssom": ">= 0.3.2 < 0.4.0",
+            "cssstyle": "^1.0.0",
+            "data-urls": "^1.0.0",
+            "domexception": "^1.0.1",
+            "escodegen": "^1.9.1",
+            "html-encoding-sniffer": "^1.0.2",
+            "left-pad": "^1.3.0",
+            "nwsapi": "^2.0.7",
+            "parse5": "4.0.0",
+            "pn": "^1.1.0",
+            "request": "^2.87.0",
+            "request-promise-native": "^1.0.5",
+            "sax": "^1.2.4",
+            "symbol-tree": "^3.2.2",
+            "tough-cookie": "^2.3.4",
+            "w3c-hr-time": "^1.0.1",
+            "webidl-conversions": "^4.0.2",
+            "whatwg-encoding": "^1.0.3",
+            "whatwg-mimetype": "^2.1.0",
+            "whatwg-url": "^6.4.1",
+            "ws": "^5.2.0",
+            "xml-name-validator": "^3.0.0"
+          }
+        },
+        "parse5": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+          "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+          "dev": true
+        },
+        "tough-cookie": {
+          "version": "2.5.0",
+          "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+          "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+          "dev": true,
+          "requires": {
+            "psl": "^1.1.28",
+            "punycode": "^2.1.1"
+          }
+        },
+        "whatwg-url": {
+          "version": "6.5.0",
+          "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz",
+          "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==",
+          "dev": true,
+          "requires": {
+            "lodash.sortby": "^4.7.0",
+            "tr46": "^1.0.1",
+            "webidl-conversions": "^4.0.2"
+          }
+        },
+        "ws": {
+          "version": "5.2.2",
+          "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
+          "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
+          "dev": true,
+          "requires": {
+            "async-limiter": "~1.0.0"
+          }
+        }
+>>>>>>> origin/develop
       }
     },
     "jest-environment-node": {
@@ -7440,15 +7538,14 @@
     "jsbn": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
-      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
-      "dev": true
+      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
     },
     "jsdom": {
-      "version": "11.12.0",
-      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz",
-      "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==",
-      "dev": true,
+      "version": "15.1.1",
+      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.1.1.tgz",
+      "integrity": "sha512-cQZRBB33arrDAeCrAEWn1U3SvrvC8XysBua9Oqg1yWrsY/gYcusloJC3RZJXuY5eehSCmws8f2YeliCqGSkrtQ==",
       "requires": {
+<<<<<<< HEAD
         "abab": "2.0.1",
         "acorn": "5.7.3",
         "acorn-globals": "4.3.3",
@@ -7475,21 +7572,46 @@
         "whatwg-url": "6.5.0",
         "ws": "5.2.2",
         "xml-name-validator": "3.0.0"
+=======
+        "abab": "^2.0.0",
+        "acorn": "^6.1.1",
+        "acorn-globals": "^4.3.2",
+        "array-equal": "^1.0.0",
+        "cssom": "^0.3.6",
+        "cssstyle": "^1.2.2",
+        "data-urls": "^1.1.0",
+        "domexception": "^1.0.1",
+        "escodegen": "^1.11.1",
+        "html-encoding-sniffer": "^1.0.2",
+        "nwsapi": "^2.1.4",
+        "parse5": "5.1.0",
+        "pn": "^1.1.0",
+        "request": "^2.88.0",
+        "request-promise-native": "^1.0.7",
+        "saxes": "^3.1.9",
+        "symbol-tree": "^3.2.2",
+        "tough-cookie": "^3.0.1",
+        "w3c-hr-time": "^1.0.1",
+        "w3c-xmlserializer": "^1.1.2",
+        "webidl-conversions": "^4.0.2",
+        "whatwg-encoding": "^1.0.5",
+        "whatwg-mimetype": "^2.3.0",
+        "whatwg-url": "^7.0.0",
+        "ws": "^7.0.0",
+        "xml-name-validator": "^3.0.0"
+>>>>>>> origin/develop
       },
       "dependencies": {
-        "acorn": {
-          "version": "5.7.3",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
-          "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
-          "dev": true
-        },
         "ws": {
-          "version": "5.2.2",
-          "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
-          "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
-          "dev": true,
+          "version": "7.1.2",
+          "resolved": "https://registry.npmjs.org/ws/-/ws-7.1.2.tgz",
+          "integrity": "sha512-gftXq3XI81cJCgkUiAVixA0raD9IVmXqsylCrjRygw4+UOOGzPoxnQ6r/CnVL9i+mDncJo94tSkyrtuuQVBmrg==",
           "requires": {
+<<<<<<< HEAD
             "async-limiter": "1.0.1"
+=======
+            "async-limiter": "^1.0.0"
+>>>>>>> origin/develop
           }
         }
       }
@@ -7507,8 +7629,7 @@
     "json-schema": {
       "version": "0.2.3",
       "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
-      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
-      "dev": true
+      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
     },
     "json-schema-traverse": {
       "version": "0.4.1",
@@ -7518,8 +7639,7 @@
     "json-stringify-safe": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
-      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
-      "dev": true
+      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
     },
     "json5": {
       "version": "2.1.0",
@@ -7548,7 +7668,6 @@
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
       "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
-      "dev": true,
       "requires": {
         "assert-plus": "1.0.0",
         "extsprintf": "1.3.0",
@@ -7567,6 +7686,17 @@
       "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
       "dev": true
     },
+    "kronikarz": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/kronikarz/-/kronikarz-0.1.3.tgz",
+      "integrity": "sha512-isj1P/hI1Sd4Lp/rug8Tb3TrFbnSKUdiamAFvFBAuDQhe2xkm2mjMoHiGjSvYCUHdBPYKllCpthEoHfsJhYRHA==",
+      "requires": {
+        "@types/jsdom": "^12.2.4",
+        "front-matter": "^3.0.2",
+        "jsdom": "^15.1.1",
+        "markdown-it": "^10.0.0"
+      }
+    },
     "last-call-webpack-plugin": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz",
@@ -7615,7 +7745,6 @@
       "version": "0.3.0",
       "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
       "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
-      "dev": true,
       "requires": {
         "prelude-ls": "1.1.2",
         "type-check": "0.3.2"
@@ -7629,6 +7758,14 @@
         "uc.micro": "1.0.6"
       }
     },
+    "linkify-it": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz",
+      "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==",
+      "requires": {
+        "uc.micro": "^1.0.1"
+      }
+    },
     "load-bmfont": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.0.tgz",
@@ -7726,8 +7863,7 @@
     "lodash.sortby": {
       "version": "4.7.0",
       "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
-      "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
-      "dev": true
+      "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg="
     },
     "lodash.template": {
       "version": "4.5.0",
@@ -7839,6 +7975,18 @@
         }
       }
     },
+    "markdown-it": {
+      "version": "10.0.0",
+      "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz",
+      "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==",
+      "requires": {
+        "argparse": "^1.0.7",
+        "entities": "~2.0.0",
+        "linkify-it": "^2.0.0",
+        "mdurl": "^1.0.1",
+        "uc.micro": "^1.0.5"
+      }
+    },
     "md5.js": {
       "version": "1.3.5",
       "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
@@ -8336,14 +8484,12 @@
     "nwsapi": {
       "version": "2.1.4",
       "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz",
-      "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==",
-      "dev": true
+      "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw=="
     },
     "oauth-sign": {
       "version": "0.9.0",
       "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
-      "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
-      "dev": true
+      "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
     },
     "object-assign": {
       "version": "4.1.1",
@@ -8492,7 +8638,6 @@
       "version": "0.8.2",
       "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
       "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
-      "dev": true,
       "requires": {
         "deep-is": "0.1.3",
         "fast-levenshtein": "2.0.6",
@@ -8505,8 +8650,7 @@
         "wordwrap": {
           "version": "1.0.0",
           "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
-          "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
-          "dev": true
+          "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus="
         }
       }
     },
@@ -8676,10 +8820,9 @@
       }
     },
     "parse5": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
-      "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
-      "dev": true
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz",
+      "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ=="
     },
     "parseurl": {
       "version": "1.3.3",
@@ -8758,8 +8901,7 @@
     "performance-now": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
-      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
-      "dev": true
+      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
     },
     "phin": {
       "version": "2.9.3",
@@ -8804,8 +8946,7 @@
     "pn": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
-      "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
-      "dev": true
+      "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA=="
     },
     "pngjs": {
       "version": "3.4.0",
@@ -9789,8 +9930,7 @@
     "prelude-ls": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
-      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
-      "dev": true
+      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
     },
     "prepend-http": {
       "version": "1.0.4",
@@ -9933,8 +10073,7 @@
     "psl": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz",
-      "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==",
-      "dev": true
+      "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag=="
     },
     "public-encrypt": {
       "version": "4.0.3",
@@ -10075,8 +10214,13 @@
       "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-3.1.0.tgz",
       "integrity": "sha512-lzUVMuJ06HF4rYveaz9Tv0WRlUMxJ0Y1hgSkkgg+50iEdaI0TthyEDe08KIHb0XsF6rn8WYTqPCaGTZg3sX+qA==",
       "requires": {
+<<<<<<< HEAD
         "loader-utils": "1.2.3",
         "schema-utils": "2.1.0"
+=======
+        "loader-utils": "^1.1.0",
+        "schema-utils": "^2.0.1"
+>>>>>>> origin/develop
       }
     },
     "react-is": {
@@ -10292,7 +10436,6 @@
       "version": "2.88.0",
       "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
       "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
-      "dev": true,
       "requires": {
         "aws-sign2": "0.7.0",
         "aws4": "1.8.0",
@@ -10319,20 +10462,17 @@
         "punycode": {
           "version": "1.4.1",
           "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
-          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
-          "dev": true
+          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
         },
         "qs": {
           "version": "6.5.2",
           "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
-          "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
-          "dev": true
+          "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
         },
         "tough-cookie": {
           "version": "2.4.3",
           "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
           "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
-          "dev": true,
           "requires": {
             "psl": "1.3.0",
             "punycode": "1.4.1"
@@ -10344,7 +10484,6 @@
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz",
       "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==",
-      "dev": true,
       "requires": {
         "lodash": "4.17.15"
       }
@@ -10353,11 +10492,26 @@
       "version": "1.0.7",
       "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz",
       "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==",
-      "dev": true,
       "requires": {
         "request-promise-core": "1.1.2",
+<<<<<<< HEAD
         "stealthy-require": "1.1.1",
         "tough-cookie": "2.5.0"
+=======
+        "stealthy-require": "^1.1.1",
+        "tough-cookie": "^2.3.3"
+      },
+      "dependencies": {
+        "tough-cookie": {
+          "version": "2.5.0",
+          "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+          "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+          "requires": {
+            "psl": "^1.1.28",
+            "punycode": "^2.1.1"
+          }
+        }
+>>>>>>> origin/develop
       }
     },
     "require-directory": {
@@ -10522,6 +10676,14 @@
       "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
       "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
     },
+    "saxes": {
+      "version": "3.1.11",
+      "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz",
+      "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==",
+      "requires": {
+        "xmlchars": "^2.1.1"
+      }
+    },
     "schema-utils": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.1.0.tgz",
@@ -10930,7 +11092,6 @@
       "version": "1.16.1",
       "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
       "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
-      "dev": true,
       "requires": {
         "asn1": "0.2.4",
         "assert-plus": "1.0.0",
@@ -11007,8 +11168,7 @@
     "stealthy-require": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
-      "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
-      "dev": true
+      "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks="
     },
     "stream-browserify": {
       "version": "2.0.2",
@@ -11266,8 +11426,7 @@
     "symbol-tree": {
       "version": "3.2.4",
       "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
-      "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
-      "dev": true
+      "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
     },
     "tapable": {
       "version": "1.1.3",
@@ -11488,20 +11647,24 @@
       "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk="
     },
     "tough-cookie": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
-      "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
-      "dev": true,
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz",
+      "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==",
       "requires": {
+<<<<<<< HEAD
         "psl": "1.3.0",
         "punycode": "2.1.1"
+=======
+        "ip-regex": "^2.1.0",
+        "psl": "^1.1.28",
+        "punycode": "^2.1.1"
+>>>>>>> origin/develop
       }
     },
     "tr46": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
       "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
-      "dev": true,
       "requires": {
         "punycode": "2.1.1"
       }
@@ -11564,7 +11727,6 @@
       "version": "0.6.0",
       "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
       "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
-      "dev": true,
       "requires": {
         "safe-buffer": "5.1.2"
       }
@@ -11572,14 +11734,12 @@
     "tweetnacl": {
       "version": "0.14.5",
       "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
-      "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
-      "dev": true
+      "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
     },
     "type-check": {
       "version": "0.3.2",
       "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
       "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
-      "dev": true,
       "requires": {
         "prelude-ls": "1.1.2"
       }
@@ -11883,7 +12043,6 @@
       "version": "1.10.0",
       "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
       "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
-      "dev": true,
       "requires": {
         "assert-plus": "1.0.0",
         "core-util-is": "1.0.2",
@@ -12109,11 +12268,20 @@
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz",
       "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=",
-      "dev": true,
       "requires": {
         "browser-process-hrtime": "0.1.3"
       }
     },
+    "w3c-xmlserializer": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz",
+      "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==",
+      "requires": {
+        "domexception": "^1.0.1",
+        "webidl-conversions": "^4.0.2",
+        "xml-name-validator": "^3.0.0"
+      }
+    },
     "walker": {
       "version": "1.0.7",
       "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
@@ -12702,8 +12870,7 @@
     "webidl-conversions": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
-      "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
-      "dev": true
+      "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="
     },
     "webpack": {
       "version": "4.39.3",
@@ -12893,7 +13060,6 @@
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
       "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
-      "dev": true,
       "requires": {
         "iconv-lite": "0.4.24"
       }
@@ -12901,14 +13067,12 @@
     "whatwg-mimetype": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
-      "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
-      "dev": true
+      "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g=="
     },
     "whatwg-url": {
-      "version": "6.5.0",
-      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz",
-      "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==",
-      "dev": true,
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz",
+      "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==",
       "requires": {
         "lodash.sortby": "4.7.0",
         "tr46": "1.0.1",
@@ -13062,8 +13226,7 @@
     "xml-name-validator": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
-      "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
-      "dev": true
+      "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw=="
     },
     "xml-parse-from-string": {
       "version": "1.0.1",
@@ -13084,6 +13247,11 @@
       "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
       "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
     },
+    "xmlchars": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
+      "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="
+    },
     "xtend": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
diff --git a/package.json b/package.json
index dc4be67..4776e69 100644
--- a/package.json
+++ b/package.json
@@ -6,16 +6,28 @@
   "private": true,
   "scripts": {
     "dev": "nuxt",
-    "build": "nuxt build",
+    "prebuild": "./scripts/prebuild.sh",
+    "build": "nuxt generate",
+    "postbuild": "./scripts/postbuild.sh",
     "start": "nuxt start",
-    "generate": "nuxt generate",
     "test": "jest"
   },
   "dependencies": {
     "@nuxtjs/axios": "^5.3.6",
+<<<<<<< HEAD
     "@nuxtjs/markdownit": "^1.2.7",
     "@nuxtjs/pwa": "^3.0.0-0",
     "nuxt": "^2.0.0"
+=======
+    "@nuxtjs/pwa": "^3.0.0-0",
+    "esm": "^3.2.25",
+    "front-matter": "^3.0.2",
+    "jsdom": "^15.1.1",
+    "kronikarz": "^0.1.3",
+    "markdown-it": "^10.0.0",
+    "nuxt": "^2.0.0",
+    "raw-loader": "^3.1.0"
+>>>>>>> origin/develop
   },
   "devDependencies": {
     "@vue/test-utils": "^1.0.0-beta.27",
diff --git a/pages/kronika/_year/_month/_day/_title/index.vue b/pages/kronika/_year/_month/_day/_title/index.vue
new file mode 100644
index 0000000..fa9a9ab
--- /dev/null
+++ b/pages/kronika/_year/_month/_day/_title/index.vue
@@ -0,0 +1,82 @@
+<template>
+  <div>
+    <div v-if="notFound">
+      <h1>404</h1>
+      <p>Nie znaleziono wpisu</p>
+    </div>
+    <div v-else class="article">
+      <article class="content" v-html="content"></article>
+    </div>
+  </div>
+</template>
+
+<script>
+const md = require('markdown-it')()
+import frontmatter from 'front-matter'
+import k from '~/api'
+
+export default {
+  head() {
+    return {
+      meta: [
+        {
+          hid: 'og:title',
+          property: 'og:title',
+          content: this.attributes.title
+        },
+        {
+          hid: 'og:type',
+          property: 'og:type',
+          content: 'article'
+        },
+        {
+          hid: 'og:article:author',
+          property: 'og:article:author',
+          content: this.attributes.author
+        }
+      ]
+    }
+  },
+  async asyncData({ params }) {
+    const { year, month, day, title } = params
+    const post = k.getPost(year, month, day, title)
+
+    if (post === undefined) return { notFound: true }
+
+    return {
+      params,
+      attributes: post.content.meta,
+      content: post.content.html
+    }
+  },
+  data() {
+    return {
+      notFound: false
+    }
+  }
+}
+</script>
+
+<style>
+.article {
+  padding: 60px 80px;
+  width: 100%;
+  max-width: 1000px;
+  flex: 1;
+  background: #ffffff;
+  z-index: -1;
+  text-align: left;
+}
+.article img {
+  width: 100%;
+  border-radius: 5px;
+}
+@media (max-width: 720px) {
+  .article {
+    padding: 60px 20px;
+  }
+  .article p {
+    text-align: justify;
+  }
+}
+</style>
\ No newline at end of file
diff --git a/pages/kronika/index.vue b/pages/kronika/index.vue
new file mode 100644
index 0000000..4a89a48
--- /dev/null
+++ b/pages/kronika/index.vue
@@ -0,0 +1,52 @@
+<template>
+  <div style="padding-top: 20px">
+    <h2>Ostatnie wpisy</h2>
+    <div class="post-list">
+      <chronicle-post
+        v-for="(post, index) in posts"
+        :key="index"
+        :route="post.route"
+        :title="post.content.meta.title"
+        :description="post.content.description"
+      />
+    </div>
+  </div>
+</template>
+
+<script>
+import ChroniclePost from '~/components/ChroniclePost'
+import k from '~/api'
+
+export default {
+  components: {
+    ChroniclePost
+  },
+  async asyncData() {
+    return {
+      posts: k.getPosts()
+    }
+  },
+  mounted() {
+    this.getPosts()
+  },
+  methods: {
+    getPosts() {
+      if (this.posts.length < 1) {
+        this.$axios
+          .get(`${window.location.origin}/api/posts.json`)
+          .then(r => (this.posts = r.data))
+      }
+      console.log(this.posts)
+    }
+  }
+}
+</script>
+
+<style scoped>
+.post-list {
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: center;
+  max-width: 900px;
+}
+</style>
\ No newline at end of file
diff --git a/scripts/generateApi.js b/scripts/generateApi.js
new file mode 100755
index 0000000..f72745e
--- /dev/null
+++ b/scripts/generateApi.js
@@ -0,0 +1,23 @@
+import fs from 'fs'
+import k from '../api'
+
+let posts = k.getPosts()
+
+posts = posts.map(({ date, title, content, route }) => {
+  const { year, month, day } = date
+  const { description, meta } = content
+
+  return {
+    date: `${year}-${month}-${day}`,
+    title,
+    content: { description, meta },
+    route
+  }
+})
+
+posts.sort((a, b) => (a.route > b.route ? 1 : -1))
+
+fs.writeFile('./dist/api/posts.json', JSON.stringify(posts), err =>
+  err ? console.log(err) : null
+)
+console.log(posts)
diff --git a/scripts/postbuild.sh b/scripts/postbuild.sh
new file mode 100755
index 0000000..85e35f9
--- /dev/null
+++ b/scripts/postbuild.sh
@@ -0,0 +1,6 @@
+#!/usr/bin/env bash
+
+mkdir ./dist/api
+
+node -r esm ./scripts/generateApi.js
+
diff --git a/scripts/prebuild.sh b/scripts/prebuild.sh
new file mode 100755
index 0000000..937bf5f
--- /dev/null
+++ b/scripts/prebuild.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+set -x
+set -eou pipefail
+
+if [ -d ./content ]; then
+    cd content
+    git pull
+    cd ..
+else
+    git clone https://github.com/19pdh/kronika content
+fi
diff --git a/static/assets/og/default.jpg b/static/assets/og/default.jpg
new file mode 100644
index 0000000..d422270
--- /dev/null
+++ b/static/assets/og/default.jpg
Binary files differdiff --git a/test/components/FacebookFeed.test.js b/tests/components/FacebookFeed.test.js
index 7abedf6..7abedf6 100644
--- a/test/components/FacebookFeed.test.js
+++ b/tests/components/FacebookFeed.test.js
diff --git a/test/components/FacebookFindUsButton.test.js b/tests/components/FacebookFindUsButton.test.js
index d74e16f..d74e16f 100644
--- a/test/components/FacebookFindUsButton.test.js
+++ b/tests/components/FacebookFindUsButton.test.js
diff --git a/test/components/Footer.test.js b/tests/components/Footer.test.js
index e284b5a..e284b5a 100644
--- a/test/components/Footer.test.js
+++ b/tests/components/Footer.test.js
diff --git a/test/components/JoinUs.test.js b/tests/components/JoinUs.test.js
index c831459..c831459 100644
--- a/test/components/JoinUs.test.js
+++ b/tests/components/JoinUs.test.js
diff --git a/test/components/NavBar.test.js b/tests/components/NavBar.test.js
index be61915..be61915 100644
--- a/test/components/NavBar.test.js
+++ b/tests/components/NavBar.test.js
diff --git a/test/components/NavLink.test.js b/tests/components/NavLink.test.js
index d35e6db..d35e6db 100644
--- a/test/components/NavLink.test.js
+++ b/tests/components/NavLink.test.js
diff --git a/test/components/__snapshots__/FacebookFeed.test.js.snap b/tests/components/__snapshots__/FacebookFeed.test.js.snap
index 6819e12..6819e12 100644
--- a/test/components/__snapshots__/FacebookFeed.test.js.snap
+++ b/tests/components/__snapshots__/FacebookFeed.test.js.snap
diff --git a/test/components/__snapshots__/FacebookFindUsButton.test.js.snap b/tests/components/__snapshots__/FacebookFindUsButton.test.js.snap
index 98783c4..98783c4 100644
--- a/test/components/__snapshots__/FacebookFindUsButton.test.js.snap
+++ b/tests/components/__snapshots__/FacebookFindUsButton.test.js.snap
diff --git a/test/components/__snapshots__/Footer.test.js.snap b/tests/components/__snapshots__/Footer.test.js.snap
index 577f85e..577f85e 100644
--- a/test/components/__snapshots__/Footer.test.js.snap
+++ b/tests/components/__snapshots__/Footer.test.js.snap
diff --git a/test/components/__snapshots__/JoinUs.test.js.snap b/tests/components/__snapshots__/JoinUs.test.js.snap
index 832268c..832268c 100644
--- a/test/components/__snapshots__/JoinUs.test.js.snap
+++ b/tests/components/__snapshots__/JoinUs.test.js.snap
diff --git a/test/components/__snapshots__/NavBar.test.js.snap b/tests/components/__snapshots__/NavBar.test.js.snap
index fb90c28..89ef8e5 100644
--- a/test/components/__snapshots__/NavBar.test.js.snap
+++ b/tests/components/__snapshots__/NavBar.test.js.snap
@@ -34,7 +34,7 @@ exports[`NavBar match snapshot 1`] = `
       link="/"
       name="Home"
     />
-     
+      
   </ul>
 </nav>
 `;
diff --git a/test/components/__snapshots__/NavLink.test.js.snap b/tests/components/__snapshots__/NavLink.test.js.snap
index 122e5c8..122e5c8 100644
--- a/test/components/__snapshots__/NavLink.test.js.snap
+++ b/tests/components/__snapshots__/NavLink.test.js.snap
diff --git a/test/pages/404.test.js b/tests/pages/404.test.js
index 76322da..76322da 100644
--- a/test/pages/404.test.js
+++ b/tests/pages/404.test.js
diff --git a/test/pages/__snapshots__/404.test.js.snap b/tests/pages/__snapshots__/404.test.js.snap
index 44419f9..44419f9 100644
--- a/test/pages/__snapshots__/404.test.js.snap
+++ b/tests/pages/__snapshots__/404.test.js.snap
diff --git a/test/pages/__snapshots__/download.test.js.snap b/tests/pages/__snapshots__/download.test.js.snap
index 05d1361..05d1361 100644
--- a/test/pages/__snapshots__/download.test.js.snap
+++ b/tests/pages/__snapshots__/download.test.js.snap
diff --git a/test/pages/__snapshots__/index.test.js.snap b/tests/pages/__snapshots__/index.test.js.snap
index af3d906..af3d906 100644
--- a/test/pages/__snapshots__/index.test.js.snap
+++ b/tests/pages/__snapshots__/index.test.js.snap
diff --git a/test/pages/__snapshots__/kontakt.test.js.snap b/tests/pages/__snapshots__/kontakt.test.js.snap
index 22be789..22be789 100644
--- a/test/pages/__snapshots__/kontakt.test.js.snap
+++ b/tests/pages/__snapshots__/kontakt.test.js.snap
diff --git a/test/pages/__snapshots__/o-nas.test.js.snap b/tests/pages/__snapshots__/o-nas.test.js.snap
index fbdc54c..fbdc54c 100644
--- a/test/pages/__snapshots__/o-nas.test.js.snap
+++ b/tests/pages/__snapshots__/o-nas.test.js.snap
diff --git a/test/pages/download.test.js b/tests/pages/download.test.js
index 78f16d9..78f16d9 100644
--- a/test/pages/download.test.js
+++ b/tests/pages/download.test.js
diff --git a/test/pages/index.test.js b/tests/pages/index.test.js
index 1e262b3..1e262b3 100644
--- a/test/pages/index.test.js
+++ b/tests/pages/index.test.js
diff --git a/test/pages/kontakt.test.js b/tests/pages/kontakt.test.js
index d99e120..d99e120 100644
--- a/test/pages/kontakt.test.js
+++ b/tests/pages/kontakt.test.js
diff --git a/test/pages/o-nas.test.js b/tests/pages/o-nas.test.js
index 8b87253..8b87253 100644
--- a/test/pages/o-nas.test.js
+++ b/tests/pages/o-nas.test.js