diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..7a1db7a8b3d72d46bbcd8599f6b276abd2a8d2c4
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,13 @@
+image: python:3.7-alpine
+
+pages:
+  stage: deploy
+  script:
+  - apk update && apk add make
+  - pip install -r requirements.txt
+  - make publish
+  artifacts:
+    paths:
+    - public/
+  only:
+  - master
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000000000000000000000000000000000000..cc67606f330b4e5b4d643ce3adadee13122a081c
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,4 @@
+{
+    "python.linting.pylintEnabled": true,
+    "python.linting.enabled": true
+}
\ No newline at end of file
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..e72d4ecf7c26821bb433bdb930d79b17c8db6dca
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,76 @@
+PY?=python3
+PELICAN?=pelican
+PELICANOPTS=
+
+BASEDIR=$(CURDIR)
+INPUTDIR=$(BASEDIR)/content
+OUTPUTDIR=$(BASEDIR)/public
+CONFFILE=$(BASEDIR)/pelicanconf.py
+PUBLISHCONF=$(BASEDIR)/publishconf.py
+
+
+DEBUG ?= 0
+ifeq ($(DEBUG), 1)
+	PELICANOPTS += -D
+endif
+
+RELATIVE ?= 0
+ifeq ($(RELATIVE), 1)
+	PELICANOPTS += --relative-urls
+endif
+
+help:
+	@echo 'Makefile for a pelican Web site                                           '
+	@echo '                                                                          '
+	@echo 'Usage:                                                                    '
+	@echo '   make html                           (re)generate the web site          '
+	@echo '   make clean                          remove the generated files         '
+	@echo '   make regenerate                     regenerate files upon modification '
+	@echo '   make publish                        generate using production settings '
+	@echo '   make serve [PORT=8000]              serve site at http://localhost:8000'
+	@echo '   make serve-global [SERVER=0.0.0.0]  serve (as root) to $(SERVER):80    '
+	@echo '   make devserver [PORT=8000]          serve and regenerate together      '
+	@echo '   make ssh_upload                     upload the web site via SSH        '
+	@echo '   make rsync_upload                   upload the web site via rsync+ssh  '
+	@echo '                                                                          '
+	@echo 'Set the DEBUG variable to 1 to enable debugging, e.g. make DEBUG=1 html   '
+	@echo 'Set the RELATIVE variable to 1 to enable relative urls                    '
+	@echo '                                                                          '
+
+html:
+	$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
+
+clean:
+	[ ! -d $(OUTPUTDIR) ] || rm -rf $(OUTPUTDIR)
+
+regenerate:
+	$(PELICAN) -r $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
+
+serve:
+ifdef PORT
+	$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT)
+else
+	$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
+endif
+
+serve-global:
+ifdef SERVER
+	$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT) -b $(SERVER)
+else
+	$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT) -b 0.0.0.0
+endif
+
+
+devserver:
+ifdef PORT
+	$(PELICAN) -lr $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT)
+else
+	$(PELICAN) -lr $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
+endif
+
+publish:
+	$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(PUBLISHCONF) $(PELICANOPTS)
+
+
+.PHONY: html help clean regenerate serve serve-global devserver publish
+
diff --git a/pelican-themes/pelican-bootstrap3/templates/base.html b/pelican-themes/pelican-bootstrap3/templates/base.html
index 154954f256622894a518f3c3eeaeadaec04a6d9e..8939acb11a89dac40a76ea613eddd66115e68f30 100644
--- a/pelican-themes/pelican-bootstrap3/templates/base.html
+++ b/pelican-themes/pelican-bootstrap3/templates/base.html
@@ -87,12 +87,12 @@
     {% endif %}
 
     {% if tag and TAG_FEED_ATOM %}
-        <link href="{{ SITEURL }}/{{ TAG_FEED_ATOM|format(tag.slug) }}" type="application/atom+xml" rel="alternate"
+        <link href="{{ SITEURL }}/{{ TAG_FEED_ATOM|format(slug=tag.slug) }}" type="application/atom+xml" rel="alternate"
               title="{{ SITENAME }} {{ tag }} ATOM Feed"/>
     {% endif %}
 
     {% if category and CATEGORY_FEED_ATOM %}
-        <link href="{{ SITEURL }}/{{ CATEGORY_FEED_ATOM|format(category.slug) }}" type="application/atom+xml" rel="alternate"
+        <link href="{{ SITEURL }}/{{ CATEGORY_FEED_ATOM|format(slug=category.slug) }}" type="application/atom+xml" rel="alternate"
               title="{{ SITENAME }} {{ category }} ATOM Feed"/>
     {% endif %}
 
diff --git a/pelicanconf.py b/pelicanconf.py
index 3f9fc290a5bc66b34813b89dfc655478e45c10b3..1362e72f35179770f4bd0ba7ba3a5883c9e0a427 100644
--- a/pelicanconf.py
+++ b/pelicanconf.py
@@ -40,7 +40,9 @@ PYGMENTS_STYLE = 'default'
 
 PATH_METADATA = 'pages/(?P<path>.*)\..*'
 
-JINJA_EXTENSIONS = ['jinja2.ext.i18n']
+JINJA_ENVIRONMENT = {
+    'extensions': ['jinja2.ext.i18n'],
+}
 I18N_SUBSITES = {
 }
 
diff --git a/publishconf.py b/publishconf.py
index 355b6a14e5fd7f05b438c76475f4de95c0a6273e..304e4de53eeee3f86a9d970b0d7a79eb2248ad98 100644
--- a/publishconf.py
+++ b/publishconf.py
@@ -4,7 +4,7 @@ from __future__ import unicode_literals
 
 # AUTHOR = u'Duniter'
 SITENAME = u'Duniter'
-SITEURL = u'https://duniter.org/en'
+SITEURL = u'https://librelois.duniter.io/website_en/'
 
 PATH = 'content'
 THEME = "pelican-themes/pelican-bootstrap3"
@@ -24,7 +24,8 @@ SITELOGO_SIZE = 36
 DEFAULT_LANG = u'fr'
 
 PLUGIN_PATHS = ['pelican-plugins/']
-PLUGINS = ['i18n_subsites', 'tipue_search', 'pelican-page-hierarchy', 'plantuml']
+PLUGINS = ['i18n_subsites', 'tipue_search', 'pelican-page-hierarchy']
+#PLUGINS = ['i18n_subsites', 'tipue_search', 'pelican-page-hierarchy, 'plantuml']
 
 MARKDOWN = {
   'extension_configs': {
@@ -40,7 +41,9 @@ PYGMENTS_STYLE = 'default'
 
 PATH_METADATA = 'pages/(?P<path>.*)\..*'
 
-JINJA_EXTENSIONS = ['jinja2.ext.i18n']
+JINJA_ENVIRONMENT = {
+    'extensions': ['jinja2.ext.i18n'],
+}
 
 I18N_SUBSITES = {
 }
@@ -82,7 +85,7 @@ SOCIAL = (('Forum', 'https://forum.duniter.org', 'comment'),
           ('Gitlab', 'https://git.duniter.org/'),
           ('GitHub', 'https://github.com/duniter'),
           ('Diaspora', 'https://framasphere.org/people/1949ee70f6bc0134e6b32a0000053625', 'asterisk'),
-          ('RSS', '/feeds/all.atom.xml'),
+          #('RSS', '/feeds/all.atom.xml'),
           ('ğchange', 'https://www.gchange.fr', 'balance-scale'),
           ('ğannonce', 'https://gannonce.duniter.org', 'bullhorn'),)
 
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000000000000000000000000000000000000..802fe94621b0ca4a44201f6e74565290c6b84443
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,6 @@
+pelican==4.2.0
+pelican-youtube
+markdown
+beautifulsoup4
+webassets
+lessc