diff --git a/docker/init.sh b/docker/init.sh
index e5c103eceb6ca6c53e8aadc1cf859298114feff0..060db24942ad10e1bb0f3abca96443d85f55d289 100755
--- a/docker/init.sh
+++ b/docker/init.sh
@@ -9,6 +9,8 @@
 # 2022-11-16  v1.2 <www.axel-hahn.de>        use docker-compose -p "$APP_NAME"
 # 2022-12-18  v1.3 <www.axel-hahn.de>        add -p "$APP_NAME" in other docker commands
 # 2022-12-20  v1.4 <axel.hahn@unibe.ch>      replace fgrep with grep -F
+# 2023-03-06  v1.5 <www.axel-hahn.de>        up with and without --build
+# 2023-08-17  v1.6 <www.axel-hahn.de>        menu selection with single key (without return)
 # ======================================================================
 
 cd $( dirname $0 )
@@ -17,7 +19,7 @@ cd $( dirname $0 )
 # git@git-repo.iml.unibe.ch:iml-open-source/docker-php-starterkit.git
 selfgitrepo="docker-php-starterkit.git"
 
-_version="1.4"
+_version="1.6"
 
 # ----------------------------------------------------------------------
 # FUNCTIONS
@@ -226,8 +228,14 @@ function _showInfos(){
     echo
 }
 
+# helper for menu: print an inverted key
+function  _key(){
+    printf "\e[4;7m ${1} \e[0m"
+}
+
+# helper: wait for a return key
 function _wait(){
-    echo -n "... press RETURN > "; read dummy
+    echo -n "... press RETURN > "; read -r
 }
 
 # ----------------------------------------------------------------------
@@ -245,21 +253,25 @@ while true; do
         _showContainers
 
         h2 MENU
-        echo "  g - remove git data of starterkit"
+        echo "  $( _key g ) - remove git data of starterkit"
+        echo
+        echo "  $( _key i ) - init application: set permissions"
+        echo "  $( _key t ) - generate files from templates"
+        echo "  $( _key T ) - remove generated files"
         echo
-        echo "  i - init application: set permissions"
-        echo "  t - generate files from templates"
-        echo "  T - remove generated files"
+        echo "  $( _key u ) - startup containers    docker-compose ... up -d"
+        echo "  $( _key U ) - startup containers    docker-compose ... up -d --build"
+        echo "  $( _key s ) - shutdown containers   docker-compose stop"
+        echo "  $( _key r ) - remove containers     docker-compose rm -f"
         echo
-        echo "  u - startup containers    docker-compose up -d"
-        echo "  s - shutdown containers   docker-compose stop"
-        echo "  r - remove containers     docker-compose rm -f"
+        echo "  $( _key m ) - more infos"
+        echo "  $( _key c ) - console (bash)"
         echo
-        echo "  m - more infos"
-        echo "  c - console (bash)"
+        echo "  $( _key q ) - quit"
         echo
         echo -n "  select >"
-        read action 
+        read -rn 1 action 
+        echo
     fi
 
     case "$action" in
@@ -277,18 +289,22 @@ while true; do
             _removeGeneratedFiles
             rm -rf containers
             ;;
-        f)
-            _removeGeneratedFiles
-            _generateFiles
-            _wait
-            ;;
+        # not in the menu
+        # f)
+        #     _removeGeneratedFiles
+        #     _generateFiles
+        #     _wait
+        #     ;;
         m)
             _showInfos
             _wait
             ;;
-        u)
-            if docker-compose -p "$APP_NAME" --verbose up -d --remove-orphans --build; then
-                # test ! -z "${APP_ONSTARTUP}" && sleep 2 && docker exec -it appmonitor-server /bin/bash -c "${APP_ONSTARTUP}" 
+        u|U)
+            dockerUp="docker-compose -p "$APP_NAME" --verbose up -d --remove-orphans"
+            if [ "$action" = "U" ]; then
+                dockerUp+=" --build"
+            fi
+            if $dockerUp; then
                 echo "In a web browser:"
                 echo "  $frontendurl"
             else
@@ -311,7 +327,11 @@ while true; do
             read dockerid
             test -z "$dockerid" || docker exec -it $dockerid /bin/bash
             ;;
-        *) echo "ACTION [$action] NOT IMPLEMENTED."
+        q)
+            exit 0;
+            ;;
+        *) 
+            test -n "$action" && ( echo "  ACTION FOR [$action] NOT IMPLEMENTED."; sleep 1 )
     esac
     action=
 done
diff --git a/docs/20_Installation.md b/docs/20_Installation.md
index d6c95e7e83d5636431d87c215395ee355081e558..06deacb6d0f6bc126685a6d50b62fc2ac2cb904a 100644
--- a/docs/20_Installation.md
+++ b/docs/20_Installation.md
@@ -1,4 +1,30 @@
-## Start from scratch
+## First steps
+
+This project contains files for docker, the docs and webroot with a demo of implemented components.
+To bring up and running:
+
+You need 
+
+* a rootless docker instance (if it is working with docker as root I didn't tested).
+* docker compose
+* facl
+
+Steps:
+
+* start ./docker/init.sh
+* press ``i`` to apply write permissions with setfacl command
+* press ``u`` to startup the container
+
+In your browser open http://localhost:8008/.
+
+## Start a new project using demo page
+
+Steps:
+
+* delete the directories .git + docs
+* delete the files .gitignore + readme.md
+
+## Start from scratch (WIP)
 
 If you have no AdminLTE page and want to jump in from point zero:
 
diff --git a/public_html/classes/pageinclude.class.php b/public_html/classes/pageinclude.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..e5dc4c3028edabc452478893cdae1f0cbea77160
--- /dev/null
+++ b/public_html/classes/pageinclude.class.php
@@ -0,0 +1,53 @@
+<?php
+
+
+class pageinclude{
+
+    protected $_request;
+    protected $_sPageFile;
+    protected $_sPagesDir;
+
+    /**
+     * init
+     * @return bool
+     */
+    public function __construct(){
+        $this->_sPagesDir=__DIR__.'/../pages/';
+        return true;
+    }
+
+    protected function _detectPagefile(){
+        $_request=$_SERVER['REQUEST_URI'];
+        $sPagefile=preg_replace('/\?.*$/', '', $_request);
+        if($sPagefile=="/"){
+            $sPagefile="/index";
+        }
+        return $sPagefile.=".php";
+    }
+    
+    /**
+     * set another base dir for pages
+     * @param  string  $sDir  path of the new pages dir
+     * @return bool
+     */
+    public function setPagedir($sDir){
+        if(is_dir($sDir)){
+            $this->_sPagesDir=$sDir;
+            return true;
+        }
+        return false;
+    }
+
+    public function getPage(){
+        $this->_sPageFile=$this->_detectPagefile();
+        ob_start();
+        // echo "$this->_sPagesDir.$this->_sPageFile<br>";
+        if (!@include($this->_sPagesDir.$this->_sPageFile)) {
+            echo "$this->_sPagesDir.$this->_sPageFile<br>";
+            @include($this->_sPagesDir."error_404.php");
+        }
+        $sPhpOut = ob_get_contents();
+        ob_end_clean();
+        return $sPhpOut;
+    }
+}
\ No newline at end of file
diff --git a/public_html/config/navi_left.php b/public_html/config/navi_left.php
new file mode 100644
index 0000000000000000000000000000000000000000..645a61cc429f6d53d6dc8004bc11115f154872cd
--- /dev/null
+++ b/public_html/config/navi_left.php
@@ -0,0 +1,14 @@
+<?php
+
+// icons: https://fontawesome.com/v5/search?o=r&m=free
+
+return [
+    ['href'=>'#',          'label'=>'Menu A', 'icon'=>'fas fa-home' ],
+    ['href'=>'#',          'label'=>'Menu B', 'icon'=>'fas fa-tv'],
+    ['href'=>'#',          'label'=>'Menu C', 'icon'=>'fas fa-truck-pickup',
+        'children'=>[
+            ['href'=>'#',     'label'=>'FAQ'     , 'icon'=>'fas fa-truck-monster'],
+            ['href'=>'#',     'label'=>'Support' , 'icon'=>'fas fa-truck-moving'],
+        ]
+    ]
+];
\ No newline at end of file
diff --git a/public_html/config/navi_top.php b/public_html/config/navi_top.php
new file mode 100644
index 0000000000000000000000000000000000000000..3f48208c4dd0180993e3889403d5cf0630256afc
--- /dev/null
+++ b/public_html/config/navi_top.php
@@ -0,0 +1,15 @@
+<?php
+
+// icons: https://fontawesome.com/v5/search?o=r&m=free
+
+return [
+    ['href'=>'/index.php', 'label'=>'MyHome' , 'icon'=>'fas fa-home', 'class'=>'bg-gray'],
+    ['href'=>'#',          'label'=>'Contact'                                           ],
+    ['href'=>'#',          'label'=>'Help',
+        'children'=>[
+            ['href'=>'#',     'label'=>'FAQ'],
+            ['label'=>'-'],
+            ['href'=>'#',     'label'=>'Support'],
+        ]
+    ]
+];
\ No newline at end of file