diff --git a/app/src/main/java/com/example/tubespbd/MainActivity.kt b/app/src/main/java/com/example/tubespbd/MainActivity.kt
index d3f409f6217fd98cd28737f4b542f4f1bfc83a6c..23d2a1c423608c40beae7ad2b6347d105a03f706 100644
--- a/app/src/main/java/com/example/tubespbd/MainActivity.kt
+++ b/app/src/main/java/com/example/tubespbd/MainActivity.kt
@@ -2,16 +2,40 @@ package com.example.tubespbd
 
 import android.os.Bundle
 import androidx.appcompat.app.AppCompatActivity
+import androidx.navigation.findNavController
+import androidx.navigation.ui.AppBarConfiguration
+import androidx.navigation.ui.setupActionBarWithNavController
+import androidx.navigation.ui.setupWithNavController
 import com.example.tubespbd.database.MyDBHelper
+import com.example.tubespbd.databinding.ActivityMainBinding
+import com.google.android.material.bottomnavigation.BottomNavigationView
 
 class MainActivity : AppCompatActivity() {
 
     private lateinit var dbHelper: MyDBHelper
+    private lateinit var binding: ActivityMainBinding
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
-        setContentView(R.layout.activity_main)
 
+        // Routing
+        binding = ActivityMainBinding.inflate(layoutInflater)
+        setContentView(binding.root)
+
+        val navView: BottomNavigationView = binding.navView
+
+        val navController = findNavController(R.id.nav_host_fragment_activity_main)
+        // Passing each menu ID as a set of Ids because each
+        // menu should be considered as top level destinations.
+        val appBarConfiguration = AppBarConfiguration(
+            setOf(
+                R.id.navigation_home, R.id.navigation_scan, R.id.navigation_dashboard, R.id.navigation_notifications
+            )
+        )
+        setupActionBarWithNavController(navController, appBarConfiguration)
+        navView.setupWithNavController(navController)
+
+        // Database
         dbHelper = MyDBHelper(this)
 
         // TEST DB Sementara
diff --git a/app/src/main/java/com/example/tubespbd/ui/scan/ScanFragment.kt b/app/src/main/java/com/example/tubespbd/ui/scan/ScanFragment.kt
new file mode 100644
index 0000000000000000000000000000000000000000..09f1f16117954647e1c648373e4ab83642956b6d
--- /dev/null
+++ b/app/src/main/java/com/example/tubespbd/ui/scan/ScanFragment.kt
@@ -0,0 +1,36 @@
+package com.example.tubespbd.ui.scan
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
+import com.example.tubespbd.databinding.FragmentScanBinding
+
+class ScanFragment : Fragment() {
+    private var _binding: FragmentScanBinding? = null
+
+    private val binding get() = _binding!!
+    override fun onCreateView(
+        inflater: LayoutInflater,
+        container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View {
+        val scanViewModel =
+            ViewModelProvider(this).get(ScanViewModel::class.java)
+        _binding = FragmentScanBinding.inflate(inflater, container, false)
+        val root: View = binding.root
+        val textView: TextView = binding.textScan
+        scanViewModel.text.observe(viewLifecycleOwner){
+            textView.text = it
+        }
+        return root
+    }
+
+    override fun onDestroyView() {
+        super.onDestroyView()
+        _binding = null
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/tubespbd/ui/scan/ScanViewModel.kt b/app/src/main/java/com/example/tubespbd/ui/scan/ScanViewModel.kt
new file mode 100644
index 0000000000000000000000000000000000000000..6c61fd896fc754769bf422c009b8bd86f0ab7c46
--- /dev/null
+++ b/app/src/main/java/com/example/tubespbd/ui/scan/ScanViewModel.kt
@@ -0,0 +1,11 @@
+package com.example.tubespbd.ui.scan
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+
+class ScanViewModel : ViewModel(){
+    private val _text = MutableLiveData<String>().apply {
+        value = "This is scan fragment"
+    }
+    val text: LiveData<String> = _text
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_scan.xml b/app/src/main/res/layout/fragment_scan.xml
new file mode 100644
index 0000000000000000000000000000000000000000..948a2d96b9c2d31f5df9066c1a2868a2e8d378fa
--- /dev/null
+++ b/app/src/main/res/layout/fragment_scan.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".ui.scan.ScanFragment">
+
+    <TextView
+        android:id="@+id/text_scan"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="8dp"
+        android:layout_marginTop="8dp"
+        android:layout_marginEnd="8dp"
+        android:textAlignment="center"
+        android:textSize="20sp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/menu/bottom_nav_menu.xml b/app/src/main/res/menu/bottom_nav_menu.xml
index fb6d040b9a026ddaa05df0e530ab6f95e6c1f999..f6d827483bea6a497b00e9d87f487d5bf1b741fc 100644
--- a/app/src/main/res/menu/bottom_nav_menu.xml
+++ b/app/src/main/res/menu/bottom_nav_menu.xml
@@ -11,6 +11,11 @@
         android:icon="@drawable/ic_dashboard_black_24dp"
         android:title="@string/title_dashboard" />
 
+    <item
+        android:id="@+id/navigation_scan"
+        android:icon="@drawable/ic_notifications_black_24dp"
+        android:title="@string/title_scan" />
+
     <item
         android:id="@+id/navigation_notifications"
         android:icon="@drawable/ic_notifications_black_24dp"
diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml
index 2a82cc522eee25bd028901c7b509f34e14bb69b6..23bccfa13e0486dbad49f8c58d55ae6b8688e6a8 100644
--- a/app/src/main/res/navigation/mobile_navigation.xml
+++ b/app/src/main/res/navigation/mobile_navigation.xml
@@ -3,7 +3,7 @@
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/mobile_navigation"
-    app:startDestination="@+id/navigation_home">
+    app:startDestination="@+id/navigation_dashboard">
 
     <fragment
         android:id="@+id/navigation_home"
@@ -17,6 +17,12 @@
         android:label="@string/title_dashboard"
         tools:layout="@layout/fragment_dashboard" />
 
+    <fragment
+        android:id="@+id/navigation_scan"
+        android:name="com.example.tubespbd.ui.scan.ScanFragment"
+        android:label="@string/title_scan"
+        tools:layout="@layout/fragment_scan"/>
+
     <fragment
         android:id="@+id/navigation_notifications"
         android:name="com.example.tubespbd.ui.notifications.NotificationsFragment"
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f6ff71a5e58e1802f8cff9092e52d2a707f9b0db..b746033c096b4aae425eca7b872afa39b355844e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -11,4 +11,5 @@
     <string name="email_text">Email</string>
     <string name="password_text">Password</string>
     <string name="masuk_text">Masuk</string>
+    <string name="title_scan">Scan</string>
 </resources>
\ No newline at end of file