Index: src/sas/qtgui/Calculators/DensityPanel.py
===================================================================
--- src/sas/qtgui/Calculators/DensityPanel.py	(revision cd2cc7458970e179039a783e9409f48c4c1fca0d)
+++ src/sas/qtgui/Calculators/DensityPanel.py	(revision b0c5e8c49a3e4e82f4f885ba7ad4d73fb8d6c59f)
@@ -8,4 +8,5 @@
 from sas.qtgui.Utilities.GuiUtils import FormulaValidator
 from sas.qtgui.UI import main_resources_rc
+from sas.qtgui.Utilities.GuiUtils import HELP_DIRECTORY_LOCATION
 
 # Local UI
@@ -148,5 +149,5 @@
     def displayHelp(self):
         try:
-            location = self.manager.HELP_DIRECTORY_LOCATION + \
+            location = HELP_DIRECTORY_LOCATION + \
                 "/user/sasgui/perspectives/calculator/density_calculator_help.html"
 
Index: src/sas/qtgui/Calculators/GenericScatteringCalculator.py
===================================================================
--- src/sas/qtgui/Calculators/GenericScatteringCalculator.py	(revision dc5ef150e8b37e01a3b7e253eb5b66d3b82de99c)
+++ src/sas/qtgui/Calculators/GenericScatteringCalculator.py	(revision b0c5e8c49a3e4e82f4f885ba7ad4d73fb8d6c59f)
@@ -378,5 +378,5 @@
         """
         try:
-            location = self.manager.HELP_DIRECTORY_LOCATION + \
+            location = GuiUtils.HELP_DIRECTORY_LOCATION + \
                        "/user/sasgui/perspectives/calculator/sas_calculator_help.html"
             self.manager._helpView.load(QtCore.QUrl(location))
Index: src/sas/qtgui/Calculators/KiessigPanel.py
===================================================================
--- src/sas/qtgui/Calculators/KiessigPanel.py	(revision cd2cc7458970e179039a783e9409f48c4c1fca0d)
+++ src/sas/qtgui/Calculators/KiessigPanel.py	(revision b0c5e8c49a3e4e82f4f885ba7ad4d73fb8d6c59f)
@@ -4,4 +4,5 @@
 from sas.qtgui.UI import main_resources_rc
 from UI.KiessigPanel import Ui_KiessigPanel
+import sas.qtgui.Utilities.GuiUtils as GuiUtils
 
 # sas-global
@@ -37,5 +38,5 @@
         """
         try:
-            location = self.manager.HELP_DIRECTORY_LOCATION + \
+            location = GuiUtils.HELP_DIRECTORY_LOCATION + \
                 "/user/sasgui/perspectives/calculator/kiessig_calculator_help.html"
 
Index: src/sas/qtgui/Calculators/SldPanel.py
===================================================================
--- src/sas/qtgui/Calculators/SldPanel.py	(revision cd2cc7458970e179039a783e9409f48c4c1fca0d)
+++ src/sas/qtgui/Calculators/SldPanel.py	(revision b0c5e8c49a3e4e82f4f885ba7ad4d73fb8d6c59f)
@@ -7,5 +7,6 @@
 from periodictable.nsf import neutron_scattering
 
-from sas.qtgui.Utilities.GuiUtils import FormulaValidator
+import sas.qtgui.Utilities.GuiUtils as GuiUtils
+
 from sas.qtgui.UI import main_resources_rc
 
@@ -125,5 +126,5 @@
 
         # set validators
-        self.ui.editMolecularFormula.setValidator(FormulaValidator(self.ui.editMolecularFormula))
+        self.ui.editMolecularFormula.setValidator(GuiUtils.FormulaValidator(self.ui.editMolecularFormula))
 
         rx = QtCore.QRegExp("[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?")
@@ -216,5 +217,5 @@
     def displayHelp(self):
         try:
-            location = self.manager.HELP_DIRECTORY_LOCATION + \
+            location = GuiUtils.HELP_DIRECTORY_LOCATION + \
                 "/user/sasgui/perspectives/calculator/sld_calculator_help.html"
             self.manager._helpView.load(QtCore.QUrl(location))
Index: src/sas/qtgui/Calculators/SlitSizeCalculator.py
===================================================================
--- src/sas/qtgui/Calculators/SlitSizeCalculator.py	(revision cd2cc7458970e179039a783e9409f48c4c1fca0d)
+++ src/sas/qtgui/Calculators/SlitSizeCalculator.py	(revision b0c5e8c49a3e4e82f4f885ba7ad4d73fb8d6c59f)
@@ -9,4 +9,5 @@
 
 from sas.qtgui.UI import main_resources_rc
+import sas.qtgui.Utilities.GuiUtils as GuiUtils
 
 from UI.SlitSizeCalculator import Ui_SlitSizeCalculator
@@ -45,5 +46,5 @@
         """
         try:
-            location = self._parent.HELP_DIRECTORY_LOCATION + \
+            location = GuiUtils.HELP_DIRECTORY_LOCATION + \
                 "/user/sasgui/perspectives/calculator/slit_calculator_help.html"
 
Index: src/sas/qtgui/MainWindow/DataExplorer.py
===================================================================
--- src/sas/qtgui/MainWindow/DataExplorer.py	(revision dc5ef150e8b37e01a3b7e253eb5b66d3b82de99c)
+++ src/sas/qtgui/MainWindow/DataExplorer.py	(revision b0c5e8c49a3e4e82f4f885ba7ad4d73fb8d6c59f)
@@ -138,5 +138,5 @@
         Show the "Loading data" section of help
         """
-        tree_location = self.parent.HELP_DIRECTORY_LOCATION +\
+        tree_location = GuiUtils.HELP_DIRECTORY_LOCATION +\
             "/user/sasgui/guiframe/data_explorer_help.html"
         self._helpView.load(QtCore.QUrl(tree_location))
Index: src/sas/qtgui/MainWindow/GuiManager.py
===================================================================
--- src/sas/qtgui/MainWindow/GuiManager.py	(revision 2d0e0c1e4de934db698b53bdbcf78d1630a996ab)
+++ src/sas/qtgui/MainWindow/GuiManager.py	(revision b0c5e8c49a3e4e82f4f885ba7ad4d73fb8d6c59f)
@@ -45,7 +45,4 @@
     Main SasView window functionality
     """
-    ## TODO: CHANGE FOR SHIPPED PATH IN RELEASE
-    HELP_DIRECTORY_LOCATION = "docs/sphinx-docs/build/html"
-
     def __init__(self, parent=None):
         """
@@ -99,8 +96,8 @@
         self._helpView = QtWebKit.QWebView()
         # Needs URL like path, so no path.join() here
-        self._helpLocation = self.HELP_DIRECTORY_LOCATION + "/index.html"
+        self._helpLocation = GuiUtils.HELP_DIRECTORY_LOCATION + "/index.html"
 
         # Current tutorial location
-        self._tutorialLocation = os.path.abspath(os.path.join(self.HELP_DIRECTORY_LOCATION,
+        self._tutorialLocation = os.path.abspath(os.path.join(GuiUtils.HELP_DIRECTORY_LOCATION,
                                               "_downloads",
                                               "Tutorial.pdf"))
Index: src/sas/qtgui/Perspectives/Fitting/FittingOptions.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingOptions.py	(revision 2d0e0c1e4de934db698b53bdbcf78d1630a996ab)
+++ src/sas/qtgui/Perspectives/Fitting/FittingOptions.py	(revision b0c5e8c49a3e4e82f4f885ba7ad4d73fb8d6c59f)
@@ -2,4 +2,6 @@
 import sys
 import os
+import types
+
 from PyQt4 import QtCore
 from PyQt4 import QtGui
@@ -8,5 +10,6 @@
 from sas.qtgui.UI import images_rc
 from sas.qtgui.UI import main_resources_rc
-#from bumps.fitters import FITTERS, FIT_AVAILABLE_IDS, FIT_ACTIVE_IDS, FIT_DEFAULT_ID
+import sas.qtgui.Utilities.GuiUtils as GuiUtils
+
 from bumps import fitters
 import bumps.options
@@ -31,5 +34,5 @@
         settings = [('steps', 1000), ('starts', 1), ('radius', 0.15), ('xtol', 1e-6), ('ftol', 1e-8)]
     """
-    fit_option_changed = QtCore.pyqtSignal(str, dict)
+    fit_option_changed = QtCore.pyqtSignal(str)
 
     def __init__(self, parent=None, config=None):
@@ -49,4 +52,6 @@
         # Handle the Apply button click
         self.buttonBox.button(QtGui.QDialogButtonBox.Ok).clicked.connect(self.onApply)
+        # handle the Help button click
+        self.buttonBox.button(QtGui.QDialogButtonBox.Help).clicked.connect(self.onHelp)
 
         # Handle the combo box changes
@@ -57,8 +62,30 @@
         default_index = self.cbAlgorithm.findText(default_name)
         self.cbAlgorithm.setCurrentIndex(default_index)
+
+        # Assign appropriate validators
+        self.assignValidators()
+
         self.current_fitter_id = fitters.FIT_DEFAULT_ID
 
-        # Fill in options for all active fitters
-        #[self.updateWidgetFromBumps(fitter_id) for fitter_id in fitters.FIT_ACTIVE_IDS]
+        # Display HTML content
+        self.helpView = QtWebKit.QWebView()
+
+    def assignValidators(self):
+        """
+        Use options.FIT_FIELDS to assert which line edit gets what validator
+        """
+        for option in bumps.options.FIT_FIELDS.iterkeys():
+            (f_name, f_type) = bumps.options.FIT_FIELDS[option]
+            validator = None
+            if type(f_type) == types.FunctionType:
+                validator = QtGui.QIntValidator()
+            elif f_type == types.FloatType:
+                validator = QtGui.QDoubleValidator()
+            else:
+                continue
+            for fitter_id in fitters.FIT_ACTIVE_IDS:
+                line_edit = self.widgetFromOption(str(option), current_fitter=str(fitter_id))
+                if hasattr(line_edit, 'setValidator') and validator is not None:
+                    line_edit.setValidator(validator)
 
     def onAlgorithmChange(self, index):
@@ -75,31 +102,56 @@
         # Convert the name into widget instance
         widget_to_activate = eval(widget_name)
+        index_for_this_id = self.stackedWidget.indexOf(widget_to_activate)
 
         # Select the requested widget
-        self.stackedWidget.setCurrentIndex(self.stackedWidget.indexOf(widget_to_activate))
+        self.stackedWidget.setCurrentIndex(index_for_this_id)
 
         self.updateWidgetFromBumps(self.current_fitter_id)
 
+        self.assignValidators()
+
     def onApply(self):
         """
-        Update the fitter object in perspective
+        Update the fitter object
         """
-        self.fit_option_changed.emit(self.cbAlgorithm.currentText(), {})
+        # Notify the perspective, so the window title is updated
+        self.fit_option_changed.emit(self.cbAlgorithm.currentText())
 
-        # or just do it locally
-        for option in self.config.values[self.current_fitter_id].iterkeys():
+        def bumpsUpdate(option):
+            """
+            Utility method for bumps state update
+            """
             widget = self.widgetFromOption(option)
-            new_value = ""
-            if isinstance(widget, QtGui.QComboBox):
-                new_value = widget.currentText()
-            else:
-                new_value = float(widget.text())
+            new_value = widget.currentText() if isinstance(widget, QtGui.QComboBox) \
+                else float(widget.text())
             self.config.values[self.current_fitter_id][option] = new_value
 
-    def widgetFromOption(self, option_id):
+        # Update the BUMPS singleton
+        [bumpsUpdate(o) for o in self.config.values[self.current_fitter_id].iterkeys()]
+
+    def onHelp(self):
+        """
+        Show the "Fitting options" section of help
+        """
+        tree_location = GuiUtils.HELP_DIRECTORY_LOCATION + "/user/sasgui/perspectives/fitting/"
+
+        # Actual file anchor will depend on the combo box index
+        # Note that we can be clusmy here, since bad current_fitter_id
+        # will just make the page displayed from the top
+        helpfile = "optimizer.html#fit-" + self.current_fitter_id 
+        help_location = tree_location + helpfile
+        self.helpView.load(QtCore.QUrl(help_location))
+        self.helpView.show()
+
+    def widgetFromOption(self, option_id, current_fitter=None):
         """
         returns widget's element linked to the given option_id
         """
-        return eval('self.' + option_id + '_' + self.current_fitter_id)
+        if current_fitter is None:
+            current_fitter = self.current_fitter_id
+        if option_id not in bumps.options.FIT_FIELDS.keys(): return None
+        option = option_id + '_' + current_fitter
+        if not hasattr(self, option): return None
+        return eval('self.' + option)
 
     def getResults(self):
@@ -127,10 +179,2 @@
 
         pass
-
-    def updateBumpsOptions(self, optimizer_id):
-        """
-        Given the ID of the optimizer, gather widget's values
-        and update the bumps options
-        """
-        pass
-
Index: src/sas/qtgui/Perspectives/Fitting/FittingPerspective.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingPerspective.py	(revision 2d0e0c1e4de934db698b53bdbcf78d1630a996ab)
+++ src/sas/qtgui/Perspectives/Fitting/FittingPerspective.py	(revision b0c5e8c49a3e4e82f4f885ba7ad4d73fb8d6c59f)
@@ -159,13 +159,11 @@
                 self.addFit(data)
 
-    def onFittingOptionsChange(self, fit_engine, fit_options):
+    def onFittingOptionsChange(self, fit_engine):
         """
+        React to the fitting algorithm change by modifying window title
         """
         fitter = [f.id for f in options.FITTERS if f.name == str(fit_engine)][0]
-
         # set the optimizer
         self.fit_options.selected_id = str(fitter)
-        # set the options
-        #
         # Update the title
         self.updateWindowTitle()
Index: src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 144ec83119d80e9a09c96f46d8e3678d441f796c)
+++ src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision b0c5e8c49a3e4e82f4f885ba7ad4d73fb8d6c59f)
@@ -522,5 +522,5 @@
         Show the "Fitting" section of help
         """
-        tree_location = self.parent.HELP_DIRECTORY_LOCATION + "/user/sasgui/perspectives/fitting/"
+        tree_location = GuiUtils.HELP_DIRECTORY_LOCATION + "/user/sasgui/perspectives/fitting/"
 
         # Actual file will depend on the current tab
Index: src/sas/qtgui/Perspectives/Fitting/UI/FittingOptionsUI.ui
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/UI/FittingOptionsUI.ui	(revision 2d0e0c1e4de934db698b53bdbcf78d1630a996ab)
+++ src/sas/qtgui/Perspectives/Fitting/UI/FittingOptionsUI.ui	(revision b0c5e8c49a3e4e82f4f885ba7ad4d73fb8d6c59f)
@@ -7,6 +7,6 @@
     <x>0</x>
     <y>0</y>
-    <width>503</width>
-    <height>672</height>
+    <width>440</width>
+    <height>538</height>
    </rect>
   </property>
@@ -27,4 +27,10 @@
       <item row="0" column="0">
        <widget class="QComboBox" name="cbAlgorithm">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
         <property name="sizeAdjustPolicy">
          <enum>QComboBox::AdjustToContents</enum>
Index: src/sas/qtgui/Perspectives/Fitting/UnitTesting/FittingOptionsTest.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/UnitTesting/FittingOptionsTest.py	(revision b0c5e8c49a3e4e82f4f885ba7ad4d73fb8d6c59f)
+++ src/sas/qtgui/Perspectives/Fitting/UnitTesting/FittingOptionsTest.py	(revision b0c5e8c49a3e4e82f4f885ba7ad4d73fb8d6c59f)
@@ -0,0 +1,160 @@
+import sys
+import unittest
+from bumps import options
+
+from PyQt4 import QtGui
+from PyQt4 import QtWebKit
+
+from mock import MagicMock
+
+# set up import paths
+import path_prepare
+
+from UnitTesting.TestUtils import QtSignalSpy
+
+# Local
+from sas.qtgui.Perspectives.Fitting.FittingOptions import FittingOptions
+
+app = QtGui.QApplication(sys.argv)
+
+class FittingOptionsTest(unittest.TestCase):
+    '''Test the FittingOptions dialog'''
+    def setUp(self):
+        '''Create FittingOptions dialog'''
+        self.widget = FittingOptions(None, config=options.FIT_CONFIG)
+
+    def tearDown(self):
+        '''Destroy the GUI'''
+        self.widget.close()
+        self.widget = None
+
+    def testDefaults(self):
+        '''Test the GUI in its default state'''
+        self.assertIsInstance(self.widget, QtGui.QDialog)
+        # Default title
+        self.assertEqual(self.widget.windowTitle(), "Fitting Options")
+
+        # The combo box
+        self.assertIsInstance(self.widget.cbAlgorithm, QtGui.QComboBox)
+        self.assertEqual(self.widget.cbAlgorithm.count(), 5)
+        self.assertEqual(self.widget.cbAlgorithm.itemText(0), 'Nelder-Mead Simplex')
+        self.assertEqual(self.widget.cbAlgorithm.itemText(4), 'Levenberg-Marquardt')
+        self.assertEqual(self.widget.cbAlgorithm.currentIndex(), 4)
+
+    def testAssignValidators(self):
+        """
+        Check that line edits got correct validators
+        """
+        # Can't reliably test the method in action, but can easily check the results
+        
+        # DREAM
+        self.assertIsInstance(self.widget.samples_dream.validator(), QtGui.QIntValidator)
+        self.assertIsInstance(self.widget.burn_dream.validator(), QtGui.QIntValidator)
+        self.assertIsInstance(self.widget.pop_dream.validator(), QtGui.QDoubleValidator)
+        self.assertIsInstance(self.widget.thin_dream.validator(), QtGui.QIntValidator)
+        self.assertIsInstance(self.widget.steps_dream.validator(), QtGui.QIntValidator)
+        # DE
+        self.assertIsInstance(self.widget.steps_de.validator(), QtGui.QIntValidator)
+        self.assertIsInstance(self.widget.CR_de.validator(), QtGui.QDoubleValidator)
+        self.assertIsInstance(self.widget.pop_de.validator(), QtGui.QDoubleValidator)
+        self.assertIsInstance(self.widget.F_de.validator(), QtGui.QDoubleValidator)
+        self.assertIsInstance(self.widget.ftol_de.validator(), QtGui.QDoubleValidator)
+        self.assertIsInstance(self.widget.xtol_de.validator(), QtGui.QDoubleValidator)
+
+    def testOnAlgorithmChange(self):
+        '''Test the combo box change callback'''
+        # Current ID
+        self.assertEqual(self.widget.current_fitter_id, 'lm')
+        # index = 0
+        self.widget.onAlgorithmChange(0)
+        # Check Nelder-Mead
+        self.assertEqual(self.widget.stackedWidget.currentIndex(), 1)
+        self.assertEqual(self.widget.current_fitter_id, 'lm')
+
+        # index = 4
+        self.widget.onAlgorithmChange(4)
+        # Check Levenberg-Marquad
+        self.assertEqual(self.widget.stackedWidget.currentIndex(), 1)
+        self.assertEqual(self.widget.current_fitter_id, 'lm')
+
+    def testOnApply(self):
+        '''Test bumps update'''
+        # Spy on the update signal
+        spy_apply = QtSignalSpy(self.widget, self.widget.fit_option_changed)
+
+        # Set the DREAM optimizer
+        self.widget.cbAlgorithm.setCurrentIndex(2)
+        # Change some values
+        self.widget.init_dream.setCurrentIndex(2)
+        self.widget.steps_dream.setText("50")
+        # Apply the new values
+        self.widget.onApply()
+
+        self.assertEqual(spy_apply.count(), 1)
+        self.assertIn('DREAM', spy_apply.called()[0]['args'][0])
+
+        # Check the parameters
+        self.assertEqual(options.FIT_CONFIG.values['dream']['steps'], 50.0)
+        self.assertEqual(options.FIT_CONFIG.values['dream']['init'], 'cov')
+
+    def testOnHelp(self):
+        ''' Test help display'''
+        #Mock the QWebView method
+        QtWebKit.QWebView.show = MagicMock()
+        QtWebKit.QWebView.load = MagicMock()
+
+        # Invoke the action on default tab
+        self.widget.onHelp()
+        # Check if show() got called
+        self.assertTrue(QtWebKit.QWebView.show.called)
+        # Assure the filename is correct
+        self.assertIn("optimizer.html", QtWebKit.QWebView.load.call_args[0][0].toString())
+
+        # Change the combo index
+        self.widget.cbAlgorithm.setCurrentIndex(2)
+        self.widget.onHelp()
+        # Check if show() got called
+        self.assertEqual(QtWebKit.QWebView.show.call_count, 2)
+        # Assure the filename is correct
+        self.assertIn("fit-dream", QtWebKit.QWebView.load.call_args[0][0].toString())
+
+        # Change the index again
+        self.widget.cbAlgorithm.setCurrentIndex(4)
+        self.widget.onHelp()
+        # Check if show() got called
+        self.assertEqual(QtWebKit.QWebView.show.call_count, 3)
+        # Assure the filename is correct
+        self.assertIn("fit-lm", QtWebKit.QWebView.load.call_args[0][0].toString())
+
+    def testWidgetFromOptions(self):
+        '''Test the helper function'''
+        # test empty call
+        self.assertIsNone(self.widget.widgetFromOption(None))
+        # test silly call
+        self.assertIsNone(self.widget.widgetFromOption('poop'))
+        self.assertIsNone(self.widget.widgetFromOption(QtGui.QMainWindow()))
+
+        # Switch to DREAM
+        self.widget.cbAlgorithm.setCurrentIndex(2)
+        # test smart call
+        self.assertIsInstance(self.widget.widgetFromOption('samples'), QtGui.QLineEdit)
+        self.assertIsInstance(self.widget.widgetFromOption('init'), QtGui.QComboBox)
+
+    def testUpdateWidgetFromBumps(self):
+        '''Test the widget update'''
+        # modify some value
+        options.FIT_CONFIG.values['newton']['steps'] = 1234
+        options.FIT_CONFIG.values['newton']['starts'] = 666
+        options.FIT_CONFIG.values['newton']['xtol'] = 0.01
+
+        # Invoke the method for the changed 
+        self.widget.updateWidgetFromBumps('newton')
+
+        # See that the widget picked up the right values
+        self.assertEqual(self.widget.steps_newton.text(), '1234')
+        self.assertEqual(self.widget.starts_newton.text(), '666')
+        self.assertEqual(self.widget.ftol_newton.text(), '1e-06') # default
+        self.assertEqual(self.widget.xtol_newton.text(), '0.01')
+
+if __name__ == "__main__":
+    unittest.main()
Index: src/sas/qtgui/Perspectives/Invariant/InvariantPerspective.py
===================================================================
--- src/sas/qtgui/Perspectives/Invariant/InvariantPerspective.py	(revision dc5ef150e8b37e01a3b7e253eb5b66d3b82de99c)
+++ src/sas/qtgui/Perspectives/Invariant/InvariantPerspective.py	(revision b0c5e8c49a3e4e82f4f885ba7ad4d73fb8d6c59f)
@@ -368,5 +368,5 @@
         """
         """
-        _TreeLocation = self._manager.HELP_DIRECTORY_LOCATION + \
+        _TreeLocation = GuiUtils.HELP_DIRECTORY_LOCATION + \
             "/user/sasgui/perspectives/invariant/invariant_help.html"
         self._helpView.load(QtCore.QUrl(_TreeLocation))
Index: src/sas/qtgui/Utilities/GuiUtils.py
===================================================================
--- src/sas/qtgui/Utilities/GuiUtils.py	(revision dc5ef150e8b37e01a3b7e253eb5b66d3b82de99c)
+++ src/sas/qtgui/Utilities/GuiUtils.py	(revision b0c5e8c49a3e4e82f4f885ba7ad4d73fb8d6c59f)
@@ -94,4 +94,7 @@
 PATH_APP = get_app_dir()
 DATAPATH = PATH_APP
+
+## TODO: CHANGE FOR SHIPPED PATH IN RELEASE
+HELP_DIRECTORY_LOCATION = "docs/sphinx-docs/build/html"
 
 # GUI always starts from the App folder
