diff --git a/content/README.md b/content/README.md
index 7cdd67abfec225a4354914bd8d066c76c1db284f..819f3f67e7b22fdf1a33928984c5999cc5c0053d 100644
--- a/content/README.md
+++ b/content/README.md
@@ -40,10 +40,8 @@ To je to mezi ```` ``` ```` a ```` ``` ```` ;)
  * image - titulní obrázek článku. Tento by měl být umístěn v static/images/leads/OBRAZEK.png,
     nebo ve složce článku. Preferujte png
  * tags - Seznam tagĹŻ
- * [author] - Počátek sekce pojednávající o autorovi, pokud chybí je vytvořena z git historie
-    * name - jméno autora
- * [date]
-     * creation - datum vytvoření
+ * author - jméno autora
+ * published - datum publikace, pokud chybí článek nebude vyvěšen
  * nodate=true - indikuje, že by se nemělo zobrazovat datum vytvoření
 
 ## StandartnĂ­ kategorie:
diff --git a/content/articles/2008/pracujeme-v-eagle-1cast-zaciname.md b/content/articles/2008/pracujeme-v-eagle-1cast-zaciname.md
index 385ea77ed7140cf9716fe83a28784df83edd9476..57a3ea193fd155705694b07468f8d559cd3baaa7 100644
--- a/content/articles/2008/pracujeme-v-eagle-1cast-zaciname.md
+++ b/content/articles/2008/pracujeme-v-eagle-1cast-zaciname.md
@@ -7,7 +7,7 @@ perex_e = "
 
 
 
-Každý správný radioamatér zajisté vyrábí plošné spoje častěji, než zalévá květiny na zahradě, a právě pro něj je určený program EAGLE z dílny CADsoft, pro tvorbu plošných spojů. Proč se v dnešní době "zdržovat" návrhem plošným spojů na papír a pracným ručním překreslováním, když je k dispozici software, který veškerou práci udělá za Vás a to velmi rychle a jednoduše. Do karet nám, radioamatérům, hraje i licence - freeware, který je ve verzi Light pro amatérské použití zdarma a může tak být volně používán!
+Každý správný radioamatér zajisté vyrábí plošné spoje častěji, než zalévá květiny na zahradě, a právě pro něj je určený program EAGLE z dílny CADsoft, pro tvorbu plošných spojů. Proč se v dnešní době \"zdržovat\" návrhem plošným spojů na papír a pracným ručním překreslováním, když je k dispozici software, který veškerou práci udělá za Vás a to velmi rychle a jednoduše. Do karet nám, radioamatérům, hraje i licence - freeware, který je ve verzi Light pro amatérské použití zdarma a může tak být volně používán!
  .
 "
 +++
diff --git a/content/articles/2008/provozni-aktiv-3-2008.md b/content/articles/2008/provozni-aktiv-3-2008.md
index 25b5110c6c9065702b0c48ca43c4a066a1658926..aa4dd6a00c5e103b2fe74e566bf0f22f39e24458 100644
--- a/content/articles/2008/provozni-aktiv-3-2008.md
+++ b/content/articles/2008/provozni-aktiv-3-2008.md
@@ -3,7 +3,7 @@ title = "ProvoznĂ­ aktiv 3/2008"
 tags = ["Aktuality", "Stalo se", "Závody", "Rozbité články"]
 published = "2008-03-16T15:14:16.000Z"
 author = "Michal, OK1WMR"
-perex_e = " Po dobrodružném I. Subregionálu jsme se těšili "klidný" provozní aktiv na VKV. Počasí bylo, alespoň v sobotu, nádherné. Postavili jsme náš 14m vysoký stožár s 17el. M2. Během závodu jsme navázali 112 spojení a nejdelší bylo se stanicí G0KPW na vzdálenost 813 km a dosáhli tedy celkového počtu 32 471 bodů... . ."
+perex_e = " Po dobrodružném I. Subregionálu jsme se těšili \"klidný\" provozní aktiv na VKV. Počasí bylo, alespoň v sobotu, nádherné. Postavili jsme náš 14m vysoký stožár s 17el. M2. Během závodu jsme navázali 112 spojení a nejdelší bylo se stanicí G0KPW na vzdálenost 813 km a dosáhli tedy celkového počtu 32 471 bodů... . ."
 +++
 
 
diff --git a/content/articles/2008/radiovy-orientacni-beh-liboc-2008.md b/content/articles/2008/radiovy-orientacni-beh-liboc-2008.md
index 343b66095da52538ec7d8080a4e7c1dcad28764d..45af1bbbdab9f7b95a8b2bafea1bc8a1dc129dc3 100644
--- a/content/articles/2008/radiovy-orientacni-beh-liboc-2008.md
+++ b/content/articles/2008/radiovy-orientacni-beh-liboc-2008.md
@@ -11,7 +11,7 @@ perex_e = "
 
 
 
-Náš radioklub uspořádal 9. 7. 2008 "hon na lišku" pro účastníky  letního tábora nedaleko obce Liboc.
+Náš radioklub uspořádal 9. 7. 2008 \"hon na lišku\" pro účastníky  letního tábora nedaleko obce Liboc.
 .
 
 .
diff --git a/content/articles/2008/radiovy-orientacni-beh-materske-centrum-2008.md b/content/articles/2008/radiovy-orientacni-beh-materske-centrum-2008.md
index 889a36bbee2ced0fc39d4dd9e00db4429cd9eb7e..2bf5ec71c38955b11cfe7cb04f09d1c24a13df8d 100644
--- a/content/articles/2008/radiovy-orientacni-beh-materske-centrum-2008.md
+++ b/content/articles/2008/radiovy-orientacni-beh-materske-centrum-2008.md
@@ -4,7 +4,7 @@ tags = ["Aktuality", "Stalo se", "Akce pro veřejnost", "Rozbité články"]
 published = "2008-08-14T05:32:13.000Z"
 author = "Michal, OK1WMR"
 perex_e = "
-Náš radioklub uspořádal 21. 7. 2008 "hon na lišku" pro účastníky  příměstského tábora pořádaného Mateřským centrem v Karlových Varech
+Náš radioklub uspořádal 21. 7. 2008 \"hon na lišku\" pro účastníky  příměstského tábora pořádaného Mateřským centrem v Karlových Varech
 .
 
 .
diff --git a/content/articles/2008/svetelny-had-s-10-led.md b/content/articles/2008/svetelny-had-s-10-led.md
index b2b292a5a0f21bfe3009ec8624777077b9334655..5897be714728341ad848da54ffc2499a8c33ea7d 100644
--- a/content/articles/2008/svetelny-had-s-10-led.md
+++ b/content/articles/2008/svetelny-had-s-10-led.md
@@ -4,7 +4,7 @@ tags = ["Články", "Konstrukce", "Konstrukce pro začátečníky", "Rozbité č
 published = "2008-11-27T17:27:50.000Z"
 author = "Michal, OK1WMR"
 image = "02.jpg"
-perex_e = "Jednoduchý světelný had s možností regulace rychlosti "běhu"
+perex_e = "Jednoduchý světelný had s možností regulace rychlosti \"běhu\"
 světla. Kde rychlost udává známý časovač 555, který je napojen do obvodu 4017,
 známého také jako Johnsonův čítač/dělič. Na jeho výstupy jsou napojeny LED.
 Hodnota C1 je 1uF. Na plošném spoji jsou LED v jednoduché řadě, ale diody by
diff --git a/content/articles/2010/q-kody.md b/content/articles/2010/q-kody.md
index 3967bcad4f5daa5ebf774b75976a48f5db4f6c6a..a0f7fb026d0de062f65c23112eac9358fa5b1161 100644
--- a/content/articles/2010/q-kody.md
+++ b/content/articles/2010/q-kody.md
@@ -7,7 +7,7 @@ perex_e = "Od počátků radiového provozu, který tehdy využíval výhradně
 telegrafní signály, měli operátoři snahu zrychlit vysílání použitím
 zkratek pro některé často se opakující ustálené fráze. Tak vzniklo
 několik soustav kódů, nejznámější je tzv. Q-kód charakterisovaný
-skupinou tří písmen, z nichž první je "Q".
+skupinou tří písmen, z nichž první je \"Q\".
 Q-kód je univerzální a používá ho většina služeb. Některé služby si
 vyvinuly vlastní kódy, např. N-kód, Z-kód, které lépe odpovídají jejich
 potřebám.
@@ -177,8 +177,8 @@ Zpráva všem radioamatérům.
 
 
 QSV
-Vyšlete sérii "VVV"(na kmitočtu ...... kHz).
-Mám vyslat sérii "VVV"(na kmitočtu ...... kHz)?
+Vyšlete sérii \"VVV\"(na kmitočtu ...... kHz).
+Mám vyslat sérii \"VVV\"(na kmitočtu ...... kHz)?
 
 
 QSX
@@ -218,8 +218,8 @@ Mám se naladit přesně na váš kmitočet?
 
 
 Otázku vytváříme doplněním otazníku za kód, např. QTH?.
-V radioamatérské praxi se vžilo i používání přeneseného (zobecněného) výzanamu Q-kódů, např. QSO znamená obecněji "radioamatérské spojení", QTH ""umístění stanice", QRO "velký výkon", a řekne-li někdo ve fonickém spojení, že jde "do
-kvéerelu", nejde o nic hrozného (krom jazykové stránky), mluvčí tak chce
+V radioamatérské praxi se vžilo i používání přeneseného (zobecněného) výzanamu Q-kódů, např. QSO znamená obecněji \"radioamatérské spojení\", QTH \"\"umístění stanice\", QRO \"velký výkon\", a řekne-li někdo ve fonickém spojení, že jde \"do
+kvéerelu\", nejde o nic hrozného (krom jazykové stránky), mluvčí tak chce
  vyjádřit, že jde do zaměstnání.
 Zdroj - ÄŚRK
 VĂ­ce zde"
diff --git a/content/articles/2013/radioklub-v-mlade-fronte-rijen-2013.md b/content/articles/2013/radioklub-v-mlade-fronte-rijen-2013.md
index 873cdcfee9a40ea2a2da741be070becfbf7ab146..dc98e302ad9e73e873747dac644433c45b087a07 100644
--- a/content/articles/2013/radioklub-v-mlade-fronte-rijen-2013.md
+++ b/content/articles/2013/radioklub-v-mlade-fronte-rijen-2013.md
@@ -3,7 +3,7 @@ title = "Radioklub v Mladé Frontě - říjen 2013"
 tags = ["Aktuality", "Stalo se", "Napsali o nás", "Rozbité články"]
 published = "2013-11-15T19:23:09.000Z"
 author = "MĂ­ra, OK7KM"
-perex_e = "V deníku Mladá Fronta vyšel dne 21. 10. 2013 článek s názvem Mladý modelář nebo mechanik, to jsou v kraji "ohrožené druhy". Autor článku  udělal rozhovor také s vedoucím našeho kroužku. Celý článek si můžete přečíst uvnitř naší krátké zprávy.. A Celuto
+perex_e = "V deníku Mladá Fronta vyšel dne 21. 10. 2013 článek s názvem Mladý modelář nebo mechanik, to jsou v kraji \"ohrožené druhy\". Autor článku  udělal rozhovor také s vedoucím našeho kroužku. Celý článek si můžete přečíst uvnitř naší krátké zprávy.. A Celuto
 
 
 
diff --git a/content/articles/2015/radioklub-ok1kvk-v-poradu-vikend.md b/content/articles/2015/radioklub-ok1kvk-v-poradu-vikend.md
index 2a360f38b3385afdd8a795f8ed7a29c8c18829d5..4141bd34683ffff5712f7f14c337d0b1d1b2f54e 100644
--- a/content/articles/2015/radioklub-ok1kvk-v-poradu-vikend.md
+++ b/content/articles/2015/radioklub-ok1kvk-v-poradu-vikend.md
@@ -4,7 +4,7 @@ tags = ["Aktuality", "Stalo se", "Napsali o nás"]
 published = "2015-12-10T19:44:10.000Z"
 author = "MĂ­ra, OK7KM"
 image = "vikend.png"
-perex_e = "V úterý, 8. prosince 2015 byl odvysílán další díl pořadu Víkend na TV Nova, na téma "S hlavou v oblacích". Radioklub a jeho pracoviště na Blatenském vrchu jste mohli vidět během jedné z reportáží. Záznam najdete v našem článku."
+perex_e = "V úterý, 8. prosince 2015 byl odvysílán další díl pořadu Víkend na TV Nova, na téma \"S hlavou v oblacích\". Radioklub a jeho pracoviště na Blatenském vrchu jste mohli vidět během jedné z reportáží. Záznam najdete v našem článku."
 +++
 
 
diff --git a/content/articles/2015/sk-petr-pohanka-ok1fkv.md b/content/articles/2015/sk-petr-pohanka-ok1fkv.md
index abe6b7a6b1f53c62ba0932a42c8a2c350eab69ed..d5a4f759b547202ab372835f9c7d4f23049867e7 100644
--- a/content/articles/2015/sk-petr-pohanka-ok1fkv.md
+++ b/content/articles/2015/sk-petr-pohanka-ok1fkv.md
@@ -5,7 +5,7 @@ published = "2015-05-20T15:51:21.000Z"
 author = "Jirka, OK1UBO"
 perex_e = "
 Krátce po svých osmdesátinách, dne 20. 4. 2015, zemřel dlouholetý člen našeho radioklubu Petr Pohanka, narozen 11. 3. 1935, ex OK1FKV, ex DIG 4865, člen Veterán Rádio Klubu a klubu přátel telegrafie, držitel DIG Trophy a CW Plakette. Petr se od mládí věnoval fotografii, ke které přičichl už během studia na Vyšší zdravotní škole, kde v roce 1953 absolvoval obor rentgenový laborant, jehož součástí byl i kurs lékařské fotografie. Současně jej ale zajímala i výtvarná fotografie.
-Ve druhé polovině 50. let založil a vedl fotokroužek při domě kultury v Chomutově, v roce 1957 se stal členem krajského fotoklubu v Teplicích a absolvoval dvouletý kurs výtvarné fotografie u prof. Jána Šmoka. V roce 1960 se stal členem Svazu českých fotografů a v následujícím desetiletí se podílel na řadě výstav doma i v zahraničí. Konec slibně se rozvíjející fotografické kariéry nastal v roce 1972, kdy Petr Pohanka neprozřetelně vystavil "nevhodnou" fotografii z oslav 1. máje a byl "odměněn" zákazem publikování, a když pak při stěhování do Říčan nešťastně přišel o stovky negativů, na fotografování zanevřel a začal se věnovat radioamatérství.
+Ve druhé polovině 50. let založil a vedl fotokroužek při domě kultury v Chomutově, v roce 1957 se stal členem krajského fotoklubu v Teplicích a absolvoval dvouletý kurs výtvarné fotografie u prof. Jána Šmoka. V roce 1960 se stal členem Svazu českých fotografů a v následujícím desetiletí se podílel na řadě výstav doma i v zahraničí. Konec slibně se rozvíjející fotografické kariéry nastal v roce 1972, kdy Petr Pohanka neprozřetelně vystavil \"nevhodnou\" fotografii z oslav 1. máje a byl \"odměněn\" zákazem publikování, a když pak při stěhování do Říčan nešťastně přišel o stovky negativů, na fotografování zanevřel a začal se věnovat radioamatérství.
 
 "
 +++
diff --git a/content/config.toml b/content/config.toml
deleted file mode 100644
index 6c11e2044b0d93e4b485f619c4aae58248b02c5c..0000000000000000000000000000000000000000
--- a/content/config.toml
+++ /dev/null
@@ -1,2 +0,0 @@
-[git]
-mergeMessage=["See merge request ","(Autoexportováno z Joomly)","(Autoexportován z Joomly)","[publish]"]
diff --git a/index.js b/index.js
index 732d8be9ddb83bfb5df35ac07fe803e107971d68..4affb442f913fb0d6ea50df0b06c43ad7a431ca7 100755
--- a/index.js
+++ b/index.js
@@ -16,7 +16,7 @@ cli.main(function(args, options) {
     })
 })
 
-var sitegin = function(config) {
+function sitegin(config) {
   const options = config.options
   require('./sitegin/sitegin')({
     watch: !options.noserver && !options.nowatch,
@@ -131,7 +131,7 @@ var sitegin = function(config) {
     })
 }
 
-var copyStaticFiles = function(builddir, staticdir, themedir) {
+function copyStaticFiles(builddir, staticdir, themedir) {
   // STATIC FILES
   const fsextra = require('node-fs-extra')
   fsextra.copy(
@@ -159,15 +159,18 @@ var copyStaticFiles = function(builddir, staticdir, themedir) {
   )
 }
 
-var rendersass = function(builddir, themedir) {
+function rendersass(builddir, themedir) {
   // SASS
   const sass = require('node-sass')
-  const fs = require('filendir')
+  const fs = require('fs')
+  const mkdirp = require('mkdirp')
 
   sass.render({ file: `${themedir}/sass/style.scss` }, function(err, result) {
     if (err === null) {
       console.log('compiled sass')
-      fs.writeFile(`${builddir}/theme/style.css`, result.css)
+      mkdirp(`${builddir}/theme`, () => {
+        fs.writeFile(`${builddir}/theme/style.css`, result.css, () => {})
+      })
     } else console.log('error ', err)
   })
 }
diff --git a/reexport.js b/reexport.js
new file mode 100644
index 0000000000000000000000000000000000000000..83e26c4e321d2738dcae1ea1d84219450ae065bd
--- /dev/null
+++ b/reexport.js
@@ -0,0 +1,45 @@
+const fs = require('fs')
+const data = require('../ok1kvk.cz/data.json')
+
+function tomlPrimitive(obj) {
+  if (Array.isArray(obj)) return `[${obj.map(tomlPrimitive).join(', ')}]`
+  if (typeof obj === 'string') {
+    return `"${obj.replace(/"/g, '\\"')}"`
+  }
+  if (typeof obj === 'boolean') return `${obj}`
+  throw new Error(`Unknown ${JSON.stringify(obj)}`)
+}
+
+function tomlObject(obj) {
+  let ret = ''
+  for (const [key, value] of Object.entries(obj)) {
+    if (value === null || value === undefined) continue
+    ret += `${key} = ${tomlPrimitive(value)}\n`
+  }
+  return ret
+}
+
+function authorRewrite(author) {
+  if (author === 'Jakub Skořepa') return 'Isabella Skořepová'
+  if (author === 'Michal Rybka') return 'Michal, OK1WMR'
+  if (author === 'Mira, OK7KM') return 'MĂ­ra, OK7KM'
+  return author
+}
+
+for (const page of data.pages) {
+  const tags = page.metadata.tags.filter(
+    t => t.text !== 'Všechny články a aktuality',
+  )
+  const text = `+++\n${tomlObject({
+    title: page.metadata.title,
+    tags: tags.length > 0 ? tags.map(t => t.text) : null,
+    nodate: page.metadata.nodate,
+    notarticle: page.metadata.notarticle,
+    published: page.metadata.date.creation,
+    author: authorRewrite(page.metadata.author.name),
+    image: page.metadata.image,
+    perex: page.metadata.perex,
+    perex_e: page.metadata.perex_e,
+  })}+++\n\n${page.content}`
+  fs.writeFileSync(page.filename, text, 'utf-8')
+}
diff --git a/sitegin/gitInfo.js b/sitegin/gitInfo.js
deleted file mode 100644
index 2a448fa0de8b768f1c6e3f3e97469af1fac7ee0b..0000000000000000000000000000000000000000
--- a/sitegin/gitInfo.js
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * Add date: {creation, modification, modified} and author: {name, email}
- * to metadata if not already present
- */
-
-const nodegit = require('nodegit')
-const path = require('path')
-const moment = require('moment')
-
-// Returns promise for patch of single commit
-const gitShow = (repo, commitData) => {
-  let commit
-  let tree
-  let parentTree
-  return nodegit.Revparse.single(repo, commitData.commit)
-    .then(obj => nodegit.Commit.lookup(repo, obj.id()))
-    .then(_commit => {
-      commit = _commit
-      if (commit.parentcount() < 1) return null
-      return commit.getParents(1)
-    })
-    .then(parents => {
-      if (parents === null) return null
-      return parents[0].getTree()
-    })
-    .then(_parentTree => {
-      parentTree = _parentTree
-      return commit.getTree()
-    })
-    .then(_tree => {
-      tree = _tree
-      return nodegit.Diff.treeToTree(repo, parentTree, tree, null)
-    })
-    .then(diff => diff.patches())
-    .then(patches => [patches, commitData])
-}
-
-const gitlog = repo => {
-  const map = () =>
-    Promise.resolve().then(() => commit => {
-      const author = commit.author()
-      const sha = commit.sha()
-
-      return {
-        commit: sha,
-        author: {
-          name: author.name(),
-          email: author.email(),
-        },
-        date: commit.date(),
-        message: commit.message(),
-      }
-    })
-
-  return repo.getHeadCommit().then(commit =>
-    new Promise((resolve, reject) => {
-      commit
-        .history()
-        .on('end', resolve)
-        .on('error', reject)
-        .start()
-    }).then(commits => map().then(log => commits.map(log))),
-  )
-}
-
-const getFilesHistory = (repo, _startCommitMessage) => {
-  let startCommitMessage = _startCommitMessage
-  if (!Array.isArray(startCommitMessage) && startCommitMessage !== undefined) {
-    startCommitMessage = [startCommitMessage]
-  }
-  return Promise.resolve()
-    .then(() => gitlog(repo))
-    .then(log => {
-      const promises = []
-      for (let i = 0; i < log.length; i += 1) {
-        promises.push(gitShow(repo, log[i]))
-      }
-      return Promise.all(promises)
-    })
-    .then(diffs => {
-      const filehistory = {}
-      diffs.forEach(data => {
-        const commit = data[1]
-        const diff = data[0]
-
-        diff.forEach(entry => {
-          const p = path.normalize(entry.newFile().path())
-          if (filehistory[p] === undefined) {
-            filehistory[p] = []
-          }
-          filehistory[p].push(commit)
-        })
-      })
-      return filehistory
-    })
-    .then(log => {
-      const sorter = (a, b) => {
-        const rhs = a.date
-        const lhs = b.date
-        return lhs > rhs ? 1 : lhs < rhs ? -1 : 0
-      }
-      for (const file of Object.keys(log)) {
-        log[file].sort(sorter)
-      }
-      return log
-    })
-    .then(log => {
-      if (startCommitMessage === undefined) return log
-      function mergeCommit(commits) {
-        let r
-        commits.reverse()
-        commits.forEach(commit => {
-          if (r === undefined)
-            startCommitMessage.forEach(matcher => {
-              if (commit.message.indexOf(matcher) > -1) r = commit
-            })
-        })
-        commits.reverse()
-        return r
-      }
-      for (const file of Object.keys(log)) {
-        // eslint-disable-next-line no-param-reassign
-        log[file].mergeCommit = mergeCommit(log[file])
-      }
-      return log
-    })
-}
-
-module.exports = obj => {
-  console.log('Build step: GitInfo')
-  const pathToRepo = path.resolve(obj.config.sourceDir)
-  return new Promise((resolve, reject) =>
-    nodegit.Repository.open(pathToRepo)
-      .catch(() => {
-        resolve(obj)
-      })
-      .then(repo => getFilesHistory(repo, obj.config.git.mergeMessage))
-      .then(hist => {
-        if (obj.config.options.debugarticle !== null) {
-          const log = hist[obj.config.options.debugarticle]
-          log.forEach(commit => {
-            console.log(
-              `   ${commit.date} ${
-                commit.author.email
-              }\t${commit.message.replace(/\n([^]*)$/, '')}`,
-            )
-          })
-          console.log()
-          console.log(
-            `   Starting commit: ${log.mergeCommit.message.replace(
-              /\n([^]*)$/,
-              '',
-            )}`,
-          )
-        }
-        return hist
-      })
-      .then(filesHistory => {
-        obj.pages.forEach(article => {
-          const file = path.relative(pathToRepo, article.filename)
-          const commits = filesHistory[file]
-          if (commits !== undefined) {
-            commits.sort((a, b) => b.date - a.date)
-            const newestCommit = commits[0]
-            const oldestCommit = commits[commits.length - 1]
-            const { mergeCommit } = commits
-
-            // eslint-disable-next-line no-param-reassign
-            if (article.metadata.date === undefined) article.metadata.date = {}
-
-            if (article.metadata.date.creation === undefined) {
-              if (mergeCommit === undefined) {
-                console.log(
-                  `[Warning] Article ${file} does not have merge commit.`,
-                )
-                // eslint-disable-next-line no-param-reassign
-                article.metadata.date.creation = moment()
-              } else {
-                // eslint-disable-next-line no-param-reassign
-                article.metadata.date.creation = mergeCommit.date
-              }
-            }
-
-            // eslint-disable-next-line no-param-reassign
-            article.metadata.date.modification = newestCommit.date
-
-            if (article.metadata.author === undefined) {
-              // eslint-disable-next-line no-param-reassign
-              article.metadata.author = {}
-            }
-            if (article.metadata.author.name === undefined) {
-              // eslint-disable-next-line no-param-reassign
-              article.metadata.author.name = oldestCommit.author.name
-            }
-            if (article.metadata.author.email === undefined) {
-              // eslint-disable-next-line no-param-reassign
-              article.metadata.author.email = oldestCommit.author.email
-            }
-
-            // eslint-disable-next-line no-param-reassign
-            article.commits = commits
-          } else {
-            console.log(`[Warning] Article ${file} is not in git repository.`)
-          }
-        })
-        return obj
-      })
-      .then(o => {
-        resolve(o)
-      })
-      .catch(e => {
-        reject(e)
-      }),
-  )
-}
diff --git a/sitegin/parseHugo.js b/sitegin/parseHugo.js
index 7daaf1ac34fba3a37b0b2e6b9e097cfa678a9438..a716374422f4dd087c7c9b385543732a1633895e 100644
--- a/sitegin/parseHugo.js
+++ b/sitegin/parseHugo.js
@@ -26,9 +26,9 @@ const readPageWorker = (content_, obj) => {
     console.log(`${obj.filename}: Failed to parse metadata`)
     throw e
   }
-  if (obj.metadata.date && obj.metadata.date.creation) {
+  if (obj.metadata.published && obj.metadata.published) {
     // eslint-disable-next-line no-param-reassign
-    obj.metadata.date.creation = moment(obj.metadata.date.creation)
+    obj.metadata.published = moment(obj.metadata.published)
   }
   return obj
 }
diff --git a/sitegin/pipeline.js b/sitegin/pipeline.js
index bba73752f1a6a0b43988bc9065e3ffe77a139b4e..c2aee3528f1fa19c81a67df74cbeb02200126dbc 100644
--- a/sitegin/pipeline.js
+++ b/sitegin/pipeline.js
@@ -9,7 +9,6 @@ module.exports = jobs =>
     'readFiles',
     'parseHugo',
     'parseRedirects',
-    'gitInfo',
     'markdown',
     'urls',
     'sitemap',
diff --git a/sitegin/sitegin.js b/sitegin/sitegin.js
index 0b894de3384ee0ed8eec75d69c2c3ba3f4a35150..9da4666c961510a55629634d6689d3ee9687d062 100644
--- a/sitegin/sitegin.js
+++ b/sitegin/sitegin.js
@@ -5,7 +5,6 @@ module.exports = config =>
     .registerMultiple(
       config,
       ['config', './config'],
-      ['gitInfo', './gitInfo'],
       ['markdown', './markdown'],
       ['parseHugo', './parseHugo'],
       ['print', './print'],
diff --git a/sitegin/tags.js b/sitegin/tags.js
index 91ca9274c70aeea2d1253d242e168458c581b7ab..d8bcc089820b4c2e82888f54d556e3680d27a874 100644
--- a/sitegin/tags.js
+++ b/sitegin/tags.js
@@ -54,10 +54,12 @@ module.exports = function tagsJob(obj) {
       obj.redirects.push(pg)
 
       pageList.sort((a, b) => {
-        if (a.metadata.date === undefined) return -1
-        if (b.metadata.date === undefined) return 1
-        const rhs = a.metadata.date.creation
-        const lhs = b.metadata.date.creation
+        if (a.metadata.published === b.metadata.published) return 0
+        if (a.metadata.published === undefined) return -1
+        if (b.metadata.published === undefined) return 1
+        const rhs = a.metadata.published
+        const lhs = b.metadata.published
+
         return lhs > rhs ? 1 : lhs < rhs ? -1 : 0
       })
       let c = 0
diff --git a/theme/templates/article.html.nunj b/theme/templates/article.html.nunj
index 50967b8f2fdd8be896ff8f6ad196e1af6136e717..3a330ea7f3518b706c5aad006f532e1e0007261b 100644
--- a/theme/templates/article.html.nunj
+++ b/theme/templates/article.html.nunj
@@ -3,7 +3,7 @@
 {% block head %}
 
   <meta property="og:type" content="article" />
-  <meta property="article:published_time" content="{{ metadata.date.creation | date }}" />
+  <meta property="article:published_time" content="{{ metadata.published | date }}" />
   {% if metadata.image %} <meta property="og:image" content="{{ metadata.image | absURL( canonicalURL ) }}" /> {% endif %}
   <meta property="og:description" content="{% if metadata.perex %}{{metadata.perex}}{% else %}{% if metadata.perex_e %}{{metadata.perex_e | truncate}}{% else %}{% if content %}{{ content | striptags | truncate }}{% endif %}{% endif %}{% endif %}" />
 
@@ -43,15 +43,12 @@
       <h2 id="title">{{ metadata.title }}</h2>
       {% if not metadata.nodate %}
         <a class="author" style="color: #a2a2a2; display: block" class="black-text" target="_blank" href="https://git.ok1kvk.cz/ok1kvk.cz/content/tree/master/articles/{{file | replace("clanek/","") | replace(r/\/$/, "")}}.md">
-          {% if metadata.date %}
-            <span style="color: #626262">{{ metadata.date.creation | date("D. M. YYYY") }}</span>
+          {% if metadata.published %}
+            <span style="color: #626262">{{ metadata.published | date("D. M. YYYY") }}</span>
             napsal
-            <span style="color: #626262">{{ metadata.author.name }}</span>
-            {% if (metadata.date.modification | date("D. M. YYYY")) != (metadata.date.creation | date("D. M. YYYY")) %}
-              naposledy upraveno <span style="color: #626262">{{ metadata.date.modification | date("D. M. YYYY") }}</span>
-            {% endif %}
+            <span style="color: #626262">{{ metadata.author }}</span>
           {% else %}
-            Článek není v gitu
+            Článek nebyl publikován
           {% endif %}
         </a>
       {% endif %}
diff --git a/theme/templates/partials/list.html.nunj b/theme/templates/partials/list.html.nunj
index 8832bad337faf1e7d737ce09a6479c378efe4da9..7d6248a8d80b14ed136fa65da6ec03c63e738696 100644
--- a/theme/templates/partials/list.html.nunj
+++ b/theme/templates/partials/list.html.nunj
@@ -39,7 +39,7 @@
               </div>
               <div class="clear"></div>
               <div style="padding: 10px;" class="head-info">
-                <span style="color: #a2a2a2; text-align: left;display: inline-block;width: 75%;">{{ page.metadata.date.creation | date("D. M. YYYY") }} napsal {{ page.metadata.author.name }}</span><!--
+                <span style="color: #a2a2a2; text-align: left;display: inline-block;width: 75%;">{{ page.metadata.published | date("D. M. YYYY") }} napsal {{ page.metadata.author.name }}</span><!--
                 --><a style="text-align: right;display: inline-block;width: 25%;" href="{{ config.baseurl }}/{{ page.file }}">Číst&nbsp;dál</a>
               </div>
             </div>