diff --git a/.gitignore b/.gitignore
index c86c4ffc473705dd9f3195d606fe4fe2e1f88dfa..ee3252b6a09193591476ad5c9c433e5f6eacd12e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,4 +2,3 @@
 /.ahoy.l3d
 /.env
 /docs/diagrams/uml/out/
-/aux/
diff --git a/aux/tags.md b/aux/tags.md
new file mode 100644
index 0000000000000000000000000000000000000000..6d44d97b965a1b2b9ff45d10f49b803a2494f87b
--- /dev/null
+++ b/aux/tags.md
@@ -0,0 +1,387 @@
+---
+title: Tags
+---
+
+# Contents grouped by tag
+
+
+
+## <span class="tag">ansible</span>
+
+  * [Ansible](ansible/index.md)
+
+  * [Ansible Plugin Drush](ansible/plugins/drush/index.md)
+
+  * [Ansible Fluentd Callback Plugin](ansible/plugins/fluentd/index.md)
+
+  * [Ansible Plugin GitLab](ansible/plugins/gitlab/index.md)
+
+  * [Ansible Plugin JiffyBox](ansible/plugins/jiffybox/index.md)
+
+  * [Ansible ServerDensity Plugin](ansible/plugins/serverdensity/index.md)
+
+  * [Ansible Plugin Uptime](ansible/plugins/uptime/index.md)
+
+  * [Ansible Role Alerta](ansible/roles/alerta/index.md)
+
+  * [Ansible Role Almond](ansible/roles/almond/index.md)
+
+  * [Ansible Role](ansible/roles/apache/index.md)
+
+  * [Ansible Role Apt Proxy](ansible/roles/aptproxy/index.md)
+
+  * [Ansible Role Artifactory](ansible/roles/artifactory/index.md)
+
+  * [Ansible Role Auditbeat](ansible/roles/auditbeat/index.md)
+
+  * [Ansible Role Borg Backup](ansible/roles/borgbackup/index.md)
+
+  * [Ansible Role Camunda](ansible/roles/camunda/index.md)
+
+  * [Ansible Role Cloud](ansible/roles/cloud/index.md)
+
+  * [Ansible Role Common](ansible/roles/common/index.md)
+
+  * [Ansible Role Common Auth](ansible/roles/commonauth/index.md)
+
+  * [Ansible Role Common Connect](ansible/roles/commonconnect/index.md)
+
+  * [Ansible Role Common Keys](ansible/roles/commonkeys/index.md)
+
+  * [Ansible Role Compass](ansible/roles/compass/index.md)
+
+  * [Ansible Role Composer](ansible/roles/composer/index.md)
+
+  * [Ansible Role Discourse](ansible/roles/discourse/index.md)
+
+  * [Ansible Role Docker](ansible/roles/docker/index.md)
+
+  * [Ansible Role Drupal](ansible/roles/drupal/index.md)
+
+  * [Ansible Role Drupal CLI](ansible/roles/drupal-cli/index.md)
+
+  * [Ansible Role Drupal Console](ansible/roles/drupalconsole/index.md)
+
+  * [Ansible Role Drush](ansible/roles/drush/index.md)
+
+  * [Ansible Role ElastAlert](ansible/roles/elastalert/index.md)
+
+  * [Ansible Role Elasticsearch](ansible/roles/elasticsearch/index.md)
+
+  * [Ansible Role Fail2Ban](ansible/roles/fail2ban/index.md)
+
+  * [Ansible Role Fluentd](ansible/roles/fluentd/index.md)
+
+  * [Ansible Role Fluentd Client](ansible/roles/fluentd-client/index.md)
+
+  * [Ansible Role Google Cloud](ansible/roles/gcloud/index.md)
+
+  * [Ansible Role GitLab](ansible/roles/gitlab/index.md)
+
+  * [Ansible Role GitLab Client](ansible/roles/gitlab-client/index.md)
+
+  * [Ansible Role GitLab Runner](ansible/roles/gitlab-runner/index.md)
+
+  * [Ansible Role GoLang](ansible/roles/golang/index.md)
+
+  * [Ansible Role HaProxy](ansible/roles/haproxy/index.md)
+
+  * [Ansible Role Heartbeat](ansible/roles/heartbeat/index.md)
+
+  * [Ansible Role Home Assistant](ansible/roles/home-assistant/index.md)
+
+  * [Ansible Role JailKit](ansible/roles/jailkit/index.md)
+
+  * [Ansible Role Java](ansible/roles/java/index.md)
+
+  * [Ansible Role Keycloak](ansible/roles/keycloak/index.md)
+
+  * [Ansible Role Kibana](ansible/roles/kibana/index.md)
+
+  * [Ansible Role LetsEncrypt](ansible/roles/letsencrypt/index.md)
+
+  * [Ansible Role Mailhog](ansible/roles/mailhog/index.md)
+
+  * [Ansible Role Matomo](ansible/roles/matomo/index.md)
+
+  * [Ansible Role Matterbridge](ansible/roles/matterbridge/index.md)
+
+  * [Ansible Role Memcache](ansible/roles/memcache/index.md)
+
+  * [Ansible Role MongoDB](ansible/roles/mongodb/index.md)
+
+  * [Ansible Role MySQL](ansible/roles/mysql/index.md)
+
+  * [Ansible Role MySQL Client](ansible/roles/mysql-client/index.md)
+
+  * [Ansible Role NetData](ansible/roles/netdata/index.md)
+
+  * [Ansible Role Nextcloud](ansible/roles/nextcloud/index.md)
+
+  * [Ansible Role Nginx](ansible/roles/nginx/index.md)
+
+  * [Ansible Role NodeJS](ansible/roles/nodejs/index.md)
+
+  * [Ansible Role OpenPhoto](ansible/roles/openphoto/index.md)
+
+  * [Ansible Role Oracle](ansible/roles/oracle/index.md)
+
+  * [Ansible Role ownCloud](ansible/roles/owncloud/index.md)
+
+  * [Ansible Role Packetbeat](ansible/roles/packetbeat/index.md)
+
+  * [Ansible Role PhotoPrism](ansible/roles/photoprism/index.md)
+
+  * [Ansible Role PHP](ansible/roles/php/index.md)
+
+  * [Ansible Role PlantUML](ansible/roles/plantuml/index.md)
+
+  * [Ansible Role Redis](ansible/roles/radis/index.md)
+
+  * [Ansible Role S3](ansible/roles/s3/index.md)
+
+  * [Ansible Role Satis](ansible/roles/satis/index.md)
+
+  * [Ansible Role ServerDensity](ansible/roles/serverdensity/index.md)
+
+  * [Ansible Role SFTP](ansible/roles/sftp/index.md)
+
+  * [Ansible Role SpiderOak](ansible/roles/spideroak/index.md)
+
+  * [Ansible Role SuiteCRM](ansible/roles/suitecrm/index.md)
+
+  * [Ansible Role SVN Server](ansible/roles/svnserver/index.md)
+
+  * [Ansible Role Tomcat](ansible/roles/tomcat/index.md)
+
+  * [Ansible Role Uptime](ansible/roles/uptime/index.md)
+
+  * [Ansible Role User Management](ansible/roles/user-management/index.md)
+
+  * [Ansible Role Varnish](ansible/roles/varnish/index.md)
+
+  * [Ansible Role Virtualbox](ansible/roles/virtualbox/index.md)
+
+  * [Ansible Role VPN](ansible/roles/vpn/index.md)
+
+  * [Ansible Role WkHTMLtoPDF](ansible/roles/wkhtmltopdf/index.md)
+
+  * [Ansible Role YouTrack](ansible/roles/youtrack/index.md)
+
+  * [Ansible Role Zabbix Agent](ansible/roles/zabbix_agent/index.md)
+
+  * [Ansible Role Zammad](ansible/roles/zammad/index.md)
+
+  * [Ansible Wiki](ansible/wiki/index.md)
+
+  * [Ansible Wiki Attacks](ansible/wiki/attacks.md)
+
+  * [Ansible Wiki Crontabs](ansible/wiki/configure-crontabs.md)
+
+  * [Ansible Wiki Desaster Recovery](ansible/wiki/desaster-recovery.md)
+
+  * [Ansible Wiki Drupal Apache Update](ansible/wiki/drupal-apache-update.md)
+
+  * [Ansible Wiki Drupal Deployment](ansible/wiki/drupal-deployment.md)
+
+  * [Ansible Wiki Drush Fetch Aliases](ansible/wiki/drush-fetch-aliases.md)
+
+  * [Ansible Wiki Firewall](ansible/wiki/firewall.md)
+
+  * [Ansible Wiki CI Config](ansible/wiki/gitlab-ci-configuration.md)
+
+  * [Ansible Wiki CI Intro](ansible/wiki/gitlab-ci-introduction.md)
+
+  * [Ansible Wiki CI Prerequisites](ansible/wiki/gitlab-ci-prerequisites.md)
+
+  * [Ansible Wiki HaProxy Custom Blacklists](ansible/wiki/haproxy-custom-blacklists.md)
+
+  * [Ansible Wiki HaProxy Quick Update](ansible/wiki/haproxy-quick-update.md)
+
+  * [Ansible Wiki LetsEncrypt](ansible/wiki/letsencrypt.md)
+
+  * [Ansible Wiki Resources](ansible/wiki/resources.md)
+
+  * [Ansible Wiki Swapfile](ansible/wiki/swapfile.md)
+
+  * [Ansible Wiki Add New User](ansible/wiki/user-add-new.md)
+
+  * [Ansible Wiki Set User Password](ansible/wiki/user-set-password.md)
+
+  * [Ansible Wiki Varnish Quick Update](ansible/wiki/varnish-quick-update.md)
+
+  * [Ansible Wiki Backup Google](ansible/wiki/backup/backup-google.md)
+
+  * [Ansible Wiki Backup SpiderOak](ansible/wiki/backup/backup-spideroak.md)
+
+  * [Ansible Wiki Backup](ansible/wiki/backup/backup.md)
+
+  * [Ansible Wiki Backup Intro](ansible/wiki/backup/introduction.md)
+
+  * [Ansible Wiki Restore Google](ansible/wiki/backup/restore-google.md)
+
+  * [Ansible Wiki Restore SpideOak](ansible/wiki/backup/restore-spideroak.md)
+
+  * [Ansible Wiki Restore](ansible/wiki/backup/restore.md)
+
+  * [Ansible Wiki ELK Fluentd](ansible/wiki/elk/fluentd.md)
+
+  * [Ansible Wiki ELK Intro](ansible/wiki/elk/introduction.md)
+
+  * [Ansible Wiki ELK Kibana](ansible/wiki/elk/kibana.md)
+
+  * [Ansible Wiki ELK Re-Indexing](ansible/wiki/elk/re-indexing.md)
+
+  * [Ansible Wiki Add Host](ansible/wiki/hosts/add.md)
+
+  * [Ansible Wiki JiffyBox Host](ansible/wiki/hosts/jiffybox.md)
+
+  * [Ansible Wiki Host Prevent Reboot](ansible/wiki/hosts/prevent-reboot.md)
+
+  * [Ansible Wiki Inventory Add](ansible/wiki/inventory/add.md)
+
+  * [Ansible Wiki Inventory ChatOps](ansible/wiki/inventory/chatops.md)
+
+  * [Ansible Wiki Inventory Pipeline](ansible/wiki/inventory/pipelines.md)
+
+  * [Ansible Wiki Monitoring Alerts ELK](ansible/wiki/monitoring/alerts-elk.md)
+
+  * [Ansible Wiki Monitoring Alerts NetData](ansible/wiki/monitoring/alerts-netdata.md)
+
+  * [Ansible Wiki Monitoring Alerts Update](ansible/wiki/monitoring/alerts-uptime.md)
+
+  * [Ansible Wiki Monitoring Alerts](ansible/wiki/monitoring/alerts.md)
+
+  * [Ansible Wiki Monitoring Intro](ansible/wiki/monitoring/introduction.md)
+
+  * [Ansible Wiki Monitoring](ansible/wiki/monitoring/monitoring.md)
+
+  * [Ansible Wiki OpenSSL CSR](ansible/wiki/openssl/csr.md)
+
+  * [Ansible Wiki Signed Git Commands](ansible/wiki/tips/signed-git-commits.md)
+
+  * [Ansible Docker Framework](docker/ansible/index.md)
+
+  * [GitLab Ansible](gitlab/ansible/index.md)
+
+ 
+
+
+## <span class="tag">ci/cd</span>
+
+  * [GitLab Ansible](gitlab/ansible/index.md)
+
+  * [GitLab Composer](gitlab/composer/index.md)
+
+  * [GitLab Drupal](gitlab/drupal/index.md)
+
+ 
+
+
+## <span class="tag">composer</span>
+
+  * [Composer](composer/index.md)
+
+  * [Composer Library Utilities](composer/library/composer-json-utils/index.md)
+
+  * [Composer Library Traefik](composer/library/traefik/index.md)
+
+  * [Composer Plugin Ahoy](composer/plugin/ahoy/index.md)
+
+  * [Composer Plugin Behat for Drupal](composer/plugin/b4d/index.md)
+
+  * [Composer Plugin Docker for Drupal](composer/plugin/d4d/index.md)
+
+  * [Composer Plugin Drupal 8 SASS Theme](composer/plugin/d8-sass-theme/index.md)
+
+  * [Composer Plugin Drupal 8 Scaffold](composer/plugin/d8-scaffold/index.md)
+
+  * [Composer Plugin Drupal 9 Scaffold](composer/plugin/d9-scaffold/index.md)
+
+  * [Composer Plugin Dorgflow](composer/plugin/dorgflow/index.md)
+
+  * [Composer Plugin Drupal Development Environment](composer/plugin/drupal-dev-environment/index.md)
+
+  * [Composer Plugin Drupal Environment](composer/plugin/drupal-environment/index.md)
+
+  * [Composer Project Drupal 8](composer/project/d8/index.md)
+
+  * [Composer Project Drupal 8 Commerce](composer/project/d8-commerce/index.md)
+
+  * [Composer Project Drupal 8 Commerce Demo](composer/project/d8-commerce-demo/index.md)
+
+  * [Composer Project Drupal 9](composer/project/d9/index.md)
+
+  * [GitLab Composer](gitlab/composer/index.md)
+
+ 
+
+
+## <span class="tag">devops</span>
+
+  * [Guidelines](how-to-write-docs.md)
+
+  * [DevOps Application Lifecycle Management](devops/alm/alm.md)
+
+  * [DevOps Hosting and Maintenance](devops/alm/hosting_maintain.md)
+
+  * [DevOps Tools](devops/alm/tools.md)
+
+ 
+
+
+## <span class="tag">docker</span>
+
+  * [Docker](docker/index.md)
+
+  * [Ansible Docker Framework](docker/ansible/index.md)
+
+  * [Docker GitLab Drupal CI](docker/gitlab-drupal-ci/index.md)
+
+  * [Docker L3D](docker/l3d/index.md)
+
+  * [Docker L3D and Drupal Projects](docker/l3d/drupal.md)
+
+  * [Docker Maven Build](docker/maven-build/index.md)
+
+  * [Docker Node](docker/node/index.md)
+
+  * [Docker Node, Gulp SASS and BrowserSync](docker/node/gulp-sass.md)
+
+ 
+
+
+## <span class="tag">documentation</span>
+
+  * [DevOps Tools](index.md)
+
+  * [Guidelines](how-to-write-docs.md)
+
+ 
+
+
+## <span class="tag">drupal</span>
+
+  * [GitLab Drupal](gitlab/drupal/index.md)
+
+ 
+
+
+## <span class="tag">gitlab</span>
+
+  * [GitLab](gitlab/index.md)
+
+  * [GitLab Ansible](gitlab/ansible/index.md)
+
+  * [GitLab Composer](gitlab/composer/index.md)
+
+  * [GitLab Drupal](gitlab/drupal/index.md)
+
+ 
+
+
+## <span class="tag">tools</span>
+
+  * [Guidelines](how-to-write-docs.md)
+
+ 
diff --git a/docker-compose.yml b/docker-compose.yml
index 06afedf62d647fdd5e313daa613cfdcf7df77f7b..3aeff4d64d5efdd11ebf96da9c5c2ba2ab049848 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -3,13 +3,13 @@ version: '3.7'
 services:
   mkdocs:
     container_name: mkdocs
-    image: polinux/mkdocs:1.1.2
-    restart: always
+    image: polinux/mkdocs:1.2.3
+    restart: unless-stopped
     ports:
       - 8999:8000
     environment:
       LIVE_RELOAD_SUPPORT: 'true'
-      ADD_MODULES: fontawesome-markdown mkdocs-git-revision-date-localized-plugin mkdocs-material==6.2.8 mkdocs-build-plantuml-plugin mkdocs-new-features-notifier mkdocs-git-authors-plugin git+https://github.com/jldiaz/mkdocs-plugin-tags.git
+      ADD_MODULES: fontawesome-markdown mkdocs-git-revision-date-localized-plugin mkdocs-material==8.3.9 mkdocs-build-plantuml-plugin mkdocs-new-features-notifier mkdocs-git-authors-plugin markdown-include mkdocs-simple-hooks mkdocs-video
       FAST_MODE: 'true'
       DOCS_DIRECTORY: /mkdocs
     volumes:
diff --git a/docs/devops/alm/alm.md b/docs/devops/alm/alm.md
index 519a202afde1b77d84c708e575426f68f6a8830b..c03cd974ec9c27f4364a3a01e00b8a686869980b 100644
--- a/docs/devops/alm/alm.md
+++ b/docs/devops/alm/alm.md
@@ -124,11 +124,11 @@ Here you see our tools, which are involved in our ALM. As you can see, we make h
 which provides a huge set of features and a single point of entry for our customers. We also want to satisfy our principle of separation of concerns. Every tool
 is designed to achieve a specific goal and just using it for this.
 
-| Function | Tool |
-| --- | --- |
-| Repo / Versioning | [GitLab](https://about.gitlab.com) |
+| Function               | Tool                               |
+|------------------------|------------------------------------|
+| Repo / Versioning      | [GitLab](https://about.gitlab.com) |
 | Issues / Communication | [GitLab](https://about.gitlab.com) |
-| Agile Planning | [GitLab](https://about.gitlab.com) |
-| CI/CD Pipelines | [GitLab](https://about.gitlab.com) |
-| Drupal Development | [Docker](https://www.docker.com) |
-| Deployment | [Ansible](https://www.ansible.com) |
+| Agile Planning         | [GitLab](https://about.gitlab.com) |
+| CI/CD Pipelines        | [GitLab](https://about.gitlab.com) |
+| Drupal Development     | [Docker](https://www.docker.com)   |
+| Deployment             | [Ansible](https://www.ansible.com) |
diff --git a/docs/images/favicon.ico b/docs/images/favicon.ico
new file mode 100755
index 0000000000000000000000000000000000000000..e151ed2f5f880b32c272fa83227d839620d0736c
Binary files /dev/null and b/docs/images/favicon.ico differ
diff --git a/docs/images/logo.png b/docs/images/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..5ccea17a263c01d9d7a2b6378ec07da328e022f1
--- /dev/null
+++ b/docs/images/logo.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:777e627b6bb22f0742293a7ff6fdd7a983041793f44cdc3131969368e88afcdb
+size 26667
diff --git a/docs/new-features.md b/docs/new-features.md
deleted file mode 100644
index 3a0392c6df103a11edc7e05ebe4e847a4ea329bb..0000000000000000000000000000000000000000
--- a/docs/new-features.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# New in version 2022.4.22: 
-
---------
-- [Debugging](dev_tools/debug.html)
-
-	> How to debug within your IDE
-
-- [Host setup](dev_tools/host.html)
-
-	> Host configuration
-
-- [Testing](dev_tools/test.html)
-
-	> All testing tools including code coverage
diff --git a/docs/projects/api.md b/docs/projects/api.md
new file mode 100644
index 0000000000000000000000000000000000000000..750ee1e032750c055cb82c27f12b2142e214cade
--- /dev/null
+++ b/docs/projects/api.md
@@ -0,0 +1,90 @@
+---
+title: API Integrations
+tags:
+- projects
+---
+# API Integrations
+
+We have integrated the following APIs in our products:
+
+## Helpdesk Systems
+
+In our portal solutions the user should have the possibility to cummunicate with the portal provider. Therefore, many
+providers have helpdesk systems in use or plan to use one. So, we provide a framework in Drupal to satisfy this requirement. The
+framework provides the basic functionality like formulars or ticket lists. We have integrated the following helpdesk systems
+via Drupal plugins in seperate modules:
+
+### Zendesk
+
+The following parts of the API are integrated:
+
+* Get the latest tickets
+* Create and Update tickets
+* Get and use custom ticket fields
+* Get and use custom ticket states
+
+### Zammad
+
+The following parts of the API are integrated:
+
+* Get the latest tickets
+* Create and Update tickets
+* Get and use custom ticket fields
+* Get and use custom ticket states
+
+### You Track (in planning)
+
+## Document Management Systems
+
+Usually companies have their own product to manage documents. Therefore, we implemented the following integrations in Drupal:
+
+* Sharepoint
+* Nextcloud (in planning)
+
+Here it is planned to develop a framework like the one for the helpdesk integration.
+
+## Payment Systems
+
+* PayPal
+* GiroPay
+* Heidelpay
+* Sofort
+
+## Digital Signage
+
+One of our largest module concerning new functionality is Digital Signage. We have developed a framework to integrate digital signage
+platforms. Every content you can create in Drupal can be pushed to digital signage devices. So far, we have implemented an integration for:
+
+### signageOS
+
+This is a well-designed digital signage plaform, which offers a large amout of functionality provided by a REST API. This contains:
+
+* Show content
+* Device Management
+* Debugging
+* Logging
+
+## Communications
+
+* Mattermost
+* Slack
+* Twilio
+* OneSignal
+
+## Authentication
+
+* SQRL
+* Discourse SSO
+* AD
+* Keycloak
+
+## ERP Systems
+
+We integrate these external systems via an independent Java Application called Datacore. This satifies a decupling in our environment to keep Drupal
+clean for external data structures. The Datacore transforms external structure to a general data model, which we use in Drupal. This allows us to integrate different
+external systems and react to changes in the external structure without performing changes in Drupal.
+
+### Microsoft Dynamics CRM
+
+One of our customers uses Dynamics to enhance real estate basic data. The datacore takes this data and transforms it to a general data model. This model is 
+imported into our Drupal application, which builds the basis of our Real Estate Portal Solution.
diff --git a/docs/projects/drupal.md b/docs/projects/drupal.md
new file mode 100644
index 0000000000000000000000000000000000000000..dfc30b9b167d34e55aadf00d6e055f84eaca91e7
--- /dev/null
+++ b/docs/projects/drupal.md
@@ -0,0 +1,8 @@
+---
+title: Drupal Projects
+tags:
+- projects
+---
+# Drupal Projects
+
+to be done
diff --git a/docs/projects/drupal/digital_signage/architecture.md b/docs/projects/drupal/digital_signage/architecture.md
new file mode 100644
index 0000000000000000000000000000000000000000..70e3e0a07a6fe92cb3cb7c987c3e516882db3100
--- /dev/null
+++ b/docs/projects/drupal/digital_signage/architecture.md
@@ -0,0 +1,186 @@
+---
+title: Digital Signage Architecture
+tags:
+- projects
+---
+# Drupal module
+
+```plantuml
+@startuml
+
+skinparam component {
+  backgroundcolor<<module>> white
+}
+skinparam queue {
+  backgroundcolor<<service>> white
+}
+skinparam package {
+  backgroundcolor<<core>> lightgreen
+}
+skinparam database {
+  backgroundcolor<<drupal>> lightblue
+}
+skinparam cloud {
+  backgroundcolor<<plugins>> #F4676B
+}
+
+database Content <<drupal>> {
+  
+  card content [
+    Each and every content entity
+    on a Drupal site can be
+    published to digital signage.
+  ]
+  
+}
+
+package "Digital Signage Core" <<core>> as core {
+
+  component "DS Content Settings" <<module>> {
+
+    database contentsettings [
+      **Content Entity**
+
+      Automatically embedded into each
+      other content entity on the site
+      using entity inline form.
+
+      Stores properties for each entity
+      to determine **where** and **how**
+      they should be published on
+      platform devices.
+    ]
+
+    agent contentevents [
+      **Event Subscriber**
+      
+      Reacts on each create, update and delete
+      event of each entity and if it's published
+      on any platform device, marks all those
+      devices due for a schedule update.
+    ]
+
+  }
+  
+  frame "Integration Framework" {
+  
+    component Device <<module>> {
+
+      database devices [
+        **Content Entity**
+        
+        **Bundles**: one for each platform
+        **Create and delete**: only by sync
+        **Edit**: extra fields can be added
+      ]
+      
+    }
+    
+    component Platform <<module>> {
+
+      agent platform [
+        **Plugin Manager**
+        
+        Provides the interface for each
+        specific platform and allows
+        generic implemenation of all
+        the processes in DS Core.
+      ]
+      
+    }
+    
+    component Schedule <<module>> {
+
+      database schedules [
+        **Content Entity**
+        
+        Represents a sequence of content
+        entities and is assigned to one or
+        many devices.
+      ]
+      
+      agent schedulegenerator [
+        **Schedule Generator Framework**
+        
+        Schedules are generated automatically
+        driven by the content properties.
+         
+        The generator is implemented as a plugin
+        so that custom plugins can be installed
+        to implement custom rules.
+      ]
+
+      agent defaultgenerator [
+        **Default Generator**
+        --
+        This is delivered with the
+        Digital Signage Core.
+        
+        The documentation for this
+        generator can be found [[schedules here]].
+      ]
+    }
+  
+  }
+  
+  queue Crons <<service>> {
+
+    agent devicesynccron [
+      **Synchronize Devices**
+    ]
+
+    agent scheduleupdatecron [
+      **Update Schedules**
+    ]
+
+    agent publishschedulecron [
+      **Publish Schedules**
+    ]
+
+  }
+
+}
+
+cloud "Digital Signage Platforms" as platforms <<plugins>> {
+
+  component signageos [
+    **signageOS**
+    --
+    [[https://www.signageos.io]]: Web Site
+    [[https://docs.signageos.io]]: API
+    [[https://box.signageos.io]]: Dashboard
+  ]
+  
+  component screenfood [
+    **Screenfood**
+    --
+    [[https://www.screenfoodnet.com]]: Web Site
+  ]
+  
+  component others [
+    **More platforms**
+    --
+    Each new platform is very simple to integrate
+  ]
+  
+}
+
+Platform --(0 signageos
+Platform --(0 screenfood
+Platform --(0 others
+
+Content --> contentevents
+contentevents --> devices
+
+platform --> devicesynccron
+devicesynccron --> devices
+devices --> scheduleupdatecron
+scheduleupdatecron --> schedules
+schedules --> publishschedulecron
+publishschedulecron --> platform
+
+signageos --[hidden] screenfood
+screenfood --[hidden] others
+
+@enduml
+```
diff --git a/docs/projects/drupal/digital_signage/schedules.md b/docs/projects/drupal/digital_signage/schedules.md
new file mode 100644
index 0000000000000000000000000000000000000000..f893cf1bbf002f3d17d9f4ca26c83a664c6ea4db
--- /dev/null
+++ b/docs/projects/drupal/digital_signage/schedules.md
@@ -0,0 +1,111 @@
+---
+title: Digital Signage Schedule
+tags:
+- projects
+---
+## Creating a Schedule
+
+A Drupal content has several properties concerning its use in the Digital Signage module:
+
+*  Priority
+*  Critical Flag
+*  Count
+*  Complexity
+
+Based on theses Properties, we have to create a Schedule, which can be used for different Digital Signage vendors, like signageOS or ScreenFood. So this has to be quite generic.
+
+A possible solution is to provide:
+
+*  a weight for the priority
+*  the critical flag is special and makes the priority obsolete
+*  a duration offset for complexity (and maybe for the critical flag as well), because complex content should be displayed longer
+
+For example:
+
+| Complexity  | Offset in seconds |
+|-------------|-------------------|
+| is Complex  | X3                | 
+| is Critical | X2                |
+
+For instance, the default duration is 5 seconds, a complex content will be displayed 15 seconds.
+
+| Prio   | Weight |
+|--------|--------|
+| High   | 50     | 
+| Medium | 30     |
+| Low    | 20     | 
+
+The weight and the duration offset are implementation details and can be changed (see diagram below).
+
+```plantuml
+@startuml
+
+class "Content" {
+}
+
+class "DSContentSettings" {
+priority : Priority
+count : Integer
+isCritical : Boolean
+isComplex : Boolean
+}
+
+class SequenceItem {
+content : Content
+duration : Integer
+}
+note left: just store reference of Content
+
+class Schedule {
+sequence : SequenceItem[]
+getSequence(scheduleCalc : ScheduleCalculator, contents : Content[]) : SequenceItem[]
+updateHash() : Integer
+}
+
+interface ScheduleCalculator {
+calculateSequence(contents : Content[]) : SequenceItem[]
+}
+
+class DefaultScheduleCalculator {
+calculateSequence(contents : Content[]) : SequenceItem[]
+}
+
+interface Weight {
+getWeightByPriority(prio : Priority) : Integer
+getWeightForCritical() : Integer
+}
+
+interface Duration {
+{static} defaultDuration : Integer
+getCriticalOffset() : Integer
+getOffsetByComplexity(isComplex : Boolean) : Integer
+}
+
+ScheduleCalculator <|-- DefaultScheduleCalculator
+Schedule <-- ScheduleCalculator
+SequenceItem "1" -- "1" Content
+Content -- DSContentSettings : have
+Schedule "1" *-- "many" SequenceItem
+DefaultScheduleCalculator -- Duration : use
+DefaultScheduleCalculator -- Weight : use
+
+@enduml
+```
+
+A default implementation can be done as follows:
+
+| node | is Critical | priority | is Complex | count    | weight | offset |
+|------|-------------|----------|------------|----------|--------|--------|
+| 1    | no          | medium   | no         | infinite | 30     |        |
+| 2    | yes         | obsolete | no         | infinite | none   |        |
+| 3    | no          | low      | yes        | 10       | 20     | 5      |
+| 4    | no          | high     | yes        | infinite | 50     |        |
+
+So we have a distribution of:
+
+*  Node 1: 30%
+*  Node 2: special, comes in first place
+*  Node 3: 20%
+*  Node 4: 50%
+
+Based on this, we can create a sequence. The `count` property is handled by the specific device. We later request a report from that device to determine how ofter the node was displayed. So we can adjust the `count` property.
diff --git a/docs/projects/drupal/digital_signage/wayfinding.md b/docs/projects/drupal/digital_signage/wayfinding.md
new file mode 100644
index 0000000000000000000000000000000000000000..b3183dd03f2208119efe091199cb8e8d971bcbb3
--- /dev/null
+++ b/docs/projects/drupal/digital_signage/wayfinding.md
@@ -0,0 +1,66 @@
+---
+title: Wayfinding
+tags:
+- projects
+---
+```plantuml
+@startuml
+
+class device {
+  synced from DS platform
+  --
+  has a URL for each direction
+}
+
+class position {
+  Latitude & longitude
+  --
+  Needs mapping into bgimage for
+  the "You are here" indicator
+}
+
+class direction {
+  --
+  (=Blickrichtung)
+}
+
+class destination {
+  building
+  rental object
+  free type
+}
+
+class bgimage {
+  
+}
+
+class svggraph {
+  
+}
+
+class category {
+  taxonomy
+}
+
+class entry {
+  user
+  free type
+}
+
+device "many" --> "1" direction : has
+entry "1" --> "many" category : has
+direction "1" --> "1" bgimage : has
+direction "many" - "many" destination
+(direction,destination) . svggraph
+entry "1" --> "1" destination
+device -> position : has
+destination -> position : has
+
+@enduml
+```
+
+As soon as an entry is selected on a specific device, we do have the position of
+the device and the assigned destination of that entry. From those two positions
+we can generate navigation instructions through the GoogleMaps API and present
+a QR code with the link to it such that this can be captured by a mobile phone
+and further instructions are available on the go.
diff --git a/docs/projects/lakedrops.md b/docs/projects/lakedrops.md
new file mode 100644
index 0000000000000000000000000000000000000000..2e9017655283c6acee9dc980594530d3e581a06f
--- /dev/null
+++ b/docs/projects/lakedrops.md
@@ -0,0 +1,122 @@
+---
+title: LakeDrops Framework
+tags:
+- projects
+---
+# LakeDrops Framework
+
+## Boards
+
+- [ECA Guide](https://gitlab.lakedrops.com/drupal/documentation/eca/-/boards)
+- [GitLab CI/CD](https://gitlab.lakedrops.com/groups/gitlab-ci-cd/-/boards)
+- [Composer](https://gitlab.lakedrops.com/groups/composer/-/boards)
+- [Docker](https://gitlab.lakedrops.com/groups/docker/-/boards)
+- [Drupal](https://gitlab.lakedrops.com/groups/drupal/-/boards)
+- [Ansible](https://gitlab.lakedrops.com/groups/ansible/-/boards)
+
+## Projects
+
+| Project                                                                                                          | Current Version | Issues                                                                                                 |
+|------------------------------------------------------------------------------------------------------------------|----------------:|--------------------------------------------------------------------------------------------------------|
+| BS Framework                                                                                                     |                 | [Drupal Board](https://gitlab.lakedrops.com/groups/bitegra/portal/drupal/-/boards)                     |
+| - [Dev Environment](https://gitlab.lakedrops.com/bitegra/portal/drupal/projects/portal-default)                  |          master | [Private](https://gitlab.lakedrops.com/bitegra/portal/drupal/projects/portal-default/-/boards)         |
+| - [Portal Profile](https://gitlab.lakedrops.com/bitegra/portal/drupal/profiles/portal)                           |           1.1.0 | [Private](https://gitlab.lakedrops.com/bitegra/portal/drupal/profiles/portal/-/boards)                 |
+| - [Dashboard](https://gitlab.lakedrops.com/bitegra/portal/drupal/modules/dashboard)                              |           1.1.0 | [Private](https://gitlab.lakedrops.com/bitegra/portal/drupal/modules/dashboard/-/boards)               |
+| - [Base Theme](https://gitlab.lakedrops.com/bitegra/portal/drupal/themes/portal)                                 |           1.1.0 | [Private](https://gitlab.lakedrops.com/bitegra/portal/drupal/themes/portal/-/boards)                   |
+| - [DataCore](https://gitlab.lakedrops.com/bitegra/portal/data-core)                                              |           3.0.0 | [Private](https://gitlab.lakedrops.com/groups/bitegra/portal/data-core/-/boards)                       |
+| - [Inventory](https://gitlab.lakedrops.com/bitegra/portal/drupal/modules/inventory)                              |           3.1.0 | [Private](https://gitlab.lakedrops.com/bitegra/portal/drupal/modules/inventory/-/boards)               |
+| - [Inventory Real Estate](https://gitlab.lakedrops.com/bitegra/portal/drupal/modules/inventory-real-estate)      |           3.1.0 | [Private](https://gitlab.lakedrops.com/bitegra/portal/drupal/modules/inventory-real-estate/-/boards)   |
+| - [Service Providers](https://gitlab.lakedrops.com/bitegra/portal/drupal/modules/service-providers)              |           1.0.0 | [Private](https://gitlab.lakedrops.com/bitegra/portal/drupal/modules/service-providers/-/boards)       |
+| - [Shop](https://gitlab.lakedrops.com/bitegra/portal/drupal/modules/shop)                                        |           1.0.0 | [Private](https://gitlab.lakedrops.com/bitegra/portal/drupal/modules/shop/-/boards)                    |
+| - [Sync](https://gitlab.lakedrops.com/bitegra/portal/drupal/modules/sync)                                        |           1.0.0 | [Private](https://gitlab.lakedrops.com/bitegra/portal/drupal/modules/sync/-/boards)                    |
+| - [GoNative](https://gitlab.lakedrops.com/bitegra/portal/drupal/modules/gonative)                                |           1.0.0 | [Private](https://gitlab.lakedrops.com/bitegra/portal/drupal/modules/gonative/-/boards)                |
+| - [Scheduled Publish](https://gitlab.lakedrops.com/bitegra/portal/drupal/modules/scheduled-publish)              |           1.0.0 | [Private](https://gitlab.lakedrops.com/bitegra/portal/drupal/modules/scheduled-publish/-/boards)       |
+| - [Open Transportdata Swiss](https://gitlab.lakedrops.com/bitegra/portal/drupal/modules/opentransportdata-swiss) |           1.0.0 | [Private](https://gitlab.lakedrops.com/bitegra/portal/drupal/modules/opentransportdata-swiss/-/boards) |
+| - [Self-Service](#)                                                                                              |                 |                                                                                                        |
+| - [Content Pool](#)                                                                                              |                 |                                                                                                        |
+| - [Partner Services](#)                                                                                          |                 |                                                                                                        |
+| Real-Estate                                                                                                      |                 |                                                                                                        |
+| - [Relocation](#)                                                                                                |                 |                                                                                                        |
+| - [Free Properties](#)                                                                                           |                 |                                                                                                        |
+| Hospitality                                                                                                      |                 |                                                                                                        |
+| - [Gastro](#)                                                                                                    |                 |                                                                                                        |
+| Demo Sites                                                                                                       |                 |                                                                                                        |
+| - [Salles](https://gitlab.lakedrops.com/bitegra/portal/drupal/demos/real-estate)                                 |           1.0.0 |                                                                                                        |
+| - [Salles Assets](https://gitlab.lakedrops.com/bitegra/portal/drupal/demos/assets)                               |          master |                                                                                                        |
+
+## Architecture
+
+### Overview
+
+This is the first level of our architecture containing two applications, a Drupal Portal and a Datacore.
+These two application have no direct dependency.
+
+```plantuml
+
+@startuml
+
+component drupal [
+    Drupal Portal
+]
+
+component datacore [
+    Datacore
+]
+
+folder "Customer Business Systems" {
+    component ecommerce [
+        eCommerce
+    ]
+    
+    component re [
+        Real Estate
+    ]
+}
+
+[drupal] <.. JSON
+[datacore] ..> JSON : via REST API
+note left: Import in Drupal via Migrate
+
+
+[re] .. [datacore]
+[ecommerce] .. [datacore]
+
+@enduml
+
+```
+
+Both applications are standalone and can be developed, maintained and operated speparatly.
+
+### Components
+
+Currently, there are two productive components available. The architecture is built
+to integrate other business components easily.
+
+```plantuml
+
+@startuml
+
+component basic [
+    Basic
+]
+
+component re [
+    Real Estate
+]
+
+component other [
+    Other Business
+]
+
+[basic] <-- [re]
+[basic] <-- [other]
+
+@enduml
+
+```
+
+
+Deeper insides:
+
+- [Basic](/projects/lakedrops/architecture/Basic)
+- [Real Estate](/projects/lakedrops/architecture/Real-Estate)
diff --git a/docs/projects/lakedrops/architecture/basic.md b/docs/projects/lakedrops/architecture/basic.md
new file mode 100644
index 0000000000000000000000000000000000000000..9abc51883803eff09615c8a6e11582a8cc3e4a4d
--- /dev/null
+++ b/docs/projects/lakedrops/architecture/basic.md
@@ -0,0 +1,444 @@
+---
+title: LakeDrops Basic Data Model
+tags:
+- projects
+---
+## Basic Component
+
+The following section contains detailed information on how the basic component is structured.
+
+In some cases the model is devided into contextual parts due to clearness.
+
+The following basic models focuses on the specific parts to provide clearness.
+
+### Basic Packages
+
+The Basic Components contains two important packages. The Roles and the Customer Relations.
+
+```plantuml
+
+@startuml
+
+node "Roles" {
+
+    component role [
+        Role
+    ]
+
+    component user [
+        User
+    ]
+
+    component user_role [
+            UserRole
+    ]
+
+    component target [
+        UserRoleTarget
+    ]
+
+    [role] <-- [user_role]
+    [user] <-- [user_role]
+    target <.. user_role : use
+}
+
+node "Customer Relations" {
+    
+    component unit [
+        Unit
+    ]
+
+    component cr [
+        Customer Relation
+    ]
+
+    component contract [
+        Contract
+    ]
+
+    
+    component contract_item [
+        Contract Item
+    ]
+
+    [cr] <-- [contract]
+    [contract] <-- [contract_item]
+    [contract_item] <-- [unit]
+    cr --|> target
+    target <|-- contract
+    target <|-- contract_item
+}
+
+@enduml
+
+```
+#### Class Diagramm Roles
+
+```plantuml
+
+@startuml
+
+class Portal {
+    domain: String
+}
+
+class Role {
+    name: String
+}
+
+class UserRole {
+    role: Role
+    user: User
+    target: AbstractUserRoleTarget
+    targetType: UserRoleTargetType
+}
+
+class User {
+    name: String
+    contacts: UserContact[]
+    userRoles: UserRoles[]
+}
+
+class Contact {
+    value: String
+    type: UserContactType
+}
+
+class ContactType {
+    type: String
+    name: String
+}
+note right: EMAIL, PHONE, etc.
+
+class UserContact {
+    portal: Portal
+    user: User
+    contact: Contact
+    default: Short
+}
+
+Role "1" - "*" UserRole
+Portal "*" -- "*" UserContact
+Portal "*" -- "*" UserRole
+Contact "*" - "1" ContactType
+UserRole "*" --* "1" User
+UserContact "*" --* "1" User
+UserContact "1" *-- "1" Contact
+
+@enduml
+
+```
+
+
+#### Class Diagramm Customer Relations
+
+```plantuml
+
+@startuml
+
+
+class Portal {
+    domain: String
+}
+
+class UserRole {
+    role: Role
+    user: User
+    target: AbstractUserRoleTarget
+    targetType: UserRoleTargetType
+}
+
+class CustomerRelation {
+    name: String
+    portals: Portal[]
+}
+
+interface Contract {
+    getPortal()
+    getCustomerRelation()
+    getStatus()
+    getBegin()
+    getEnd()
+}
+
+class ContractStatus {
+    status: String
+    name: String
+}
+
+interface ContractItem {
+     getName()
+     getContracts()
+     getStatus()
+     getUnit()
+     getBegin()
+     getEnd()
+}
+
+class ContractItemStatus {
+    status: String
+    name: String
+}
+
+interface Unit {
+    getType()
+    getName()
+    getPortal()
+}
+
+class UnitType {
+    type: String
+    name: String
+}
+
+Portal "*" *-- "*" CustomerRelation
+Portal "*" -- "*" UserRole
+Portal "1" *-- "*" Unit
+Portal "1" *-- "*" Contract
+CustomerRelation "1" *-- "*" Contract
+CustomerRelation "1" o-- "*" UserRole
+Contract "1" o-- "*" UserRole
+Contract "*" -- "1" ContractStatus
+Contract "1" o-- "*" ContractItem
+UserRole "*" --o "1" ContractItem
+ContractItem "1" - "1" Unit
+ContractItem "*" -- "1" ContractItemStatus
+Unit "*" -- "1" UnitType
+
+@enduml
+
+```
+
+#### Class Diagramm Customer Relation with abstract classes
+
+To avoid implementing the interfaces all the time, the model contains abstract adapter classes.
+
+```plantuml
+
+@startuml
+
+interface Contract {
+    getPortal()
+    getCustomerRelation()
+    getStatus()
+    getBegin()
+    getEnd()
+}
+
+abstract class AbstractContract {
+    portal: Portal
+    customerRelation: CustomerRelation
+    contractItems: ContractItem[]
+    status: ContractStatus
+    begin: DateTime
+    end: DateTime
+}
+
+abstract class AbstractContractItem {
+    name: String
+    contract: Contract
+    unit: Unit
+    status: ContractItemStatus
+    begin: DateTime
+    end: DateTime
+}
+
+interface ContractItem {
+     getName()
+     getContract()
+     getStatus()
+     getUnit()
+     getBegin()
+     getEnd()
+}
+
+interface Unit {
+    getType()
+    getName()
+    getPortal()
+    getLogicalUnitGroups()
+}
+
+abstract class AbstractUnit {
+    name: String
+    unitType: UnitType
+    portal: Portal
+    unitGroups: LogicalUnitGroup[]
+}
+
+Contract <|-- AbstractContract
+ContractItem <|-- AbstractContractItem
+Unit <|-- AbstractUnit
+Contract *-- ContractItem
+ContractItem *-- Unit
+
+@enduml
+
+```
+
+#### Class Diagramm combining Roles and Customer Relations
+
+```plantuml
+
+@startuml
+
+interface UserRoleTarget {
+    getTargetId()
+    getTargetType()
+}
+
+enum UserRoleTargetType {
+    PORTAL,
+    CUSTOMER_RELATION,
+    CONTRACT,
+    CONTRACT_ITEM
+}
+
+abstract class AbstractUserRoleTarget {
+    targetId: String
+    #getTargetType()
+}
+
+class Portal {
+    domain: String
+    getTargetType()
+}
+
+class UserRole {
+    role: Role
+    user: User
+    target: AbstractUserRoleTarget
+    targetType: UserRoleTargetType
+}
+
+class CustomerRelation {
+    name: String
+    portals: Portal[]
+    getTargetType()
+}
+
+interface Contract {
+    getCustomerRelation()
+    ...()
+}
+
+interface ContractItem {
+     getName()
+     getContracts()
+     ...()
+}
+
+abstract class AbstractContract {
+    customerRelation: CustomerRelation
+    ...
+    getTargetType()
+}
+
+abstract class AbstractContractItem {
+    name: String
+    ...
+    getTargetType()
+}
+
+UserRoleTarget <|-- AbstractUserRoleTarget
+AbstractUserRoleTarget <|-- Portal
+AbstractUserRoleTarget <|-- CustomerRelation
+AbstractUserRoleTarget <|-- Contract
+AbstractUserRoleTarget <|-- ContractItem
+UserRole "*" *-- "1" AbstractUserRoleTarget
+UserRole - UserRoleTargetType
+Contract <|-- AbstractContract
+ContractItem <|-- AbstractContractItem
+
+
+@enduml
+
+```
+
+### Model with Grouping Feature
+
+This feature allows us to react to dynamic requirements from the various business models.
+
+```plantuml
+
+@startuml
+
+class Portal {
+    domain: String
+    name: String
+}
+
+interface Contract {
+    getPortal()
+    getCustomerRelation()
+    getStatus()
+    getBegin()
+    getEnd()
+}
+
+class ContractGroupType {
+    type: String
+    name: String
+}
+
+class ContractGroup {
+    name: String
+    type: ContractGroupType
+    contracts: Contract[]
+}
+
+class CompositeContractGroup {
+    name: String
+    type: String
+    contractGroups: ContractGroup[]
+}
+
+interface Unit {
+    getType()
+    getName()
+    getPortal()
+    getUnitGroups()
+}
+
+interface UnitGroup {
+    getName()
+    getType()
+    getPortals()
+}
+
+class CompositeUnitGroup {
+    name: String
+    type: String
+    portals: Portal[]
+    unitGroups: UnitGroup[]
+}
+
+class UnitGroup {
+    name: String
+    type: String
+    portals: Portal[]
+    units: Unit[]
+}
+
+class UnitGroupType {
+    type: String
+    name: String
+}
+
+Portal "*" -- "*" UnitGroup
+Portal "*" -- "*" ContractGroup
+Portal "1" *-- "*" Unit
+Portal "1" *-- "*" Contract
+UnitGroup "*" -- "*" Unit
+ContractGroup "*" -- "*" Contract
+CompositeContractGroup --|> ContractGroup
+ContractGroup "1" *-- "*" CompositeContractGroup
+ContractGroupType "1"  -- "*" ContractGroup
+UnitGroupType "1" -- "*" UnitGroup
+UnitGroup <|-- UnitGroup
+CompositeUnitGroup --|> UnitGroup
+UnitGroup "1" *-- "*" CompositeUnitGroup
+
+@enduml
+
+```
diff --git a/docs/projects/lakedrops/architecture/real-estate.md b/docs/projects/lakedrops/architecture/real-estate.md
new file mode 100644
index 0000000000000000000000000000000000000000..fb104d2cbe9c4254b09e6cf3dfbb1b38ca0f82f8
--- /dev/null
+++ b/docs/projects/lakedrops/architecture/real-estate.md
@@ -0,0 +1,176 @@
+---
+title: LakeDrops Real Estate Data Model
+tags:
+- projects
+---
+## Real Estate Component
+
+The following section contains several data models in form of class diagrams for the specific modules.
+
+In some cases the model is devided into contextual parts due to clearness.
+
+### Real Estate Model
+
+**District**
+
+The model only contains item of how a district is built.
+
+```plantuml
+
+@startuml
+
+Portal "1" *-- "*" District
+Portal "1" *-- "*" AbstractUnit
+UnitGroup "*" -- "*" Portal
+District "1" *-- "*" Construction
+Construction "1" *-- "*" Floor
+Floor "1" *-- "*" PhysicalUnit
+PhysicalUnit "*" --* "1" RealEstateUnit
+AbstractUnit <|-- RealEstateUnit
+AbstractUnit "*" -- "1" UnitType
+UnitGroupType "1" -- "*" UnitGroup
+UnitGroup "*" -- "*" AbstractUnit
+
+class Portal {
+    domain: String
+}
+note left: From Basic Module
+
+class District {
+    name: String
+    portal: Portal
+}
+
+class Construction {
+    name: String
+    district: District
+}
+
+class Floor {
+    name: String
+    construction: Construction
+}
+
+class PhysicalUnit {
+    name: String
+    floor: Floor
+}
+
+abstract class AbstractUnit {
+    name: String
+    portal: Portal
+    type: UnitType
+}
+note top: From Basic Module
+
+class RealEstateUnit {
+    name: String
+    physicalUnits: PhysicalUnit[]
+    rooms: float
+    squareMeters: float
+}
+
+class UnitGroup {
+    name: String
+    type: String
+    portal: Portal
+    units: Unit[]
+}
+note top: From Basic Module
+
+class UnitGroupType {
+    getType()
+    getName()
+}
+note top: From Basic Module
+
+class UnitType {
+    getType()
+    getName()
+}
+note bottom: From Basic Module 
+
+
+@enduml
+
+```
+
+**Relations in real estate**
+
+Here some items concerning the district, e.g. the building, is left out, because it has no 
+important meaning here. `Portal` and `Contract` belong to the Basic Module.
+
+```plantuml
+
+@startuml
+
+AbstractContract <|-- RealEstateContract
+AbstractContractItem <|-- RealEstateContractItem
+AbstractContractItem "1" - "1" AbstractUnit
+AbstractContract "1" *-- "*" AbstractContractItem
+AbstractUnit <|-- RealEstateUnit
+ContractGroupType "1" -- "*" ContractGroup
+ContractGroup "1" *-- "*" AbstractContract
+UnitType "1" -- "*" AbstractUnit
+
+abstract class AbstractContract {
+    name: String
+    customerRelation: CustomerRelation
+    contractItems : ContractItem[]
+    status: ContractStatus
+    begin: DateTime
+    end: DateTime
+}
+note left: From Basic Module
+
+class RealEstateContract {
+} 
+
+abstract class AbstractContractItem {
+    name: String
+    status: ContractItemStatus
+    begin: DateTime
+    end: DateTime
+    unit: Unit
+}
+note top: From Basic Module
+
+class RealEstateContractItem {
+} 
+
+class ContractGroup {
+    name: String
+    type: ContractGroupType
+    contracts: Contract[]
+}
+note left: From Basic Module
+
+class ContractGroupType {
+    type: String
+    name: String
+}
+note left: From Basic Module
+
+abstract class AbstractUnit {
+    name: String
+    unitType: UnitType
+    portal: Portal
+}
+note right: From Basic Module
+
+class RealEstateUnit {
+    name: String
+    rooms: float
+    squareMeters: float
+    physicalUnits: PhysicalUnit[]
+}
+
+class UnitType {
+    type: String
+    name: String
+}
+note top: From Basic Module
+
+@enduml
+
+```
diff --git a/docs/projects/lakedrops/dashboard/structure.md b/docs/projects/lakedrops/dashboard/structure.md
new file mode 100644
index 0000000000000000000000000000000000000000..98f2f867eee1989c70754a1506c707f0604c3c16
--- /dev/null
+++ b/docs/projects/lakedrops/dashboard/structure.md
@@ -0,0 +1,110 @@
+---
+title: LakeDrops Dashboard Module
+tags:
+- projects
+---
+# Structure of the dashboard
+
+## Building blocks
+
+- Block types
+  - basic
+- Blocks
+  - content_section_block_1
+  - content_sub_items_block_subitems_main_front
+  - content_sub_items_block_subitems_main_other
+  - dashboard_sub_items_block_1
+  - dashboard_sub_items_block_2
+  - header_from_menu_item_block_1
+  - header_from_node_block_1
+  - helpdesk_block_1
+  - newsboard_block_events
+  - newsboard_block_incidents
+  - newsboard_block_info
+  - versioninfo 
+- Media types
+  - audio
+  - document
+  - image
+  - pdf
+  - svg
+  - video
+  - videourl
+- Menus
+  - dashboard
+- Node types
+  - blog
+  - dashboard
+  - event
+  - incident
+  - info
+  - internal
+  - page
+  - portrait
+- Paragraph types
+  - banner
+  - disturber
+  - office_hours
+- Responsive image styles
+  - dashboard
+  - full
+  - half
+  - header
+  - logo
+  - portrait
+  - third
+- Taxonomy types
+  - document_category
+  - tags
+- Views
+  - content
+  - content_section
+  - content_sub_items
+  - dashboard_sub_items
+  - header_from_menu_item
+  - header_from_node
+  - media
+  - newsboard
+  - nodes_sub_navigation
+
+## Page structure
+
+### Region "Top Header"
+
+This region produces the header images, videos and carousels. It does it from 2 different sources: current menu item and/or current node.
+
+If the current menu item is from the "Dashboard" menu, we render the display mode "Header" from the current menu item which by default contains the media items from the menu item as a slick slider. Configuration can be adjusted in the view `header_from_menu_item`.
+
+If the current page is a node, we will render the display mode "Header" from that node which by default contains the media items from the node as a slick slider. Attention: if a node type doesn't have a display mode "Header" it falls back to the default display mode and renders the full node content twice. Configuration can be adjusted in the view `header_from_node`.
+
+### Region "Content"
+
+By default this renders the default block title, tabs, primary admin actions and the main page content. In addition, we provide a view `content_sub_items` which displays a list of sub-items of the current menu-item node children.
+
+On the front page this uses a list of top level menu-items of the current menu and on all other pages it uses the sub-items from the current menu-item.
+
+## Dashboard structure
+
+On dashboard pages, we have the same structure as on regular pages. In addition, we render two extra views right before the main content:
+
+### Dashboard Sub-Items
+
+This renders all sub-items as menu-link-items in the display mode "Dashboard".
+
+### Dashboard Menu Item
+
+This renders the current menu-link-item in the display mode "Default".
+
+### Dashboard Menu Item Blocks
+
+The dashboard menu link items can also link to some default blocks, that we provide out of the box. Those blocks are assigned to the invisible region "Dashboard placeholder", otherwise the linked blocks could not be rendered. The available blocks are:
+
+- Content Section: this renders all nodes that have been assigned to a section of the dashboard in the segmentation tab. Configuration can be asjusted in the view `content_section`.
+- Dossier: this renders all the media entities of type `document` or `pdf` that are applicable to the current user (see below). Configuration can be asjusted in the view `dossier`.
+- Newsboard Events: this renders all event nodes with the flag "Newsboard" being enabled, an event date in the future, and being applicable to the current user (see below).
+- Newsboard Incidents: this renders all incident nodes with the flag "Newsboard" being enabled, being applicable to the current user (see below).
+- Newsboard Infos: this renders all info nodes with the flag "Newsboard" being enabled, and being applicable to the current user (see below).
+
+### Applicable entities to the current user
+
+Entities are applicable to the current user if they are either not assigned to any inventory entity (means applicable to all users), or the current user has any relation to at least one of the assigned inventory entities.
diff --git a/docs/projects/lakedrops/datacore/alm.md b/docs/projects/lakedrops/datacore/alm.md
new file mode 100644
index 0000000000000000000000000000000000000000..77ede16f98f19ad14028f4de3ba851f85c2f3328
--- /dev/null
+++ b/docs/projects/lakedrops/datacore/alm.md
@@ -0,0 +1,91 @@
+---
+title: DataCore ALM
+tags:
+- projects
+---
+# Building Module Artifacts
+
+The following process will be executed, when pushing to GitLab:
+
+```plantuml
+
+@startuml
+
+actor Developer
+
+Developer --> GitLab: Push
+
+activate GitLab
+GitLab --> GitLab: Build, Test
+alt Build Failure
+    GitLab --> Developer: Feedback
+    destroy GitLab
+else Build OK
+    GitLab --> Sonar: Push Code to Analyse
+    activate Sonar
+    alt Sonar OK
+        Sonar --> GitLab: Goals not violated
+        deactivate Sonar
+    else Sonar Goal Violation
+        Sonar --> GitLab: Goal Violation
+        Sonar --> Developer: Feedback
+        destroy GitLab
+    end
+    GitLab --> Artifactory: Deploy Artifacts
+    deactivate GitLab
+end
+@enduml
+```
+
+# Deploy Datacore with Modules
+
+```plantuml
+
+@startuml
+
+[-> GitLab: Deployment with Config
+GitLab --> Artifactory: Request artifacts
+activate Artifactory
+Artifactory --> GitLab: Return artifacts
+deactivate Artifactory
+
+activate GitLab
+GitLab --> Host: Copy artifacs
+GitLab --> Host: Start Datacore
+deactivate GitLab
+
+@enduml
+```
+
+# Configuration Management
+
+Every Datacore Module builds its own artefact. The `Core` module contains the `Java Main Class`, 
+which can be executed. The rest of the module artefacts (Jar Files) must be put on the 
+`Java Classpath`.
+
+```plantuml
+
+@startuml
+
+component core_module [
+    Core Module
+]
+
+component real_estate_module [
+    Real Estate Module
+]
+
+component gastro_module [
+    Gastro Module
+]
+
+core_module --> [Core JAR]: Produces
+real_estate_module --> [Real Estate JAR]: Produces
+gastro_module --> [Gastro JAR]: Produces
+
+@enduml
+```
+
+# Version Management
+
+//TODO
diff --git a/docs/projects/lakedrops/datacore/selfservice.md b/docs/projects/lakedrops/datacore/selfservice.md
new file mode 100644
index 0000000000000000000000000000000000000000..53807aba13e29c287bd0b460e0817d49605597e2
--- /dev/null
+++ b/docs/projects/lakedrops/datacore/selfservice.md
@@ -0,0 +1,85 @@
+---
+title: DataCore Self-Service
+tags:
+- projects
+---
+# Overview
+
+## Data from external Source (like REM)
+
+This section shows the synchronization process between the Drupal portal and the Datacore. The Datacore is the master of
+ the data and we have to care about the reliability of the records, because data can be changed from
+ different external sources, like REM or a user adds a sub-user in Drupal manually.
+
+```plantuml
+
+@startuml
+
+[-> Datacore: Provide external data
+activate Datacore
+
+loop until queue is empty
+Datacore -> Drupal: Request to process
+activate Drupal
+Drupal -> Drupal: Block adding data to queue
+Drupal -> Datacore: Process data in queue
+end
+return yes
+
+Datacore -> Drupal: Process external data
+activate Drupal
+Drupal -> Drupal: Process data
+Drupal -> Drupal: Release block of queue
+return successfull
+deactivate Datacore
+
+
+@enduml
+```
+
+# Datacore
+
+This section contains process logic and the current data model of the Datacore Application.
+ 
+## Receiving data
+
+```plantuml
+
+@startuml
+
+(*) --> "Receive Data"
+"Receive Data" --> "Check Data Origin"
+
+if "is update needed" then
+    --> [yes] "update user record"
+else
+    --> [no] (*)
+
+"update user record" -->  (*)
+
+@enduml
+```
+
+###Use Cases
+
+```plantuml
+
+@startuml
+
+actor "User" as user 
+actor "Developer RE" as devel1 
+actor "Developer Other" as devel2
+
+package Portal {
+    usecase "Add User" as UC1
+    usecase "Add Role" as UC2
+    usecase "Add Groups" as UC3
+}
+
+user --> UC1
+user --> UC2
+user --> UC3
+
+@enduml
+
+```
diff --git a/docs/projects/lakedrops/datacore/structure.md b/docs/projects/lakedrops/datacore/structure.md
new file mode 100644
index 0000000000000000000000000000000000000000..f5a809ae77a81abd6f7ec62fc2f2e6eca5bcf958
--- /dev/null
+++ b/docs/projects/lakedrops/datacore/structure.md
@@ -0,0 +1,64 @@
+---
+title: DataCore Structure
+tags:
+- projects
+---
+# Component Model
+
+Every Datacore Module contains the following components:
+
+```plantuml
+
+@startuml
+
+package "Datacore Modul" {
+    [Controller] - [Service]
+    folder "Persistence Layer" {
+        [Service] - [Entity Service]
+        [Entity Service] - [Entity]
+    }
+}
+
+[Controller] ..> HTTP : REST API
+note right of HTTP : Expose Web Service only
+
+database "MySQL" {
+    folder "Schema" {
+        [Tables]
+    }
+}
+
+[Entity] ..> [Tables]
+
+@enduml
+
+```
+
+The modules can be combined, where the Basic Module is mandatory to 
+guarantee the core functionality. All other modules are independent from each other.
+
+```plantuml
+
+@startuml
+
+component core [
+    Basic Module
+]
+
+component real_estate [
+    Real Estate Module
+]
+
+component gastro [
+    Gastronomy Module
+]
+
+core <-- real_estate
+core <-- gastro
+
+@enduml
+
+```
+
+Every module contains its single components, like Database Entities, so that it can
+be plugged into the Datacore environment.
diff --git a/docs/tags.md b/docs/tags.md
new file mode 100644
index 0000000000000000000000000000000000000000..9b25aee98309ee1a26ce617bc0b6852157805db1
--- /dev/null
+++ b/docs/tags.md
@@ -0,0 +1,6 @@
+---
+title: Tags
+---
+# Tags
+
+[TAGS]
diff --git a/mkdocs.yml b/mkdocs.yml
index 0b2a9a9fe2150a98311ec4e8ed93aa3ce8146ced..ab80203871c136900c40c07d93531e425cd56bd7 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -1,32 +1,59 @@
 site_name: DevOps Tools
+site_url: https://devops-tools.docs.lakedrops.com
+site_description: Documentation for LakeDrops tools and projects
 theme:
   name: material
   custom_dir: overrides
+  palette:
+    - media: "(prefers-color-scheme: light)"
+      scheme: default
+      toggle:
+        icon: material/toggle-switch-off-outline
+        name: Switch to dark mode
+    - media: "(prefers-color-scheme: dark)"
+      scheme: slate
+      primary: indigo
+      accent: yellow
+      toggle:
+        icon: material/toggle-switch
+        name: Switch to light mode
+  font: false
+  logo: images/logo.png
+  favicon: images/favicon.ico
   icon:
     repo: fontawesome/brands/gitlab
   features:
-  # - navigation.instant
+    - navigation.instant
+    - navigation.indexes
     - navigation.sections
     - navigation.tabs
-repo_name: documentation
+    - navigation.tabs.sticky
+    - navigation.tracking
+    - navigation.top
+    - search.highlight
+    - search.share
+    - search.suggest
+    - toc.follow
+repo_name: DevOps Documentation
 repo_url: https://gitlab.lakedrops.com/devops-tools/documentation
+extra:
+  social:
+    - icon: fontawesome/brands/gitlab
+      link: https://gitlab.lakedrops.com/devops-tools/documentation
 extra_css:
   - stylesheets/extra.css
 markdown_extensions:
-  - toc:
-      permalink: True
+  - admonition
+  - def_list
+  - markdown_include.include
+  - pymdownx.details
   - pymdownx.highlight:
       linenums: True
-  - pymdownx.superfences
   - pymdownx.inlinehilite
+  - pymdownx.superfences
+  - toc:
+      permalink: True
 plugins:
-  - search:
-      lang: en
-  - git-revision-date-localized:
-      type: datetime
-  - mkdocs-new-features-notifier
-  - git-authors
-  - tags
   - build_plantuml:
       render: "server"
       server: "http://www.plantuml.com/plantuml"
@@ -35,197 +62,229 @@ plugins:
       output_folder: "out"
       input_folder: "src"
       input_extensions: ""
+      disable_ssl_certificate_validation: true # for self-signed and invalid certs
+  - git-authors
+  - git-revision-date-localized:
+      type: datetime
+  - mkdocs-simple-hooks:
+      hooks:
+        on_config: "docs.hooks:append_nav"
+  - mkdocs-video
+  - search:
+      lang: en
+  - tags:
+      tags_file: tags.md
 nav:
   - Home:
-    - Welcome: index.md
-    - Overview: overview.md
-    - Tags: tags.md
-    - Updates: new-features.md
-    - Contribute: how-to-write-docs.md
+      - index.md
+      - Overview: overview.md
+      - Tags: tags.md
+      - Contribute: how-to-write-docs.md
   - Docker:
-    - Home: docker/index.md
-    - Ansible:
-      - Home: docker/ansible/index.md
-    - GitLab Drupal CI:
-      - Home: docker/gitlab-drupal-ci/index.md
-      - Changelog: docker/gitlab-drupal-ci/changelog.md
-    - L3D:
-      - Home: docker/l3d/index.md
-      - Drupal: docker/l3d/drupal.md
-      - Changelog: docker/l3d/changelog.md
-    - Maven: docker/maven-build/index.md
-    - Node:
-      - Home: docker/node/index.md
-      - Gulp, SASS, BrowserSync: docker/node/gulp-sass.md
+      - docker/index.md
+      - Ansible:
+          - docker/ansible/index.md
+      - GitLab Drupal CI:
+          - docker/gitlab-drupal-ci/index.md
+          - Changelog: docker/gitlab-drupal-ci/changelog.md
+      - L3D:
+          - docker/l3d/index.md
+          - Drupal: docker/l3d/drupal.md
+          - Changelog: docker/l3d/changelog.md
+      - Maven:
+          - docker/maven-build/index.md
+      - Node:
+          - docker/node/index.md
+          - Gulp, SASS, BrowserSync: docker/node/gulp-sass.md
   - Composer:
-    - Home: composer/index.md
-    - Libraries:
-      - Composer.json Utilities: composer/library/composer-json-utils/index.md
-      - Docker Traefik: composer/library/traefik/index.md
-    - Plugins:
-      - Ahoy: composer/plugin/ahoy/index.md
-      - Behat for Drupal: composer/plugin/b4d/index.md
-      - Docker for Drupal: composer/plugin/d4d/index.md
-      - Drupal 8 SASS Theme: composer/plugin/d8-sass-theme/index.md
-      - Drupal 8 Scaffold: composer/plugin/d8-scaffold/index.md
-      - Drupal 9 Scaffold: composer/plugin/d9-scaffold/index.md
-      - Dorgflow: composer/plugin/dorgflow/index.md
-      - Drupal Development Environment: composer/plugin/drupal-dev-environment/index.md
-      - Drupal Environment: composer/plugin/drupal-environment/index.md
-    - Project:
-      - Drupal 8: composer/project/d8/index.md
-      - Drupal 8 Commerce: composer/project/d8-commerce/index.md
-      - Drupal 8 Commerce Demo: composer/project/d8-commerce-demo/index.md
-      - Drupal 9: composer/project/d9/index.md
+      - composer/index.md
+      - Libraries:
+          - Composer.json Utilities: composer/library/composer-json-utils/index.md
+          - Docker Traefik: composer/library/traefik/index.md
+      - Plugins:
+          - Ahoy: composer/plugin/ahoy/index.md
+          - Behat for Drupal: composer/plugin/b4d/index.md
+          - Docker for Drupal: composer/plugin/d4d/index.md
+          - Drupal 8 SASS Theme: composer/plugin/d8-sass-theme/index.md
+          - Drupal 8 Scaffold: composer/plugin/d8-scaffold/index.md
+          - Drupal 9 Scaffold: composer/plugin/d9-scaffold/index.md
+          - Dorgflow: composer/plugin/dorgflow/index.md
+          - Drupal Development Environment: composer/plugin/drupal-dev-environment/index.md
+          - Drupal Environment: composer/plugin/drupal-environment/index.md
+      - Project:
+          - Drupal 8: composer/project/d8/index.md
+          - Drupal 8 Commerce: composer/project/d8-commerce/index.md
+          - Drupal 8 Commerce Demo: composer/project/d8-commerce-demo/index.md
+          - Drupal 9: composer/project/d9/index.md
   - Ansible:
-    - Home: ansible/index.md
-    - Wiki:
-      - Home: ansible/wiki/index.md
-      - Attacks: ansible/wiki/attacks.md
-      - Crontabs: ansible/wiki/configure-crontabs.md
-      - Desaster recovery: ansible/wiki/desaster-recovery.md
-      - Drupal Apache update: ansible/wiki/drupal-apache-update.md
-      - Drupal deployment: ansible/wiki/drupal-deployment.md
-      - Drush fetch aliases: ansible/wiki/drush-fetch-aliases.md
-      - Firewall: ansible/wiki/firewall.md
-      - GitLab CI configuration: ansible/wiki/gitlab-ci-configuration.md
-      - GitLab CI introduction: ansible/wiki/gitlab-ci-introduction.md
-      - GitLab CI prerequisites: ansible/wiki/gitlab-ci-prerequisites.md
-      - HaProxy custom blacklists: ansible/wiki/haproxy-custom-blacklists.md
-      - HaProxy quick update: ansible/wiki/haproxy-quick-update.md
-      - LetsEncrypt: ansible/wiki/letsencrypt.md
-      - Resources: ansible/wiki/resources.md
-      - Swapfile: ansible/wiki/swapfile.md
-      - Add new user: ansible/wiki/user-add-new.md
-      - Set user password: ansible/wiki/user-set-password.md
-      - Varnish quick update: ansible/wiki/varnish-quick-update.md
-      - Backup:
-        - Home: ansible/wiki/backup/backup.md
-        - Intro: ansible/wiki/backup/introduction.md
-        - Backup to Google: ansible/wiki/backup/backup-google.md
-        - Backup to SpiderOak: ansible/wiki/backup/backup-spideroak.md
-        - Restore: ansible/wiki/backup/restore.md
-        - Restore from Google: ansible/wiki/backup/restore-google.md
-        - Restore from SpiderOak: ansible/wiki/backup/restore-spideroak.md
-      - ELK:
-        - Home: ansible/wiki/elk/introduction.md
-        - Fluentd: ansible/wiki/elk/fluentd.md
-        - Kibana: ansible/wiki/elk/kibana.md
-        - Re-Index: ansible/wiki/elk/re-indexing.md
-      - Hosts:
-        - Add new host: ansible/wiki/hosts/add.md
-        - JiffyBox: ansible/wiki/hosts/jiffybox.md
-        - Prevent reboot: ansible/wiki/hosts/prevent-reboot.md
-      - Inventory:
-        - Add new inventory: ansible/wiki/inventory/add.md
-        - ChatOps: ansible/wiki/inventory/chatops.md
-        - Pipelines: ansible/wiki/inventory/pipelines.md
-      - Monitoring:
-        - Home: ansible/wiki/monitoring/monitoring.md
-        - Introduction: ansible/wiki/monitoring/introduction.md
-        - Alerts: ansible/wiki/monitoring/alerts.md
-        - Alerts to ELK: ansible/wiki/monitoring/alerts-elk.md
-        - Alerts on NetData: ansible/wiki/monitoring/alerts-netdata.md
-        - Alerts on uptime: ansible/wiki/monitoring/alerts-uptime.md
-      - OpenSSL:
-        - CSR: ansible/wiki/openssl/csr.md
-      - Tips:
-        - Signed Git commits: ansible/wiki/tips/signed-git-commits.md
-    - Plugins:
-      - Drush: ansible/plugins/drush/index.md
-      - Fluentd: ansible/plugins/fluentd/index.md
-      - GitLab: ansible/plugins/gitlab/index.md
-      - JiffyBox: ansible/plugins/jiffybox/index.md
-      - ServerDensity: ansible/plugins/serverdensity/index.md
-      - Uptime: ansible/plugins/uptime/index.md
-    - Roles:
-      - Alerta: ansible/roles/alerta/index.md
-      - Almond: ansible/roles/almond/index.md
-      - Apache: ansible/roles/apache/index.md
-      - Apt Proxy: ansible/roles/aptproxy/index.md
-      - Artifactory: ansible/roles/artifactory/index.md
-      - Auditbeat: ansible/roles/auditbeat/index.md
-      - Borg Backup: ansible/roles/borgbackup/index.md
-      - Camunda: ansible/roles/camunda/index.md
-      - Cloud: ansible/roles/cloud/index.md
-      - Common: ansible/roles/common/index.md
-      - Common Auth: ansible/roles/commonauth/index.md
-      - Common Connect: ansible/roles/commonconnect/index.md
-      - Common Keys: ansible/roles/commonkeys/index.md
-      - Compass: ansible/roles/compass/index.md
-      - Composer: ansible/roles/composer/index.md
-      - Discourse: ansible/roles/discourse/index.md
-      - Docker: ansible/roles/docker/index.md
-      - Drupal: ansible/roles/drupal/index.md
-      - Drupal CLI: ansible/roles/drupal-cli/index.md
-      - Drupal Console: ansible/roles/drupalconsole/index.md
-      - Drush: ansible/roles/drush/index.md
-      - ElastAlert: ansible/roles/elastalert/index.md
-      - Elasticsearch: ansible/roles/elasticsearch/index.md
-      - Fail2Ban: ansible/roles/fail2ban/index.md
-      - Fluentd: ansible/roles/fluentd/index.md
-      - Fluentd Client: ansible/roles/fluentd-client/index.md
-      - Google Cloud: ansible/roles/gcloud/index.md
-      - GitLab: ansible/roles/gitlab/index.md
-      - GitLab Client: ansible/roles/gitlab-client/index.md
-      - GitLab Runner: ansible/roles/gitlab-runner/index.md
-      - GoLang: ansible/roles/golang/index.md
-      - HaProxy: ansible/roles/haproxy/index.md
-      - Heartbeat: ansible/roles/heartbeat/index.md
-      - Home Assistant: ansible/roles/home-assistant/index.md
-      - JailKit: ansible/roles/jailkit/index.md
-      - Java: ansible/roles/java/index.md
-      - Keycloak: ansible/roles/keycloak/index.md
-      - Kibana: ansible/roles/kibana/index.md
-      - LetsEncrypt: ansible/roles/letsencrypt/index.md
-      - Mailhog: ansible/roles/mailhog/index.md
-      - Matomo: ansible/roles/matomo/index.md
-      - Matterbridge: ansible/roles/matterbridge/index.md
-      - Memcache: ansible/roles/memcache/index.md
-      - MongoDB: ansible/roles/mongodb/index.md
-      - MySQL: ansible/roles/mysql/index.md
-      - MySQL Client: ansible/roles/mysql-client/index.md
-      - NetData: ansible/roles/netdata/index.md
-      - Nextcloud: ansible/roles/nextcloud/index.md
-      - Nginx: ansible/roles/nginx/index.md
-      - NodeJS: ansible/roles/nodejs/index.md
-      - OpenPhoto: ansible/roles/openphoto/index.md
-      - Oracle: ansible/roles/oracle/index.md
-      - OwnCloud: ansible/roles/owncloud/index.md
-      - Packetbeat: ansible/roles/packetbeat/index.md
-      - PhotoPrism: ansible/roles/photoprism/index.md
-      - PHP: ansible/roles/php/index.md
-      - PlantUML: ansible/roles/plantuml/index.md
-      - Redis: ansible/roles/radis/index.md
-      - S3: ansible/roles/s3/index.md
-      - Satis: ansible/roles/satis/index.md
-      - ServerDensity: ansible/roles/serverdensity/index.md
-      - SFTP: ansible/roles/sftp/index.md
-      - SpiderOak ONE: ansible/roles/spideroak/index.md
-      - SuiteCRM: ansible/roles/suitecrm/index.md
-      - SVN Server: ansible/roles/svnserver/index.md
-      - Tomcat: ansible/roles/tomcat/index.md
-      - Uptime: ansible/roles/uptime/index.md
-      - User Management: ansible/roles/user-management/index.md
-      - Varnish: ansible/roles/varnish/index.md
-      - Virtualbox: ansible/roles/virtualbox/index.md
-      - VPN: ansible/roles/vpn/index.md
-      - WKHTMLtoPdf: ansible/roles/wkhtmltopdf/index.md
-      - YouTrack: ansible/roles/youtrack/index.md
-      - Zabbix Agent: ansible/roles/zabbix_agent/index.md
-      - Zammad: ansible/roles/zammad/index.md
+      - ansible/index.md
+      - Wiki:
+          - ansible/wiki/index.md
+          - Attacks: ansible/wiki/attacks.md
+          - Crontabs: ansible/wiki/configure-crontabs.md
+          - Desaster recovery: ansible/wiki/desaster-recovery.md
+          - Drupal Apache update: ansible/wiki/drupal-apache-update.md
+          - Drupal deployment: ansible/wiki/drupal-deployment.md
+          - Drush fetch aliases: ansible/wiki/drush-fetch-aliases.md
+          - Firewall: ansible/wiki/firewall.md
+          - GitLab CI configuration: ansible/wiki/gitlab-ci-configuration.md
+          - GitLab CI introduction: ansible/wiki/gitlab-ci-introduction.md
+          - GitLab CI prerequisites: ansible/wiki/gitlab-ci-prerequisites.md
+          - HaProxy custom blacklists: ansible/wiki/haproxy-custom-blacklists.md
+          - HaProxy quick update: ansible/wiki/haproxy-quick-update.md
+          - LetsEncrypt: ansible/wiki/letsencrypt.md
+          - Resources: ansible/wiki/resources.md
+          - Swapfile: ansible/wiki/swapfile.md
+          - Add new user: ansible/wiki/user-add-new.md
+          - Set user password: ansible/wiki/user-set-password.md
+          - Varnish quick update: ansible/wiki/varnish-quick-update.md
+          - Backup:
+              - ansible/wiki/backup/backup.md
+              - Intro: ansible/wiki/backup/introduction.md
+              - Backup to Google: ansible/wiki/backup/backup-google.md
+              - Backup to SpiderOak: ansible/wiki/backup/backup-spideroak.md
+              - Restore: ansible/wiki/backup/restore.md
+              - Restore from Google: ansible/wiki/backup/restore-google.md
+              - Restore from SpiderOak: ansible/wiki/backup/restore-spideroak.md
+          - ELK:
+              - ansible/wiki/elk/introduction.md
+              - Fluentd: ansible/wiki/elk/fluentd.md
+              - Kibana: ansible/wiki/elk/kibana.md
+              - Re-Index: ansible/wiki/elk/re-indexing.md
+          - Hosts:
+              - Add new host: ansible/wiki/hosts/add.md
+              - JiffyBox: ansible/wiki/hosts/jiffybox.md
+              - Prevent reboot: ansible/wiki/hosts/prevent-reboot.md
+          - Inventory:
+              - Add new inventory: ansible/wiki/inventory/add.md
+              - ChatOps: ansible/wiki/inventory/chatops.md
+              - Pipelines: ansible/wiki/inventory/pipelines.md
+          - Monitoring:
+              - ansible/wiki/monitoring/monitoring.md
+              - Introduction: ansible/wiki/monitoring/introduction.md
+              - Alerts: ansible/wiki/monitoring/alerts.md
+              - Alerts to ELK: ansible/wiki/monitoring/alerts-elk.md
+              - Alerts on NetData: ansible/wiki/monitoring/alerts-netdata.md
+              - Alerts on uptime: ansible/wiki/monitoring/alerts-uptime.md
+          - OpenSSL:
+              - CSR: ansible/wiki/openssl/csr.md
+          - Tips:
+              - Signed Git commits: ansible/wiki/tips/signed-git-commits.md
+      - Plugins:
+          - Drush: ansible/plugins/drush/index.md
+          - Fluentd: ansible/plugins/fluentd/index.md
+          - GitLab: ansible/plugins/gitlab/index.md
+          - JiffyBox: ansible/plugins/jiffybox/index.md
+          - ServerDensity: ansible/plugins/serverdensity/index.md
+          - Uptime: ansible/plugins/uptime/index.md
+      - Roles:
+          - Alerta: ansible/roles/alerta/index.md
+          - Almond: ansible/roles/almond/index.md
+          - Apache: ansible/roles/apache/index.md
+          - Apt Proxy: ansible/roles/aptproxy/index.md
+          - Artifactory: ansible/roles/artifactory/index.md
+          - Auditbeat: ansible/roles/auditbeat/index.md
+          - Borg Backup: ansible/roles/borgbackup/index.md
+          - Camunda: ansible/roles/camunda/index.md
+          - Cloud: ansible/roles/cloud/index.md
+          - Common: ansible/roles/common/index.md
+          - Common Auth: ansible/roles/commonauth/index.md
+          - Common Connect: ansible/roles/commonconnect/index.md
+          - Common Keys: ansible/roles/commonkeys/index.md
+          - Compass: ansible/roles/compass/index.md
+          - Composer: ansible/roles/composer/index.md
+          - Discourse: ansible/roles/discourse/index.md
+          - Docker: ansible/roles/docker/index.md
+          - Drupal: ansible/roles/drupal/index.md
+          - Drupal CLI: ansible/roles/drupal-cli/index.md
+          - Drupal Console: ansible/roles/drupalconsole/index.md
+          - Drush: ansible/roles/drush/index.md
+          - ElastAlert: ansible/roles/elastalert/index.md
+          - Elasticsearch: ansible/roles/elasticsearch/index.md
+          - Fail2Ban: ansible/roles/fail2ban/index.md
+          - Fluentd: ansible/roles/fluentd/index.md
+          - Fluentd Client: ansible/roles/fluentd-client/index.md
+          - Google Cloud: ansible/roles/gcloud/index.md
+          - GitLab: ansible/roles/gitlab/index.md
+          - GitLab Client: ansible/roles/gitlab-client/index.md
+          - GitLab Runner: ansible/roles/gitlab-runner/index.md
+          - GoLang: ansible/roles/golang/index.md
+          - HaProxy: ansible/roles/haproxy/index.md
+          - Heartbeat: ansible/roles/heartbeat/index.md
+          - Home Assistant: ansible/roles/home-assistant/index.md
+          - JailKit: ansible/roles/jailkit/index.md
+          - Java: ansible/roles/java/index.md
+          - Keycloak: ansible/roles/keycloak/index.md
+          - Kibana: ansible/roles/kibana/index.md
+          - LetsEncrypt: ansible/roles/letsencrypt/index.md
+          - Mailhog: ansible/roles/mailhog/index.md
+          - Matomo: ansible/roles/matomo/index.md
+          - Matterbridge: ansible/roles/matterbridge/index.md
+          - Memcache: ansible/roles/memcache/index.md
+          - MongoDB: ansible/roles/mongodb/index.md
+          - MySQL: ansible/roles/mysql/index.md
+          - MySQL Client: ansible/roles/mysql-client/index.md
+          - NetData: ansible/roles/netdata/index.md
+          - Nextcloud: ansible/roles/nextcloud/index.md
+          - Nginx: ansible/roles/nginx/index.md
+          - NodeJS: ansible/roles/nodejs/index.md
+          - OpenPhoto: ansible/roles/openphoto/index.md
+          - Oracle: ansible/roles/oracle/index.md
+          - OwnCloud: ansible/roles/owncloud/index.md
+          - Packetbeat: ansible/roles/packetbeat/index.md
+          - PhotoPrism: ansible/roles/photoprism/index.md
+          - PHP: ansible/roles/php/index.md
+          - PlantUML: ansible/roles/plantuml/index.md
+          - Redis: ansible/roles/radis/index.md
+          - S3: ansible/roles/s3/index.md
+          - Satis: ansible/roles/satis/index.md
+          - ServerDensity: ansible/roles/serverdensity/index.md
+          - SFTP: ansible/roles/sftp/index.md
+          - SpiderOak ONE: ansible/roles/spideroak/index.md
+          - SuiteCRM: ansible/roles/suitecrm/index.md
+          - SVN Server: ansible/roles/svnserver/index.md
+          - Tomcat: ansible/roles/tomcat/index.md
+          - Uptime: ansible/roles/uptime/index.md
+          - User Management: ansible/roles/user-management/index.md
+          - Varnish: ansible/roles/varnish/index.md
+          - Virtualbox: ansible/roles/virtualbox/index.md
+          - VPN: ansible/roles/vpn/index.md
+          - WKHTMLtoPdf: ansible/roles/wkhtmltopdf/index.md
+          - YouTrack: ansible/roles/youtrack/index.md
+          - Zabbix Agent: ansible/roles/zabbix_agent/index.md
+          - Zammad: ansible/roles/zammad/index.md
   - GitLab:
-    - Home: gitlab/index.md
-    - Ansible: gitlab/ansible/index.md
-    - Composer: gitlab/composer/index.md
-    - Drupal: gitlab/drupal/index.md
+      - gitlab/index.md
+      - Ansible: gitlab/ansible/index.md
+      - Composer: gitlab/composer/index.md
+      - Drupal: gitlab/drupal/index.md
   - DevOps:
-    - ALM:
-      - Introduction: devops/alm/alm.md
-      - Hosting and Monitoring: devops/alm/hosting_maintain.md
-      - Tools: devops/alm/tools.md
+      - ALM:
+          - devops/alm/alm.md
+          - Hosting and Monitoring: devops/alm/hosting_maintain.md
+          - Tools: devops/alm/tools.md
   - Developer Tools:
-    - Home: dev_tools/index.md
-    - Host Setup: dev_tools/host.md
-    - Debugging: dev_tools/debug.md
-    - Testing: dev_tools/test.md
+      - dev_tools/index.md
+      - Host Setup: dev_tools/host.md
+      - Debugging: dev_tools/debug.md
+      - Testing: dev_tools/test.md
+  - Projects:
+      - LakeDrops Framework:
+          - projects/lakedrops.md
+          - Architecture:
+              - Basic: projects/lakedrops/architecture/basic.md
+              - Real Estate: projects/lakedrops/architecture/real-estate.md
+          - Dashboard:
+              - Structure: projects/lakedrops/dashboard/structure.md
+          - DataCore:
+              - Structure: projects/lakedrops/datacore/structure.md
+              - ALM: projects/lakedrops/datacore/alm.md
+              - Self-Service: projects/lakedrops/datacore/selfservice.md
+      - Drupal Projects:
+          - projects/drupal.md
+          - Digital Signage:
+              - Architecture: projects/drupal/digital_signage/architecture.md
+              - Schedules: projects/drupal/digital_signage/schedules.md
+              - Wayfinding: projects/drupal/digital_signage/wayfinding.md
+      - APIs:
+          - projects/api.md