diff --git a/public_html/deployment/classes/build.interface.php b/public_html/deployment/classes/build.interface.php
new file mode 100644
index 0000000000000000000000000000000000000000..d91037d109a0c1f3a74e19920a8d6fec01e25f84
--- /dev/null
+++ b/public_html/deployment/classes/build.interface.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * INTERFACE for rollout plugins
+ * 
+ * @author hahn
+ */
+interface iBuildplugin {
+
+    // ----------------------------------------------------------------------
+    // VERIFY
+    // ----------------------------------------------------------------------
+    
+    /**
+     * check requirements if the plugin could work
+    public function checkRequirements();
+     */
+
+    /**
+     * get an array with shell commands to execute
+     * @return array
+     */
+    public function getBuildCommands();
+
+    /**
+     * get name of plugin as string ... language specific
+    public function getName();
+     */
+    
+    /**
+     * get description of plugin as string ... language specific
+    public function getDescription();
+     */
+    
+    /**
+     * get array of data in info.js
+    public function getPluginInfos();
+     */
+
+    
+}
+
diff --git a/public_html/deployment/classes/build_base.class.php b/public_html/deployment/classes/build_base.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..29f22c1547c75028771be0b1299f8565af079f8a
--- /dev/null
+++ b/public_html/deployment/classes/build_base.class.php
@@ -0,0 +1,208 @@
+<?php
+require_once 'build.interface.php';
+
+/**
+ * build_base class that will be extended in a rollout plugin
+ * see deployment/plugins/build/*
+ * 
+ * @author axel
+ */
+class build_base implements iBuildplugin{
+    
+    protected $_sBuildDir = false;
+    protected $_sOutfile = false;
+
+    protected $_sLang = "en";
+    protected $_aLang = [];
+
+
+    // ---------------------------------------------------------------
+    // CONSTRUCTOR
+    // ---------------------------------------------------------------
+
+    /**
+     * initialize build plugin
+     * @param array $aParams  hash with those possible keys
+     *                  lang         string   language, i.e. 'de'
+     *                  phase        string   name of phase in a project
+     *                  globalcfg    array    given global config $aConfig
+     *                  projectcfg   array    project config to generate config 
+     *                                        for project and all phases
+     * @return boolean
+     */
+    public function __construct($aParams) {
+        
+        // set current plugin id - taken from plugin directory name above
+        $oReflection=new ReflectionClass($this);
+        $this->_sPluginId=basename(dirname($oReflection->getFileName()));
+   
+        // ----- init language
+        if (isset($aParams['lang'])){
+            $this->setLang($aParams['lang']);
+        } else {
+            $this->setLang();
+        }
+        if (isset($aParams['workdir'])){
+            $this->setWorkdir($aParams['workdir']);
+        }
+        if (isset($aParams['outfile'])){
+            $this->setOutfile($aParams['outfile']);
+        }
+
+        return true;
+    }
+    
+    // ---------------------------------------------------------------
+    // LANGUAGE TEXTS
+    // ---------------------------------------------------------------
+    
+    /**
+     * get a translated text from lang_XX.json in plugin dir;
+     * If the key is missed it returns "[KEY :: LANG]"
+     * 
+     * @see setLang()
+     * @param string $sKey  key to find in lang file
+     * @return string
+     */
+    protected function _t($sKey){
+        return (isset($this->_aLang[$sKey]) && $this->_aLang[$sKey])
+                ? $this->_aLang[$sKey]
+                : "[ $sKey :: $this->_sLang ]"
+        ;
+    }
+
+    /**
+     * set language for output of formdata and other texts.
+     * This method loads the language file into a hash. The output of 
+     * translated texts can be done with $this->_t("your_key")
+     * 
+     * @see _t()
+     * @param string   $sLang  language code, i.e. "de"
+     * @return boolean
+     */
+    public function setLang($sLang=false){
+        $this->_sLang=$sLang ? $sLang : $this->_sLang;
+        
+        $oReflection=new ReflectionClass($this);
+        $sFile=dirname($oReflection->getFileName()) . '/lang_'.$this->_sLang.'.json';
+        $this->_aLang=(file_exists($sFile)) ? json_decode(file_get_contents($sFile), 1) : $this->_aLang;
+        return true;
+    }
+    // ---------------------------------------------------------------
+    // SETTER
+    // ---------------------------------------------------------------
+
+
+    /**
+     * set build dir with sources
+     * @param  string  $sBuildDir     full path of the build directory
+     * @return array
+     */
+    public function setWorkdir($sBuildDir){
+        return $this->_sBuildDir=$sBuildDir ? $sBuildDir : $this->_sBuildDir;
+    }
+
+    /**
+     * set outfile name
+     * @param  string  $sOutFilename  filename for output (without extension)
+     * @return array
+     */
+    public function setOutfile($sOutFilename){
+        return $this->_sOutfile=$sOutFilename ? $sOutFilename.$this->getExtension() : $this->_sOutfile;
+    }
+
+
+    // ---------------------------------------------------------------
+    // GETTER
+    // ---------------------------------------------------------------
+
+    /**
+     * get an array with shell commands to execute
+     * @param  string  $sBuildDir     full path of the build directory
+     * @param  string  $sOutFilename  filename for output 
+     * @return array
+     */
+    public function getBuildCommands(){
+        return [
+            'echo "ERROR: The method getBuildCommamds() was not implemented in the build plugin ['.$this->getId().']"',
+            'exit 1'
+            ];
+    }
+    
+    /**
+     * get string with current ID
+     * @return string
+     */
+    public function getId(){
+        return $this->_sPluginId;
+    }
+    
+    /**
+     * get string with plugin name (taken from plugin language file)
+     * @return string
+     */
+    public function getName(){
+        return $this->_t('plugin_name');
+    }
+    
+    /**
+     * get string with plugin description (taken from plugin language file)
+     * @return string
+     */
+    public function getDescription(){
+        return $this->_t('description');
+    }
+    /**
+     * get array read from info.json
+     * @return type
+     */
+    public function getPluginInfos(){
+
+        if ($this->_aPlugininfos){
+            return $this->_aPlugininfos;
+        }
+        
+        $oReflection=new ReflectionClass($this);
+        $sFile=dirname($oReflection->getFileName()) . '/info.json';
+        $this->_aPlugininfos= (file_exists($sFile))
+            ? json_decode(file_get_contents($sFile), 1)
+            : array('error'=> 'unable to read info file ['.$sFile.'].')
+        ;
+        return $this->_aPlugininfos;
+    }
+
+    /**
+     * get the file extension of created output file (from plugin info.json)
+     */
+    public function getExtension(){
+        $aInfos=$this->getPluginInfos();
+        return isset($aInfos['extenmsion']) ? '.'.$aInfos['extenmsion'] : '';
+    }
+    /**
+     * set outfile name
+     * @param  string  $sOutFilename  filename for output (without extension)
+     * @return array
+     */
+    public function getOutfile(){
+        return $this->_sOutfile;
+    }
+    /**
+     * set outfile name
+     * @param  string  $sOutFilename  filename for output (without extension)
+     * @return array
+     */
+    public function getBuildDir(){
+        return $this->_sBuildDir;
+    }
+
+    // ----------------------------------------------------------------------
+    // INTERFACE :: RENDERER
+    // ----------------------------------------------------------------------
+    public function renderPluginBox(){
+        $sReturn='';        
+        $aInfos=$this->getPluginInfos();
+
+        return '<strong>'.$this->getName().'</strong> ('.$this->getId().')<br>
+                '.$this->getDescription();
+    }
+}