diff --git a/img/Vector.png b/img/add button.png
similarity index 100%
rename from img/Vector.png
rename to img/add button.png
diff --git a/img/arrow-left.png b/img/arrow-left.png
new file mode 100644
index 0000000000000000000000000000000000000000..4c59e511219f9d17d9eee24e6f811b33e97b141f
Binary files /dev/null and b/img/arrow-left.png differ
diff --git a/img/arrow-right.png b/img/arrow-right.png
new file mode 100644
index 0000000000000000000000000000000000000000..11521cded1589fa834862cc34b4204f53f7c881c
Binary files /dev/null and b/img/arrow-right.png differ
diff --git a/img/exe-bicycle.gif b/img/exe-bicycle.gif
new file mode 100644
index 0000000000000000000000000000000000000000..fdad72a2172b3354437b6cedaaded2508fcea58c
Binary files /dev/null and b/img/exe-bicycle.gif differ
diff --git a/img/exe-bridges.gif b/img/exe-bridges.gif
new file mode 100644
index 0000000000000000000000000000000000000000..81a62b9179e111447391824d941fca4ae1dc9027
Binary files /dev/null and b/img/exe-bridges.gif differ
diff --git a/img/exe-burpees.gif b/img/exe-burpees.gif
new file mode 100644
index 0000000000000000000000000000000000000000..9f9cb0cac53bef18157909175c5d8661cdc107f4
Binary files /dev/null and b/img/exe-burpees.gif differ
diff --git a/img/exe-crunches.gif b/img/exe-crunches.gif
new file mode 100644
index 0000000000000000000000000000000000000000..70fc58acfe10580e477a89102c4ce457ff18675c
Binary files /dev/null and b/img/exe-crunches.gif differ
diff --git a/img/exe-highknee.gif b/img/exe-highknee.gif
new file mode 100644
index 0000000000000000000000000000000000000000..e43bb2ffa48230a94b36dc314e34770c122d037b
Binary files /dev/null and b/img/exe-highknee.gif differ
diff --git a/img/exe-jumpingjack.gif b/img/exe-jumpingjack.gif
new file mode 100644
index 0000000000000000000000000000000000000000..e8c85b8981b51f74358e89d856cdfe7ae03080a5
Binary files /dev/null and b/img/exe-jumpingjack.gif differ
diff --git a/img/exe-lunges.gif b/img/exe-lunges.gif
new file mode 100644
index 0000000000000000000000000000000000000000..7058f5d5fa730857273dd35d5e6584fb016fe051
Binary files /dev/null and b/img/exe-lunges.gif differ
diff --git a/img/exe-mountain.gif b/img/exe-mountain.gif
new file mode 100644
index 0000000000000000000000000000000000000000..b75d1bcb30d426cc815f772e58e276a5c3bcc71c
Binary files /dev/null and b/img/exe-mountain.gif differ
diff --git a/img/exe-plank.gif b/img/exe-plank.gif
new file mode 100644
index 0000000000000000000000000000000000000000..806034aeac519ea89aed5d3d094c704fc20b85e4
Binary files /dev/null and b/img/exe-plank.gif differ
diff --git a/img/exe-pushup.gif b/img/exe-pushup.gif
new file mode 100644
index 0000000000000000000000000000000000000000..c5998fb1950edf125f0acf4e67d52f16bba85619
Binary files /dev/null and b/img/exe-pushup.gif differ
diff --git a/img/exe-russian.gif b/img/exe-russian.gif
new file mode 100644
index 0000000000000000000000000000000000000000..f7bda02478a39ba7c49fda71e1afc68f6424e2d7
Binary files /dev/null and b/img/exe-russian.gif differ
diff --git a/img/exe-situp.gif b/img/exe-situp.gif
new file mode 100644
index 0000000000000000000000000000000000000000..cb4541eee87e2ceb4f01c112dc77de222a8b7038
Binary files /dev/null and b/img/exe-situp.gif differ
diff --git a/src/controller.py b/src/controller.py
new file mode 100644
index 0000000000000000000000000000000000000000..14ccca99fe4a74cde7ebe729e65cd9d078cfcd6f
--- /dev/null
+++ b/src/controller.py
@@ -0,0 +1,49 @@
+from PyQt6.QtWidgets import QApplication
+import sys
+import sqlite3
+from register import register
+from dashboard import dashboard
+from listlatihan2 import listLatihan2
+from tesBacaDB import tesBaca
+class controller:
+    def __init__(self):
+        self.conn = sqlite3.connect('fitu.db')
+        self.tesBacaDB = tesBaca()
+        self.registerWin = register()
+        self.registerWin.switch.connect(self.fromRegister)
+        self.dashboard = dashboard()
+        # self.dashboard.switch.connect(self.fromDashboard)
+        # self.listLatihan = listLatihan2()
+        # self.listLatihan.switch.connect(self.fromListLatihan)
+        pass
+
+        
+    def start(self):
+        c = self.conn.cursor()
+        c.execute("SELECT * FROM user")
+        count = c.fetchone()
+        if (count != None):
+            # print("dashboard")
+            self.dashboard.show()        
+        else:
+            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/customize.py b/src/customize.py
index 591d78093ba3ff54f8fff17bf5686f6cb5fed996..b8fa2d73c60060cc64f4dea6cd8ac5b5eff76806 100644
--- a/src/customize.py
+++ b/src/customize.py
@@ -1,34 +1,59 @@
 import sqlite3
 import sys
 
-from PyQt6.QtCore import Qt
-from PyQt6.QtGui import QIcon, QPixmap, QCursor, QFont
+from PyQt6.QtCore import Qt, QSize, QPropertyAnimation, QAbstractAnimation, QEasingCurve, QAnimationGroup
+from PyQt6.QtGui import QIcon, QPixmap, QCursor, QFont, QMovie
 from PyQt6.QtWidgets import (QApplication, QMainWindow, QWidget, QGridLayout,
                              QGroupBox, QRadioButton, QCheckBox, QMessageBox,
-                             QLabel, QLineEdit, QVBoxLayout, QPushButton, QScrollArea)
+                             QLabel, QLineEdit, QVBoxLayout, QPushButton, QScrollArea, QGraphicsOpacityEffect)
 
 background = '#5A8D6C'
 button_color = '#174728'
 text_color = '#EEEEE2'
-card_color = '#D2DCC4'
+cardColor = '#D2DCC4'
 
 class customizeWorkout(QWidget):
     
     
     def __init__(self):
         
-        super().__init__()          
+        super().__init__()
+        self.con = sqlite3.connect('fitu.db')
+        self.listEx = self.fetchListEx()          
         self.setupGUI()
         
+    def fetchListEx(self):
+        cur = self.con.cursor()
+        rows = cur.execute("SELECT * FROM daftar_latihan")
+        rows = cur.fetchall()
+        cur.close()   
+        
+        return rows
+        
     def setupGUI(self):
     
         self.label = QLabel("")
         self.label.setParent(self)
         self.setFixedSize(1280, 720)
-        self.setWindowTitle("FIT-U")
+        self.setWindowTitle("FIT-U - Customize Workout")
         self.setStyleSheet("background-color: #5A8D6C;")
         self.elements()
     
+    def exLabel(self):
+        exLabel = QLabel()
+           
+        exLabel.setFixedSize(367, 99)
+        exLabel.setStyleSheet("background-color: #5A8D6C; border-radius: 20px;")
+        exLabel1 = QLabel(exLabel)
+        exLabel1.move(10, 10)
+        exLabel1.setFixedSize(79, 79)
+        exLabel1.setStyleSheet(f'''
+            border: none;
+            "background-color: #D2DCC4;"
+            "border-radius: 20px;"
+        
+        ''') 
+    
     def elements(self): 
         buttonFont = QFont()
         buttonFont.setFamily('Segoe UI')
@@ -69,7 +94,31 @@ class customizeWorkout(QWidget):
             "background-color: #D2DCC4;"
             "border-radius: 20px;"
         )
-        
+                # Mengatur bentuk scroll bar
+        scroll_bar_style = """
+            QScrollBar:vertical {
+                background-color: white;
+                width: 8px;
+                margin: 20px 0 20px 0;
+            }
+            QScrollBar::handle:vertical {
+                background-color: #174728;
+                border-radius: 3px;
+                
+            }
+            QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {
+                height: 20px;
+                background-color: #D2DCC4;
+                subcontrol-origin: margin;
+                subcontrol-position: top;
+            }
+            QScrollBar::add-line:vertical {
+                top: 0;
+            }
+            QScrollBar::sub-line:vertical {
+                bottom: 0;
+            }
+        """
         #NAVBAR
         # masukkan logo
         logo = QLabel(self)
@@ -82,13 +131,13 @@ class customizeWorkout(QWidget):
         homeButton.setStyleSheet(f'''
         QPushButton {{
             color: {text_color};
-            background-color: {button_color};
+            background-color: {background};
             border: none;
             border-radius: 20px;
         }}
         ''') 
         homeButton.setFont(buttonFont)
-        homeButton.setFixedSize(96, 42) #pake ini buat kalau dia buletan
+        # homeButton.setFixedSize(96, 42) #pake ini buat kalau dia buletan
         homeButton.move(507, 53)    
         homeButton.setCursor(
             QCursor(Qt.CursorShape.PointingHandCursor))
@@ -99,13 +148,14 @@ class customizeWorkout(QWidget):
         customizeButton.setStyleSheet(f'''
         QPushButton {{
             color: {text_color};
-            background-color: {background};
+            background-color: {button_color};
             border: none;
             border-radius: 20px;
         }}
         ''')
         customizeButton.setFont(buttonFont)
-        customizeButton.move(649, 58)
+        customizeButton.setFixedSize(120, 42)
+        customizeButton.move(649, 53)     
         customizeButton.setCursor(
             QCursor(Qt.CursorShape.PointingHandCursor))
         
@@ -161,118 +211,206 @@ class customizeWorkout(QWidget):
         profilePhoto = QLabel(self)
         profilePhoto.setPixmap(QPixmap('img/profile-dashboard.png'))
         profilePhoto.move(1133, 45)
-        #Membuat scroll area
-        
-        # scroll.setWidgetResizable(True)
+         
         #greenCard
         greenCard = QLabel(self)
-        greenCard.move(116.67, 155.33)
-        greenCard.setFixedSize(429.79, 534.56)
+        greenCard.move(116, 155)
+        greenCard.setFixedSize(430, 534)
         greenCard.setStyleSheet(styleSheet)
-        # scroll.setWidget(greenCard)
         scroll = QScrollArea(self)
-        scroll.setGeometry(130, 250, 410, 429) # mengatur posisi dan ukuran QScrollArea
+        scroll.setWidgetResizable(True)
+        scroll.setGeometry(130, 250, 410, 429) 
         scroll.setStyleSheet("background-color: #D2DCC4;border-radius: none;")
         scrollWidget = QWidget(scroll)
         scrollLayout = QVBoxLayout(scrollWidget)
         scrollWidget.setStyleSheet("background-color: #D2DCC4; border-radius: 20px;")
         scrollWidget.setLayout(scrollLayout)
-        vertical_scrollbar = scroll.verticalScrollBar()
-        # Mengatur bentuk scroll bar
-        scroll_bar_style = """
-            QScrollBar:vertical {
-                background-color: #D2DCC4;
-                width: 20px;
-                margin: 20px 0 20px 0;
-            }
-            QScrollBar::handle:vertical {
-                background-color: #5A8D6C;
-                border-radius: 10px;
-            }
-            QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {
-                height: 20px;
-                background-color: #D2DCC4;
-                subcontrol-origin: margin;
-                subcontrol-position: top;
-            }
-            QScrollBar::add-line:vertical {
-                top: 0;
-            }
-            QScrollBar::sub-line:vertical {
-                bottom: 0;
-            }
-        """
+
         scroll.verticalScrollBar().setStyleSheet(scroll_bar_style)
-        for i in range(20):
-            exLabel = QLabel()
-           
-            exLabel.setFixedSize(366.67, 99.33)
+        addButtonList = []
+        exLabelList = []
+        count = 0
+        for i in range(16):
+            exLabel = QLabel(self)  
+            exLabel.setFixedSize(367, 99)
             exLabel.setStyleSheet("background-color: #5A8D6C; border-radius: 20px;")
             exLabel1 = QLabel(exLabel)
             exLabel1.move(10, 10)
-            exLabel1.setFixedSize(78.89, 78.89)
+            exLabel1.setFixedSize(79, 79)
             exLabel1.setStyleSheet(styleSheet5)
+            #add gif
+            gif = QMovie('img/exercise-unscreen.gif')
+            exLabel1.setMovie(gif)
+            gif.start()
+            gif.setScaledSize(QSize(79, 79))
+            gif.setSpeed(100)
+
+            addButton = QPushButton(exLabel)
+            addButton.setIcon(QIcon('img/add button.png'))
+            addButton.setIconSize(QPixmap('img/add button.png').size())
+            addButton.setGeometry(320, 55, 36, 36)
+            addButton.move(320, 55)
+            addButton.setCursor(
+                QCursor(Qt.CursorShape.PointingHandCursor))
+            # Tambahkan addButton ke dalam list
+            addButtonList.append(addButton)
+            exLabelList.append(exLabel)
+            # Hubungkan fungsi handleButtonClicked ke addButton
+            addButton.clicked.connect(lambda checked, index=i: handleButtonClicked(index, addButtonList))
+            # addButton.clicked.connect(lambda checked, index=i: handleButtonClicked2(index, addButtonList))
+            title = QLabel(exLabel)
+            # title.setText(f'<b><p><font style="font-size:24px;" color="#D2DCC4">{self.listEx[i][1]}</font><tab></p></b> <b><p><font color="#D2DCC4" style="font-size:14px;">{self.listEx[i][4]} Repetisi</font></p><b>')
+            title.setText(f'<font style="font-size:24px;" color="#D2DCC4"; font-family="Sogoe UI";><b>{self.listEx[count][1]}<b>')
+            title.move(100, 15)
+            repDur = QLabel(exLabel)
+            if(count<8):
+                repDur.setText(f'<font style="font-size:14px;" color="#D2DCC4"; font-family="Sogoe UI";><b>{self.listEx[count][4]} Detik<b>')
+                repDur.move(100, 60)
+            else:
+                repDur.setText(f'<font style="font-size:14px;" color="#D2DCC4"; font-family="Sogoe UI";><b>{self.listEx[count][5]} Repetisi<b>')
+                repDur.move(100,60)
             scrollLayout.addWidget(exLabel)
-            
+
+            addButton.setCursor(
+                QCursor(Qt.CursorShape.PointingHandCursor))
+            count+=1
         scroll.setWidget(scrollWidget)
-        
-        # mengatur teks pada QLabel
-        # greenCard.setText("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas eleifend tortor id lacus finibus, at luctus mi aliquet. Donec vel ligula vel augue vehicula vestibulum sed eu lacus. Ut interdum, sapien id aliquet consectetur, eros ipsum faucibus est, in auctor sapien arcu vel leo. Morbi et velit vel lacus semper pharetra. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam euismod nunc et blandit vehicula. Morbi id turpis id odio vulputate pellentesque vel vel quam. Proin eget sapien feugiat, commodo nibh a, dictum massa. Integer non ante mi. Vivamus suscipit eros at faucibus consequat. Nunc vestibulum nibh quam, in bibendum turpis laoreet quis. Duis hendrerit nisi quis tellus interdum, vel hendrerit tellus venenatis. Donec rhoncus bibendum rutrum.")
         #greenCard2
         greenCard2 = QLabel(self)
-        greenCard2.move(577.33, 155.33)
-        greenCard2.setFixedSize(604.67, 534.67)
+        greenCard2.move(577, 155)
+        greenCard2.setFixedSize(604, 534)
         greenCard2.setStyleSheet(styleSheet)
+        scroll2 = QScrollArea(self)
+        scroll2.setWidgetResizable(True)
+        scroll2.setGeometry(620, 250, 410, 429) # mengatur posisi dan ukuran QScrollArea
+        scroll2.setStyleSheet("background-color: #D2DCC4;border-radius: none;")
+        scrollWidget2 = QWidget(scroll2)
+        scrollLayout2 = QVBoxLayout(scrollWidget2)
+        scrollWidget2.setStyleSheet("background-color: #D2DCC4; border-radius: 20px;")
+        scrollWidget2.setLayout(scrollLayout2)
+        scroll2.verticalScrollBar().setStyleSheet(scroll_bar_style)
+        scroll2.setWidget(scrollWidget2)
         
+        def handleButtonClicked(i, buttonList):
+            button = buttonList[i]
+            button.setEnabled(False)
+            button.setIcon(QIcon('img/check button.png'))
+            button.setIconSize(QPixmap('img/check button.png').size())
+            exLabel = QLabel(self   )
+            exLabel.setFixedSize(367, 99)
+            exLabel.setStyleSheet("background-color: #5A8D6C; border-radius: 20px;")
+            exLabel1 = QLabel(exLabel)
+            exLabel1.move(10, 10)
+            exLabel1.setFixedSize(79, 79)
+            exLabel1.setStyleSheet(styleSheet5)
+            #add gif
+            gif = QMovie('img/exercise-unscreen.gif')
+            exLabel1.setMovie(gif)
+            gif.start()
+            gif.setScaledSize(QSize(79, 79))
+            gif.setSpeed(100)
+            title = QLabel(exLabel)
+            title.setText(f'<b><p><font style="font-size:24px;" color="#D2DCC4">{self.listEx[i][1]}</font><tab></p></b> <b><p><font color="#D2DCC4" style="font-size:14px;">{self.listEx[i][4]} Repetisi</font></p><b>')
+            title.move(100, 15)
+            deleteButton = QPushButton(exLabel)
+            deleteButton.setIcon(QIcon('img/delete button.png'))
+            deleteButton.setIconSize(QPixmap('img/delete button.png').size())
+            deleteButton.setGeometry(320, 55, 36, 36)
+            deleteButton.move(320, 55)
+            deleteButton.setCursor(
+                QCursor(Qt.CursorShape.PointingHandCursor))
+            deleteButton.clicked.connect(lambda checked, index=i: handleDeleteButtonClicked(index, exLabel, scrollLayout2))
+            scrollLayout2.addWidget(exLabel)
+
+        def handleDeleteButtonClicked(index, exLabel, layout):
+            # item = scrollLayout2.itemAt(index)
+            # if item is not None:
+            #     widget = item.widget()
+            #     if widget is not None:
+            #         widget.deleteLater()
+            #         # setelah exLabel dihapus, kita perlu mengupdate addButtonList
+            #         for i, button in enumerate(addButtonList):
+            #             if i == index:
+            #                 button.setEnabled(True)
+            #                 button.setIcon(QIcon('img/add button.png'))
+            #                 button.setIconSize(QPixmap('img/add button.png').size())
+            
+            exLabel.setParent(None)
+            layout.removeWidget(exLabel)
+            exLabel.deleteLater()
+            for i, button in enumerate(addButtonList):
+                        if i == index:
+                            button.setEnabled(True)
+                            button.setIcon(QIcon('img/add button.png'))
+                            button.setIconSize(QPixmap('img/add button.png').size())
         font = QFont()
         font.setFamily("Segoe UI")
-        font.setPointSize(30)
+        font.setPointSize(28)
         font.setBold(True)
         
+        #font save
         font1 = QFont()
         font1.setFamily("Segoe UI")
-        font1.setPointSize(26)
-        font1.setWeight(450)
+        font1.setPointSize(23)
+        font1.setBold(True)
         
         exText = QLabel(self)
         exText.setText("Exercise")
         exText.setFont(font)
         exText.setStyleSheet(styleSheet2)
-        exText.setFixedSize(164.72, 35)
-        exText.move(145.7,194)
+        exText.setFixedSize(165, 35)
+        exText.move(140,185)
         
         progText = QLabel(self)
         progText.setText("Program Name:")
         progText.setStyleSheet(styleSheet2)
-        progText.setFixedSize(361.33, 50)
+        progText.setFixedSize(361, 50)
         progText.setFont(font1)
-        progText.move(592, 182.33)
+        progText.move(599, 182)
         
-        textBox = QLineEdit(self)
-        textBox.move(840, 194)
-        textBox.setFixedSize(320, 41.33)
-        textBox.setStyleSheet(styleSheet3)
-        
-        vbox = QVBoxLayout()
-        vbox.addWidget(textBox)
-        
-        save = QPushButton(self)
-        save.setText("Save")
-        save.move(1026.67, 618)
-        save.setFixedSize(112, 42)
-        save.setStyleSheet(styleSheet4)
-        save.setFont(font1)
-        
-        exLabel = QLabel(self)
-        exLabel.move(714.67, 260)
-        exLabel.setFixedSize(366.67, 99.33)
-        exLabel.setStyleSheet(styleSheet3)
-        
-        exLabel1 = QLabel(self)
-        exLabel1.move(727.59, 270.2)
-        exLabel1.setFixedSize(78.89, 78.89)
-        exLabel1.setStyleSheet(styleSheet5)
-    
+        progNameInput = QLineEdit(self)
+        progNameInput.move(840, 189)
+        progNameInput.setFixedSize(320, 41)
+        progNameInput.setFont(QFont("Segoe UI", 14))
+        progNameInput.setStyleSheet('''
+            padding: 11px 30px 11px 30px;
+            border: 1px solid rgba(255, 255, 255, 0.8);
+            border-radius: 20px;
+            color: #D2DCC4;
+            background-color: {background};
+        }
+        QLineEdit::focus {
+            color: white;
+            selection-color: black;
+            selection-background-color: white;
+        }
+        ''')
+  
+        saveButton = QPushButton(self)
+        saveButton.setText('Save')
+        saveButton.setStyleSheet(f'''
+        QPushButton {{
+            color: {text_color};
+            background-color: {button_color};
+            border: none;
+            border-radius: 20px;
+        }}
+        ''')
+        saveButton.setFont(buttonFont)
+        saveButton.setFixedSize(95, 42)
+        saveButton.move(1065, 635)     
+        saveButton.setCursor(
+            QCursor(Qt.CursorShape.PointingHandCursor))       
+        # saveButton.clicked.connect(self.customize)
+        # def customize(self):
+        #     c = self.conn.cursor()
+        #     if (progNameInput == "" or scrollLayout2 == ""):
+        #         QMessageBox.about(self, "Error", "Please fill all the fields")
+        #     else:
+        #         c.execute(
+        #             f"INSERT INTO program (program_id, title_program) VALUES ('{progNameInput.text()}')"
+        #         )
+                
 if __name__ == '__main__':
     app = QApplication(sys.argv)
     ex = customizeWorkout()
diff --git a/src/endOfExercise.py b/src/endOfExercise.py
new file mode 100644
index 0000000000000000000000000000000000000000..c1f77f337cf331755f0c7dfd9245fbc8be9c4773
--- /dev/null
+++ b/src/endOfExercise.py
@@ -0,0 +1,82 @@
+import sqlite3
+import sys
+from PyQt6.QtWidgets import QApplication, QLabel, QWidget, QLineEdit, QPushButton, QRadioButton, QCheckBox, QMessageBox
+from PyQt6.QtGui import QFont, QPixmap, QCursor
+from PyQt6.QtCore import Qt, pyqtSignal
+
+class endOfExe(QWidget):
+    switch = pyqtSignal(str)
+    def __init__(self):
+        super().__init__()
+        self.conn = sqlite3.connect('fitu.db')
+        self.setUpWindow()
+    
+    def setUpWindow(self):
+        self.setWindowTitle("FitU - Enf Of Exercise")
+        self.setFixedSize(1280, 720)
+        self.setUpEndOfExe()
+    
+    def setUpEndOfExe(self):
+        self.setStyleSheet('background-color: #5A8D6C')
+
+        congratsSize = QFont()
+        congratsSize.setPointSize(40)
+        congratsSize.setFamily("Segoe UI")
+        congratsSize.setBold(True)
+
+        stayHealSize = QFont()
+        stayHealSize.setPointSize(20)
+        stayHealSize.setFamily("Segoe UI")
+        stayHealSize.setBold(True)
+
+        backSize = QFont()
+        backSize.setPointSize(15)
+        backSize.setFamily("Segoe UI")
+        # backSize.setBold(True)
+
+        congrats = QLabel(self)
+        congrats.setText("Congratulations")
+        congrats.setFont(congratsSize)
+        congrats.setStyleSheet("color: #EEEEE2")
+        congrats.move(450, 170)
+
+        done = QLabel(self)
+        done.setText("you've done the exercise!")
+        done.setFont(congratsSize)
+        done.setStyleSheet("color: #EEEEE2")
+        done.move(325, 250)
+
+        stayHealthy = QLabel(self)
+        stayHealthy.setText("STAY HEALTHY AND POWERFUL!")
+        stayHealthy.setFont(stayHealSize)
+        stayHealthy.setStyleSheet("color: #EEEEE2")
+        stayHealthy.move(435, 375)
+
+        backButton = QPushButton(self)
+        backButton.setText("Back To Dashboard")
+        backButton.setStyleSheet('''
+        QPushButton {
+            color: rgba(255, 255, 255, 1);
+            background-color:  #174728;
+            border-radius: 20;
+        }
+        QPushButton:hover {
+            background-color: #EEEEE2;
+            color: #174728;
+        }
+        ''')
+        backButton.resize(200, 50)
+        backButton.setFont(backSize)
+        backButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor))
+        backButton.move(560, 450)
+        backButton.clicked.connect(self.backToDash)
+    
+    def backToDash(self):
+        self.switch.emit("dashboard")
+    
+if __name__ == "__main__":
+    
+    app = QApplication(sys.argv)
+    window = endOfExe()
+    window.show()
+    app.exec()
\ No newline at end of file
diff --git a/src/listlatihan2.py b/src/listlatihan2.py
index dc03628a7ab6f69ad401b61ae8c842edfcf6425e..3004f0984b0761485f1a14d704307f0a5cea0c87 100644
--- a/src/listlatihan2.py
+++ b/src/listlatihan2.py
@@ -1,12 +1,12 @@
 import sqlite3
 import sys
 import textwrap
+from functools import partial
 
-from PyQt6.QtCore import Qt
-from PyQt6.QtGui import QIcon, QPixmap, QCursor, QFont
-from PyQt6.QtWidgets import (QWidget, QApplication, QMainWindow, QWidget, QGridLayout,
-                             QGroupBox, QRadioButton, QCheckBox, QMessageBox,
-                             QLabel, QLineEdit, QVBoxLayout, QHBoxLayout, QPushButton, QScrollArea)
+from PyQt6.QtCore import Qt, QSize
+from PyQt6.QtGui import QIcon, QPixmap, QCursor, QFont, QMovie
+from PyQt6.QtWidgets import (QWidget, QApplication, QWidget,
+                             QLabel, QVBoxLayout, QHBoxLayout, QPushButton, QScrollArea, QDialog)
 # from PyQt6 import QtWidgets
 
 background = '#5A8D6C'
@@ -14,6 +14,10 @@ button_color = '#174728'
 text_color = '#EEEEE2'
 card_color = '#D2DCC4'
 
+imgPath = None
+descLat = None
+titleLat = None
+
 class listLatihan2(QWidget):
     
     
@@ -21,7 +25,8 @@ class listLatihan2(QWidget):
         
         super().__init__()    
         self.con = sqlite3.connect('fitu.db')
-        self.listLat = self.fetchListLatihan()   
+        self.listLat = self.fetchListLatihan()  
+        self.count = 0 
         self.setUpListLatihanWindow()   
         self.setupGUI()
         
@@ -37,7 +42,11 @@ class listLatihan2(QWidget):
         self.setWindowIcon(QIcon("img/logo.png"))
         self.setWindowTitle("Fit-U - Daftar Latihan")
         self.setStyleSheet('background-color: #5A8D6C;')
-        
+    
+    def openDetail(self, count, listLat):
+        popup = MyPopup(count, listLat)
+        popup.exec()
+    
     def setupGUI(self):   
     
         buttonFont = QFont()
@@ -63,14 +72,14 @@ class listLatihan2(QWidget):
         homeButton.setStyleSheet(f'''
         QPushButton {{
             color: {text_color};
-            background-color: {button_color};
+            background-color: {background};
             border: none;
             border-radius: 20px;
         }}
         ''') 
         homeButton.setFont(buttonFont)
         homeButton.setFixedSize(96, 42) #pake ini buat kalau dia buletan
-        homeButton.move(507, 53)    
+        homeButton.move(507, 58)    
         homeButton.setCursor(
             QCursor(Qt.CursorShape.PointingHandCursor))
         
@@ -109,16 +118,17 @@ class listLatihan2(QWidget):
         # tombol list
         listButton = QPushButton(self)
         listButton.setText('List')
+        listButton.setFixedSize(96, 42)
         listButton.setStyleSheet(f'''
         QPushButton {{
             color: {text_color};
-            background-color: {background};
+            background-color: {button_color};
             border: none;
             border-radius: 20px;
         }}
         ''')
         listButton.setFont(buttonFont)
-        listButton.move(898, 58)
+        listButton.move(870, 53)
         listButton.setCursor(
             QCursor(Qt.CursorShape.PointingHandCursor))
         
@@ -147,7 +157,7 @@ class listLatihan2(QWidget):
        
         # scroll.setWidget(greenCard)
         scroll = QScrollArea(self)
-        scroll.setGeometry(0, 150, 1280,570) # mengatur posisi dan ukuran QScrollArea
+        scroll.setGeometry(0, 150, 1265,570) # mengatur posisi dan ukuran QScrollArea
         scroll.setStyleSheet("background-color: #5A8D6C;border-radius: none;")
         scrollWidget = QWidget(scroll)
         scrollLayout = QVBoxLayout(scrollWidget)
@@ -158,18 +168,20 @@ class listLatihan2(QWidget):
         scroll_bar_style = """
             QScrollBar:vertical {
                 background-color: #D2DCC4;
-                width: 20px;
+                width: 15px;
                 margin: 20px 0 20px 0;
             }
             QScrollBar::handle:vertical {
                 background-color: #174728;
-                border-radius: 10px;
+                border-radius: 6px;
             }
             QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {
                 height: 20px;
                 background-color: #D2DCC4;
                 subcontrol-origin: margin;
                 subcontrol-position: top;
+                border-top-left-radius: 6px;
+                border-top-right-radius: 6px;
             }
             QScrollBar::add-line:vertical {
                 top: 0;
@@ -180,43 +192,145 @@ class listLatihan2(QWidget):
         """
         scroll.verticalScrollBar().setStyleSheet(scroll_bar_style)
         count = 0
-        for j in range(4):
+        for j in range(5):
             hbox = QHBoxLayout()
             hbox.setContentsMargins(10, 0, 0, 0)
-            for i in range (4):
-                card = QLabel(self)
-                card.setFixedSize(266, 266)
-                card.setStyleSheet(styleSheetCard)
-                pathImg = QPixmap('img/logo.png')
-                image = QLabel(card)
-                image.setPixmap(pathImg.scaled(100,100))
-                image.move(83, 10)
-                title = QLabel(card)
-                title.setText(f'<font style="font-size:24px;font-family="Sogoe UI;" ><b>{self.listLat[count][1]}<b>')
-                title.move(10, 120)
-                repDur = QLabel(card)
-                if(count<8):
-                    repDur.setText(f'<font style="font-size:14px;font-family="Sogoe UI;"><b>{self.listLat[count][4]} Detik<b>')
-                    repDur.move(203, 130)
-                else:
-                    repDur.setText(f'<font style="font-size:14px;font-family="Sogoe UI;"><b>{self.listLat[count][5]} Repetisi<b>')
-                    repDur.move(187,130)
-                desc = QLabel(card)
-                t = f'<font style="font-size:12px;font-family="Sogoe UI;">{self.listLat[count][2]}'
-                desc.setText(t)
-                desc.move(10, 170)
-                desc.setWordWrap(True)
-                desc.setFixedWidth(245)
-                hbox.addWidget(card)
-                count+=1
+            if(j<4):
+                for i in range (4):
+                    card = QPushButton(self)
+                    card.setFixedSize(266, 266)
+                    card.setStyleSheet(styleSheetCard)
+                    
+                    pathImg = QPixmap(self.listLat[count][6])
+                    image = QLabel(card)
+                    image.setPixmap(pathImg.scaled(100,100))
+                    image.move(83, 10)
+                    
+                    title = QLabel(card)
+                    title.setText(f'<font style="font-size:24px;font-family="Sogoe UI;" ><b>{self.listLat[count][1]}<b>')
+                    title.setStyleSheet("color: #174728")
+                    title.move(10, 120)
+                    
+                    repDur = QLabel(card)
+                    if(count<8):
+                        repDur.setText(f'<font style="font-size:14px;font-family="Sogoe UI;"><b>{self.listLat[count][4]} Detik<b>')
+                        repDur.setStyleSheet("color: #174728")
+                        repDur.move(203, 130)
+                    else:
+                        repDur.setText(f'<font style="font-size:14px;font-family="Sogoe UI;"><b>{self.listLat[count][5]} Repetisi<b>')
+                        repDur.setStyleSheet("color: #174728")
+                        repDur.move(187,130)
+                        
+                    desc = QLabel(card)
+                    t = f'<font style="font-size:12px;font-family="Sogoe UI;">{self.listLat[count][2]}'
+                    if(len(t)> 200):
+                        t = t[0:200]+f" <font color='blue';>See More..."
+                    
+                    desc.setText(t)
+                    desc.move(10, 170)
+                    desc.setWordWrap(True)
+                    desc.setFixedWidth(245)
+                    desc.setFixedHeight(70)
+                    desc.setAlignment(Qt.AlignmentFlag.AlignJustify)
+                    desc.setStyleSheet("color: #174728")
+                    self.count = count
+                    hbox.addWidget(card)
+                    card.clicked.connect(partial(self.openDetail, self.count, self.listLat))
+                    card.setCursor(QCursor(Qt.CursorShape.PointingHandCursor))
+                    count+=1
+            else:
+                box = QLabel()
+                box.setFixedHeight(12)
+                scrollLayout.addWidget(box)
+                    
             scrollLayout.addLayout(hbox)
             scrollLayout.setSpacing(50)
             
         
         scroll.setWidget(scrollWidget)
         
+class MyPopup(QDialog):
+    def __init__(self, count, listLat):
+        super().__init__()
         
-    
+        self.setWindowFlags(Qt.WindowType.FramelessWindowHint)
+        self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground)
+
+        styleSheet = (
+            "background-color: #5A8D6C;"
+            "border-radius: 20px;"
+        )
+
+        styleSheet2 = (
+            "background-color: #D2DCC4;"
+            "border-radius: 20px;"
+        )
+
+        bg = QLabel(self)
+        bg.setFixedSize(942, 464)
+        bg.move(198, 164)
+        bg.setStyleSheet("background-color: black; border-radius: 20px; color: #174728;")
+        
+        label = QLabel(bg)
+        label.setFixedSize(938,460)
+        label.move(2,2)
+        label.setStyleSheet(styleSheet2)
+        
+
+        okButton = QPushButton(label)
+        okButton.setText("OK")
+        okButton.setFixedSize(70, 40)
+        okButton.move(840, 395)
+        okButton.setStyleSheet("color: #D2DCC4; background-color: #174728;font-weight: bold; font-size: 15px;")
+        okButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor))
+        okButton.clicked.connect(self.close)
+        
+        
+        pathGif = QMovie(listLat[count][6])
+        pathGif.setScaledSize(QSize(325,325))
+        pathGif.setSpeed(100)
+        gif = QLabel(bg)
+        gif.setMovie(pathGif)
+        gif.move(40,60)
+        gif.setStyleSheet("background-color: #D2DCC4;")
+        pathGif.start()
+        
+        garis = QLabel(bg)
+        garis.setFixedSize(2,440)
+        garis.setStyleSheet("background-color: #174728;")
+        garis.move(400,10)
+        
+        title = QLabel(bg)
+        title.setText(f'<font style="font-size:60px;font-family="Sogoe UI; ><b>{listLat[count][1]}<b>')
+        title.setStyleSheet("color: #174728; background-color: #D2DCC4;")
+        title.move(420, 40)
+        
+        goal = QLabel(bg)
+        goal.setText(f'<font style="font-size:26px;font-family="Sogoe UI; ><b>{listLat[count][3]}<b>')
+        goal.setStyleSheet("color: #174728; background-color: #D2DCC4;")
+        goal.move(420, 130)
+        
+        repDur = QLabel(bg)
+        if(count<8):
+            repDur.setText(f'<font style="font-size:17px;font-family="Sogoe UI;"><b>{listLat[count][4]} Detik<b>')
+            repDur.move(760, 140)
+        else:
+            repDur.setText(f'<font style="font-size:17px;font-family="Sogoe UI;"><b>{listLat[count][5]} Repetisi<b>')
+            repDur.move(740, 140)
+        repDur.setStyleSheet("color: #174728; background-color: #D2DCC4;")
+        
+        
+        desc = QLabel(bg)
+        desc.setText(f'<font style="font-size:14px;font-family="Sogoe UI; ><b>{listLat[count][2]}<b>')
+        desc.setStyleSheet("color: #174728; background-color: #D2DCC4;")
+        desc.setAlignment(Qt.AlignmentFlag.AlignJustify)
+        desc.move(420, 180)
+        desc.setWordWrap(True)
+        desc.setFixedWidth(410)
+        
+        
+
+
 if __name__ == '__main__':
     app = QApplication(sys.argv)
     ex = listLatihan2()
diff --git a/src/plan.py b/src/plan.py
new file mode 100644
index 0000000000000000000000000000000000000000..63fa172278cea0cf33a3c8b410136464123e23f3
--- /dev/null
+++ b/src/plan.py
@@ -0,0 +1,374 @@
+import sqlite3
+import sys
+
+from PyQt6.QtCore import Qt
+from PyQt6.QtGui import QPixmap, QCursor, QFont
+from PyQt6.QtWidgets import (QApplication, QWidget, QLabel, QHBoxLayout, QVBoxLayout, QPushButton, QScrollArea)
+
+# COLORS PALLETE
+BACKGROUNDCOLOR = '#5A8D6C'
+BUTTONCOLOR = '#174728'
+TEXTCOLOR = '#EEEEE2'
+CARDCOLOR = '#D2DCC4'
+
+class plan(QWidget):
+    
+    def __init__(self):
+        super().__init__()
+        self.con = sqlite3.connect('fitu.db')
+        self.programExercises = self.fetchProgramExercises()
+        self.planWindow()
+
+    def fetchProgramExercises(self):
+        c = self.con.cursor()
+        c.execute("SELECT * FROM program")
+        data = c.fetchall()
+        c.close()
+        return data
+
+    def planWindow(self):
+        self.label = QLabel("")
+        self.label.setParent(self)
+        self.setWindowTitle('FitU')
+        self.setFixedSize(1280, 720)
+        self.setStyleSheet(f'background-color: {BACKGROUNDCOLOR};')
+        self.elements()
+
+    def elements(self):
+        buttonFont = QFont()
+        buttonFont.setFamily('Segoe UI')
+        buttonFont.setPointSize(18)
+
+        # Style sheets
+        styleSheetNavbar0 = (f'''
+            QPushButton {{
+                color: {TEXTCOLOR};
+                background-color: {BACKGROUNDCOLOR};
+                border: none;
+                border-radius: 20px;
+            }}
+        ''')
+
+        styleSheetNavbar1 = (f'''
+            QPushButton {{
+                color: {TEXTCOLOR};
+                background-color: {BUTTONCOLOR};
+                border: none;
+                border-radius: 20px;
+            }}
+        ''')
+
+        styleSheetBigCard = (
+            "background-color: #D2DCC4;"
+            "border-radius: 20px;"
+        )
+
+        styleSheetSmallCard = (
+            "color: #5A8D6C;"
+            "background-color: #D2DCC4;"
+            "border-radius: 20px;"
+        )
+
+        styleSheet2 = (
+            "color: #5A8D6C;"
+            "background-color: #D2DCC4;"
+            "border-radius: 20px;"
+        )
+        styleSheet4 = (
+            "color: #EEEEE2;"
+            "background-color: #174728;"
+            "border-radius: 20px;"
+        f'''
+            QPushButton {{
+                color: {TEXTCOLOR};
+                background-color: {BACKGROUNDCOLOR};
+                border: none;
+                border-radius: 20px;
+            }}
+        ''')
+
+        styleSheetCard = (
+            "background-color: #5A8D6C;"
+            "border-radius: 20px;"
+        )
+        
+        styleSheet6 = (f'''
+            background-color: {CARDCOLOR};
+            color: {BUTTONCOLOR};
+            border: none;
+            border-radius: 20px;
+            text-decoration: underline;
+        ''')
+
+        verticallScrollBarStyle = (""" 
+            QScrollBar:vertical {
+                background-color: white;
+                width: 8px;
+                margin: 20px 0 20px 0;
+            }
+            QScrollBar::handle:vertical {
+                background-color: #174728;
+                border-radius: 3px;
+                
+            }
+            QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {
+                height: 20px;
+                background-color: #D2DCC4;
+                subcontrol-origin: margin;
+                subcontrol-position: top;
+            }
+            QScrollBar::add-line:vertical {
+                top: 0;
+            }
+            QScrollBar::sub-line:vertical {
+                bottom: 0;
+            }
+        """)
+
+        horizontalScrollBarStyle = ("""
+            QScrollBar:horizontal {
+                background-color: white;
+                height: 8px;
+                margin: 0 20px 0 20px;
+            }
+            QScrollBar::handle:horizontal {
+                background-color: #174728;
+                border-radius: 3px;
+            }
+            QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal {
+                width: 20px;
+                background-color: #D2DCC4;
+                subcontrol-origin: margin;
+                subcontrol-position: left;
+            }
+            QScrollBar::add-line:horizontal {
+                left: 0;
+            }
+            QScrollBar::sub-line:horizontal {
+                right: 0;
+            }
+        """)
+
+        # Navbar
+        # Navbar FitU logo
+        logo = QLabel(self)
+        logo.setPixmap(QPixmap('img/logo-dashboard.png'))
+        logo.move(60, 45)
+
+        # Home Button
+        homeButton = QPushButton(self)
+        homeButton.setText('Home')
+        homeButton.setStyleSheet(styleSheetNavbar0)
+        homeButton.setFont(buttonFont)
+        homeButton.setFixedSize(96, 42)
+        homeButton.move(507, 53)    
+        homeButton.setCursor(
+            QCursor(Qt.CursorShape.PointingHandCursor))
+        
+        # Customize Button
+        customizeButton = QPushButton(self)
+        customizeButton.setText('Customize')
+        customizeButton.setStyleSheet(styleSheetNavbar0)
+        customizeButton.setFont(buttonFont)
+        customizeButton.move(649, 58)
+        customizeButton.setCursor(
+            QCursor(Qt.CursorShape.PointingHandCursor))
+        
+        # Plan Button
+        planButton = QPushButton(self)
+        planButton.setText('Plan')
+        planButton.setStyleSheet(styleSheetNavbar1)
+        planButton.setFont(buttonFont)
+        planButton.setFixedSize(80, 42)
+        planButton.move(784, 58)
+
+        # List Button
+        listButton = QPushButton(self)
+        listButton.setText('List')
+        listButton.setStyleSheet(styleSheetNavbar0)
+        listButton.setFont(buttonFont)
+        listButton.move(898, 58)
+        listButton.setCursor(
+            QCursor(Qt.CursorShape.PointingHandCursor))
+
+        # History Button
+        historyButton = QPushButton(self)
+        historyButton.setText('History')
+        historyButton.setStyleSheet(styleSheetNavbar0)
+        historyButton.setFont(buttonFont)
+        historyButton.move(979, 58)
+        historyButton.setCursor(
+            QCursor(Qt.CursorShape.PointingHandCursor))   
+
+        # Profile Picture
+        profilePicture = QLabel(self)
+        profilePicture.setPixmap(QPixmap('img/profile-dashboard.png'))
+        profilePicture.move(1133, 45)
+
+        # Create Card
+        # Right Side
+        rightCard = QLabel(self)
+        rightCard.move(116, 155)
+        rightCard.setFixedSize(430, 534)
+        rightCard.setStyleSheet(styleSheetBigCard)
+
+        # Right Scroll Area (Vertical)
+        scroll = QScrollArea(self)
+        scroll.setWidgetResizable(True)
+        scroll.setGeometry(130, 250, 410, 429) 
+        scroll.setStyleSheet("background-color: #D2DCC4;border-radius: none;")
+        scrollWidget = QWidget(scroll)
+        scrollLayout = QVBoxLayout(scrollWidget)
+        scrollWidget.setStyleSheet("background-color: #D2DCC4; border-radius: 20px;")
+        scrollWidget.setLayout(scrollLayout)
+
+        scroll.verticalScrollBar().setStyleSheet(verticallScrollBarStyle)
+
+        # Fetch data from database
+        data = self.programExercises
+        row = len(data)
+
+
+        for i in range(row):
+            exButton = QPushButton(self)
+            exButton.setStyleSheet(styleSheetSmallCard)
+            exButton.setFixedSize(366, 99)
+            exButton.setStyleSheet("background-color: #5A8D6C; border-radius: 20px;")
+            exButton.setFont(buttonFont)
+            exButton.setCursor(
+                QCursor(Qt.CursorShape.PointingHandCursor))
+            exButton.clicked.connect(lambda state, index=i: showExercise(index))
+            title = QLabel(exButton)
+            title.setText(f'<font style="font-size:24px;" color="#D2DCC4"; font-family="Sogoe UI";><b>{data[i][1]}<b>')
+            title.move(20, 15)
+            dur = QLabel(exButton)
+
+            con = sqlite3.connect('fitu.db')
+            c = con.cursor()
+            c.execute("SELECT title FROM latihan_program, daftar_latihan WHERE latihan_program.exercise_id = daftar_latihan.exercise_id AND latihan_program.program_id = ?", (data[i][0],))
+            data2 = c.fetchall()
+            c.close()
+
+            predict = len(data2)
+            dur.setText(f'<font style="font-size:18px;" color="#D2DCC4"; font-family="Sogoe UI";>{predict} Minutes')
+            dur.move(20, 50)
+            scrollLayout.addWidget(exButton)  
+        scroll.setWidget(scrollWidget)
+        
+        # Left Side
+        leftCard = QLabel(self)
+        leftCard.move(577, 155)
+        leftCard.setFixedSize(604, 534)
+        leftCard.setStyleSheet(styleSheetBigCard)
+
+        scroll2 = QScrollArea(self)
+        scroll2.setWidgetResizable(True)
+        scroll2.setGeometry(610, 230, 545, 350) # mengatur posisi dan ukuran QScrollArea
+        scroll2.setStyleSheet("background-color: #D2DCC4;border-radius: none;")
+        scrollWidget2 = QWidget(scroll2)
+        scrollLayout2 = QHBoxLayout(scrollWidget2)
+        scrollWidget2.setStyleSheet("background-color: #D2DCC4; border-radius: 20px;")
+        scrollWidget2.setLayout(scrollLayout2)
+
+        scroll2.horizontalScrollBar().setStyleSheet(horizontalScrollBarStyle)
+        # create a list to store the exercise data
+        exercise_data = []
+
+        # create a function to show exercise data based on index
+        def showExercise(index):
+                clickedRowData = data[index][0]
+                con = sqlite3.connect('fitu.db')
+                c = con.cursor()
+                c.execute("SELECT title, repetition, duration, gif FROM latihan_program, daftar_latihan WHERE latihan_program.exercise_id = daftar_latihan.exercise_id AND latihan_program.program_id = ?", (clickedRowData,))
+                data2 = c.fetchall()
+                c.close()
+
+                # clear the exercise data list
+                exercise_data.clear()
+
+                # append new exercise data to the list
+                for i in range(len(data2)):
+                    exercise_data.append(data2[i])
+
+                # remove all widgets from scrollLayout2
+                for i in reversed(range(scrollLayout2.count())):
+                    scrollLayout2.itemAt(i).widget().setParent(None)
+
+                # create QLabel widgets for each exercise and add them to scrollLayout2
+                for i in range(len(exercise_data)):
+                    exLabel = QLabel(self)
+                    exLabel.setFixedSize(202, 270)
+                    exLabel.setStyleSheet("background-color: #5A8D6C; border-radius: 20px;")
+                    title = QLabel(exLabel)
+                    title.setText(f'<font style="font-size:24px;" color="#D2DCC4"; font-family="Sogoe UI";><b>{exercise_data[i][0]}<b>')
+                    title.move(20, 15)
+                    repDur = QLabel(exLabel)
+                    if exercise_data[i][1] == None:
+                        repDur.setText(f'<font style="font-size:18px;" color="#D2DCC4"; font-family="Sogoe UI";>{exercise_data[i][2]} Minutes')
+                    else:
+                        repDur.setText(f'<font style="font-size:18px;" color="#D2DCC4"; font-family="Sogoe UI";>{exercise_data[i][1]} Repetitions')
+                    repDur.move(20, 50)
+                    exPix = QPixmap(exercise_data[i][3])
+                    image = QLabel(exLabel)
+                    image.setPixmap(exPix)
+                    image.setScaledContents(True)
+                    image.move(20, 80)
+                    image.setFixedSize(160, 160)
+
+                    scrollLayout2.addWidget(exLabel)
+
+                # set the widget of scroll2 to scrollWidget2 to update the view
+                scroll2.setWidget(scrollWidget2)
+            
+        font = QFont()
+        font.setFamily("Segoe UI")
+        font.setPointSize(28)
+        font.setBold(True)
+        
+        #font save
+        font1 = QFont()
+        font1.setFamily("Segoe UI")
+        font1.setPointSize(23)
+        font1.setBold(True)
+        
+        exText = QLabel(self)
+        exText.setText("Workout Plan")
+        exText.setFont(font)
+        exText.setStyleSheet(styleSheet2)
+        exText.setFixedSize(250, 50)
+        exText.move(140,185)
+        
+        progText = QLabel(self)
+        progText.setText("Exercise")
+        progText.setStyleSheet(styleSheet2)
+        progText.setFixedSize(165, 50)
+        progText.setFont(font)
+        progText.move(599, 182)
+        
+
+        startButton = QPushButton(self)
+        startButton.setFont(font)
+        startButton.setText("START >")
+        startButton.move(1004, 620)
+        startButton.setFixedSize(144, 42)
+        startButton.setStyleSheet(styleSheet4)
+        startButton.setFont(font1)
+        startButton.setCursor(
+            QCursor(Qt.CursorShape.PointingHandCursor))
+
+        custButton = QPushButton(self)
+        custButton.setFont(font)
+        custButton.setText("Customize")
+        custButton.move(825, 620)
+        custButton.setStyleSheet(styleSheet6)
+        custButton.setFont(font1)
+        custButton.setCursor(
+            QCursor(Qt.CursorShape.PointingHandCursor))
+
+            
+
+if __name__ == '__main__':
+    app = QApplication(sys.argv)
+    ex = plan()
+    ex.show()
+    app.exec()
diff --git a/src/plan2.py b/src/plan2.py
index 35c3e1871d874690d39f3cf0ff66b7c336bb0118..3292065dff941a76c91174337d71a8190287d705 100644
--- a/src/plan2.py
+++ b/src/plan2.py
@@ -1,22 +1,46 @@
 import sqlite3
 from PyQt6.QtWidgets import QApplication, QLabel, QWidget, QLineEdit, QPushButton, QRadioButton, QCheckBox, QMessageBox
-from PyQt6.QtGui import QFont, QPixmap, QCursor, QMovie
-from PyQt6.QtCore import Qt, QSize
+from PyQt6.QtGui import QFont, QPixmap, QCursor, QMovie, QIcon
+from PyQt6.QtCore import Qt, QSize, QUrl, QTimer, QTime
+from PyQt6.QtMultimedia import QSoundEffect
+import time
 import sys
+conn = sqlite3.connect("fitu.db")
+c = conn.cursor()
+latihan = c.execute("SELECT gif FROM daftar_latihan NATURAL JOIN latihan_program WHERE program_id = 1").fetchall()
+print(latihan)
 class plan(QWidget):
-
     def __init__(self):
         super().__init__()
+        self.index = 0
+        # self.remaining_time = 0
+        self.timer = QTimer(self)
+        self.timer.timeout.connect(self.updateTimer)
+        self.remaining_time = 60  # initial value in seconds
+        self.timer.start(1000)  # set timer to update every second
         self.setUpWindowPlan()
         
-
         # self.setUpRegisterWindow()
-        # self.conn = sqlite3.connect("fitu.db")
     def setUpWindowPlan(self):
         self.setWindowTitle("FitU - Plan")
         self.setFixedSize(1280, 720)
         self.setUpPlan()
 
+    def updateTimer(self):
+        if self.remaining_time > 0:
+            self.remaining_time -= 1
+            minutes = self.remaining_time // 60
+            seconds = self.remaining_time % 60
+            self.timer_label.setText(f"{minutes:02d}:{seconds:02d}")
+        else:
+            self.timer.stop()
+            QMessageBox.information(self, "Time's up!", "The countdown timer has ended.")
+    
+    def resetTimer(self):
+        self.remaining_time = 60
+        self.timer.start(1000)
+        self.timer_label.setText("01:00")
+
     def setUpPlan(self):
         self.setStyleSheet('background-color: #5A8D6C')
 
@@ -31,28 +55,88 @@ class plan(QWidget):
         self.currEx.setFixedSize(360, 335)
         self.currEx.move(460, 105)
         self.currEx.setStyleSheet("background-color: #EEEEE2; border-radius: 25px; border: 2px")
-        self.movie = QMovie("img/exercise-unscreen.gif")
+        self.movie = QMovie(latihan[0][0])
         self.currEx.setMovie(self.movie)
         self.movie.start()
-        self.movie.setScaledSize(QSize(330, 305))
+        # self.movie.setScaledSize(QSize(330, 305))
+        self.currEx.setScaledContents(True)
         self.movie.setSpeed(60)
 
-        nextButton = QPushButton(">", self)
+        nextButton = QPushButton(self)
         nextButton.setGeometry(200, 150, 100, 100)
-        nextButton.resize(93, 89)
-        nextButton.setStyleSheet("background-color: #5A8D6C; color: #EEEEE2; border-radius: 25px; border: 2px; font-size: 50px; font-weight: bold")
+        nextButton.setIcon(QIcon("img/arrow-right.png"))
+        nextButton.setIconSize(QPixmap("img/arrow-right.png").size())
         nextButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor))
         nextButton.move(700, 581)
+        nextButton.clicked.connect(self.nextEx)
 
-        prevButton = QPushButton("<", self)
+        prevButton = QPushButton(self)
         prevButton.setGeometry(200, 150, 100, 100)
-        prevButton.resize(93, 89)
-        prevButton.setStyleSheet("background-color: #5A8D6C; color: #EEEEE2; border-radius: 25px; border: 2px; font-size: 50px; font-weight: bold")
+        prevButton.setIcon(QIcon("img/arrow-left.png"))
+        prevButton.setIconSize(QPixmap("img/arrow-left.png").size())
         prevButton.setCursor(QCursor(Qt.CursorShape.PointingHandCursor))
         prevButton.move(513, 581)
+        prevButton.clicked.connect(self.prevEx)
+
+        # filename = "img/BGM NKCTHI.mp3"
+        # effect = QSoundEffect(self)
+        # effect.setSource(QUrl.fromLocalFile(filename))
+        # # possible bug: QSoundEffect::Infinite cannot be used in setLoopCount
+        # effect.setLoopCount(-2)
+        # effect.play()
+
+        # if self.index == len(latihan)/2 - 1:
+        #     nextButton.setEnabled(False)
+        #     titleProgram = c.execute(f"SELECT name FROM program WHERE program_id = {programId}").fetchone()
+        #     nameExe = c.execute(f"SELECT name FROM daftar_latihan WHERE exercise_id in (SELECT exercise_id FROM latihan_program)").fetchall()
+        #     date = time.strftime("%Y-%m-%d", time.localtime())
+        #     totDuration = c.execute(f"SELECT SUM(duration) FROM daftar_latihan WHERE exercise_id in (SELECT exercise_id FROM latihan_program)").fetchone()
+        #     c.execute("INSERT INTO riwayat_latihan program_id, name, title_program, date, tot_duration VALUES ({programId}, {nameExe}, {titleProgram}, {date}, {totDuration})")
 
-        # self.label = QLabel()
+        # duration = QLabel(self)
+        self.repLabel = QLabel(self)
+        self.repLabel.setFont(QFont("Arial", 20, QFont.Weight.Bold))
+        self.repLabel.setStyleSheet("color: #EEEEE2")
+        self.repLabel.move(547, 510)
 
+        self.timer_label = QLabel(self)
+        self.timer_label.setGeometry(0, 0, 200, 50)
+        self.timer_label.setAlignment(Qt.AlignmentFlag.AlignCenter)
+        self.timer_label.move(547, 510)
+        self.timer_label.setFont(QFont("Arial", 20, QFont.Weight.Bold))
+        self.timer_label.setStyleSheet("background-color: #EEEEE2; border-radius: 10px; border: 2px")
+        durationCount = c.execute(f"SELECT duration FROM daftar_latihan WHERE exercise_id in (SELECT exercise_id FROM latihan_program WHERE program_id = 1)").fetchall()
+        repCount = c.execute(f"SELECT repetition FROM daftar_latihan WHERE exercise_id in (SELECT exercise_id FROM latihan_program WHERE program_id = 1)").fetchall()
+        print(repCount[self.index][0])
+        if durationCount[self.index][0] != None and repCount[self.index][0] == None:
+            self.updateTimer()
+        elif durationCount[self.index][0] == None and repCount[self.index][0] != None:
+            self.repLabel.setText(repCount[self.index][0])
+
+
+    def prevEx(self):
+        if self.index > 0:
+            self.index -= 1
+            self.movie = QMovie(latihan[self.index][0])
+            self.currEx.setMovie(self.movie)
+            self.movie.start()
+            self.movie.setScaledSize(QSize(330, 305))
+            self.movie.setSpeed(60)
+            print("kiri:" + str(self.index))
+            self.resetTimer()
+
+
+    def nextEx(self):
+        if self.index < (len(latihan)/2) - 1:
+            self.index += 1
+            self.movie = QMovie(latihan[self.index][0])
+            self.currEx.setMovie(self.movie)
+            self.movie.start()
+            self.movie.setScaledSize(QSize(330, 305))
+            self.movie.setSpeed(100)
+            print("kanan:" + str(self.index))
+            self.resetTimer()
+    
 if __name__ == "__main__":
     
     app = QApplication(sys.argv)
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__":
     
diff --git a/src/tesBacaDB.py b/src/tesBacaDB.py
index 07463a6454f5d9fbe0a5245e8d2da1dc29d5bce6..b6482db9a867b113ce5623c29d3154d6643e337b 100644
--- a/src/tesBacaDB.py
+++ b/src/tesBacaDB.py
@@ -1,86 +1,123 @@
 import sqlite3
 
-con = sqlite3.connect("fitu.db")
-cur = con.cursor()
+def tesBaca():
+    con = sqlite3.connect("fitu.db")
+    cur = con.cursor()
 
-cur.execute("""
-            CREATE TABLE IF NOT EXISTS user (
-            name text PRIMARY KEY,
-            height integer,
-            weight integer,
-            goal text,
-            gender text,
-            age integer
-            )
-            """)
-cur.execute("""
-            CREATE TABLE IF NOT EXISTS daftar_latihan (
-            exercise_id integer PRIMARY KEY,
-            title text,
-            description text,
-            goals text,
-            duration text,
-            repetition integer,
-            gif text
-            )
-            """)
+    cur.execute("""
+                CREATE TABLE IF NOT EXISTS user (
+                name text PRIMARY KEY,
+                height integer,
+                weight integer,
+                goal text,
+                gender text,
+                age integer
+                )
+                """)
+    cur.execute("""
+                CREATE TABLE IF NOT EXISTS daftar_latihan (
+                exercise_id integer PRIMARY KEY,
+                title text,
+                description text,
+                goals text,
+                duration text,
+                repetition integer,
+                gif text
+                )
+                """)
 
-cur.execute("""
-            CREATE TABLE IF NOT EXISTS riwayat_latihan (
-            history_id integer PRIMARY KEY AUTOINCREMENT,
-            program_id integer,
-            name text,
-            title_program text,
-            calories integer,
-            date text,
-            tot_duration integer
-            )
-            """)
+    cur.execute("""
+                CREATE TABLE IF NOT EXISTS riwayat_latihan (
+                history_id integer PRIMARY KEY AUTOINCREMENT,
+                program_id integer,
+                name text,
+                title_program text,
+                calories integer,
+                date text,
+                tot_duration integer
+                )
+                """)
+    cur.execute("""
+                CREATE TABLE IF NOT EXISTS program (
+                program_id integer PRIMARY KEY AUTOINCREMENT,
+                title_program text
+                )
+                """)
 
-cur.execute("""
-            INSERT INTO daftar_latihan 
-                (exercise_id, title, description, goals, duration, repetition, gif)
-            VALUES 
-                (201, 'Push Up', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor','Goals', NULL, 10, '../img/push-up.gif'),
-                (202, "Sit Up", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', NULL, 10, "../img/"),
-                (203, "Pull Up", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', NULL, 10, "../img/"),
-                (204, "Squat Jump", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', NULL, 10, "../img/"),
-                (205, "Lunges", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', NULL, 10, "../img/"),
-                (206, "Crunches", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', NULL, 10, "../img/"),
-                (207, "Burpees", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', NULL, 10, "../img/"),
-                (208, "Bicycle Crunch", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', NULL, 10, "../img/"),
-                (101, "Jumping Rope", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', 30, NULL, "../img/"),
-                (102, "Running", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', 30, NULL, "../img/"),
-                (103, "Jumping Jacks", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', 30, NULL, "../img/"),
-                (104, "Plank", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', 30, NULL, "../img/"),
-                (105, "Bridge", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', 30, NULL, "../img/"),
-                (106, "High Knees", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', 30, NULL, "../img/"),
-                (107, "Squat", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', 30, NULL, "../img/"),
-                (108, "Russian Twist", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', 30, NULL,"../img/")
-            """)
+    cur.execute("""
+                CREATE TABLE IF NOT EXISTS latihan_program (
+                program_id integer,
+                exercise_id integer,
+                FOREIGN KEY (program_id) REFERENCES program (program_id)
+                )
+                """)
 
-con.commit()
-# cur.execute("""
-#             INSERT INTO daftar_request
-#                 (user_id, trainer_id, umur, jenis_kelamin, berat_badan, tinggi_badan, tujuan, status, title, description)
-#             VALUES
-#                 (1, 2, 20, 'Laki-laki', 65, 170, 'I want to have a sixpack stomach', True, 'Chest Day', 'This workout plan is made to strengthen your \nabdominal muscles.'),
-#                 (1,2,20, 'Laki-laki', 65, 170, 'I want to have a strong leg muscles', True, 'Leg Day', 'This workout plan is made to strengthen your \nleg muscles.')
-#             """)
-# cur.execute("""
-#             INSERT INTO workout
-#                 (request_id, olahraga_id, status)
-#             VALUES
-#                 (1, 2, False),
-#                 (1, 3, False),
-#                 (1, 6, False),
-#                 (2, 4, False),
-#                 (2, 7, False)
-#             """)
+    cur.execute("""
+                INSERT or IGNORE INTO daftar_latihan 
+                    (exercise_id, title, description, goals, duration, repetition, gif)
+                VALUES 
+                    (201, 'Push Up', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor','Goals', NULL, 10, 'img/exe-pushup.gif'),
+                    (202, "Sit Up", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', NULL, 10, "img/exe-situp.gif"),
+                    (203, "Pull Up", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', NULL, 10, "img/"),
+                    (204, "Squat Jump", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', NULL, 10, "img/"),
+                    (205, "Lunges", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', NULL, 10, "img/exe-lunges.gif"),
+                    (206, "Crunches", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', NULL, 10, "img/exe-crunches.gif"),
+                    (207, "Burpees", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', NULL, 10, "img/exe-burpees.gif"),
+                    (208, "Bicycle Crunch", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', NULL, 10, "img/exe-bicycle.gif"),
+                    (101, "Jumping Rope", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', 30, NULL, "img/"),
+                    (102, "Running", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', 30, NULL, "img/"),
+                    (103, "Jumping Jacks", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', 30, NULL, "img/exe-jumpingjack.gif"),
+                    (104, "Plank", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', 30, NULL, "img/exe-plank.gif"),
+                    (105, "Bridge", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', 30, NULL, "img/exe-bridges.gif"),
+                    (106, "High Knees", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', 30, NULL, "img/exe-highknee.gif"),
+                    (107, "Mountain Climber", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', 30, NULL, "img/exe-mountain.gif"),
+                    (108, "Russian Twist", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac venenatis purus. Nulla a fringilla ante. Aenean id ipsum pellentesque, convallis ex eget, cursus dolor", 'Goals', 30, NULL,"img/exe-russian.gif")
+                """)
 
+    cur.execute("""
+                INSERT or IGNORE INTO program
+                    (program_id, title_program)
+                VALUES
+                    (1, 'Full Body Workout'),
+                    (2, 'Upper Body Workout'),
+                    (3, 'Lower Body Workout'),
+                    (4, 'Core Workout')
+                """)
 
-# daftarLatihan = cur.execute("SELECT * FROM daftar_latihan")
-# daftarLatihan = daftarLatihan.fetchall()
+    cur.execute("""
+                INSERT or IGNORE INTO latihan_program
+                    (program_id, exercise_id)
+                VALUES
+                    (1, 201),
+                    (1, 202),
+                    (1, 205),
+                    (1, 206)
+                """)
 
-# for i in daftarLatihan:
-#     print(i)
\ No newline at end of file
+    con.commit()
+    con.close()
+    # cur.execute("""
+    #             INSERT INTO daftar_request
+    #                 (user_id, trainer_id, umur, jenis_kelamin, berat_badan, tinggi_badan, tujuan, status, title, description)
+    #             VALUES
+    #                 (1, 2, 20, 'Laki-laki', 65, 170, 'I want to have a sixpack stomach', True, 'Chest Day', 'This workout plan is made to strengthen your \nabdominal muscles.'),
+    #                 (1,2,20, 'Laki-laki', 65, 170, 'I want to have a strong leg muscles', True, 'Leg Day', 'This workout plan is made to strengthen your \nleg muscles.')
+    #             """)
+    # cur.execute("""
+    #             INSERT INTO workout
+    #                 (request_id, olahraga_id, status)
+    #             VALUES
+    #                 (1, 2, False),
+    #                 (1, 3, False),
+    #                 (1, 6, False),
+    #                 (2, 4, False),
+    #                 (2, 7, False)
+    #             """)
+
+
+    # daftarLatihan = cur.execute("SELECT * FROM daftar_latihan")
+    # daftarLatihan = daftarLatihan.fetchall()
+
+    # for i in daftarLatihan:
+    #     print(i)
+tesBaca()
\ No newline at end of file