diff --git a/package.json b/package.json
index ed6398c0f68850d5a0a8252b2b4969e76e65c210..90720636ef2477a802107335eeec1584ec037ecf 100644
--- a/package.json
+++ b/package.json
@@ -5,7 +5,7 @@
   "scripts": {
     "vendor": "webpack --config vendor.webpack.config.js",
     "dev": "echo-cli \"Make sure the vendor dll file is up-to-date... recreate if some npm module added/removed ... then add/remove it from vendor.webpack.config.js\" && webpack-dev-server",
-    "build": "echo-cli \" --- Don't forget to increment the version string in constants.ts > versionString ---\" && tsc static_pages/firstExternalLoginPage/firstLoginExternalLogin.ts && tsc static_pages/about/about.ts && node --max-old-space-size=4096 node_modules/webpack/bin/webpack.js --config webpack.config.dist.js",
+    "build": "export NODE_OPTIONS=--openssl-legacy-provider && echo-cli \" --- Don't forget to increment the version string in constants.ts > versionString ---\" && tsc static_pages/firstExternalLoginPage/firstLoginExternalLogin.ts && tsc static_pages/about/about.ts && node --max-old-space-size=4096 node_modules/webpack/bin/webpack.js --config webpack.config.dist.js",
     "test": "echo-cli \"Error: no test specified\" && exit 1",
     "size": "webpack -p --progress"
   },
diff --git a/src/components/loggerPanel/loggerPanel.tsx b/src/components/loggerPanel/loggerPanel.tsx
index f88cd6b678b48aa09ff418e4ed5347cfe7476a0f..2d1919104e2c16db14cf6cefa27b390f4f855d84 100644
--- a/src/components/loggerPanel/loggerPanel.tsx
+++ b/src/components/loggerPanel/loggerPanel.tsx
@@ -19,6 +19,7 @@ import {isProduction} from '../../../debug'
 
 //const css = require('./styles.styl');
 
+declare var require: any
 const fileSaver = require('file-saver');
 
 export interface MyProps {
diff --git a/src/components/login/loginOverlay.tsx b/src/components/login/loginOverlay.tsx
index 1873acdf38e1f966cf4495390c450fe40fedc5b1..cd68c2d6adbb58c95a8e0acb0fb8c4e7d898c64e 100644
--- a/src/components/login/loginOverlay.tsx
+++ b/src/components/login/loginOverlay.tsx
@@ -151,6 +151,15 @@ class LoginOverlay extends React.Component<Props, any> {
                   <Icon className="mar-left-half" name="external alternate"/>
                 </a>
 
+                <a href={constants.userGuideLinkPath} target="_blank">
+                  <span className="mar-left-half">
+                    {
+                      getI18n(this.props.langId, 'Documentation')
+                    }
+                  </span>
+                    <Icon className="mar-left-half" name="external alternate"/>
+                </a>
+
                 <a href={constants.aboutPageLinkPath} target="_blank">
                     <span className="mar-left-half">
                       {
diff --git a/src/components/login/styles.styl b/src/components/login/styles.styl
index 1f44d68f13fe1b4bd01179e1e94c846253d65666..601ec208ab76dfe9779c07b7df27c7e9a07c774c 100644
--- a/src/components/login/styles.styl
+++ b/src/components/login/styles.styl
@@ -177,7 +177,7 @@ $loginOverlayBgImage = linear-gradient(120deg, #f6d365 0%, #fda085 100%); //line
 
 }
 
-$frostedGlassLoginOverlayBottomBarWidth = 550px
+$frostedGlassLoginOverlayBottomBarWidth = 690px
 $frostedGlassLoginOverlayBottomBarHeight = 40px
 $frostedGlassLoginOverlayBottomBarPos = 25px
 
@@ -194,7 +194,7 @@ $frostedGlassLoginOverlayBottomBarPos = 25px
   .frosted-glass {
     display flex
 
-    width: 550px;
+    width: 690px;
     //box-shadow: 0 0 1rem 0 rgba(0, 0, 0, .2);
     border-radius: 5px;
     position: relative;
diff --git a/src/components/sites/dashboardSite/headerBarContent.tsx b/src/components/sites/dashboardSite/headerBarContent.tsx
index 8e47f455212b18a2a2ba5b1d9286ace252d83f32..a25fbf4f21311723802efd52fbcc5e7bd0929aaf 100644
--- a/src/components/sites/dashboardSite/headerBarContent.tsx
+++ b/src/components/sites/dashboardSite/headerBarContent.tsx
@@ -9,8 +9,6 @@ import {returntypeof} from 'react-redux-typescript';
 import {RootState} from "../../../state/reducers";
 import CommonHeaderBarContentWrapper from '../../commonHeaderBarContentWrapper'
 
-const fileSaver = require('file-saver');
-
 //const css = require('./styles.styl');
 
 export interface MyProps {
@@ -58,4 +56,4 @@ class HeaderBar extends React.Component<Props, any> {
   }
 }
 
-export default connect(mapStateToProps, mapDispatchToProps)(HeaderBar)
\ No newline at end of file
+export default connect(mapStateToProps, mapDispatchToProps)(HeaderBar)
diff --git a/src/components/sites/editCustomProjectSite/headerBarContent.tsx b/src/components/sites/editCustomProjectSite/headerBarContent.tsx
index 524a58c241379ccc63617eca93ce7979baf25ded..08e352fe5948f1319ff0f26886c651297e787bc9 100644
--- a/src/components/sites/editCustomProjectSite/headerBarContent.tsx
+++ b/src/components/sites/editCustomProjectSite/headerBarContent.tsx
@@ -43,6 +43,7 @@ import {getI18n} from "../../../../i18n/i18nRoot";
 import * as constants from '../../../constants'
 import Logger from '../../../helpers/logger'
 
+declare var require: any
 const fileSaver = require('file-saver');
 
 //const css = require('./styles.styl');
diff --git a/src/components/sites/exerciseEditorSite/assetsPanel/assetsPanelView.tsx b/src/components/sites/exerciseEditorSite/assetsPanel/assetsPanelView.tsx
index 94ee71af33e8f25aaf36a042ce1db8abf05683e1..5eefbf6220c259f00a23019f8b1df07ee08fca3c 100644
--- a/src/components/sites/exerciseEditorSite/assetsPanel/assetsPanelView.tsx
+++ b/src/components/sites/exerciseEditorSite/assetsPanel/assetsPanelView.tsx
@@ -17,6 +17,7 @@ import {assetPrefix} from '../../../../constants'
 import Logger from '../../../../helpers/logger'
 import {orderBy} from 'lodash-es'
 
+declare var require: any
 const fileSaver = require('file-saver');
 
 //const css = require('./styles.styl');
diff --git a/src/components/sites/exerciseEditorSite/exerciseSyntaxHelpPanel/exerciseSyntaxHelpPanelView.tsx b/src/components/sites/exerciseEditorSite/exerciseSyntaxHelpPanel/exerciseSyntaxHelpPanelView.tsx
index 7385d91d57827be4d4389f6ecde8314f0e014afc..9e9c796eb7eb92efe47c8d280188b974a7aac2e2 100644
--- a/src/components/sites/exerciseEditorSite/exerciseSyntaxHelpPanel/exerciseSyntaxHelpPanelView.tsx
+++ b/src/components/sites/exerciseEditorSite/exerciseSyntaxHelpPanel/exerciseSyntaxHelpPanelView.tsx
@@ -32,6 +32,7 @@ const stateProps = returntypeof(mapStateToProps);
 const dispatchProps = returntypeof(mapDispatchToProps);
 type Props = typeof stateProps & typeof dispatchProps;
 
+declare var require: any
 const markdown = require('../../../../questionSystem/exerciseQuestionSyntaxGuide.md')
 const helpMarkdown = markdownIt.render(markdown)
 
@@ -52,4 +53,4 @@ class exerciseSyntaxHelpPanelView extends React.Component<Props, any> {
   }
 }
 
-export default connect(mapStateToProps, mapDispatchToProps)(exerciseSyntaxHelpPanelView)
\ No newline at end of file
+export default connect(mapStateToProps, mapDispatchToProps)(exerciseSyntaxHelpPanelView)
diff --git a/src/components/sites/exerciseEditorSite/headerBarContent.tsx b/src/components/sites/exerciseEditorSite/headerBarContent.tsx
index 0f59ead5a8e3750e9c43f0c2e0b1965529ec664d..43f6153b7fb1a0085026db2ae50e66f74945261d 100644
--- a/src/components/sites/exerciseEditorSite/headerBarContent.tsx
+++ b/src/components/sites/exerciseEditorSite/headerBarContent.tsx
@@ -41,6 +41,7 @@ import {getI18n, getRawI18n} from "../../../../i18n/i18nRoot";
 import {ErrorHelper} from '../../../helpers/errorHelper'
 import {HelpPopup} from '../../helpers/helpPopup'
 
+declare var require: any
 const fileSaver = require('file-saver');
 
 //const css = require('./styles.styl');
diff --git a/src/components/sites/guidesSite/exerciseSyntaxSite.tsx b/src/components/sites/guidesSite/exerciseSyntaxSite.tsx
index 751ec4c66cb3e7b5f74fa613533917a58cdf23e8..33ef64cac60591013020e4053b8f7c062c1cd012 100644
--- a/src/components/sites/guidesSite/exerciseSyntaxSite.tsx
+++ b/src/components/sites/guidesSite/exerciseSyntaxSite.tsx
@@ -12,6 +12,7 @@ import {setIsSiteHeaderBarDisplayedAndEnabledAction} from "../../../state/action
 import {connect} from "react-redux";
 import markdownIt from '../../../helpers/markdownHelper'
 
+declare var require: any
 //const css = require('./styles.styl');
 const exerciseSyntaxGuideMd = require('../../../questionSystem/exerciseQuestionSyntaxGuide.md')
 
@@ -63,4 +64,4 @@ class ExerciseSyntaxSite extends React.Component<Props, any> {
   }
 }
 
-export default connect(mapStateToProps, mapDispatchToProps)(ExerciseSyntaxSite)
\ No newline at end of file
+export default connect(mapStateToProps, mapDispatchToProps)(ExerciseSyntaxSite)
diff --git a/src/components/sites/guidesSite/testSyntaxSite.tsx b/src/components/sites/guidesSite/testSyntaxSite.tsx
index f7a9b128aaa1ba524d28344e3fef4d6fb30b6773..2231cfa00b39467a9e3e81b5730b8ab9f51cdd09 100644
--- a/src/components/sites/guidesSite/testSyntaxSite.tsx
+++ b/src/components/sites/guidesSite/testSyntaxSite.tsx
@@ -18,6 +18,7 @@ export interface MyProps {
   //readonly test: string
 }
 
+declare var require: any
 const testSyntaxGuideMd = require('../../../questionSystem/testSyntaxGuide.md')
 
 const content = {
@@ -62,4 +63,4 @@ class TestSyntaxSite extends React.Component<Props, any> {
   }
 }
 
-export default connect(mapStateToProps, mapDispatchToProps)(TestSyntaxSite)
\ No newline at end of file
+export default connect(mapStateToProps, mapDispatchToProps)(TestSyntaxSite)
diff --git a/src/components/sites/manageOwnOrGroupExerciseComponents/submissionsSite/exportCsvDialog/exportCsvDialog.tsx b/src/components/sites/manageOwnOrGroupExerciseComponents/submissionsSite/exportCsvDialog/exportCsvDialog.tsx
index e7b4150618949d615c1c49679acca27418ec976d..803add490b9b84696f907334aa04ee34b9ba2534 100644
--- a/src/components/sites/manageOwnOrGroupExerciseComponents/submissionsSite/exportCsvDialog/exportCsvDialog.tsx
+++ b/src/components/sites/manageOwnOrGroupExerciseComponents/submissionsSite/exportCsvDialog/exportCsvDialog.tsx
@@ -27,6 +27,7 @@ import {errorDialog} from '../../../../../helpers/dialogHelper'
 import {ServerResponse} from '../../../../../types/response'
 import {ResponseCodes} from '../../../../../helpers/responseCodes'
 
+declare var require: any
 const fileSaver = require('file-saver');
 
 export interface MyProps {
diff --git a/src/components/sites/manageTagsSite/manageTagsSite.tsx b/src/components/sites/manageTagsSite/manageTagsSite.tsx
index 19367582eb05c17c43e1183933f1f87e77b318c1..c81cac80fac950fe36429a0006a067e13ae0c405 100644
--- a/src/components/sites/manageTagsSite/manageTagsSite.tsx
+++ b/src/components/sites/manageTagsSite/manageTagsSite.tsx
@@ -23,6 +23,7 @@ import {getI18n} from "../../../../i18n/i18nRoot";
 import Logger from '../../../helpers/logger'
 import {ErrorHelper} from '../../../helpers/errorHelper'
 
+declare var require: any
 const css = require('./styles.styl');
 
 export interface MyProps {
diff --git a/src/constants.ts b/src/constants.ts
index 5f629e7a3c70aa5d791c8af908cd31649139eb19..6ff6ffe2040c67af42d9834aed7e655675360683 100644
--- a/src/constants.ts
+++ b/src/constants.ts
@@ -13,7 +13,7 @@ import Logger from './helpers/logger'
  * y - breaking changes / new features
  * z - fixes, small changes
  */
-export const versionString = '2.19.0'
+export const versionString = '2.19.1'
 
 
 export const supportMail = 'yapex@informatik.uni-halle.de'
@@ -98,6 +98,8 @@ export const legalNoticePageLinkPath = '/legalNotice/legalNotice.html' //see web
 export const privacyPolicyPageLinkPath = '/privacypolicy/privacy.html' //see webpack.config.dist.js -> CopyWebpackPlugin
 export const aboutPageLinkPath = '/about/about.html'
 
+export const userGuideLinkPath = '/guides/de/'
+
 
 /**
  * returns the download personal data link for the given user (id)
diff --git a/src/helpers/cryptoHelper.ts b/src/helpers/cryptoHelper.ts
index 199f65682535fa39e9fc81b9ac134000bcfa7347..c3547159738164e532fe65cb1006ba6413abb22e 100644
--- a/src/helpers/cryptoHelper.ts
+++ b/src/helpers/cryptoHelper.ts
@@ -2,6 +2,7 @@
  * Created by janis dähne.
  */
 
+declare var require: any
 const crypto = require('crypto-js')
 
 
diff --git a/src/helpers/markdownHelper.ts b/src/helpers/markdownHelper.ts
index 395ac2721462bb7fa4ae7abc652226ea423d5a3a..acc38b6a565de499aa2ae1f0ff91fc1b3023467b 100644
--- a/src/helpers/markdownHelper.ts
+++ b/src/helpers/markdownHelper.ts
@@ -4,6 +4,7 @@ import Logger from './logger'
 import {copyToClipboard} from './clipboard'
 import { markdownPLangBlockDataLangAttribute, markdownPLangBlocksClass } from '../constants'
 
+declare var require: any
 const hljs = require('highlight.js/lib/highlight')
 
 /**
@@ -267,7 +268,7 @@ const mdRenderer = markdownIt({
 
       if (tokens[idx].nesting === 1) {
         // opening tag
-        
+
         //div class="..." with data attribute to identify lang
         return `<div class="${markdownPLangBlocksClass}" ${markdownPLangBlockDataLangAttribute}="${mdRenderer.utils.escapeHtml(m[0])}">\n`;
       } else {
diff --git a/src/index.tsx b/src/index.tsx
index 8e13875ba8829ad9b4788381484eb1f5d4a29054..a27b7f1a40df537ee616d31ae83d8ff1099fd34e 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -14,6 +14,7 @@ import history from './routerHistory'
 import {setup} from './setup'
 import {NotificationContainer} from "react-notifications";
 
+declare var require: any
 //according to https://stackoverflow.com/questions/14990369/how-does-stylus-variable-scope-work-across-files
 //we only need one file importing all other then all imported files iwll have the same scope
 // const common = require('./styles/common.styl')
diff --git a/src/setup.ts b/src/setup.ts
index 463a867fdce53c9821093032edcdadb2442a3de8..94eacbf5ddeab5b18bea31c15bbf4a4ee385bd18 100644
--- a/src/setup.ts
+++ b/src/setup.ts
@@ -27,6 +27,7 @@ import {ErrorHelper} from './helpers/errorHelper'
 import {errorDialog} from './helpers/dialogHelper'
 import {getServerMessageUrl} from './communicationLayer/systemSettingsLayer'
 
+declare var require: any
 
 require('react-datetime/css/react-datetime.css')
 //require('../customChangedLib/react-notifications/notifications.styl') //imported via allStylues.styl
diff --git a/static_pages/about/about.html b/static_pages/about/about.html
index 4074cd4edef7a523f56310fe81961d36adf9efeb..816aa5ac93a213930b8995a993f36c810424b00b 100644
--- a/static_pages/about/about.html
+++ b/static_pages/about/about.html
@@ -896,7 +896,7 @@ Natürlich gibt es viele kleinere Verbesserungsvorschläge und Ideen YAPEX noch
 
 
   <div>
-    Copyright © 2016-2022
+    Copyright © 2016-2023
 <!--    ???-->
   </div>