diff --git a/.gitignore b/.gitignore
index 7d2fcdc4735e9fdbf5bd3aff9109a7a96b8001a7..c086e1589ed48917aa621f8295aaf36bc2f99ce9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -111,7 +111,6 @@ _b_asic_debug_log.txt
 .qt_for_python/
 *.pyproject.user
 *.pyproject
-ui_*.py
 TODO.txt
 *.log
 b_asic/_version.py
diff --git a/b_asic/scheduler_gui/compile.py b/b_asic/scheduler_gui/compile.py
index d7ae14add4fb1329bbdd282b0519754ae2a0216b..29fe65767367193da8732a71ea1c5cf7bad68e3b 100644
--- a/b_asic/scheduler_gui/compile.py
+++ b/b_asic/scheduler_gui/compile.py
@@ -13,12 +13,14 @@ import os
 import shutil
 import subprocess
 import argparse
-from b_asic.scheduler_gui._version import __version__
-import b_asic.scheduler_gui.logger as logger
-
-log = logger.getLogger()
-sys.excepthook = logger.handle_exceptions
+from setuptools_scm import get_version
 
+try:
+    import b_asic.scheduler_gui.logger as logger
+    log = logger.getLogger()
+    sys.excepthook = logger.handle_exceptions
+except ModuleNotFoundError:
+    log = None
 
 def _check_filenames(*filenames: str) -> None:
     """Check if the filename(s) exist, otherwise raise FileNotFoundError
@@ -68,16 +70,25 @@ def compile_rc(*filenames: str) -> None:
 
         elif os_.startswith("win32"):  # Windows
             # TODO: implement
-            log.error('Windows RC compiler not implemented')
+            if log is not None:
+                log.error('Windows RC compiler not implemented')
+            else:
+                print('Windows RC compiler not implemented')
             raise NotImplementedError
 
         elif os_.startswith("darwin"):  # macOS
             # TODO: implement
-            log.error('macOS RC compiler not implemented')
+            if log is not None:
+                log.error('macOS RC compiler not implemented')
+            else:
+                print('macOS RC compiler not implemented')
             raise NotImplementedError
 
         else:  # other OS
-            log.error(f'{os_} RC compiler not supported')
+            if log is not None:
+                log.error(f'{os_} RC compiler not supported')
+            else:
+                print(f'{os_} RC compiler not supported')
             raise NotImplementedError
 
         replace_qt_bindings(outfile)  # replace qt-bindings with qtpy
@@ -169,9 +180,12 @@ if __name__ == '__main__':
     parser = argparse.ArgumentParser(description=f'{__doc__}',
                                      formatter_class=argparse.RawTextHelpFormatter)
 
+
+    version = get_version(root='../..', relative_to=__file__)
+
     parser.add_argument('-v', '--version',
                         action='version',
-                        version=f'%(prog)s v{__version__}')
+                        version=f'%(prog)s v{version}')
 
     if sys.version_info >= (3, 8):
         parser.add_argument('--ui',
diff --git a/b_asic/scheduler_gui/ui_main_window.py b/b_asic/scheduler_gui/ui_main_window.py
new file mode 100644
index 0000000000000000000000000000000000000000..b84799fa7357bdbec36a6ab87d754ac6701dc2ac
--- /dev/null
+++ b/b_asic/scheduler_gui/ui_main_window.py
@@ -0,0 +1,213 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file './main_window.ui'
+#
+# Created by: PyQt5 UI code generator 5.15.7
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from qtpy import QtCore, QtGui, QtWidgets
+
+
+class Ui_MainWindow(object):
+    def setupUi(self, MainWindow):
+        MainWindow.setObjectName("MainWindow")
+        MainWindow.resize(800, 600)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
+        MainWindow.setSizePolicy(sizePolicy)
+        icon = QtGui.QIcon()
+        icon.addPixmap(QtGui.QPixmap(":/icons/basic/small_logo.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        MainWindow.setWindowIcon(icon)
+        self.centralwidget = QtWidgets.QWidget(MainWindow)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.centralwidget.sizePolicy().hasHeightForWidth())
+        self.centralwidget.setSizePolicy(sizePolicy)
+        self.centralwidget.setObjectName("centralwidget")
+        self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget)
+        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
+        self.horizontalLayout.setSpacing(0)
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.splitter = QtWidgets.QSplitter(self.centralwidget)
+        self.splitter.setOrientation(QtCore.Qt.Horizontal)
+        self.splitter.setHandleWidth(0)
+        self.splitter.setObjectName("splitter")
+        self.view = QtWidgets.QGraphicsView(self.splitter)
+        self.view.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
+        self.view.setRenderHints(QtGui.QPainter.HighQualityAntialiasing|QtGui.QPainter.TextAntialiasing)
+        self.view.setViewportUpdateMode(QtWidgets.QGraphicsView.FullViewportUpdate)
+        self.view.setObjectName("view")
+        self.info_table = QtWidgets.QTableWidget(self.splitter)
+        self.info_table.setStyleSheet("alternate-background-color: #fadefb;background-color: #ebebeb;")
+        self.info_table.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
+        self.info_table.setAlternatingRowColors(True)
+        self.info_table.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
+        self.info_table.setRowCount(2)
+        self.info_table.setColumnCount(2)
+        self.info_table.setObjectName("info_table")
+        item = QtWidgets.QTableWidgetItem()
+        self.info_table.setVerticalHeaderItem(0, item)
+        item = QtWidgets.QTableWidgetItem()
+        self.info_table.setVerticalHeaderItem(1, item)
+        item = QtWidgets.QTableWidgetItem()
+        item.setTextAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignVCenter)
+        self.info_table.setHorizontalHeaderItem(0, item)
+        item = QtWidgets.QTableWidgetItem()
+        item.setTextAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignVCenter)
+        self.info_table.setHorizontalHeaderItem(1, item)
+        item = QtWidgets.QTableWidgetItem()
+        font = QtGui.QFont()
+        font.setBold(True)
+        font.setWeight(75)
+        item.setFont(font)
+        brush = QtGui.QBrush(QtGui.QColor(160, 160, 164))
+        brush.setStyle(QtCore.Qt.SolidPattern)
+        item.setBackground(brush)
+        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
+        brush.setStyle(QtCore.Qt.SolidPattern)
+        item.setForeground(brush)
+        item.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEditable|QtCore.Qt.ItemIsDragEnabled|QtCore.Qt.ItemIsDropEnabled|QtCore.Qt.ItemIsUserCheckable)
+        self.info_table.setItem(0, 0, item)
+        item = QtWidgets.QTableWidgetItem()
+        font = QtGui.QFont()
+        font.setBold(True)
+        font.setWeight(75)
+        item.setFont(font)
+        brush = QtGui.QBrush(QtGui.QColor(160, 160, 164))
+        brush.setStyle(QtCore.Qt.SolidPattern)
+        item.setBackground(brush)
+        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
+        brush.setStyle(QtCore.Qt.SolidPattern)
+        item.setForeground(brush)
+        item.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEditable|QtCore.Qt.ItemIsDragEnabled|QtCore.Qt.ItemIsDropEnabled|QtCore.Qt.ItemIsUserCheckable)
+        self.info_table.setItem(1, 0, item)
+        self.info_table.horizontalHeader().setHighlightSections(False)
+        self.info_table.horizontalHeader().setStretchLastSection(True)
+        self.info_table.verticalHeader().setVisible(False)
+        self.info_table.verticalHeader().setDefaultSectionSize(19)
+        self.horizontalLayout.addWidget(self.splitter)
+        MainWindow.setCentralWidget(self.centralwidget)
+        self.menubar = QtWidgets.QMenuBar(MainWindow)
+        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 20))
+        self.menubar.setObjectName("menubar")
+        self.menuFile = QtWidgets.QMenu(self.menubar)
+        self.menuFile.setObjectName("menuFile")
+        self.menuView = QtWidgets.QMenu(self.menubar)
+        self.menuView.setObjectName("menuView")
+        self.menu_Edit = QtWidgets.QMenu(self.menubar)
+        self.menu_Edit.setObjectName("menu_Edit")
+        self.menuWindow = QtWidgets.QMenu(self.menubar)
+        self.menuWindow.setObjectName("menuWindow")
+        MainWindow.setMenuBar(self.menubar)
+        self.statusbar = QtWidgets.QStatusBar(MainWindow)
+        self.statusbar.setObjectName("statusbar")
+        MainWindow.setStatusBar(self.statusbar)
+        self.toolBar = QtWidgets.QToolBar(MainWindow)
+        self.toolBar.setObjectName("toolBar")
+        MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
+        self.menu_load_from_file = QtWidgets.QAction(MainWindow)
+        icon = QtGui.QIcon.fromTheme("document-open-folder")
+        self.menu_load_from_file.setIcon(icon)
+        self.menu_load_from_file.setStatusTip("")
+        self.menu_load_from_file.setObjectName("menu_load_from_file")
+        self.menu_save = QtWidgets.QAction(MainWindow)
+        self.menu_save.setEnabled(False)
+        icon = QtGui.QIcon.fromTheme("document-save")
+        self.menu_save.setIcon(icon)
+        self.menu_save.setObjectName("menu_save")
+        self.menu_node_info = QtWidgets.QAction(MainWindow)
+        self.menu_node_info.setCheckable(True)
+        self.menu_node_info.setChecked(True)
+        icon1 = QtGui.QIcon()
+        icon1.addPixmap(QtGui.QPixmap(":/icons/misc/right_panel.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        icon1.addPixmap(QtGui.QPixmap(":/icons/misc/right_filled_panel.svg"), QtGui.QIcon.Normal, QtGui.QIcon.On)
+        self.menu_node_info.setIcon(icon1)
+        self.menu_node_info.setIconVisibleInMenu(False)
+        self.menu_node_info.setObjectName("menu_node_info")
+        self.menu_quit = QtWidgets.QAction(MainWindow)
+        icon = QtGui.QIcon.fromTheme("application-exit")
+        self.menu_quit.setIcon(icon)
+        self.menu_quit.setObjectName("menu_quit")
+        self.menu_save_as = QtWidgets.QAction(MainWindow)
+        self.menu_save_as.setEnabled(False)
+        icon = QtGui.QIcon.fromTheme("document-save-as")
+        self.menu_save_as.setIcon(icon)
+        self.menu_save_as.setObjectName("menu_save_as")
+        self.menu_exit_dialog = QtWidgets.QAction(MainWindow)
+        self.menu_exit_dialog.setCheckable(True)
+        icon = QtGui.QIcon.fromTheme("view-close")
+        self.menu_exit_dialog.setIcon(icon)
+        self.menu_exit_dialog.setObjectName("menu_exit_dialog")
+        self.actionT = QtWidgets.QAction(MainWindow)
+        self.actionT.setObjectName("actionT")
+        self.menu_close_schedule = QtWidgets.QAction(MainWindow)
+        self.menu_close_schedule.setEnabled(False)
+        icon = QtGui.QIcon.fromTheme("view-close")
+        self.menu_close_schedule.setIcon(icon)
+        self.menu_close_schedule.setObjectName("menu_close_schedule")
+        self.menuFile.addAction(self.menu_load_from_file)
+        self.menuFile.addAction(self.menu_close_schedule)
+        self.menuFile.addAction(self.menu_save)
+        self.menuFile.addAction(self.menu_save_as)
+        self.menuFile.addSeparator()
+        self.menuFile.addAction(self.menu_quit)
+        self.menuView.addAction(self.menu_node_info)
+        self.menuWindow.addAction(self.menu_exit_dialog)
+        self.menubar.addAction(self.menuFile.menuAction())
+        self.menubar.addAction(self.menu_Edit.menuAction())
+        self.menubar.addAction(self.menuView.menuAction())
+        self.menubar.addAction(self.menuWindow.menuAction())
+        self.toolBar.addAction(self.menu_load_from_file)
+        self.toolBar.addAction(self.menu_save)
+        self.toolBar.addAction(self.menu_save_as)
+        self.toolBar.addSeparator()
+        self.toolBar.addAction(self.menu_node_info)
+        self.toolBar.addAction(self.actionT)
+
+        self.retranslateUi(MainWindow)
+        QtCore.QMetaObject.connectSlotsByName(MainWindow)
+
+    def retranslateUi(self, MainWindow):
+        _translate = QtCore.QCoreApplication.translate
+        item = self.info_table.verticalHeaderItem(0)
+        item.setText(_translate("MainWindow", "1"))
+        item = self.info_table.verticalHeaderItem(1)
+        item.setText(_translate("MainWindow", "2"))
+        item = self.info_table.horizontalHeaderItem(0)
+        item.setText(_translate("MainWindow", "Property"))
+        item = self.info_table.horizontalHeaderItem(1)
+        item.setText(_translate("MainWindow", "Value"))
+        __sortingEnabled = self.info_table.isSortingEnabled()
+        self.info_table.setSortingEnabled(False)
+        item = self.info_table.item(0, 0)
+        item.setText(_translate("MainWindow", "Schedule"))
+        item = self.info_table.item(1, 0)
+        item.setText(_translate("MainWindow", "Operator"))
+        self.info_table.setSortingEnabled(__sortingEnabled)
+        self.menuFile.setTitle(_translate("MainWindow", "&File"))
+        self.menuView.setTitle(_translate("MainWindow", "&View"))
+        self.menu_Edit.setTitle(_translate("MainWindow", "&Edit"))
+        self.menuWindow.setTitle(_translate("MainWindow", "&Window"))
+        self.toolBar.setWindowTitle(_translate("MainWindow", "toolBar"))
+        self.menu_load_from_file.setText(_translate("MainWindow", "&Load Schedule From File..."))
+        self.menu_load_from_file.setToolTip(_translate("MainWindow", "Load schedule from python script"))
+        self.menu_load_from_file.setShortcut(_translate("MainWindow", "Ctrl+O"))
+        self.menu_save.setText(_translate("MainWindow", "&Save"))
+        self.menu_save.setToolTip(_translate("MainWindow", "Save schedule"))
+        self.menu_save.setShortcut(_translate("MainWindow", "Ctrl+S"))
+        self.menu_node_info.setText(_translate("MainWindow", "&Node Info"))
+        self.menu_node_info.setToolTip(_translate("MainWindow", "Show node information"))
+        self.menu_node_info.setShortcut(_translate("MainWindow", "Ctrl+I"))
+        self.menu_quit.setText(_translate("MainWindow", "&Quit"))
+        self.menu_quit.setShortcut(_translate("MainWindow", "Ctrl+Q"))
+        self.menu_save_as.setText(_translate("MainWindow", "Save &As..."))
+        self.menu_exit_dialog.setText(_translate("MainWindow", "&Hide exit dialog"))
+        self.menu_exit_dialog.setToolTip(_translate("MainWindow", "Hide exit dialog"))
+        self.actionT.setText(_translate("MainWindow", "T"))
+        self.menu_close_schedule.setText(_translate("MainWindow", "&Close Schedule"))