diff --git a/src/controller.py b/src/controller.py
new file mode 100644
index 0000000000000000000000000000000000000000..43b2ade880b8d67319c4ccfeb774b40323769653
--- /dev/null
+++ b/src/controller.py
@@ -0,0 +1,40 @@
+from PyQt6.QtWidgets import QApplication
+import sys
+from register import register
+from dashboard import dashboard
+from listLatihan import listLatihan
+from tesBacaDB import tesBacaDB
+class controller:
+    def __init__(self):
+        self.tesBacaDB = tesBacaDB()
+        self.registerWin = register()
+        self.registerWin.switch.connect(self.fromRegister)
+        self.dashboard = dashboard()
+        self.dashboard.switch.connect(self.fromDashboard)
+        self.listLatihan = listLatihan()
+        self.listLatihan.switch.connect(self.fromListLatihan)
+        pass
+
+    def start(self):
+        # nanti disini kasih validasi dulu, user udah ada apa belum
+        self.registerWin.show()
+
+    def fromRegister(self):
+        self.registerWin.close()
+        self.dashboard.show()
+
+    def fromDashboard(self, page):
+        self.registerWin.close()
+        if (page == "listLatihan"):
+            self.listLatihan.show()
+
+    def fromListLatihan(self, page):
+        self.listLatihan.close()
+        if (page == "dashboard"):
+            self.dashboard.show()
+
+if __name__ == "__main__":
+    app = QApplication(sys.argv)
+    controller = controller()
+    controller.start()
+    app.exec()
diff --git a/src/dashboard.py b/src/dashboard.py
index deea84a9742ea696f8a765f28f1df45d75437242..00bf39e700211b7d0692ea0e023d6fb26f5c2907 100644
--- a/src/dashboard.py
+++ b/src/dashboard.py
@@ -11,7 +11,7 @@ text_color = '#EEEEE2'
 card_color = '#D2DCC4'
 
 class dashboard(QWidget):
-
+    switch = pyqtSignal(str, dict)
     def __init__(self, user=None):
         super().__init__()
         if (user == None):
@@ -231,6 +231,11 @@ class dashboard(QWidget):
         prog.move(667, 317)
         prog.setFont(historyFont)
         prog.setAlignment(Qt.AlignmentFlag.AlignLeft)
+    def showRegister(self):
+        self.switch.emit(self, "register")
+    
+    def listLatihann(self):
+        self.switch.emit(self, "listLatihan")
 
 
 
diff --git a/src/register.py b/src/register.py
index d6ebef7d6cfc548ce7973eabe4d31a1608b5dc4d..13982027e676e2cdb9b52076a288a293f658b933 100644
--- a/src/register.py
+++ b/src/register.py
@@ -1,12 +1,13 @@
 import sqlite3
 from PyQt6.QtWidgets import QApplication, QLabel, QWidget, QLineEdit, QPushButton, QRadioButton, QCheckBox, QMessageBox
 from PyQt6.QtGui import QFont, QPixmap, QCursor
-from PyQt6.QtCore import Qt
+from PyQt6.QtCore import Qt, pyqtSignal
 import sys
 class register(QWidget):
-
+    switch = pyqtSignal()
     def __init__(self):
         super().__init__()
+        self.conn = sqlite3.connect('fitu.db')
         self.setUpWindow()
         
 
@@ -107,14 +108,21 @@ class register(QWidget):
         self.registerButton.setText("Register")
         self.registerButton.setFixedSize(172, 44)
         self.registerButton.setStyleSheet('''
-        border: 1px solid rgba(255, 255, 255, 0.8);
-        border-radius: 20px;
-        color: rgba(23, 71, 40, 1);
-        background-color: #D2DCC4
+        QPushButton {
+            color: rgba(23, 71, 40, 1);
+            background-color:  #D2DCC4;
+            border: 1px solid rgba(255, 255, 255, 0.8);
+            border-radius: 20px;
+        }
+        QPushButton:hover {
+            background-color: #5A8D6C;
+        }
         ''')
         self.registerButton.move(873, 545)
         self.registerButton.setFont(registerText)
         self.registerButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor))
+        self.registerButton.clicked.connect(self.register)
+
 
         self.fit = QCheckBox(self)
         self.fit.move(781, 486)
@@ -131,7 +139,7 @@ class register(QWidget):
         self.thin.setCursor(QCursor(Qt.CursorShape.PointingHandCursor))
 
     def register(self):
-        if (self.nameInput == '' or self.age == '' or self.height == '' or self.weight == '' or (not self.male and not self.female) or self.fit or self.thin):
+        if (self.nameInput == '' or self.age == '' or self.height == '' or self.weight == '' or (not self.male and not self.female) or self.fit == '' or self.thin == ''):
             msgBox = QMessageBox()
             msgBox.setText("<p>Please fill out the form properly!</p>")
             msgBox.setWindowTitle("Registration Failed")
@@ -139,43 +147,66 @@ class register(QWidget):
             msgBox.setStyleSheet("background-color: white")
             msgBox.setStandardButtons(QMessageBox.StandardButton.Ok)
             msgBox.exec()
-        c = self.conn.cursor()
-        if (self.female):
-            if (self.thin):
-                c.execute(
-                    f"INSERT INTO user (name, height, weight, goal, gender, age) VALUES ('{self.nameInput.text()}', '{self.height.text()}', '{self.weight.text()}', 'thin', 'female', '{self.age.text()}')"
-                )
-                self.conn.commit()
-            elif (self.fit):
-                c.execute(
-                    f"INSERT INTO user (name, height, weight, goal, gender, age) VALUES ('{self.nameInput.text()}', '{self.height.text()}', '{self.weight.text()}', 'fit', 'female', '{self.age.text()}')"
-                )
-                self.conn.commit()
-
-            else:
-                c.execute(
-                    f"INSERT INTO user (name, height, weight, goal, gender, age) VALUES ('{self.nameInput.text()}', '{self.height.text()}', '{self.weight.text()}', 'fit, thin', 'female', '{self.age.text()}')"
-                )
-                self.conn.commit()
-
-        if (self.male):
-            if (self.thin):
-                c.execute(
-                    f"INSERT INTO user (name, height, weight, goal, gender, age) VALUES ('{self.nameInput.text()}', '{self.height.text()}', '{self.weight.text()}', 'thin', 'male', '{self.age.text()}')"
-                )
-                self.conn.commit()
-
-            elif (self.fit):
-                c.execute(
-                    f"INSERT INTO user (name, height, weight, goal, gender, age) VALUES ('{self.nameInput.text()}', '{self.height.text()}', '{self.weight.text()}', 'fit', 'male', '{self.age.text()}')"
-                )
-                self.conn.commit()
-
-            else:
-                c.execute(
-                    f"INSERT INTO user (name, height, weight, goal, gender, age) VALUES ('{self.nameInput.text()}', '{self.height.text()}', '{self.weight.text()}', 'fit, thin', 'male', '{self.age.text()}')"
-                )
-                self.conn.commit()
+            return
+        else:
+            c = self.conn.cursor()
+            if (self.female.isChecked()):
+                print("female")
+                if (self.fit.isChecked() == self.thin.isChecked()):
+                    print("both")
+                    c.execute(
+                        f"INSERT INTO user (name, height, weight, goal, gender, age) VALUES ('{self.nameInput.text()}', '{self.height.text()}', '{self.weight.text()}', 'fit, thin', 'female', '{self.age.text()}')"
+                    )
+                    self.conn.commit()
+                elif (self.thin.isChecked()):
+                    c.execute(
+                        f"INSERT INTO user (name, height, weight, goal, gender, age) VALUES ('{self.nameInput.text()}', '{self.height.text()}', '{self.weight.text()}', 'thin', 'female', '{self.age.text()}')"
+                    )
+                    print("thin")
+                    self.conn.commit()
+                elif (self.fit.isChecked()):
+                    print("fit")
+                    c.execute(
+                        f"INSERT INTO user (name, height, weight, goal, gender, age) VALUES ('{self.nameInput.text()}', '{self.height.text()}', '{self.weight.text()}', 'fit', 'female', '{self.age.text()}')"
+                    )
+                    self.conn.commit()
+                # if (self.fit and self.thin):
+                
+
+
+            elif(self.male.isChecked()):
+                print("male")
+                if(self.fit.isChecked() and self.thin.isChecked()):
+                    print("both")
+                    c.execute(
+                        f"INSERT INTO user (name, height, weight, goal, gender, age) VALUES ('{self.nameInput.text()}', '{self.height.text()}', '{self.weight.text()}', 'fit, thin', 'male', '{self.age.text()}')"
+                    )
+                    self.conn.commit()
+                elif (self.thin.isChecked()):
+                    print("thin")
+                    c.execute(
+                        f"INSERT INTO user (name, height, weight, goal, gender, age) VALUES ('{self.nameInput.text()}', '{self.height.text()}', '{self.weight.text()}', 'thin', 'male', '{self.age.text()}')"
+                    )
+                    self.conn.commit()
+
+                elif (self.fit.isChecked()):
+                    print("fit")
+                    c.execute(
+                        f"INSERT INTO user (name, height, weight, goal, gender, age) VALUES ('{self.nameInput.text()}', '{self.height.text()}', '{self.weight.text()}', 'fit', 'male', '{self.age.text()}')"
+                    )
+                    self.conn.commit()
+                # if (self.fit and self.thin):
+
+                
+            self.nameInput.clear()
+            self.age.clear()
+            self.height.clear()
+            self.weight.clear()
+            self.switch.emit()
+    
+    # def showDashboard(self):
+    #     self.switch.emit("dashboard", {})
+
                     
 if __name__ == "__main__":